龙空技术网

QMenuBar、QMenu、QDialog

QT教程 98

前言:

此时朋友们对“ubuntu隐藏顶部状态栏”大概比较珍视,朋友们都需要剖析一些“ubuntu隐藏顶部状态栏”的相关知识。那么小编在网摘上收集了一些有关“ubuntu隐藏顶部状态栏””的相关知识,希望你们能喜欢,你们一起来了解一下吧!

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开发教程学习资料,点击下方链接莬费领取↓↓,先码住不迷路~】

点击这里:Qt资料领取(视频教程+文档+代码+项目实战)

原文链接:

标签: #ubuntu隐藏顶部状态栏 #模态对话框和非模态对话框区别 #ubuntu 多屏拼接