Zugriff auf Button QT-Designer
-
Hallo C++ Freunde,
ich programmiere momentan etwas in C++ und mußte eine Oberfläche im QT-Designer erstellen, alles kein Problem, aber wie kann ich im Programm auf diesen Button zugreifen. Ein Konkretes Beispiel wäre: Ich habe zwei Button und wenn ich den einen klicke möchte ich den anderen deaktivieren. Wie geht das?
Danke schon einmalGruß
-
Dazu gibt es auf der QT Seite ein Beispiel!
-
Hast du den Link?
-
Hier ist die Dokumentation:
Hier ein paar Tutorials (Dort findest du deine Antwort):
http://doc.qt.nokia.com/4.7/tutorials.html
Direkter Links habe ich jetzt nicht griffbereit.
Edit: Um genauer zu werden interessiert dich das Signal/Slot-Verfahren der QT.
-
Finde leider ncihts passendes.
gehen wir davon aus, das es B1 und B2 gibt.
Wenn ich B1 klicke soll B2 deaktiviert werden.
Wie würde hierfür zum BEispiel der Code lauten?
-
Das Adressbook-Beispiel hat haargenau diese Funktionalität aber egal es geht ungefähr so (ka wie dein Code ist):
connect(b1, SIGNAL(clicked()), this, SLOT(hideb2())); void deineKlasse::hideb2() { b2->hide(); }Unter der Annahme b1 und b2 sind von dir erstellte Buttons und deineKlasse hat von QWidget geerbt. Connect gehört in die initialisierung.
Siehe hier: http://doc.qt.nokia.com/4.7/tutorials-addressbook-part2.html
PS: Du bist hier im falschen Forum. Für Fragen zu QT gibt es ein anderes.
-
Verstehe ich nicht ganz er sagt bei mir im Code es ist ein Zeiigertyp nötig.
-
Waterman83 schrieb:
Verstehe ich nicht ganz er sagt bei mir im Code es ist ein Zeiigertyp nötig.
Dann musst du ein funktionierenden Code zeigen, der den Fehler reproduziert. ist hideb2 ein public slots:?
-
Waterman83 schrieb:
Verstehe ich nicht ganz er sagt bei mir im Code es ist ein Zeiigertyp nötig.
Beschäftige dich bitte mal mit den C++ Grundlagen, schau dir danach die QT-Tutorials an, und stell dann bitte Fragen. QT, oder überhaupt ein x-beliebiges UI-Framework macht unter C++ nur Sinn, wenn man a) die Grundlagen der Sprache beherrscht und b) auch bereit ist, zumindest eine gewisse Recherche selbstständig zu tun.
Deine Frage jedenfalls deutet an, das du weder a noch b erfüllst (Und versteh mich nicht falsch: Ich habe nichts gegen Fragen - aber ich habe etwas gegen Fragen die definitiv nicht zum Schwierigkeitsgrad der Aufgabenstellung passen).
-
So ungefähr als Beispiel total aus dem Tutorial entnommen ungeprüft da keine compiler atm:
//myclass.cpp #include <QtGui> #include "myclass.h" MyClass::MyClass(QWidget *parent) : QWidget(parent) { //sonstiges etc... b1 = new QPushButton(tr("&b1")); b1->show(); b2 = new QPushButton(tr("&b2")); b2->show(); connect(b1, SIGNAL(clicked()), this, SLOT(hideb2())); //layout sonstiges etc... } void MyClass::hideb2() { b2->hide(); } //myclass.h #ifndef MYCLASS_H #define MYCLASS_H #include <QWidget> class QLabel; class QLineEdit; class QPushButton; class QTextEdit; class MyClass : public QWidget { Q_OBJECT public: AddressBook(QWidget *parent = 0); public slots: void hideb2(); private: QPushButton *b1; QPushButton *b2; }; #endif //main.cpp #include <QtGui> #include "myclass.h" int main(int argc, char *argv[]) { QApplication app(argc, argv); MyClass myclass; myclass.show(); return app.exec(); }
-
Der Weg ohne Designer:
#include <QtGui/QApplication> #include <QtGui> int main(int argc, char *argv[]) { QApplication a(argc, argv); QWidget w; QHBoxLayout * hbl = new QHBoxLayout(&w); QPushButton * abut = new QPushButton("Butt &A"); abut->setCheckable(true); abut->setChecked(true); QPushButton * bbut = new QPushButton("Butt &B"); hbl->addWidget(abut); hbl->addWidget(bbut); QWidget::connect(abut,SIGNAL(clicked(bool)),bbut,SLOT(setEnabled(bool))); w.show(); return a.exec(); }Der Weg mit Designer:
Click deine GUI zusammen (QWidget als Basis, 2 Buttons, HLayout).
Wähle ersten Button an, gehe in die Eigenschaften des QAbstractButtons und setze Haken bei "checkable" und "checked"
Unter dem Widgetzusammenklickwindow ist der Aktionseditor && Signale/Slots, wähle letzteres.
Clicke + und trage folgendes ein:pushButton clicked(bool) pushButton_2 setEnabled(bool)
feddich -- aber ob dich das wirklich weiterbringt?
USR32 schrieb:
Das ist kein C++0x !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
Sehr konstruktiv - dein Beitrag im übrigen auch nicht. Der Titel sagt schon Qt ... das wird ein Mod sicher irgendwann verschieben, auch ohne deine vielen "!" .
Zum Beispiel nach http://www.c-plusplus.net/forum/f51 oder
-
Das ist kein C++0x !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!