Qt正确的connect()调用
Qt proper connect() calling
我有一个关于connect()
方法的问题,以下调用都不起作用:
connect(tutorial->back, SIGNAL(clicked()), this, SLOT(exit_button_clicked()));
connect(tutorial->back, &QPushButton::clicked(), this, &MyMainWindow::exit_button_clicked());
第一个不调用exit_button_clicked()
,第二个告诉我clicked()
必须是静态的(在Clion中(并且不编译。back
是QPushButton
,而tutorial
是自定义的QWidget
类。通过调用自定义函数(以供进一步使用(来实现此方法非常重要。有人能告诉我实现这一点的正确方法吗??
更新:
问题出在我的CMakeLists.txt
上,我在类中添加了set(CMAKE_AUTOMOC ON)
和Q_Object
宏,现在它工作得很好。
在第一种情况下,您的exit_button_clicked()
插槽一定有问题。它应该是一个简单的成员函数,slots
说明符采用void
,并在具有Q_OBJECT
宏的类中返回void
。如果连接失败,它会在运行时将错误写入控制台(可能通过qDebug()
(。
在第二种情况下,很明显,函数名称后面有额外的()
。获取函数的地址如下所示:
connect(tutorial->back, &QPushButton::clicked, this, &MyMainWindow::exit_button_clicked);
&QPushButton::clicked()
尝试调用函数并获取返回值的地址,这在编译时当然会失败,因为QPushButton::clicked
不是static
。
我希望这能澄清这一点。查阅文档不会对邻居造成任何伤害。
我想,您的exit_button_clicked()
被声明为私有或公共函数(而不是槽(。Qt自定义信号和插槽必须以正确的方式声明。例如,你有你的课程教程:
class Tutorial : QWidget {
Q_OBJECT
// Your class members go here.
// Add this slot declaration:
private slots:
void exit_button_clicked();
}
(注意private
旁边的slots
关键字(。
插槽也可以是公共的或受保护的,根据您的意愿。
相关文章:
- 什么时候调用组成单元对象的析构函数
- 对RValue对象调用的LValue ref限定成员函数
- 为什么使用 "this" 指针调用派生成员函数?
- 函数调用中参数的顺序重要吗
- OpenGL - 在抛出"__gnu_cxx::recursive_init_error"实例后终止调用?
- 基于另一个成员参数将函数调用从类传递给它的一个成员
- 为什么我的C#代码在调用回C++COM直到Task时会暂停.等待/线程.加入
- 在c++类上调用void函数
- 为什么 std::unique 不调用 std::sort?
- 我可以调用 bind() 然后在同一个套接字描述符上调用 connect() 吗?
- Qt connect(*发送器,*信号,*接收器,*方法)不调用插槽
- 在UDP套接字上多次调用Connect()以发送到不同的目标地址 - 有效
- 如何摆脱TCP阻塞connect()调用
- 如果插槽对象包含互斥锁和条件变量,则 Boost signals2 connect() 调用编译失败
- 将控件作为成员字段传递给使用新 connect() 调用的方法
- 调用 connect() 时程序崩溃
- 调用connect时的问题会给我一个错误
- 调用socket::connect, socket::bind, socket::listen而不使用getaddrin
- 使用sockaddr_un调用connect(2)时编译错误
- Qt正确的connect()调用