21

每当我使用信号/槽编辑器对话框时,我都必须从现有的槽列表中进行选择。所以问题是如何创建自定义命名插槽?

4

10 回答 10

29

这在 Qt Designer 4.5.2 版本中似乎是可能的,但不能从主窗口中的 Signal/Slot Editor 停靠小部件中完成。

这对我有用

  1. 切换到编辑信号/槽模式 (F4)
  2. 从要发出信号的小部件拖放到要接收信号的小部件上。
  3. 出现一个配置连接对话框,显示发射小部件的信号和接收小部件的插槽。单击右侧插槽列下方的编辑...。
  4. 将出现一个Signals/Slots of ReceivingWidget对话框。在这里,可以单击插槽下方的加号图标以添加任何名称的新插槽。
  5. 然后,您可以返回并在“配置连接”对话框中连接到您的新插槽,或者实际上在主窗口中的“信号/插槽编辑器”停靠小部件中连接到您的新插槽。

警告:我正在使用 PyQt,我只尝试使用从 Python 而不是 C++ 以这种方式添加的插槽,所以你的里程可能会有所不同......

于 2009-09-06T19:22:55.817 回答
29

右键单击主窗口并选择“更改信号和插槽”并添加一个新插槽。它将出现在您的信号槽编辑器中。

于 2012-01-22T02:08:21.557 回答
4

不幸的是,这在 Qt4 中是不可能的。

在 Qt3 中,您可以创建自定义插槽,然后在 ui.h 文件中实现这些插槽。但是,Qt4 不使用此文件,因此不支持自定义插槽。

QtForum上有一些关于这个问题的讨论

于 2008-10-03T04:55:20.303 回答
4

我可以通过以下方式做到这一点:

在 MainWindow.h 中,添加以下行:

public slots:
     void example();

在 MainWindow 类中。

在 MainWindow.cpp

void MainWindow::example() {
     <code>
}
于 2012-10-09T06:43:45.947 回答
3

这似乎不可能以简单的方式实现。

设计器仅允许您将现有小部件提升为您自己的自定义小部件。但是它不允许您连接提升的小部件类的信号和插槽。

可行的方法是为设计器创建一个插件,如此处其后的页面中所述。

正常的做法是将小部件提升到您自己的类,然后在您自己的代码中手动连接它。这里描述了这个过程

于 2008-10-03T04:55:22.240 回答
2

这是不可能的,因为这意味着您将向现有的 Qt 类添加一个插槽,QPushButton这并不是真正的方法。

QWidget您最终应该通过继承现有的子类来创建自己的。然后按照建议将其作为插件集成到 Qt Designer 中。拥有自己的类允许您根据需要添加/修改可用的信号/插槽。

于 2008-10-03T06:40:10.850 回答
2

不要忘记插槽自动连接功能。有一些缺点,比如如果你重命名你的小部件就必须重命名你的函数,但我们在我的公司经常使用这些。

于 2008-10-03T16:28:07.320 回答
2

您可以使用魔术插槽格式

void on_objectName_signal() {
// slot code here, where objectname is the Qt Designer object name
// and the signal is the emission
}

与此方法的连接由方法connectSlotsByName建立,并且每当发出信号时,都会调用此插槽。

于 2009-01-14T20:51:31.667 回答
1

也许会有所帮助。

默认情况下,您必须从现有的插槽列表中进行选择。但是您可以通过右键单击设计器右侧列表中的对象来添加插槽,然后选择“插槽/信号”并添加您的自定义插槽/信号。之后,您可以在信号/槽编辑器中选择它。

于 2011-04-09T11:45:34.010 回答
0

通过右键单击小部件

将小部件提升为您定义的类

再次通过右键单击小部件

你会看到信号和槽是可编辑的

于 2011-12-31T11:05:07.067 回答