Portál AbcLinuxu, 9. května 2025 21:14

Dotaz: Qt - začátečník

1.12.2012 17:32 netusim
Qt - začátečník
Přečteno: 418×
Odpovědět | Admin

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...

Nástroje: Začni sledovat (0) ?Zašle upozornění na váš email při vložení nového komentáře.

Odpovědi

1.12.2012 17:33 netusim
Rozbalit Rozbalit vše Re: Qt - začátečník
Odpovědět | | Sbalit | Link | Blokovat | Admin
Popřípadě jak to kombinovat, nebo jak třeba udělat, aby to při zmáčknutí tlačítka udělalo printf...
1.12.2012 19:55 Šangala | skóre: 56 | blog: Dutá Vrba - Wally
Rozbalit Rozbalit vše Re: Qt - začátečník
Odpovědět | | Sbalit | Link | Blokovat | Admin
Mně - nepodařilo.
To, že trpíš stihomamem, ještě neznamená, že po tobě nejdou. ⰞⰏⰉⰓⰀⰜⰉ ⰗⰞⰅⰜⰘ ⰈⰅⰏⰉ ⰒⰑⰎⰉⰁⰕⰅ ⰏⰉ ⰒⰓⰄⰅⰎ ·:⁖⁘⁙†
Petr Bravenec avatar 1.12.2012 21:36 Petr Bravenec | skóre: 43 | blog: Bravenec
Rozbalit Rozbalit vše Re: Qt - začátečník
Odpovědět | | Sbalit | Link | Blokovat | Admin

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.html

Prostudujte si dokumentaci k objektu QWidget:

http://doc.qt.digia.com/4.7/qwidget.html

Vš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#connect

Stačí to?

Petr Bravenec - Hobrasoft s.r.o.
1.12.2012 21:39 Ariczek | skóre: 5
Rozbalit Rozbalit vše Re: Qt - začátečník
Odpovědět | | Sbalit | Link | Blokovat | Admin
budu trochu vařit z vody, z dotazu se to poznat nedá...

hello.show; -- přistoupení k proměnné show objektu hello. button->show(); -- zavolání metody show() na ukazateli na objekt button.

hello a button jsou instance nějaké třídy či struktury. Použití . nebo -> závisí na tom, zda mám proměnnou přímo nebo přes ukazatel (ta * v zápisu u button). Konečně příkaz hello.show; nedělá nic - nahradí se hodnotou proměnné show, ale ta se nikam neuloží.
Petr Bravenec avatar 1.12.2012 21:47 Petr Bravenec | skóre: 43 | blog: Bravenec
Rozbalit Rozbalit vše Re: Qt - začátečník
Myslíte, že dotyčný potřebuje vysvětlit rozdíl mezi hodnotou a ukazatelem? No to potěš koště, potom bych doporučoval navštívit nejbližší knihkupectví a koupit "C++ pro začátečníky". Z toho dotazu to moc není poznat...
Petr Bravenec - Hobrasoft s.r.o.
2.12.2012 09:19 netusim
Rozbalit Rozbalit vše Re: Qt - začátečník
Odpovědět | | Sbalit | Link | Blokovat | Admin
Asi jsem fakt blbej, ale chápu správně, že teda mám udělat funkci a tu pak dát do slotu? (prostě přiřadit jí tomu tlačítku?
A nejde nějak udělat, aby jsem u toho tlačítka dal hodnotu natvrdo a nemusel používat pointery?
Omlouvám se, že otravuju...
2.12.2012 09:54 Roman Došek | skóre: 17 | blog: flare
Rozbalit Rozbalit vše Re: Qt - začátečník
Možná zkus radši přeformulovat svoji otázku, protože z té současné se fakt nedá odvodit ani na co se ptáš, ani čeho chceš dosáhnout :-)
2.12.2012 10:29 netusim
Rozbalit Rozbalit vše Re: Qt - začátečník
Odpovědět | | Sbalit | Link | Blokovat | Admin
Chtěl bych udělat aplikaci, kde bude napsáno hallo world a pod tím bude tlačítko printf na které když se zmáčkne, tak to vypíše do terminálu v Qt creatoru hallo world.
Petr Bravenec avatar 2.12.2012 10:53 Petr Bravenec | skóre: 43 | blog: Bravenec
Rozbalit Rozbalit vše Re: Qt - začátečník
Příloha:
V dokumentaci Qt je velká spousta příkladů. Příklady by měly být i součástí instalačního balíku, případně zdrojových kódů.

Můžete se taky podívat na přibalený příklad, vytvořený podle zadání. Přeložíte a spustíte jej takto:
tar -xzvf helloworld.tgz
cd helloworld
qmake
make
bin/helloworld
Když 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.

Petr Bravenec - Hobrasoft s.r.o.
2.12.2012 12:31 netusim
Rozbalit Rozbalit vše Re: Qt - začátečník
Odpovědět | | Sbalit | Link | Blokovat | Admin
Děkuji, teda je to složitější, než jsem myslel, ale už jsem to pochopil. Ještě bych se chtěl zeptat, proč mi to nejde když jsem to otevřel zkompilovat přímo z Qt creatoru tou zelenou šipečkou vlevo?
Petr Bravenec avatar 2.12.2012 12:39 Petr Bravenec | skóre: 43 | blog: Bravenec
Rozbalit Rozbalit vše Re: Qt - začátečník
Nevím. Qt creator nepoužívám. Ani jsem nevěděl, že má vlevo zelenou šipečku.
Petr Bravenec - Hobrasoft s.r.o.

Založit nové vláknoNahoru

Tiskni Sdílej: Linkuj Jaggni to Vybrali.sme.sk Google Del.icio.us Facebook

ISSN 1214-1267, (c) 1999-2007 Stickfish s.r.o.