[Qt]:Frage zu QCustomEvent
-
hi,
es geht um die konfiguration meiner erstellten softwaretastatur. ich habe nun ein kleines popup-fenster (qdialog) erstellt in dem 3 variablen (checkBoxen) auf true oder false gesetzt werden können. diese variablen sollen von meiner tastatur abgefragt werden können bzw. sollen während der laufzeit meiner tastatur abgefragt werden.
wenn eine checkbox aktiviert bzw. deaktiviert wird soll ein customEvent an meine tastatur geschickt werden.
ich habe da noch einen kleinen stein auf meinem weg zum ziel, den ich noch nicht so ganz ins rollen bringen kann.unzwar:
in meiner header-datei vom config-menu definier ich meine customEvents.das problem ist wie und wann schicke ich die events bzw. wo werte ich sie aus.
mein gedankengang ist bisher so:
mit void QApplication::postEvent() schicke ich den event an meine tastatur. kann ich die funktion postEvent() einfach so beim funktionsaufruf von buttonOk_clicked() im popup mit reinnehmen? oder wie kann ich das machen? denn meine fenster gehören ja entweder zur klasse qwidget oder qdialog und nicht zu qapplication.wenn das dann geklärt ist, wo frage ich dann meine events ab?
ich würde das im funktionsaufruf von meiner tastatur machen, da wo der menubutton gedrückt wird. ist das so möglich oder wo muss die auswertung hin?das sind zwar viele fragen auf einmal aber ich hoffe ihr könnt mir trotzdem helfen!?
bastian
-
Sorry, ich verstehe Dein Problem nicht so ganz. Bin aber auch ein wenig in Eile. Wenn Du Dein Problem nochmal ausführlicher/deutlicher (?) schilderst, kann ich Dir sicher helfen. (Irgendwann ab heute Abend/Nacht)
Ansonsten... Du weisst schon, dass Du über den Zeiger "qApp" (glaube ich, keine Gewähr) auf Deine Hauptanwendung (QApplication) zugreifen kannst? Mit anderen Worten: Du kannst theoretisch von überall auf Deine Anwendung zugreifen, auch von Deinen Dialog-Klassen aus! (Hoffe das beantwortet Deine zweite Frage)
Kurze Frage noch: Hast Du mal Tutorials ausprobiert? Oder Dich mal auf www.qtforum.org umgesehen? Ist eine recht grosse Gemeinde, die da hinter QT steht.
-
also:
ich habe mit qt eine tastatur erstellt.
ich möchte diese nun noch gerne konfigurierbar machen, d.h. der nutzer soll in einem popup-menüfenster (qdialog) wählen können, ob er eine ganze tastatur, nur zahlen, nur funktionstasten oder nur buchstaben haben will. dafür habe ich 3 checkboxen in meinem popup-fenster initialisiert. ich möchte nun, wenn eine oder mehrere checkboxen verändert werden, das an die tastatur senden und diese soll sich dann abhängig von der einstellung im aussehen verändern.ich muss jetzt erstmal die events definieren und diese dann, wenn beim popupmenü auf "ok" gedrückt wurde diese an meine tastatur schicken.
in meinem tastaturfile schreibe ich eine funktion, die die events auswertet.ich probier mal nen bisschen und melde dann den stand der dinge.
bastian
-
warum machst du das nicht mit Hilfe von Signalen und Slots?
Gartenzwerg
-
wird das aber nicht schwierig, weil mein popup und meine tastatur sind doch 2 verschiedene klassen und nicht objekte einer klasse.
ich dachte man kann signale nur zwischen objekte einer klasse verschicken, so wie ich es bisher die ganze zeit gemacht habe.und mit welcher funktion kann ich das dann machen?
danke
bastian
-
nein, dass wird nicht schwierig:
connect(Senderklasse, SIGNAL(SignalDerSenderklasse()), Empfängerklasse, SLOT(SlotDerEmpfängerklasse()));
zu deinem Fall:
Der Dialog wird doch sicher von deiner Softwaretastatur erzeugt oder?
Demnach müsstest du connect im Konstruktor der Softwaretastatur oder nach dem Erzeugen des Dialoges aufrufen.connect(CheckBox1, SIGNAL(clicked()), SoftwareTastatur, SLOT(CheckBoxClickedSlot()));
in der CheckBoxClickedSlot()-Funktion kannst du nun über
CheckBox1->isChecked();
prüfen, ob die Checkbox markiert oder frei ist.
Gartenzwerg
-
ich bin gerade dabei das auszuprobieren aber ich bekomme ein paar fehlermeldungen:
da bei qmake immer nur eine cpp- und h-datei erzeugt werden habe ich mir erstmal jeweils eine implementierungsdatei mit den dazu gehörigen klassen abgeleitet. das hat alles wunderbar geklappt.
wenn ich meine tastatur gestartet habe und danach auf dem dazugehörigen menübutton geklickt hatte öffnete sich mein menü.
so, nun ging es um die signalweiterleitung zwischen menü und tastatur.
du meintest ich soll die connect-verbindung bei meiner tastatur reinschreiben aber ich denke mal im menü wäre besser, da ich ja von meinem menü zu meiner tastatur ein signal schicken will. also dann habe ich noch 2 ui-files, wo mein widget und mein dialog definiert sind.
unter linux ist es ja so, wenn man nur den designer benutzt und eine signal-slot-verbindung erstellt, wird die dazugehörige funktion in die ui.h-datei reingeschrieben.
ich habe aber in meinen beiden implementierugnsdatei des menüs nun auch meine slots definiert. dort will ich dann die checkBoxen abfragen und externe variablen setzen.
weiterhin habe ich im konstruktor vom menü meinen zeiger von meiner tastatur mit reingeschrieben, für den empfänger (Tastatur* receiver).
beim connect sage ich dann:connect(button_ok, SIGNAL(clicked()), receiver, SLOT(menu_button_clicked()));
wenn der ok-button gedrückt wird, soll das signal an meine tastatur gesendet werden. receiver ist meine tastatur als empfänger und die funktion menu_button_clicked() ist meine funktion bei meiner tastatur, wo ich die externen variablen auswerten möchte und danach meine frames verstecken oder anzeigen lassen will.
als fehler bekomme ich nun:
in method 'configmenuimpl::configmenuimpl(QWidget*, Tastatur*, const char*, bool, unsigned int)':
no matching function for call to 'configmenuimpl::connect(QPushbutton *&, const char[11], Tastatur *&, const char[23])'.weiterhin:
qobject.h:112: candidates are: static bool QObject::connect(const QObject*, const char*, const QObject*, const char*)
qobject.h:208: bool QObject::connect(const QObject*, const char*, const char*) const.wenn meine implementierungsdatei vom menü gelinkt wird, dann auch noch diese:
configmenuimpl.cpp: In method 'void configmenuimpl::checkBox_Capitals_changed()':
invalid use of undefined type 'class QCheckBox', in meiner original menü-datei: forward declaration of 'class QCheckBox'.Das war jetzt zwar etwas viel aber vielleicht hilft es dir weiter.
Vielen Dank
Bastian
-
alarm zurück!!
ich habe jetzt noch mal alles durchgearbeitet und auch alle include-files hinzugefügt. jetzt klappt wieder alles und ich muss nur noch mein signal an die tastatur senden.
danke trotzdem, wenn du schon deine denkfabrik angeschmissen haben solltest.
Bastian
ps: ich melde mich dann wenn es klappt.
-
so es klappt jetzt genau so wie ich es will.
hatte nur vergessen einen zeiger von der tastatur zum popup zu setzen und mein popup zur implementierungsklasse hinzuzufügen und nicht zur basisklasse.besten dank noch mal
bastian