每当我使用信号/槽编辑器对话框时,我都必须从现有的槽列表中进行选择。所以问题是如何创建自定义命名插槽?
10 回答
这在 Qt Designer 4.5.2 版本中似乎是可能的,但不能从主窗口中的 Signal/Slot Editor 停靠小部件中完成。
这对我有用
- 切换到编辑信号/槽模式 (F4)
- 从要发出信号的小部件拖放到要接收信号的小部件上。
- 出现一个配置连接对话框,显示发射小部件的信号和接收小部件的插槽。单击右侧插槽列下方的编辑...。
- 将出现一个Signals/Slots of ReceivingWidget对话框。在这里,可以单击插槽下方的加号图标以添加任何名称的新插槽。
- 然后,您可以返回并在“配置连接”对话框中连接到您的新插槽,或者实际上在主窗口中的“信号/插槽编辑器”停靠小部件中连接到您的新插槽。
警告:我正在使用 PyQt,我只尝试使用从 Python 而不是 C++ 以这种方式添加的插槽,所以你的里程可能会有所不同......
右键单击主窗口并选择“更改信号和插槽”并添加一个新插槽。它将出现在您的信号槽编辑器中。
不幸的是,这在 Qt4 中是不可能的。
在 Qt3 中,您可以创建自定义插槽,然后在 ui.h 文件中实现这些插槽。但是,Qt4 不使用此文件,因此不支持自定义插槽。
QtForum上有一些关于这个问题的讨论
我可以通过以下方式做到这一点:
在 MainWindow.h 中,添加以下行:
public slots:
void example();
在 MainWindow 类中。
在 MainWindow.cpp
void MainWindow::example() {
<code>
}
这是不可能的,因为这意味着您将向现有的 Qt 类添加一个插槽,QPushButton
这并不是真正的方法。
QWidget
您最终应该通过继承现有的子类来创建自己的。然后按照建议将其作为插件集成到 Qt Designer 中。拥有自己的类允许您根据需要添加/修改可用的信号/插槽。
不要忘记插槽自动连接功能。有一些缺点,比如如果你重命名你的小部件就必须重命名你的函数,但我们在我的公司经常使用这些。
您可以使用魔术插槽格式
void on_objectName_signal() {
// slot code here, where objectname is the Qt Designer object name
// and the signal is the emission
}
与此方法的连接由方法connectSlotsByName建立,并且每当发出信号时,都会调用此插槽。
也许会有所帮助。
默认情况下,您必须从现有的插槽列表中进行选择。但是您可以通过右键单击设计器右侧列表中的对象来添加插槽,然后选择“插槽/信号”并添加您的自定义插槽/信号。之后,您可以在信号/槽编辑器中选择它。
通过右键单击小部件
将小部件提升为您定义的类
再次通过右键单击小部件
你会看到信号和槽是可编辑的