使用 connect 方法连接到一个插槽

Posted

技术标签:

【中文标题】使用 connect 方法连接到一个插槽【英文标题】:Using connect method to connect to a slot 【发布时间】:2016-05-20 05:35:17 【问题描述】:

我正在构建一个需要 Qdialog 和几个按钮的应用程序。

我正在尝试在我的实现中使用命令行为设计模式。到目前为止,我的项目有 4 个课程。 (请原谅粗暴的UML)

Command
+execute()

zoomInAndOut : Command
+execute()

MenuItem
-QPushButton
-command
+clicked()

Dialog

所以在对话框类中,我创建了一个 menuItem(它有一个 QPushButton 和 Command 成员变量),我需要做的是,当 menuItems 按钮被点击时,它会调用 menuItems “clicked”方法(它依次调用命令执行方法)。我知道必须使用“连接”功能,但是经过多次尝试后,我无法使其正常工作。

Dialog中的代码大致是这样的

zoomInAndOut zoomCommand;
menuItem *zoom = new menuItem(new QPushButton("Zoom", this), QRect(QPoint(300, 0), QSize(100, 50)), &zoomCommand);
connect(zoom->getButton(), SIGNAL(clicked()), SLOT(zoom->clicked()));

如前所述,连接方法是完全错误的,但您可以看到我试图实现的目标。我怎样才能做到这一点?

提前感谢您的帮助。

【问题讨论】:

返回什么按钮缩放?请出示代码。 【参考方案1】:

更改代码

connect(zoom->getButton(), SIGNAL(clicked()), SLOT(zoom->clicked()));

connect(zoom->getButton(), SIGNAL(clicked()), zoom, SLOT(clicked()));

【讨论】:

嗨!尝试此操作时会导致编译错误:“第三个参数没有从 'menuItem * ' 到 'const QObject *' 的已知转换。 好的。你在getButton() 方法上返回了什么? zoom 的方法 clicked() 是否在 zoom 类的 public slots: 部分中? 是的。我添加了你和 Aarons 的解决方案。现在让我想到了这个:imgur.com/WPVHLRY 好吧,添加#include <QPushButton>到类【参考方案2】:

确保您的 menuItem 类在打开 之后的行包含 Q_OBJECT 宏。并确保clicked() 方法位于类主体的slots 部分中。

【讨论】:

嗨!我从来没有听说过这样做,但我能够在快速谷歌搜索后添加它。这导致了以下屏幕截图:imgur.com/WPVHLRY 我非常有信心我正确添加了宏,但是在尝试编译时我收到编译器链接器错误,您可以在屏幕截图的底部看到。 如果你删除宏,它会编译吗? (但你需要它让 SIGNAL 和 SLOTS 在 menuItem 中工作) 你应该把你的类声明放在头文件中。是吗? O_OBJECT 在 cpp 文件中不起作用。另见***.com/questions/4774291/… 嗨 Aaron,您的解决方案和@someoneinthebox 解决方案的组合使程序可以编译。感谢您的帮助!

以上是关于使用 connect 方法连接到一个插槽的主要内容,如果未能解决你的问题,请参考以下文章

Qt Connect 无法连接到插槽

如何修复QObject::connect:没有这样的插槽..将发送者连接到同一类中的插槽时[重复]

PyQt在连接到信号时将参数发送到插槽

如何在 Qt 中将插槽连接到信号 QProcess::started()?

Qt for Qt:如何连接到具有新信号/插槽风格的信号?

连接到数据库而不写入警告/错误消息