merkwürdiges verhalten im qt project
-
wenn ich im qt designer project funktionen oder code wie zum beispiel:
//main.cpp #include <kapplication.h> #include <kcmdlineargs.h> #include "form1.h" int main( int argc, char ** argv ) { KCmdLineArgs::init(argc, argv, "keagle", "keagle", "0.1"); KApplication a; Form1 w; a.setMainWidget(&w); w.show(); a.connect( &a, SIGNAL( lastWindowClosed() ), &a, SLOT( quit() ) ); //DIESEM code meine ich KSystemTray* tray = new KSystemTray(0, "Hallo"); tray->setPixmap(QPixmap("network_traffic.png")); tray->show(); if (tray->isVisible()) hide(); //***************** return a.exec(); }
oder diesen
void Form1::SetLedStat() { if(status_adsl() == 'r'){ adsl_stat->setState(KLed::On); adsl_stat->setColor(green); } if(status_adsl() == 'o') { //adsl_stat->setState(KLed::Off); adsl_stat->setColor(red); } if(status_adsl() == 't'){ //adsl_stat->toggleState (KLed::On, KLed::Off); adsl_stat->setColor(yellow); } }
in der mein main.cpp einfüge (siehe oben) bekomm ich folgende fehler:
ain.cpp: In function `int main(int, char**)': main.cpp:8: Warnung: »init« ist veraltet (deklariert bei /usr/include/kcmdlineargs.h:260) main.cpp:14: Fehler: `KSystemTray' undeclared (first use this function) main.cpp:14: Fehler: (Each undeclared identifier is reported only once for eachfunction it appears in.) main.cpp:14: Fehler: `tray' undeclared (first use this function) main.cpp:14: Fehler: »KSystemTray« wurde nicht deklariert main.cpp:18: Fehler: `hide' undeclared (first use this function) make: *** [.obj/main.o] Fehler 1
in der zugehörigen form1.ui.h datei eingeschrieben funktioniert alles prima, aber wenn ich best ereignisse ohne buttonclick ausgeführt haben will muss es doch in die main.cppp, warum gibt es diese merkwürdigen fehler nur wenn ich dort etwas eintrage.
in folgendem beispiel:
1. // khelloworld.cpp 2. 3. // Hello World for KDE 4. // by Burkhard Lehner <b_lehner@informatik.uni-kl.de> 5. 6. #include <kapp.h> 7. #include <kmenubar.h> 8. #include <ktopwidget.h> 9. #include <qlabel.h> 10. #include <qkeycode.h> 11. 12. int main (int argc, char **argv) { 13. 14. const char *aboutText = "KDE Hello World\nby Burkhard Lehner"; 15. 16. KApplication a (argc, argv); 17. KTopLevelWidget top; 18. 19. QPopupMenu *filePopup = new QPopupMenu (); 20. filePopup->insertItem (i18n ("&Quit"), &a, SLOT (quit ()), CTRL + Key_Q); 21. 22. KMenuBar *menu = new KMenuBar (&top); 23. menu->insertItem (i18n ("&File"), filePopup); 24. menu->insertSeparator (); 25. menu->insertItem (i18n ("&Help"), a.getHelpMenu (TRUE, aboutText)); 26. 27. top.setMenu (menu); 28. 29. QLabel *text = new QLabel (i18n ("Hello, World"), &top); 30. text->setAlignment (AlignCenter); 31. text->setFont (QFont ("charter", 64, QFont::Bold, TRUE)); 32. text->setMinimumSize (text->sizeHint ()); 33. top.setView (text); 34. 35. top.show (); 36. return a.exec ();
funktionierts doch wunderbar
-
nur nicht zuviele antworten
-
Die Fehlermeldungen sagen einfach, dass er die Klassen nicht findet, um das Programm zu kompilieren.
Ich bin zwar kein QT Experte, vielleicht hilft dir das aber:
Für KSystemTray wirst du wohl#include <ksystemtray.h>
brauchen.
Wo hide() definiert ist kann ich nur spekulieren. Ich hab gesehen, dass KSystemTray ne Methode hatte. D.h. wenn du den Header eingebunden hast, schreibst du statt hide()tray->hide();
Wenn das nicht hilft, dann schaue in der Dokumentation nach, was du entsprechend einzubinden hast.
-
mist war mir jetz eben auch aufgefallen, was merkwürdigerweise nicht klappt ist allerdings das this in der deklaration der klasse ksystemtray, das habe ich im letzten post obligatorisch 0 gesetzt weil der compiler immer rumgemeckert hat. dieser zeiger ist allerdings wichtig, damit ich das programm immer aufrufen kann(über den tray). danke für die bisherige hilfe
main.cpp:15: Fehler: invalid use of `this' in non-member function make: *** [.obj/main.o] Fehler 1
#include <kapplication.h> #include <ksystemtray.h> #include <kcmdlineargs.h> #include "form1.h" int main( int argc, char ** argv ) { KCmdLineArgs::init(argc, argv, "keagle", "keagle", "0.1"); KApplication a; Form1 w; a.setMainWidget(&w); w.show(); a.connect( &a, SIGNAL( lastWindowClosed() ), &a, SLOT( quit() ) ); KSystemTray* tray = new KSystemTray(this, "Hallo"); tray->setPixmap(QPixmap("network_traffic.png")); tray->show(); return a.exec(); }
-
karo@dan schrieb:
mist war mir jetz eben auch aufgefallen, was merkwürdigerweise nicht klappt ist allerdings das this in der deklaration der klasse ksystemtray, das habe ich im letzten post obligatorisch 0 gesetzt weil der compiler immer rumgemeckert hat. dieser zeiger ist allerdings wichtig, damit ich das programm immer aufrufen kann(über den tray). danke für die bisherige hilfe
main.cpp:15: Fehler: invalid use of `this' in non-member function make: *** [.obj/main.o] Fehler 1
KSystemTray* tray = new KSystemTray(this, "Hallo");
Den this-Zeiger kannst du hier nicht verwenden, das ist dir wohl klar. Den Zeiger kannst du nur innerhalb der Klasse benutzen, wenn diese generiert ist. Ich weiß nicht, was du machen willst. Der Konstruktor erwartet ein Zeiger auf QWidget (Elternklasse). Ob nun KSystemTray von QWidget abgeleitet ist, weiß ich nicht.
KDE Documentation sagt: "Furthermore, the parent widget is shown or raised respectively when the user clicks on the trray window with the left mouse button."dieser zeiger ist allerdings wichtig, damit ich das programm immer aufrufen kann(über den tray).
Diesen Satz verstehe ich nicht. Erkläre das mal.