繁体   English   中英

Qt Designer中的自定义菜单操作

[英]Custom menu actions in Qt Designer

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

例如:我希望用户按下菜单操作,如果它是隐藏的,它将显示一个小部件,如果已经可见,则将其隐藏。

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

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

我在Visual Studio下工作,仅使用Qt Designer,而不使用Qt Creator。

我是GUI和Qt编程的新手,在这里我迷路了。

提前致谢 :)

您基本上有2个选择:

  1. 在Mainwindow子目录中实现自定义逻辑。
    为此,您只需在类中添加处理所需的插槽,并使它们在Qt Designer中可用。 你可以这样做:
    无论是在信号/槽的编辑器,然后单击“修改”,然后单击+符号。 这样,您就可以在QtDesigner中使用新的插槽了。
    当您的插槽称为on_(senderName)_(signalName) ,Qt自动装配将自动连接信号,您无需在代码或desinger中执行此操作。

  2. 创建一个QMenuBar子类并在那里实现自定义逻辑。
    您的案例告诉Qt Designer通过右键单击它来选择特定的子类来替代默认的QMenuBar,然后选择“升级为...”。 在新对话框中,您可以指定您的自定义类,该类将在实际代码中用作替换类,但在设计时将使用QMenuBar。 使用此方法,您无需编写单独的插件即可在Qt Designer中使用您的类。

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

在您的班级中创建一个广告位:

onMenuActionTriggered()

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

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

在您的广告位中,您可以做任何您想做的事。

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

菜单栏会自动添加到QMainWindow派生的任何新表单(创建gui应用程序时的默认表单,但您可以使用file-> new file或project ...并选择Qt-> Qt Designer Form Class来创建新的主窗口) 。

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM