Qt 设计器中的自定义菜单操作
Custom menu actions in Qt Designer
我目前正在尝试使用Qt Designer来构建GUI,我想自定义菜单操作的插槽。
例如:我希望用户按下菜单操作,如果它被隐藏,它会显示一个小部件,如果它已经可见,它就会隐藏它。
基本上,我想做的是执行我的一些代码,而不是默认操作,如show((或hide((。
所以我想知道我是否应该创建一个 QMenuBar 的子类,为其添加自定义插槽,然后创建一个插件以在 Qt 设计器中使用它,或者我是否应该为 QMenu 或 QAction 创建一个子类?或者也许这不是正确的方法?
我在Visual Studio下工作,我只使用Qt Designer,而不是Qt creator。
我是GUI和Qt编程的新手,我在这里有点迷茫。
提前致谢:)
你基本上有2个选择:
-
在主窗口子窗口中实现自定义逻辑。
为此,您只需在类中添加处理所需的插槽,并使它们在Qt Designer中可用。您可以这样做:
在信号/插槽编辑器中,单击"修改",然后单击+
符号。通过这种方式,您可以在QtDesigner中提供新的插槽;
或者当你的插槽被称为on_(senderName)_(signalName)
时,Qt自动布线将自动连接信号,你不必在代码或desinger中执行此操作。 -
创建一个 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将处理所有细节,并将您带到插槽功能的主体。
- C++映射:具有自定义类的运算符[]不起作用(总是返回0)
- 如何将点击的信号和插槽添加到qt中的自定义按钮中
- C++自定义比较函数
- 如何比较自定义类的std::变体
- std::设置自定义比较器
- 如何正确实现和访问运算符的各种自定义枚举器
- flutter:即使shouldRepaint()返回true,自定义画家也不会重新绘制
- 自定义先决条件对移动分配运算符有效吗
- 使用VS Code和CMake Tools运行自定义命令
- 如何创建从Maya(或类似程序)到虚幻引擎的自定义数据导出插件
- 如何使用IExecuteCommand和动词在上下文菜单外壳扩展中显示本地化文本和自定义图标?
- 使用自定义上下文菜单删除 QTreeView 项崩溃
- 使用 WinAPI 创建自定义菜单的最佳方法是什么
- 自定义快捷方式上的上下文菜单
- 纯 Win32 C++(无 WTL、MFC 等)中的自定义菜单边框
- QT 菜单栏动作接收器自定义类
- 如何将自定义小部件添加为工具按钮的弹出菜单
- Qt 设计器中的自定义菜单操作
- 替换SHDOCLC.DLL文件以自定义网络浏览器的上下文菜单
- MFC Windows菜单,自定义