我有一个MyClass类:
- private:
pushButton *button;
void connectSignalAndSlot();
- private slot:
void buttonAction();
我想使用connectSignalAndSlot()在MyClass中连接这些,如下所示:
void MyClass::connectSignalAndSlot()
{
QObject::connect(button,SIGNAL(clicked()),this,SLOT(buttonAction()));
}
这给了我一个错误
no matching function for call to 'QObject::connect(QPushButton*&, const char*, MyClass* const, const char*)';
如果我使用MyClass继承QObject,程序将编译并启动,但随后我在“应用程序输出”窗格中显示以下问题:
QObject::connect: No such slot QObject::buttonAction() in ..\MyProject\myclass.cpp:48
我是否必须公开按钮和插槽并仅在MainWindow类中使用它们?有没有办法把它保持在MyClass级别?
感谢您的帮助!
答案 0 :(得分:1)
您必须MyClass
继承QObject
并在Q_OBJECT
定义(标题文件)中添加MyClass
宏,才能让广告位/信号发挥作用。
class MyClass : public QObject
{
Q_OBJECT
public:
....
};
答案 1 :(得分:1)
继承QObject
是正确的方法,但您仍然缺少Qt-Meta Object代码。您的类的头文件应如下所示:
#ifndef MYCLASS_H
#define MYCLASS_H
class MyClass : public QObject {
Q_OBJECT
// your methods, variables, slots and signals
}
#endif
不要忘记创建moc文件,最简单的方法是使用qmake
或QtCreator
IDE。