QMenuBar、QMenu、QDialog asme qme-1
qiyuwang 2024-11-02 14:27 14 浏览 0 评论
QMenuBar
一、描述
菜单栏。
二、属性成员
1、defaultUp : bool
菜单弹出方向。默认情况下,菜单“向下”弹出屏幕。
如果菜单不适合屏幕,则自动使用另一个方向。
2、nativeMenuBar : bool
菜单栏是否将在支持它的平台上用作本机菜单栏。
当前支持的平台是 macOS 和使用 com.canonical.dbusmenu D-Bus 接口的 Linux 桌面(例如 Ubuntu Unity)。 如果该属性为true,则菜单栏在本机菜单栏中使用,不在其父级的窗口中;如果为 false,则菜单栏保留在窗口中。在其他平台上,设置这个属性是没有效果的,读取这个属性总是会返回 false。
默认遵循是否为应用程序设置了 Qt::AA_DontUseNativeMenuBar 属性。显式设置此属性会覆盖属性。
三、函数成员
1、【信号】void hovered(QAction *action)
当一个菜单动作被高亮时,这个信号被发出;action 是导致事件被发送的动作。
2、【信号】void triggered(QAction *action)
当鼠标单击触发属于该菜单栏的菜单中的动作时,会发出此信号;action 是导致信号发射的动作。
注意:QMenuBar 必须拥有 QMenu 的所有权才能使此信号起作用。
通常使用 QAction::triggered() 将每个菜单操作连接到单个槽,但有时希望将多个项目连接到单个槽(最常见的是如果用户从数组中选择)。该信号在这种情况下很有用。
3、QAction * actionAt(const QPoint &pt)
返回 pt 处的 QAction。如果 pt 处没有动作或该位置有分隔符,则返回 nullptr。
4、QRect actionGeometry(QAction *act)
返回动作 act 的几何形状。
5、QAction * activeAction() / void setActiveAction(QAction *act)
返回当前突出显示的 QAction(如果有),否则返回 nullptr。
6、QAction * addAction(const QString &text)
创建一个带有文本的新动作。该函数将新创建的动作添加到菜单的动作列表中(QWidget::addAction(QAction *action)),并将其返回。
QAction * addAction(const QString &text, const QObject *receiver, const char *member)
template <typename Obj, typename PointerToMemberFunctionOrFunctor> QAction * addAction(const QString &text, const Obj *receiver, PointerToMemberFunctionOrFunctor method)
使用给定的文本创建一个新动作。动作的 trigger() 信号连接到 receiver 的成员槽 member / 成员函数 method。该函数将新创建的动作添加到菜单的动作列表中并返回它。
template <typename Functor> QAction * addAction(const QString &text, Functor functor)
使用给定的文本创建一个新动作。动作的 trigger() 信号连接到函子。该函数将新创建的动作添加到菜单的动作列表中并返回它。
7、QAction * addMenu(QMenu *menu)
将菜单附加到菜单栏。返回菜单的 QMenu::menuAction()。 菜单栏不拥有菜单的所有权。
返回的 QAction 对象可以用来隐藏对应的菜单。
QMenu * addMenu(const QString &title)
QMenu * addMenu(const QIcon &icon, const QString &title)
将带有标题、图标的新 QMenu 附加到菜单栏。菜单栏拥有菜单的所有权。返回新菜单。
8、QAction * addSeparator()
将分隔符附加到菜单栏。
9、void clear()
从菜单栏中删除所有动作。
在 macOS 上,已合并到系统菜单栏的菜单项不会被此功能删除。可以自行删除之。
10、void setCornerWidget(QWidget *widget, Qt::Corner corner = Qt::TopRightCorner)
QWidget * cornerWidget(Qt::Corner corner = Qt::TopRightCorner)
将给定的小部件设置为直接显示在第一个菜单项的左侧或最后一个菜单项的右侧。
菜单栏拥有小部件的所有权。但是,如果角落已经包含一个小部件,则这个先前的小部件将不再被管理,并且仍将是菜单栏的可见子项。
注意:使用 Qt::TopRightCorner 或 Qt::TopLeftCorner 以外的角会导致警告。
11、void initStyleOption(QStyleOptionMenuItem *option, const QAction *action)
使用菜单栏中的值和动作中的信息初始化选项。当子类需要一个 QStyleOptionMenuItem 但又不想自己填写所有信息时,此方法很有用。
12、QAction * insertMenu(QAction *before, QMenu *menu)
在动作之前插入菜单并返回菜单 menuAction()。
13、QAction * insertSeparator(QAction *before)
创建一个新的分隔符动作,即一个 QAction::isSeparator() 返回 true 的动作。插入到 before 之前并返回它。
14、NSMenu * toNSMenu()
返回此菜单栏的本机 NSMenu。仅在 macOS 上可用。
【领QT开发教程学习资料,点击下方链接莬费领取↓↓,先码住不迷路~】
点击这里:「链接」
QMenu
一、描述
QMenu 类提供了菜单小部件。
二、属性成员
1、icon : QIcon
菜单的图标。这等效于 menuAction() 的 QAction::icon 属性。
2、separatorsCollapsible : bool
连续分隔符是否应在视觉上折叠为单个分隔符,菜单开头或结尾的分隔符也被隐藏。
默认为 true。
3、tearOffEnabled : bool
菜单是否可脱离。默认为 false。
- hideTearOffMenu() 将强制隐藏脱离的菜单,使其从用户桌面上消失。
- isTearOffMenuVisible() 是否处于脱离状态。
- showTearOffMenu() / showTearOffMenu(const QPoint &pos) 显示脱离的菜单,使其出现在用户桌面上指定的全局位置 pos。
4、title : QString
菜单的标题。这等效于 menuAction() 的 QAction::text 属性。
5、toolTipsVisible : bool
动作菜单条目是否显示其工具提示。默认为 false。
三、成员函数
1、【信号】void aboutToHide()
该信号在菜单对用户隐藏之前发出。
2、【信号】void aboutToShow()
该信号在菜单显示给用户之前发出。
3、【信号】void hovered(QAction *action)
当一个菜单动作被高亮时,这个信号被发出;action 是导致信号发射的动作。
4、void triggered(QAction *action)
触发此菜单中的动作时会发出此信号。action 是导致信号发射的动作。
5、QAction * actionAt(const QPoint &pt)
返回 pt 处的项目;如果那里没有项目,则返回 nullptr。
6、QRect actionGeometry(QAction *act)
返回动作动作的几何形状。
7、QAction * activeAction() / void setActiveAction(QAction *act)
当前突出显示的动作。
8、QAction * addAction(const QString &text)
QAction * addAction(const QIcon &icon, const QString &text)
创建一个带有文本的新动作。将新创建的动作添加到菜单的动作列表中(QWidget::addAction()),并将其返回。
QMenu 拥有返回的 QAction。
QAction * addAction(const QString &text, const QObject *receiver, const char *member, const QKeySequence &shortcut = {})
QAction * addAction(const QIcon &icon, const QString &text, const QObject *receiver, const char *member, const QKeySequence &shortcut = {})
使用文本、图标和快捷方式创建一个新动作。动作的 trigger() 信号连接到 receiver 的成员槽member。 该函数将新创建的动作添加到菜单的动作列表中并返回它。
QMenu 拥有返回的 QAction。
template <typename Functor> QAction * addAction(const QString &text, Functor functor, const QKeySequence &shortcut = 0)
template <typename Functor> QAction * addAction(const QString &text, const QObject *context, Functor functor, const QKeySequence &shortcut = 0)
template <typename Functor> QAction * addAction(const QIcon &icon, const QString &text, Functor functor, const QKeySequence &shortcut = 0)
template <typename Functor> QAction * addAction(const QIcon &icon, const QString &text, const QObject *context, Functor functor, const QKeySequence &shortcut = 0)
创建一个新动作。动作的 trigger() 信号连接到函子。该函数将新创建的动作添加到菜单的动作列表中并返回它。
QMenu 拥有返回的 QAction。
9、QAction * addMenu(QMenu *menu)
将 menu 作为子菜单添加到此菜单。它返回菜单的 menuAction()。此菜单不拥有 menu 的所有权。
QMenu * addMenu(const QString &title)
QMenu * addMenu(const QIcon &icon, const QString &title)
将带有标题的新 QMenu 添加到菜单。此菜单拥有新菜单的所有权。返回添加的新菜单。
10、QAction * addSection(const QString &text)
QAction * addSection(const QIcon &icon, const QString &text)
创建一个带有 QAction::isSeparator() 返回 true 但也有文本提示 \ 图标的动作,并将新动作添加到这个菜单的动作列表中。返回新创建的动作。
QMenu 拥有返回的 QAction。
11、QAction * addSeparator()
创建一个新的分隔符动作,即一个 QAction::isSeparator() 返回 true 的动作,并将新操作添加到此菜单的操作列表中。返回新创建的动作。
QMenu 拥有返回的 QAction。
12、void clear()
删除所有菜单的动作。
13、int columnCount()
返回所需的列数。如果菜单不适合屏幕,它会自行布置以使其适合(如折叠隐藏一部分菜单)。
14、QAction * defaultAction() / void setDefaultAction(QAction *act)
当前的默认动作。
15、QAction * exec()
同步执行此菜单。这等效于 exec(pos())。
这将在弹出菜单或其子菜单之一中返回触发的 QAction,如果没有触发任何项目(通常是因为用户按下 Esc),则返回 nullptr。
在大多数情况下,需要自己指定位置,例如,当前鼠标位置:
exec(QCursor::pos());
或与小部件对齐:
exec(somewidget.mapToGlobal(QPoint(0,0)));
或响应 QMouseEvent *e,对齐到事件发生时鼠标光标的全局位置:
exec(e->globalPosition().toPoint());
QAction * exec(const QPoint &p, QAction *action = nullptr)
同步执行此菜单。
弹出菜单,使 action 在指定的全局位置 p。要将小部件的本地坐标转换为全局坐标,请使用 QWidget::mapToGlobal()。
【static】QAction * exec(const QList<QAction *> &actions, const QPoint &pos, QAction *at = nullptr, QWidget *parent = nullptr)
同步执行菜单。
菜单的动作由 actions 指定。将弹出菜单,以便指定的动作 at 出现在全局位置 pos。 如果未指定 at,则菜单出现在位置 pos。
该函数在弹出菜单或其子菜单之一中返回触发的 QAction,如果没有触发任何项目(通常是因为用户按下 Esc),则返回 nullptr。
这相当于:
QMenu menu;
QAction *at = actions[0];
for (QAction *a : qAsConst(actions))//使用qAsConst避免任何拷贝
menu.addAction(a);
menu.exec(pos, at);
16、void initStyleOption(QStyleOptionMenuItem *option, const QAction *action)
使用此菜单中的值和动作中的信息初始化选项。当子类需要一个 QStyleOptionMenuItem 但又不想自己填写所有信息时,此方法很有用。
17、QAction * insertMenu(QAction *before, QMenu *menu)
在 before 之前插入菜单并返回菜单 menuAction()。
18、QAction * insertSection(QAction *before, const QString &text)
QAction * insertSection(QAction *before, const QIcon &icon, const QString &text)
创建了一个新的标题动作,即一个带有 QAction::isSeparator() 返回 true 但也有文本提示的动作。该函数将新创建的动作插入到此菜单的动作列表中,然后将其返回。
QMenu 拥有返回的 QAction。
19、QAction * insertSeparator(QAction *before)
创建一个新的分隔符动作,即一个 QAction::isSeparator() 返回 true 的操作。该函数将新创建的动作插入到此菜单的动作列表中,然后将其返回。
QMenu 拥有返回的 QAction。
20、bool isEmpty()
菜单中是否没有插入可见动作。
21、QAction * menuAction()
返回与此菜单关联的动作。
22、void popup(const QPoint &p, QAction *atAction = nullptr)
显示菜单,以便动作 atAction 位于指定的全局位置 p。要将小部件的本地坐标转换为全局坐标,请使用 QWidget::mapToGlobal()。
23、void setAsDockMenu()
通过选项单击应用程序停靠图标,将此菜单设置为可用的停靠菜单。 仅在 macOS 上可用。
24、NSMenu * toNSMenu()
返回此菜单的本机 NSMenu。仅在 macOS 上可用。
QDialog
一、描述
对话窗口是一个顶层窗口,主要用于短期任务和与用户的简短交流。QDialogs 可以是模态的或非模态的。
QDialog(以及任何其他类型为 Qt::Dialog 的小部件)使用父小部件与 Qt 中的其他类略有不同。对话框始终是顶级小部件,但如果它有父级,则其默认位置位于父级顶级小部件的顶部(如果它本身不是顶级)。它还将共享父级的任务栏条目。
1.1、模态对话框
模态对话框是阻止输入到同一应用程序中其他可见窗口的对话框。用于向用户请求文件名或用于设置应用程序首选项的对话框通常是模态的。
当打开应用程序模态对话框时,用户必须完成与对话框的交互并关闭它,然后才能访问应用程序中的任何其他窗口。窗口模态对话框仅阻止访问与对话框关联的窗口,允许用户继续使用应用程序中的其他窗口。
显示模态对话框的最常见方法是调用其 exec() 函数。当用户关闭对话框时, exec() 将提供一个有用的返回值。要关闭对话框并返回适当的值,必须连接一个默认按钮,例如 accept() 槽的 OK 按钮和 reject() 槽的 Cancel 按钮。或者,可以使用 Accepted 或 Rejected 调用 done() 槽。
另一种方法是调用 setModal(true) 或 setWindowModality(),然后调用 show()。与 exec() 不同,show() 立即将控制权返回给调用者。调用 setModal(true) 对于进度对话框特别有用,其中用户必须具有与对话框交互的能力,例如取消长时间运行的操作。如果同时使用 show() 和 setModal(true) 执行长操作,则必须在处理过程中定期调用 QCoreApplication::processEvents() 以使用户能够与对话框进行交互。
1.2、非模态对话框
非模态对话框是独立于同一应用程序中的其他窗口运行的对话框。
使用 show() 显示非模态对话框,它立即将控制权返回给调用者。
1.3、默认按钮
对话框的默认按钮是用户按下 Enter(返回)时按下的按钮。此按钮用于表示用户接受对话框的设置并希望关闭对话框。使用 QPushButton::setDefault() 来设置和控制对话框的默认按钮。
1.4、Esc 键
如果用户在对话框中按下 Esc 键,r?eject() 将被调用。这将导致窗口关闭:不能忽略关闭事件。
1.5、返回值(模态对话框)
模态对话框通常用于需要返回值的情况,例如指示用户是按下确定还是取消。可以通过调用accept() 或 reject() 槽来关闭对话框,并且 exec() 将根据需要返回 Accepted 或 Rejected。exec() 调用返回对话框的结果。如果对话框没有被销毁,结果也可以从 result() 中获得。
为了修改对话框的关闭行为,可以重新实现函数 accept()、reject() 或 done()。closeEvent() 函数只应重新实现以保留对话框的位置或覆盖标准关闭或拒绝行为。
1.6、代码示例
模态对话框:
void EditorWindow::countWords()
{
WordCountDialog dialog(this);
dialog.setWordCount(document().wordCount());
dialog.exec();
}
非模态对话框:
void EditorWindow::find()
{
if (!findDialog) {
findDialog = new FindDialog(this);
connect(findDialog, &FindDialog::findNext, this, &EditorWindow::findNext);
}
findDialog->show();
findDialog->raise();
findDialog->activateWindow();
}
二、类型成员
1、enum QDialog::DialogCode:模态对话框返回的值。
- QDialog::Accepted:接受
- QDialog::Rejected:拒绝
三、属性成员
1、modal : bool
show() 是否应以模态弹出对话框。
默认为 false,并且 show() 将对话框弹出为无模态。将此属性设置为 true 等效于将 QWidget::windowModality 设置为 Qt::ApplicationModal。
exec() 忽略此属性的值并始终以模态弹出对话框。
2、sizeGripEnabled : bool
是否启用大小把手。默认为 false。
启用此属性时,QSizeGrip 将放置在对话框的右下角。
四、成员函数
1、QDialog(QWidget *parent = nullptr, Qt::WindowFlags f = Qt::WindowFlags())
对话框始终是顶级小部件,但如果它有父级,则其默认位置位于父级的顶部。 它还将共享父级的任务栏条目。
小部件标志 f 被传递给 QWidget 构造函数。
2、【virtual】void accept()
隐藏模式对话框并将结果代码设置为 Accepted。
3、【信号】void accepted()
使用 QDialog::Accepted 参数调用 accept() 或 done() 接受对话框时,将发出此信号。
请注意,使用 hide() 或 setVisible(false) 隐藏对话框时不会发出此信号。
4、【virtual】void done(int r)
关闭对话框并将其结果代码设置为 r。 finished() 信号将发出 r; 如果 r 是 QDialog::Accepted 或 QDialog::Rejected,accepted() 或 denied() 信号也将分别发出。
若此对话框与 exec() 一起显示,则 done() 也会导致本地事件循环完成,且 exec() 返回 r。
如果设置了 Qt::WA_DeleteOnClose 标志,则 done() 会删除对话框。如果对话框是应用程序的主要小部件,则应用程序终止。如果对话框是最后一个关闭的窗口,则发出 QGuiApplication::lastWindowClosed() 信号。
5、【virtual】int exec()
将对话框显示为模态对话框,在用户关闭它之前一直处于阻塞状态。该函数返回一个 DialogCode 结果。
可见代码里面开启了一个事件循环。
注意:
当对话框有父级时应该应避免使用此功能,而是使用 open()。 与 exec() 不同,open() 是异步的,并且可以防止发生一系列危险的错误(例如,在通过 exec() 打开对话框时删除对话框的父级)。使用 open() 时,可以连接到 QDialog 的 finished() 信号,以便在对话框关闭时得到通知。
QDialog * w = new QDialog(this);
w->setAttribute(Qt::WA_DeleteOnClose);
w->open();
当对话框没有父级时,使用 open() 没有模态效果。
6、【信号】void finished(int result)
当用户或通过调用 done()、accept() 或 reject() 设置对话框的结果代码时,会发出此信号。
使用 hide() 或 setVisible(false) 隐藏对话框时不会发出此信号。
7、【virtual】void open()
将对话框显示为窗口模式对话框,立即返回。
8、【virtual】void reject()
隐藏模式对话框并将结果代码设置为 Rejected。
9、【信号】void rejected()
当对话框被用户拒绝或使用 Rejected 参数调用 reject() 或 done() 时,会发出此信号。
使用 hide() 或 setVisible(false) 隐藏对话框时不会发出此信号。
10、int result()
返回模态对话框的结果代码,Accepted 或 Rejected。
注意:如果对话框是使用 Qt::WA_DeleteOnClose 属性构造的,则不要调用此函数。
11、void setResult(int i)
将模式对话框的结果代码设置为 i。
【领QT开发教程学习资料,点击下方链接莬费领取↓↓,先码住不迷路~】
原文链接:https://blog.csdn.net/kenfan1647/article/details/122902991
相关推荐
- 10款最出色的免费数据库管理工具(免费数据库客户端)
-
OpenKeyValOpenKeyval是一款免费、开源的键值数据库管理工具,基于Web,并且基于PHP开发,其目标是用最简单的方法来管理Web应用程序数据。用户只需要发送一个POST请求就可以存储...
- 主流数据库的不同点在哪?MySQL和SQL Server的区别介绍
-
在本教程中,树懒君介绍了两种最普遍应用的RDBMS—MySQL和MicrosoftSQLServer。通过介绍MySQL和SQLServer的几个关键区别,希望大家能在这两者之间做出最适合自己的...
- 【推荐】一个开源免费、AI 驱动的智能数据管理系统,支持多数据库
-
如果您对源码&技术感兴趣,请点赞+收藏+转发+关注,大家的支持是我分享最大的动力!!!.前言...
- MySQL原理介绍(mysql原理简述)
-
一、Mysql中有哪几种锁?1)表级锁开销小,加锁快;不会出现死锁;锁定粒度大,发生锁冲突的概率最高,并发度最低。...
- 免费的sql工具,SQLynx有哪些优势?
-
1.免费且功能全面无成本负担:对于个人用户来说,SQLynx个人版完全免费,无需支付任何使用费用或订阅费用,降低了个人开发者的经济成本。...
- 免费mysql服务器,mySQL云数据库产品优势?
-
mysql免费服务器,免费mysql服务器。云数据库MySQL(TencentDBforMySQL)是一种稳定可靠、可弹性扩展和便于管理的关系型数据库服务。云数据库MySQL提供备份恢复、监...
- 结合我们公司的需求,看了ORACLE的收费,决定弃购!
-
今天向ORACLE的销售人员,确认了他们的报价,每套ORACLE按CPU付费,一个CPU报价约26万,如果你一台服务器有4个CPU,则26*4=104万(一台服务器)。我们有10台服务器,经费不够的情...
- 一起免费考 MySQL OCP 认证啦(mysql ocp考试大纲)
-
前言:在1995年,首个MySQL版本发布,为庆祝MySQL诞辰30周年,OracleUniversity在限定期间内推出了多个MySQL的免费培训课程与认证,其中也包括My...
- Navicat推出免费数据库管理软件Premium Lite
-
IT之家6月26日消息,Navicat推出一款免费的数据库管理开发工具——NavicatPremiumLite,针对入门级用户,支持基础的数据库管理和协同合作功能。▲Navicat...
- Linux服务器配置DNS解析(linux dns配置服务器)
-
环境说明CentOS等Linux操作系统基本是一样的...
- 搭建内网的DNS服务器(搭建内网dns解析服务器)
-
1.安装dnsmasq#centosyum-yinstalldnsmasq...
- # 更换手机热点后secureCRT无法连接centOS7系统
-
#更换手机热点后secureCRT无法连接centOS7系统##一、问题描述某些情况下,我们可能使用手机共享热点而给电脑联网。本来用一个手机热点共享网络时,SecureCRT可以正常连接到Cent...
- VMware与CentOS安装配置指南(vmware workstation安装centos7)
-
以下是一份详细的VMware虚拟机安装、配置及CentOS系统安装配置的指南,适合新手逐步操作:一、VMware虚拟机安装与配置...
- CentOS7安全加固的一份整理规划建议
-
◆更新系统:及时更新CentOS7操作系统版本和安全补丁,确保系统以最新状态运行。◆关闭不必要的服务:在运行系统时,应关闭不需要的服务和端口,以减少系统暴露的攻击面。◆安装防火墙:使用iptables...
- DNS从入门到放弃系列(3)(dns f1)
-
见字如面,我是小斐,今天文章展开说明bind9中named.conf...
你 发表评论:
欢迎- 一周热门
- 最近发表
- 标签列表
-
- navicat无法连接mysql服务器 (65)
- 下横线怎么打 (71)
- flash插件怎么安装 (60)
- lol体验服怎么进 (66)
- ae插件怎么安装 (62)
- yum卸载 (75)
- .key文件 (63)
- cad一打开就致命错误是怎么回事 (61)
- rpm文件怎么安装 (66)
- linux取消挂载 (81)
- ie代理配置错误 (61)
- ajax error (67)
- centos7 重启网络 (67)
- centos6下载 (58)
- mysql 外网访问权限 (69)
- centos查看内核版本 (61)
- ps错误16 (66)
- nodejs读取json文件 (64)
- centos7 1810 (59)
- 加载com加载项时运行错误 (67)
- php打乱数组顺序 (68)
- cad安装失败怎么解决 (58)
- 因文件头错误而不能打开怎么解决 (68)
- js判断字符串为空 (62)
- centos查看端口 (64)