我有以下代码:
class myslot
{
public:
Q_OBJECT
myslot()
{
}
~myslot()
{
}
typedef enum Emycars{volvo,benz,tata}cars;
public slots:
void hellowslot(myslot::cars);
};
void myslot::hellowslot(myslot::cars cars1)
{
}
class mysignal
{
public:
Q_OBJECT
public:
mysignal(myslot *ourslot)
{
bool val = QObject::connect(this,SIGNAL(hellowsignal(myslot::Emycars)),ourslot,SLOT(hellowslot(myslot::Emycars)));
}
~mysignal()
{
}
signals:
void hellowsignal(myslot::Emycars);
};
int main(int argc, char *argv[])
{
QApplication a(argc, argv);
myslot slot;
mysignal sig(&slot);
// DeleteNow w;
// w.showMaximized();
return a.exec();
}
我的代码中有什么错误?我是否已经为接收枚举权限的函数编写连接的方式是什么?
答案 0 :(得分:7)
为了使用信号/插槽机制,类必须从QObject
继承(直接或来自QObject
的子类,如QWidget
)和使用Q_OBJECT
宏声明自己。
因此,mysignal
和myslot
都必须从QObject
继承。
此外,你必须将宏放在你班级的开口大括号之后,这应该给出:
class myslot : public QObject
{
Q_OBJECT
public:
// .../...
};
class mysignal : public QObject
{
Q_OBJECT
public:
// .../...
};
答案 1 :(得分:0)
信号/插槽连接有问题吗?如果是,那么也许你应该这样做:
bool val = QObject::connect( this, SIGNAL(hellowsignal(myslot::cars)), ourslot, SLOT(hellowslot(myslot::cars)));
因为你用myslot :: cars宣布你的老虎机而不是myslot :: Emycars。 Metaobject编译器只是创建与您的插槽相关的字符串,这就是为什么您的连接可能无法正常工作。