Portál AbcLinuxu, 8. května 2025 18:15

Dotaz: Ako na Qt?

26.1.2014 15:12 mino
Ako na Qt?
Přečteno: 566×
Odpovědět | Admin
Ucim sa Qt a neviem ako mam priradit tlacitku event(SLOT) ako toto mi kompilator nezozerie:
QPushButton* btn = new QPushButton("Klikni sem frišky!");
this->setCentralWidget(btn);

QObject::connect(btn, &QPushButton::clicked, [=] {
     QMessageBox::information(NULL, "XXX",  "YYY");
});
Nástroje: Začni sledovat (0) ?Zašle upozornění na váš email při vložení nového komentáře.

Odpovědi

Josef Kufner avatar 26.1.2014 18:52 Josef Kufner | skóre: 70
Rozbalit Rozbalit vše Re: Ako na Qt?
Odpovědět | | Sbalit | Link | Blokovat | Admin
http://qt-project.org/doc/qt-4.8/gettingstartedqt.html
Hello world ! Segmentation fault (core dumped)
26.1.2014 20:40 mino
Rozbalit Rozbalit vše Re: Ako na Qt?
Na tom odkaze sa riesi len stara SIGNAL SLOT syntax, ktora mi funguje, ale ja by som chcel pouzivat tu novu pre C++ 11 s lamdami:

http://qt-project.org/wiki/New_Signal_Slot_Syntax#2f49cd0d473b52e6ddb8b377a34e6c36

a stale mi to hadze error:
C:\Qt\Tools\QtCreator\bin\Test\mainwindow.cpp:25: error: no matching function for call to 'MainWindow::connect(QPushButton*&, void (QAbstractButton::*)(bool), MainWindow::MainWindow(QWidget*)::__lambda0)'
     });
      ^
Jardík avatar 26.1.2014 22:04 Jardík | skóre: 40 | blog: jarda_bloguje
Rozbalit Rozbalit vše Re: Ako na Qt?
Překládáš v jakém kompilátoru? Jak je na tom MSVC netuším, ale pokud používáš GCC/mingw a nějakou rozumnou nestarou verzi či clang, tak potřebuješ kompilovat v v C++11 módu (parametr -std=c++11). Taky potřebuješ mít to Qt zkompilované s podporou C++11, netuším, jak jsou na tom binárky, co dávaj ke stažení, doporučuju zkompilovat si Qt sám. Taky by to mělo asi být nějaké Qt5, lambdy v Qt4 asi nejsou, ale blíže jsem nezkoumal, jestli je nebackportovali.

Jinak když už jsem u toho, tak pozor, že když použiješ lambdy, tak se okradeš o automatické odpojení signálů při destrukci "cílového objektu" (protože vlastně v případě lambdy žádný cílový QObject není).
Věřím v jednoho Boha.
27.1.2014 12:01 mino
Rozbalit Rozbalit vše Re: Ako na Qt?
Je to Qt 5, ale len z binarky skusim skompilovat zo zdrojaku. Skusal som GCC/mingw, MSVC mi Qt creator detegoval hned 3 verzie (ale nefunguje ani jedna) asi tam treba nieco dodatocne nastavit a idem skusit este Clang. Ten parameter vyskusam dik.
Jardík avatar 27.1.2014 16:53 Jardík | skóre: 40 | blog: jarda_bloguje
Rozbalit Rozbalit vše Re: Ako na Qt?
Mingw doporučuju mingw-w64, místo obyčejného mingw, které tak trochu trpí zastaralostí (nebo alespoň trpělo v době, kdy jsem to zkoušel, tak před 2 roky :-)). Mají i 32bit binárky (kdyby matl název), a cross kompilátor pro linux. Kdysi dávno jsem s tím kompiloval 64bit Qt i QtCreator, fungovalo to :-)
Věřím v jednoho Boha.
Jardík avatar 27.1.2014 16:55 Jardík | skóre: 40 | blog: jarda_bloguje
Rozbalit Rozbalit vše Re: Ako na Qt?
Jinak to třeba tobě nefungovalo, protože to Qt mohlo být třeba kompilované MSVC a proto mohly být problémy s linkováním, nebo tak něco. Ty ofic binárky tuším jsou kompilované pro MSVC.
Věřím v jednoho Boha.
28.1.2014 23:05 Sten
Rozbalit Rozbalit vše Re: Ako na Qt?
Jenom to tipuju, protože Qt znám jen zběžně, ale ta funkce ve druhém argumentu (signál) má parametr bool, zatímco ta lambda žádné parametry nemá. Zkusil bych:
QObject::connect(btn, &QPushButton::clicked, [=](bool){
     QMessageBox::information(NULL, "XXX",  "YYY");
});
Jardík avatar 29.1.2014 00:00 Jardík | skóre: 40 | blog: jarda_bloguje
Rozbalit Rozbalit vše Re: Ako na Qt?
No ... když jsem před nějakou dobou zkoumal v qt signály (když vydávali prví Qt 5), tak connect dovoloval napojit slot, který měl buď stejně nebo méně (N) argumentů, kde oněch N argumentů mělo implicitní konverzi z prvních N argumentů toho slotu. To teda platilo, pokud byl slot member funkca. Jestli se u tý lambdy musí shodovat, to nevím.
Věřím v jednoho Boha.
26.1.2014 21:36 Ivan
Rozbalit Rozbalit vše Re: Ako na Qt?
Odpovědět | | Sbalit | Link | Blokovat | Admin
Tohle je C++11 syntaxe pro lambdu. Jaky pouzivas kompilator?

PS: a jak moc dobre umis C++?
27.1.2014 12:13 mino
Rozbalit Rozbalit vše Re: Ako na Qt?
Pouzivam GCC. C++ sa ucim, syntax trochu poznam zo skoly, ale nikdy som v nom nic zmysluplne nenaprogramoval.
26.1.2014 21:59 krabicezpapundeklu
Rozbalit Rozbalit vše Re: Ako na Qt?
Odpovědět | | Sbalit | Link | Blokovat | Admin
Chybí ti tam závorky: [=]() {
Jardík avatar 26.1.2014 22:08 Jardík | skóre: 40 | blog: jarda_bloguje
Rozbalit Rozbalit vše Re: Ako na Qt?
Tam být nemusí, pokud neuvádí návratový typ.
Věřím v jednoho Boha.

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.