【发布时间】:2020-10-18 19:13:24
【问题描述】:
我有课
class Files : public QWidget
{
Q_OBJECT
public:
Files();
~Files();
public slots:
void saveFile(Ui::MainWindow * ui);
void openFile(Ui::MainWindow * ui);
void checkOpenFile(Ui::MainWindow * ui);
void newFile(Ui::MainWindow * ui);
void checkNewFile(Ui::MainWindow * ui);
void closeFile(Ui::MainWindow * ui);
};
我想将放置在 MainWindow 类中的按钮与插槽 void newFile(Ui::MainWindow * ui) 的 Files 类连接
我试过了
files = new Files;
//files->newFile(ui); works as it should
connect(ui->actionExit, SIGNAL(triggered()), files, SLOT(closeFile(ui)));
我有消息:
QObject::connect: No such slot Files::closeFile(ui) in ../qt/src/core/mainwindow.cpp:16
QObject::connect: (sender name: 'actionExit')
我应该如何正确连接ui->actionExit 和Files::closeFile(ui) 插槽?
【问题讨论】:
-
停止使用基于旧/过时/慢速字符串比较且仅在运行时检查的
SIGNAL()和SLOT()宏。改用现代编译时检查和更快的基于connect()语法的成员函数指针。 -
类似的东西:
connect(ui->actionExit, &QAction::triggered, [=]() { files->closeFile(ui); });。如果由于某种原因您坚持使用旧式语法,那么您需要一个签名与触发器的签名匹配的插槽 - 也就是说,您将无法将Ui::MainWindow*传递给该插槽。在这种情况下,将其传递给Files构造函数可能是最简单的,并将其存储在成员变量中。
标签: c++ qt signals-slots