我试图将我的功能称为Qt中的功能插槽,但我不知道如何去做。 似乎以下方法是错误的:
更新: 根据答案,我更新了我的源代码,但仍然显然有一些错误。编译这段代码会导致这些错误:
C2515:'没有合适的默认构造函数。'
并且
C2665:QObject :: connect':3个重载中没有一个可以转换所有 参数'。
分别在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);
}
};
答案 0 :(得分:5)
使用信号和插槽将一个对象的信号连接到另一个对象的插槽。每个信号或槽都应该在一个类中,该类必须也来自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()));
答案 1 :(得分:2)
目前Qt不允许将信号连接到某些QObject衍生物上未声明为槽的函数。我相信Qt5 may offer this possibility,但是connect会有不同的语法来允许这样做。
基本上你的槽函数必须在QObject派生类中并在
中声明public slots:
部分。