【问题标题】:Callback for button in Qt Designer?Qt Designer中按钮的回调?
【发布时间】:2011-01-11 09:57:03
【问题描述】:

我今晚才开始使用 QtCreator,它似乎将所有界面内容都放在了 ui 文件中。我按照教程为我的图标创建资源,然后将它们添加到顶部的菜单栏中。

我需要在其中一个被点击时建立连接,但不知道如何为它进行回调。
我是否必须通过代码完全创建它们,或者有什么方法可以为它们添加回调(而不是仅仅让它们与其他对象交互)。

【问题讨论】:

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


    【解决方案1】:

    菜单栏项目是动作对象。要在点击它们时执行某些操作,您需要从操作中捕获triggered() 信号。阅读更多关于信号和插槽的信息here

    为此,您需要在 MainWindow 类中声明一个新的 slot。 Qt 也支持自动执行此操作,无需连接任何东西,但我更喜欢自己执行此操作。如果您不感兴趣,请跳过此部分。

    首先,我们在您的窗口类中声明一个新插槽:

    private slots:
      void clickMenuButton();
    

    然后,在您的构造函数中,您需要将触发的信号连接到您的新插槽:

    connect(ui.actionObject, SIGNAL(triggered()), this, SLOT(clickMenuButton()));
    

    第一个参数是保存我们将要收听的信号的对象(您的菜单按钮)。第二个是信号的名称。第三个是持有接收槽的对象(在本例中是我们的窗口)。第四个是槽。

    就像这样,只要单击该操作,就会调用clickMenuButton()

    正如我之前所说,Qt 也可以automatically connect signals to slots。这里的缺点似乎是你不能改变slot的名字,但你也不需要连接它。

    Qt Creator 支持为小部件创建槽:对于您的菜单操作,您应该转到表单设计器,并且您应该在表单中看到一个操作列表(如果没有,请找到 动作编辑器)。右键单击您想要的操作,然后按 Go to slot...。在那里,双击triggered()

    Qt Creator 将在您的代码编辑器中打开新插槽,您可以在这里做任何您想做的事情!

    【讨论】:

    • 非常感谢,这太完美了!
    【解决方案2】:

    为此,您需要添加QAction,将其添加到菜单中,将图标与其关联,然后为其创建回调。我正在使用 VS 集成,所以我不知道如何在 Creator 中执行此操作的详细信息,但应该可以不用在代码中创建东西。

    应该有一个动作编辑器。从那里添加一个动作,然后右键单击它或向其添加图标,然后将其拖动到菜单中,然后可能双击它为其创建一个插槽。至少在 VS 集成中是这样工作的。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2019-03-24
      • 2011-02-09
      • 1970-01-01
      • 2019-01-03
      • 2021-04-13
      • 1970-01-01
      • 1970-01-01
      • 2014-10-22
      相关资源
      最近更新 更多