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
class。通过调用自定义函数(以供进一步使用)来实现此方法很重要。谁能告诉我实现这个的正确方法?
更新:
问题出在我的 CMakeLists.txt
上,我在 classes 中添加了 set(CMAKE_AUTOMOC ON)
和 Q_Object
宏,现在可以正常工作了。
我想,您的 exit_button_clicked()
被声明为私有或 public 函数(而不是插槽)。 Qt 自定义信号和槽必须以正确的方式声明。例如,您有 class 教程:
class Tutorial : QWidget {
Q_OBJECT
// Your class members go here.
// Add this slot declaration:
private slots:
void exit_button_clicked();
}
(注意 private
旁边的 slots
关键字)。
插槽也可以 public 或受保护,如您所愿。
第一种情况,肯定是你的exit_button_clicked()
槽有问题。它应该是一个简单的成员函数,带有 slots
说明符,在带有 Q_OBJECT
宏的 class 中使用 void
和 returning void
。如果连接失败,它会在 运行 时将错误写入控制台(可能通过 qDebug()
)。
在第二种情况下,很明显您在函数名称后有额外的 ()
。获取函数的地址如下所示:
connect(tutorial->back, &QPushButton::clicked, this, &MyMainWindow::exit_button_clicked);
&QPushButton::clicked()
尝试调用该函数并获取一个 return 值的地址,这当然会在编译时失败,因为 QPushButton::clicked
不是 static
.
我希望这能说明问题。查看文档不会有任何危害。
我有一个关于 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
class。通过调用自定义函数(以供进一步使用)来实现此方法很重要。谁能告诉我实现这个的正确方法?
更新:
问题出在我的 CMakeLists.txt
上,我在 classes 中添加了 set(CMAKE_AUTOMOC ON)
和 Q_Object
宏,现在可以正常工作了。
我想,您的 exit_button_clicked()
被声明为私有或 public 函数(而不是插槽)。 Qt 自定义信号和槽必须以正确的方式声明。例如,您有 class 教程:
class Tutorial : QWidget {
Q_OBJECT
// Your class members go here.
// Add this slot declaration:
private slots:
void exit_button_clicked();
}
(注意 private
旁边的 slots
关键字)。
插槽也可以 public 或受保护,如您所愿。
第一种情况,肯定是你的exit_button_clicked()
槽有问题。它应该是一个简单的成员函数,带有 slots
说明符,在带有 Q_OBJECT
宏的 class 中使用 void
和 returning void
。如果连接失败,它会在 运行 时将错误写入控制台(可能通过 qDebug()
)。
在第二种情况下,很明显您在函数名称后有额外的 ()
。获取函数的地址如下所示:
connect(tutorial->back, &QPushButton::clicked, this, &MyMainWindow::exit_button_clicked);
&QPushButton::clicked()
尝试调用该函数并获取一个 return 值的地址,这当然会在编译时失败,因为 QPushButton::clicked
不是 static
.
我希望这能说明问题。查看文档不会有任何危害。