Portál AbcLinuxu, 9. května 2025 21:14
Dobrý den, Chtěl bych se zeptat, jaký je rozdíl v Qtčku mezi tím, když někde použiji hello.setText("Hello world!"); hello.show; a třeba QPushButton* button = new QPushButton("Quit"); button->show(); Potřeboval bych nějak udělat tlačítko, které půjde normálně zobrazit přes tlacitko.show. Normálně s hello.button nebo něčím podobným. Doufám, že se mi podařilo vysvětlit, co jsem myslel...
Mezi těmi příklady je rozdíl docela veliký:
hello.setText("Hello world!"); hello.show;vytvoří a zobrazí tlačítko s nápisem "Hello world!", naproti tomu kus kódu
QPushButton* button = new QPushButton("Quit"); button->show();
vytvoří a zobrazí téměř, nikoli však zcela nepodobné tlačítko, tentokrát s nápisem "Quit". Cítíte ten rozdíl?
K dodatečné otázce: Chcete-li v Qt na "kliknutí" vyvolat nějakou akci, vytvořte si ve svém formuláři slot a připojte signál "clicled()" tlačítka na tento slot, například:
class FORMULAR : public QWidget, private Ui::FORMULAR { Q_OBJECT public: FORMULAR(QWidget *parent); private slots: void tlacitkoQuitStisteno(); }; void FORMULAR::FORMULAR(QWidget parent) : Ui::FORMULAR(parent) { setupUi(this); connect(buttonQuit, SIGNAL(clicked()), this, SLOT(tlacitkoQuitStisteno())); } void FORMULAR::tlacitkoQuitStisteno() { qDebug() << "FORMULAR::tlacitkoQuitStisteno()"; }
Formulář doporučuji naklikat programem designer a použít qmake - při překladu se vám vytvoří soubor ui_formular.h se zdrojovým kódem v c++ v jmenném prostoru Ui. (Můžete vše naklikat i v programu qtcreator, ale přístup zcela odděleného formuláře vytvořeného metodou klik-klik-klik a vlastního zdrojového souboru se mi líbí víc (možná jsem jen nepochopil filozofii qtcreatoru).). Ten si pak můžete snadno vložit do hlavičkového souboru vlastní třídy a odvodit z ní vlastní widget. Dokumentace ke Qt se hemží podobnými příklady.
http://doc.qt.digia.com/qt/signalsandslots.htmlProstudujte si dokumentaci k objektu QWidget:
http://doc.qt.digia.com/4.7/qwidget.htmlVšimněte si, že v úvodu je výpis všech metod, potom výpis slotů (tj. "příjemců" signálů) a pak i výpis všech signálů (tj. "vysílačů" signálů). Každý widget má různé signály a různé sloty, v dokumentaci je vždy vše podrobně popsáno.
U svých tříd odvozených z třídy QObject si můžete vytvářet vlastní signály i sloty a propojovat je (i mezi objekty i mezi různými vlákny) metodou connect() (metoda třídy QObject):
http://doc.qt.digia.com/4.7/qobject.html#connectStačí to?
tar -xzvf helloworld.tgz cd helloworld qmake make bin/helloworldKdyž se pak zmáčknete na tlačítko printf, na standardní chybový výstup se vypíše text "hallo world". Pokud chcete vypsat text do terminálu v Qt creatoru, pusťe si to v Qt creatoru.
Tiskni
Sdílej:
ISSN 1214-1267, (c) 1999-2007 Stickfish s.r.o.