【问题标题】:How do I create a custom slot in qt4 designer?如何在 qt4 设计器中创建自定义插槽?
【发布时间】:2010-09-15 00:05:57
【问题描述】:

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

【问题讨论】:

    标签: c++ qt qt4 qt-creator qt-designer


    【解决方案1】:

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

    【讨论】:

      【解决方案2】:

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

      这对我有用

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

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

      【讨论】:

      • 配置连接对话框中的两个“编辑...”按钮对我来说始终是灰色的。
      • 配置连接中的编辑按钮被禁用。您是如何点击的?
      • 我也有灰色按钮,但最后注意到,如果我将 Signal 连接到主窗口,我可以使用此处给出的方法添加插槽。似乎按预期工作,但确实意味着您在主窗口中而不是在单个小部件中获得了很多方法。
      • 如果编辑按钮被禁用,那么您可能没有正确完成第 2 步。当配置连接窗口出现时,查看两列的名称。右列的名称应该是自定义槽的所有者。
      • 对于任何在 Google 之外徘徊的人,在 Qt 5 下,您必须使用“promote widget”功能使编辑器中的小部件成为“编辑”之前自定义类的别名。 .." 按钮将在顶级窗口以外的内置小部件上变得可点击。
      【解决方案3】:

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

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

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

      【讨论】:

      • qt4 设计器支持读取从 qt3 移植的表单中创建的自定义插槽。它给我的印象是也可以创建一个。
      • 见下面 raigon 的评论,这是目前可能的。
      【解决方案4】:

      我可以这样做:

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

      public slots:
           void example();
      

      在 MainWindow 类中。

      在 MainWindow.cpp 中

      void MainWindow::example() {
           <code>
      }
      

      【讨论】:

        【解决方案5】:

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

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

        可行的方法是为设计师创建一个插件,就像described here 和它后面的页面一样。

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

        【讨论】:

          【解决方案6】:

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

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

          【讨论】:

            【解决方案7】:

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

            【讨论】:

              【解决方案8】:

              你可以使用魔法槽格式

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

              到这个方法的连接是通过connectSlotsByName方法建立的,每当信号发出时,这个槽就会被调用。

              【讨论】:

                【解决方案9】:

                也许会有所帮助。

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

                【讨论】:

                  【解决方案10】:

                  右键单击小部件

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

                  再次通过右键单击小部件

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

                  【讨论】:

                    猜你喜欢
                    • 1970-01-01
                    • 1970-01-01
                    • 2020-04-03
                    • 2013-05-31
                    • 2019-04-29
                    • 1970-01-01
                    • 2018-04-17
                    • 2012-06-20
                    • 1970-01-01
                    相关资源
                    最近更新 更多