无法连接其他类的插槽
Cannot connect slots from another class
我目前正在尝试编写一个用于实验等的小应用程序。我把所有的东西都写在自己的文件中(菜单->菜单.cpp等)。现在我想创建一个菜单操作,这很有效,但与操作交互不起作用。这就是我目前所做的:
menu.cpp
#include "menu.h"
#include <QMenuBar>
#include <QMenu>
#include <QAction>
void Menu::setupMenu(QMainWindow *window) {
QMenuBar *mb = new QMenuBar();
QMenu *fileMenu = new QMenu("File");
QAction *newAct = new QAction("New...", window);
window->connect(newAct, SIGNAL(triggered()), this, SLOT(newFile()));
fileMenu->addAction(newAct);
mb->addMenu(fileMenu);
window->setMenuBar(mb);
}
void Menu::newFile() {
printf("hello world!");
}
菜单.h
#ifndef MENU_H
#define MENU_H
#include <QObject>
#include <QMainWindow>
#include <QWidget>
#include <QMenuBar>
class Menu : public QObject
{
public:
void setupMenu(QMainWindow *window);
private slots:
void newFile();
};
#endif // MENU_H
但它并没有打印出"你好,世界",我得到的唯一信息是:
QObject::connect:…中没有这样的插槽QOobject::newFile()/从Scratch编写的UI应用程序C++/src/UI/menu.cpp:11
我能做些什么来解决这个问题?
~ 1月
class菜单:公共QObject
Menu
是QObject
,但也需要使用Q_OBJECT
宏。
请参阅Qt5-QObject文档:
Q_OBJECT宏必须出现在类定义的私有部分中,该类定义声明自己的信号和插槽,或者使用Qt的元对象系统提供的其他服务。
接下来,您的connect
调用中出现了一些混乱。这是静态connect
函数的签名。
Qt5-静态QObject::connect:
QObject::connect(const QObject*sender,const char*signal,const QOobject*receiver,const char*method,Qt::ConnectionType type=Qt:自动连接)
您可以看到它需要5个参数(对象指针、信号、对象指针、signal/slot),第5个参数是默认值。
还有一个成员函数connect
。
Qt5-Q对象::连接:
QObject::connect(const QObject*sender,const char*signal,const char*method,Qt::ConnectionType type=Qt:自动连接)const
这需要4个参数(对象指针、信号、信号/插槽),第4个参数为默认值。
您的代码:
window->connect(newAct,SIGNAL(triggered()),this,SLOT(newFile()));
您正在调用window
的connect
成员函数,但您正在传递静态connect
函数的参数。
我能做些什么来解决这个问题?
弄清楚你想做什么,并做出适当的决定。
例如:将QAction
信号连接到Menu
中的插槽,然后按如下方式调用静态函数。
connect(newAct, SIGNAL(triggered()), this, SLOT(newFile()));
或者使用成员函数。
connect(newAct, SIGNAL(triggered()), SLOT(newFile()));
- 如何将点击的信号和插槽添加到qt中的自定义按钮中
- 如何在没有信号的情况下从C++执行QML插槽
- 从Q_INVOKABLE功能或插槽中更改QQuick图像源
- 升压信号2将插槽传递到成员功能以断开连接
- 如何在qt中将信号和插槽与另一个对象连接 --解决了
- C++ 信号和插槽不工作:插槽不响应事件
- NS3 插槽混淆(需要帮助理解)
- QObject::连接无法将信号连接到*this*对象的插槽
- QT 插槽未在主线程上调用
- 通过插槽和信号在不同线程中的两个qt对象之间进行通信
- 控制带有信号/插槽的Qt QML滑动视图
- Qt 信号/插槽问题
- QT5 信号不会激活插槽内的功能
- Qt5:连接:如果插槽的参数少于信号,如何使用"连接"
- 需要实例化不同类/对象并在启动时确定的硬件插槽的设计模式
- Qt信号和插槽如果从QRunnable或其他线程调用,则不起作用
- 无法连接其他类的插槽
- 如何将ui文件类中的按钮连接到其他类中的插槽
- 将QTreeWidget(或任何其他QWidget)传递到Qt中的插槽
- 如何通过QSignalMapper或其他方式从QMenu传递QString到Qt插槽