我试图将我的函数作为Qt中的函数插槽调用,但是我不知道该怎么做。
似乎以下方法是错误的:
更新:
根据一个答案,我更新了我的源代码,但是显然还是有问题。尝试编译此代码段会导致以下错误:
和
分别在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);
}
};
最佳答案
您可以使用信号和插槽将一个对象的信号连接到另一个对象的插槽。每个信号或插槽都应在一个类之内,该类也必须从QObject
类派生并包含Q_OBJECT
宏。
因此,为了使您的代码正常工作,请将插槽放入您的某些类中:
class MySlotClass:public QObject
{
Q_OBJECT
public slots:
void MyFunction()
{
QMessageBox::warning(0,"WarningTest","This is a waring text message",QMessageBox::Ok);
}
}
并像这样连接:
MySlotClass m = new MySlotClass();
Qobject::connect(&btnShowaMessageBox,SIGNAL(clicked()), &m ,SLOT(MyFunction()));
关于c++ - 如何在qtslot中调用我的函数?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/12108283/