Qt将信号与另一个类方法连接
Qt connect signal with another class method
I have class
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 类中的按钮与Files
类的插槽void newFile(Ui::MainWindow * ui)
连接
我试过了
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)
?
首先,您正在尝试连接彼此不兼容的信号和插槽:closeFile
插槽需要Ui::MainWindow *
类型的参数,但您尝试连接到它的信号没有参数。
你真的需要closeFile
来获取指向Ui::MainWindow
的指针吗?您可以让这个插槽和其他插槽不带参数吗?如果你真的需要从Files
内的方法/插槽内部访问Ui::MainWindow
,你可以创建一个setter来传递指针Ui::MainWindow
到Files
,并在插槽中使用该指针,这些插槽本身不会接受任何参数。
其次,您正在尝试使用旧的、过时的和缓慢的方法来设置信号和插槽之间的连接。这种方法不仅很糟糕,因为它很慢,而且也很糟糕,因为它只在运行时(即编译和启动应用程序时(向您显示错误。如果使用基于成员函数的指针连接语法,则在尝试连接不兼容的信号和插槽时,它将拒绝编译。这种方式要好得多,因为您可以及早查看并修复错误。
相关文章:
- 如果C++类在类方法中具有动态分配,但没有构造函数/析构函数或任何非静态成员,那么它仍然是POD类型吗
- 在静态库中嵌入类方法
- 如何制作一个将函数作为参数的类方法
- 从父类方法返回子类对象
- 使用用户定义的参数调用future/async并调用类方法
- 重载类方法的不明确调用
- 单独定义模板化嵌套类方法的正确语法
- 绑定派生类方法C++从实例范围之外的分隔 std::function 变量调用
- 如何访问由共享指针保存的类方法?
- 将子类方法声明为基类的友元
- 我的模板类方法返回错误类型?
- Qt将信号与另一个类方法连接
- 我无法使用C++指针指向类方法返回的 std::vector
- 如何在成为指向基类的指针后保留对子类方法的使用?
- 检查类方法中是否(此 == nullptr)
- 从基类实例调用派生类方法而不进行强制转换
- 函数从唯一代码调用正确的子类方法
- C++ - 如何在不静态的情况下将回调绑定到类方法?
- 在 C++ 中连接类方法提供的字符串
- Qt将GUI类中的方法连接到另一个类中的插槽