Search code examples
c++qtsignals-slots

How can i call a my function in a qtslot?


I'm trying to call my function as a function slot in Qt,But i don't know how to go about it. it seems the following approach is wrong :

Update: According to an answer i updated my source code,but still something is apparently wrong with it.Trying to compile this snippet of code causes these errors:

C2515:' no appropriate default constructor is available.'

And

C2665: QObject::connect':none of the 3 overloads could convert all the arguments.'

respectively in Visual studio 2010.

#include <QtGui/QApplication>
#include <QPushButton>
#include <QObject>
#include <QMessageBox>

class myclass;
int main(int argc,char *argv[])
{
    QApplication a(argc,argv);

    QPushButton btnshowmessage("show");
    myclass *my=new myclass();
    QObject::connect(&btnshowmessage,SIGNAL(clicked()),my,SLOT(warningmessage()));
    btnshowmessage.show();
    return a.exec();
}
//////////////////////////////////////////////////////////////////////////
class myclass: public QObject
{
Q_OBJECT
public:myclass(){}

        public slots:
            void warningmessage()
            {
                QMessageBox::warning(0,"Warning","Test Message!",QMessageBox::Ok);
            }
};

Solution

  • You use signals and slots to connect one Object's signal to another Object's slot. Every signal or slot should be inside a class which must be also derived from QObject class and contain the Q_OBJECT macro.

    So to make your code work, put the slot into some class of yours:

    class MySlotClass:public QObject
    {
    Q_OBJECT
    public slots:
    void MyFunction()
        {
            QMessageBox::warning(0,"WarningTest","This is a waring text message",QMessageBox::Ok);
        }
    }
    

    and connect like this:

    MySlotClass m = new MySlotClass();
    Qobject::connect(&btnShowaMessageBox,SIGNAL(clicked()), &m ,SLOT(MyFunction()));