c++ - 无法连接 QPushButton

标签 c++ qt

如果我尝试将按钮与插槽连接,编译器会告诉我:

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/

相关文章:

c++ - 错误 : "Function" is not a Non static data member or base class of "Class"

c++ - UDP套接字recvfrom中的访问冲突读取位置

c++ - 从6.5.0开始,需要xcb-cursor0或libxcb-cursor0来加载Qt xcb平台插件

c++ - 如何在没有数据竞争的情况下在一个套接字上实现具有并行请求和响应的非阻塞客户端-服务器通信模型

c++ - 联盟初始化

c++ - QT .UI 显示.GIF?

c++ - QStateMachine 立即从虚拟状态转换

multithreading - 从 Qt 中的其他线程发出信号时出现段错误

c++ - QTextStream::readAll 返回空 QString

c++ - C++中char[]的子串