我目前正在尝试使用Qt Designer构建GUI,我想自定义菜单操作的插槽。
E-g:我希望用户按下一个菜单操作,如果它被隐藏则显示一个小部件,如果它已经可见则隐藏它。
基本上,我想要做的是执行我的一些代码而不是默认操作,如show()或hide()。
所以我想知道我是否应该创建QMenuBar的子类,向其添加自定义插槽,然后创建一个插件以在Qt Designer中使用它,或者我是否应该为QMenu或QAction创建子类?或者这可能不是正确的方法吗?
我在Visual Studio下工作,我只使用Qt Designer,而不是Qt创建者。
我是GUI和Qt编程的新手,我在这里有点迷失。
提前致谢:)
答案 0 :(得分:3)
你基本上有两个选择:
在Mainwindow sublcass中实现自定义逻辑
为此,您只需在类中添加处理所需的插槽,并在Qt Designer中使它们可用。你可以这样做:
在信号/插槽编辑器中 ,然后单击“修改”,然后单击+
符号。通过此,您可以在QtDesigner中创建新的插槽;
当您的插槽被调用on_(senderName)_(signalName)
时,或,Qt自动装配将自动连接信号,您无需在代码或设计器中执行此操作。
创建一个QMenuBar子类并在那里实现自定义逻辑 您的案例告诉Qt Designer通过右键单击选择您的特定子类作为默认QMenuBar的替代,然后选择“Promote to ...”。在新对话框中,您可以指定将在实际代码中用作替换的自定义类,但在设计时使用QMenuBar。有了这个方法,您就不必编写单独的插件来使您的课程在Qt Designer中可用。
请注意,使用第二个选项时,只有在通过菜单栏触发操作时才会调用自定义逻辑,而不是通过快捷方式或工具按钮
答案 1 :(得分:0)
菜单栏会自动添加到从QMainWindow派生的任何新表单中(创建gui应用程序时的默认设置,但您可以使用file->新文件或项目创建新的主窗口...并选择Qt-> Qt设计师表格类。)
要为其添加选项,只需单击标有"在此处键入"的区域。并写下你的选项文字。执行此操作时,操作将显示在Qt Designer下部的列表中。右键单击该操作,然后选择"转到插槽"。它将弹出一个带有"触发()"的对话框。已经为你选择了。只需点击"确定"和Qt Creator会处理所有细节并将你带到插槽功能的主体。
答案 2 :(得分:0)
在班级中创建一个插槽:
onMenuActionTriggered()
使用connect()
对行动信号作出反应:
connect(ui.myAction, SIGNAL(triggered()), this, SLOT(onMenuActionTriggered()));
在你的插槽中,你可以做任何你想做的事。
另一个解决方案(不是我最喜欢的解决方案,但可能)是使用自动连接功能,这意味着,通过声明一个插槽'on_myAction_triggered()'(其中myAction是您的QAction的名称),您不需要使用connect()
,因为它是由Qt