如果我尝试将按钮与插槽连接,编译器会告诉我:
QObject::connect: No such slot ClassA::..
ClassB继承ClassA。在 ClassB 中,我创建了一个按钮,并将其连接到 ClassB 中的一个函数。
connect(btn, SIGNAL(clicked()), this, SLOT(helloWorld()));
原因是,this
是 A 类。我如何告诉编译器,不要在 ClassA 中搜索 helloWorld()
而在 ClassB 中使用函数 helloWorld()
?
//header of classa
class ClassA : public QDialog
{
Q_OBJECT
public:
ClassA(QObject *parent = 0);
};
//header of classb
class ClassB : public ClassA
{
public:
ClassB();
public slots:
void helloWorld();
};
//cpp of classa
ClassA::ClassA(QObject *parent)
{
}
//cpp of classb
ClassB::ClassB()
{
QPushButton *btn = new QPushButton("Click");
connect(btn, SIGNAL(clicked()), this, SLOT(helloWorld()));
QHBoxLayout *l = new QHBoxLayout();
l->addWidget(btn);
setLayout(l);
}
void ClassB::helloWorld()
{
qDebug() << "hello world";
}
最佳答案
ClassB
缺少 Q_OBJECT
宏;这意味着从 Qt 的元类型系统的角度来看,它与 ClassA
相同。将 Q_OBJECT
添加到 ClassB
将解决问题。
关于c++ - 无法连接 QPushButton,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20410013/