Qt 4 Ui + KDevelop: Δεν το έπιασα...

SmokematiC | Κυρ, 07/13/2008 - 18:07 | 2' | 3

Γεια χαρά σε όλους σας, θα ήθελα να σας κάνω μια ερώτηση γιατί κάτι μάλλον δεν πιάνω Πως μπορώ να περάσω ένα ui στο kdevelop και να το χρησιμοποιήσω κανονικά... δηλαδή να μπορώ να χρησιμοποιήσω τα boxes και τα lineedits κ.τ.λ? Έχω πειραματιστεί αρκετά με την Qt αλλά όταν έρχεται η ώρα να γλιτώσω το gridlayout γενικά όλο το layouting θα ήθελα να χρησιμοποιήσω τον Designer ο οποίος φυσάει σε αυτά... μπορώ να το κάνω εισαγωγή μέσα από το kdevelop αλλά δεν μπορώ να τον χρησιμοποιήσω, το QtAssistant το έχω φάει (λέμε τώρα) αλλά εκεί μου περιγράφει 2 μεθόδους πολλή κάπως για να μπορώ να εξοικειωθώ Οποιαδήποτε πληροφορία είναι ευπρόσδεκτη.

Δώσε αστέρια!
Σχόλια

Δεν είμαι σίγουρος ότι έχω καταλάβει 100% ποιο ακριβώς είναι το πρόβλημά σου. Ελπίζω τα παρακάτω να σε βοηθήσουν.

Φτιάξε στο QtDesigner τη φόρμα που σε ενδιαφέρει και σώσε την στον ίδιο φάκελο με τον κώδικα της εφαρμογής που αναπτύσσεις. Έστω ότι την ονόμασες form.ui.

Μετά ανοίγεις το .pro αρχείο του project σου και προσθέτεις μια γραμμή σαν κι αυτή:

FORMS = form.ui

Υστερα, στον κώδικα του προγράμματος, στην δήλωση της βασικής κλάσης (εκεί π.χ. όπου θες να έχεις τη λειτουργικότητα της φόρμας) προσθέτεις ένα include:

#include "ui_form.h"

Το όνομα του αρχείου μέσα στα εισαγωγικά είναι στάνταρ: είναι πάντοτε το όνομα της φόρμας, με πρόθεμα το ui_ και επέκταση το .h. Αυτό το αρχείο παράγεται αυτόματα από το make χάρη στη γραμμή FORMS... που προσθέσαμε παραπάνω στο .pro αρχείο.

Αυτό το αρχείο σου δίνει έναν νέο τύπο δεδομένων-κλάση (με το ίδιο όνομα με τη φόρμα) που σου δίνει πρόσβαση στα στοιχεία της φόρμας. Οπότε πρέπει στα private μέλη της κλάσης σου, να φτιάξεις ένα αντικείμενο αυτής της κλάσης, π.χ.


Ui::Form ui;

Εδώ το Ui::Form είναι στάνταρ, δηλαδή πρέπει να βάλεις το ίδιο όνομα με την φόρμα σου, και προφανώς το ui είναι το αντικείμενο - εσύ βάζεις ότι όνομα θες.

Τέλος, μέσα στον κώδικα μπορείς να χρησιμοποιείς τα επιμέρους widgets της φόρμας κάπως έτσι:

QString url=ui.lineEdit->text();

Εδώ πήρα από την φόρμα ui με την μέθοδο text() της κλασης QLineEdit, τα περιεχόμενα ενός πεδίου κειμένου, που έχω ονομάσει lineEdit στο QtDesigner, και τα αποθήκευσα στο string url.

--Stat rosa pristina nomine, nomina nuda tenemus

Σε ευχαριστώ για την απάντηση, το έχεις καταλάβει 100% το πρόβλημά μου.. και μου τα εξήγησες μια χαρά αλλά θα ήθελα να σε ρωτήσω κάτι ακόμα το prefix ui το βάζω μπροστά από κάθε widget που έχω στην φόρμα μου? και επίσης τώρα που μου ήρθε: στα slots και στα signals βάζω πάλη ui μπροστά πχ: (ui.pushbutton, SIGNAL((ui.cliclicked()), ui.lineedit, SLOT ((ui.clear())); έτσι θα είναι σωστό η σκέτα δηλαδή clicked() και clear(). Πάντως ευχαριστώ για το χρόνο σου και θα επανέλθω δριμύτερος με εκ νέου κολλήματα :D

Υ.Γ: με το command uic form.ui  παράγω το <ui_form.h> σωστά? απ ότι καταλαβαίνεις προσπαθώ να βάλω σε μια σειρά τα πράγματα...

Το ui. (με τελεία) μην το βλέπεις σας prefix αλλά σαν όνομα του αντικειμένου της κλάσης που σου παρέχει όλα τα widgets της φόρμας. Αυτό το αντικείμενο το φτιάχνεις στο header αρχείο, όπως έγραψα πριν. Σε αυτό το αντικείμενο ανήκουν τα widgets. Αν δεν το κατονομάσεις, πως θα ξέρει το πρόγραμμά σου, σε ποιο lineEdit αναφέρεσαι;
Άρα είναι απαραίτητο, όπως απαραίτητο είναι να γράφεις το αντικείμενο κάθε άλλης κλάσης που θέλεις να αξιοποιήσεις. Εσύ θα μπορούσες, π.χ. να είχες και μία ακόμα φόρμα που θα ονόμαζες

Ui::Form forma;

οπότε σε αυτήν την περίπτωση όλα τα widgets (εκείνης της φόρμας) θα ήταν προσβάσιμα ως εξής:

forma.lineEdit->text();

Το πιασες; Προφανώς και στο signal/slot μηχανισμό πρέπει να βάζεις το αντικείμενο/φορμα στο οποίο ανήκουν τα widgets.

ΥΓ: Το ui_form.h παράγεται αυτόματα από την make αρκεί να βάλεις μια γραμμή σαν κι αυτή στο .pro αρχείο σου:
FORMS = form.ui

--Stat rosa pristina nomine, nomina nuda tenemus