Qt 设计器中的自定义菜单操作

Custom menu actions in Qt Designer

本文关键字:自定义 菜单 操作 Qt      更新时间:2023-10-16

我目前正在尝试使用Qt Designer来构建GUI,我想自定义菜单操作的插槽。

例如:我希望用户按下菜单操作,如果它被隐藏,它会显示一个小部件,如果它已经可见,它就会隐藏它。

基本上,我想做的是执行我的一些代码,而不是默认操作,如show((或hide((。

所以我想知道我是否应该创建一个 QMenuBar 的子类,为其添加自定义插槽,然后创建一个插件以在 Qt 设计器中使用它,或者我是否应该为 QMenu 或 QAction 创建一个子类?或者也许这不是正确的方法?

我在Visual Studio下工作,我只使用Qt Designer,而不是Qt creator。

我是GUI和Qt编程的新手,我在这里有点迷茫。

提前致谢:)

你基本上有2个选择:

  1. 在主窗口子窗口中实现自定义逻辑。
    为此,您只需在类中添加处理所需的插槽,并使它们在Qt Designer中可用。您可以这样做:
    在信号/插槽编辑器中,单击"修改",然后单击+符号。通过这种方式,您可以在QtDesigner中提供新的插槽;
    或者当你的插槽被称为on_(senderName)_(signalName)时,Qt自动布线将自动连接信号,你不必在代码或desinger中执行此操作。

  2. 创建一个 QMenuBar 子类并在那里实现自定义逻辑。
    您的案例告诉Qt Designer通过右键单击它来选择您的特定子类作为默认QMenuBar的替代品,然后选择"升级到..."。在新对话框中,可以指定将在实际代码中用作替换的自定义类,但在设计时将使用 QMenuBar。有了这个mehtod,你不必编写一个单独的插件来让你的类在Qt Designer中可用。

请注意,使用第二个选项时,仅当操作通过菜单栏触发时,才会调用自定义逻辑,而不是通过快捷方式或工具按钮触发

在类中创建一个槽:

onMenuActionTriggered()

使用connect()对动作信号做出反应:

connect(ui.myAction, SIGNAL(triggered()), this, SLOT(onMenuActionTriggered()));

在你的插槽中,你可以做任何你想做的事情。

另一种解决方案(不是我最喜欢的,但可能(是使用自动连接功能,这意味着,通过声明一个插槽"on_myAction_triggered(("(其中myAction是QAction的名称(,您不需要使用该connect(),因为它是通过Qt自动连接的。

菜单栏会自动添加到从 QMainWindow 派生的任何新表单中(创建 gui 应用程序时的默认表单,但您可以使用文件>新文件或项目创建新的主窗口... 并选择 Qt->Qt 设计器表单类 (。

要向其添加选项,您只需单击标有"在此处输入"的区域并编写选项文本。当您这样做时,一个操作将出现在Qt Designer下部的列表中。右键单击该操作,然后选择"转到插槽"。它将弹出一个对话框,其中已经为您选择了"triggered(("。只需单击"确定",Qt Creator将处理所有细节,并将您带到插槽功能的主体。