[Solved] Connecting a QPushButton and a function



  • I'm creating a QPushButton, putting it on the form and then connecting it so that when it gets clicked, a function is called. This is what I have in the .h file:
    @
    private:
    QPushButton *manAutoButton;

    private slots:
    void on_manAutoButton_clicked();
    @
    And this is what's in the .cpp file:
    @
    manAutoButton = new QPushButton(this);
    manAutoButton->resize(84, 84);
    manAutoButton->move(629, 270);
    connect(manAutoButton, SIGNAL(clicked()), this, SLOT(on_manAutoButton_clicked()));
    @
    When the app runs, everything is fine. The function gets called whenever I click the manAutoButton. The only thing is that I get the following message in the run window: "QMetaObject::connectSlotsByName: No matching signal for on_manAutoButton_clicked()". What am I doing wrong?

    EDIT: moved to General, peppe



  • You have to create the on_manAutoButton_clicked() function in your .cpp file.



  • Yes, it was already in there. For completeness, this is it:
    @
    void MonitorWindow::on_manAutoButton_clicked()
    {
    if(mode == Auto)
    {
    mode = Manual;
    ui->label_28->setText("MAN");
    manAutoButton->setIcon(QIcon(QPixmap(":/MonitorWindowPix/Automatic1.png")));
    }
    }
    @



  • Try to remove on_ from slot name.

    @private slots:
    void manAutoButton_clicked();

    ...

    connect(manAutoButton, SIGNAL(clicked()), this, SLOT(manAutoButton_clicked()));

    ...

    void MonitorWindow::manAutoButton_clicked()
    {@



  • Thanks - that did it. I guess the buttons that are placed on Designer UI forms are automatically connected to the on_buttonname_clicked functions, but creating your own functions in that format creates some confusion.


Log in to reply
 

Looks like your connection to Qt Forum was lost, please wait while we try to reconnect.