Button abfragen



  • Heyho,
    wie Ihr wisst bin ich noch nicht standfest im Bereich mit QT. Mein Problem liegt nun darin, einen Button abzufragen bzw. eine CheckBox. Die GUI-Deklaration sieht so aus:

    class Ui_Form
    {
    public:
        QGroupBox *checkBox;
        //blablabla
    
            void setupUi(QWidget *Form)
        {
        if (Form->objectName().isEmpty())
            Form->setObjectName(QString::fromUtf8("Form"));
        Form->resize(1060, 790);
        checkBox = new QCheckBox(md2);
        checkBox->setObjectName(QString::fromUtf8("checkBox"));
        checkBox->setGeometry(QRect(10, 30, 161, 18));
        checkBox_2 = new QCheckBox(md2);
    

    So, das hätten wir soweit. Funzt auch alles wunderbar. Jetzt möchte ich aber gerne den Button abfragen und zwar über ne Methode:

    Ui_Form::checkBox
    {
    	MessageBox(NULL,"CheckBox Nr. 1!!!","MD2-Modelviewer",MB_OK);
    };
    

    Als Meldung gibt er mir aus:

    1>e:\qt\4.4.3\examples\designer\calculatorform\ui_calculatorform.h(166) : error C2470: "Ui_Form::checkBox": Sieht wie eine Funktionsdefinition aus, es ist aber keine Parameterliste vorhanden; sichtbarer Funktionstext wird übersprungen.
    

    Da mir die Meldung noch nie untergekommen ist, wollte ich euch mal fragen wie's nun damit aussieht!? Kann mir da einer Rat geben? Ich danke viemals im Voraus!



  • class Ui_Form {
      QGroupBox *checkBox;
      // ...
    }
    
    Ui_Form::checkBox
    {
        MessageBox(NULL,"CheckBox Nr. 1!!!","MD2-Modelviewer",MB_OK);
    };
    

    Du musst Dich schon entscheiden ob "checkBox" ein Objekt oder eine Methode sein soll...

    Du willst eigentlich einen Slot mit dem stateChanged-Signal der QCheckBox verbinden.



  • Hm, hab mal ein wenig herumprobiert. Über ein Objekt scheints auch nicht zu gehen...bin der Sache noch nicht so ganz vertraut, wie sollte die Abfrage denn aussehen?



  • Wenn Du ueber Statuswechsel einer Checkbox informiert werden moechtest, definierst Du in der entsprechenden Klasse einen Slot:

    class MainWindowDings : public QIrgendwas
    {
      Q_OBJECT 
    
    public:
      // constructor usw
    
    private slots:
      // wird aufgerufen wenn checkbox betaetigt wurde:
      void checkboxChanged(int);  
    
    private:
      QCheckBox *mCheckBox;
    };
    

    Und verbindest dann das entsprechende Signal der Checkbox damit:

    MainWindowDings::MainWindowDings()
    {
      // hier Layout-Getoese usw
      mCheckBox= new QCheckBox(this);
      connect(mCheckBox, SIGNAL(stateChanged(int)), this, SLOT(checkboxChanged(int)));
    }
    

    Wenn sich der Status der Checkbox aendert wird jetzt die Methode "checkboxChanged" aufgerufen:

    void MainWindowDings::checkboxChanged(int state)
    {
      // angemessen reagieren
    }
    

    Du kannst Signale unterschiedlicher Widgets mit dem gleichen Slot verbinden und dann mit der Funktion "sender()" pruefen, welches Objekt das Signal ausgeloest hat.


Anmelden zum Antworten