对话框(1)

来源:互联网 发布:量子网络代替互联网 编辑:程序博客网 时间:2024/06/01 09:33

参考文献:https://www.devbean.net/2012/09/qt-study-road-2-dialogs-intro/

对话框通常会是一个顶层窗口,出现在程序最上层,用于实现短期任务或者简洁的用户交互。尽管 Ribbon 界面的出现在一定程度上减少了对话框的使用几率。

Qt 中使用QDialog类实现对话框。就像主窗口一样,通常会设计一个类继承QDialog。
QDialog(及其子类,以及所有Qt::Dialog类型的类)的对于其 parent 指针都有额外的解释:如果 parent 为 NULL,则该对话框会作为一个顶层窗口,否则则作为其父组件的子对话框(此时,其默认出现的位置是 parent 的中心)。
顶层窗口与非顶层窗口的区别在于,顶层窗口在任务栏会有自己的位置,而非顶层窗口则会共享其父组件的位置。

Qt 支持模态对话框和非模态对话框。其中,Qt 有两种级别的模态对话框:应用程序级别的模态和窗口级别的模态,默认是应用程序级别的模态。
应用程序级别的模态是指,当该种模态的对话框出现时,用户必须首先对对话框进行交互,直到关闭对话框,然后才能访问程序中其他的窗口。
窗口级别的模态是指,该模态仅仅阻塞与对话框关联的窗口,但是依然允许用户与程序中其它窗口交互。

使用QDialog::open()实现窗口级别的模态对话框,
使用QDialog::exec()实现应用程序级别的模态对话框,
使用QDialog::show()实现非模态对话框。

#include <QtWidgets/QStatusBar>#include <QtWidgets/QToolBar>#include <QtWidgets/QSpinBox>#include <QtWidgets/QLayout>  #include "mywindow.h"MyWindow::MyWindow(QWidget *parent)    : QMainWindow(parent){    ui.setupUi(this);    setWindowTitle(tr("Main Window"));   //设置主窗口的标题    openAction = new QAction(QIcon("C:/Users/Administrator/Desktop/MyWindow/MyWindow/images/doc-open"), tr("&Open..."), this);    openAction->setShortcuts(QKeySequence::Open);    openAction->setStatusTip(tr("Open an existing file")); //setStatusTip()则实现了当用户鼠标滑过这个 action 时,会在主窗口下方的状态栏显示相应的提示。    connect(openAction, &QAction::triggered, this, &MyWindow::open);    QMenu *file = menuBar()->addMenu(tr("&File"));    file->addAction(openAction);    QToolBar *toolBar = addToolBar(tr("&File"));    toolBar->addAction(openAction);    statusBar(); //状态栏}MyWindow::~MyWindow(){}void MyWindow::open(){    ////在栈上创建    ////QMessageBox::information(this, tr("Information"), tr("Open"));    //QDialog dialog();由于我们没有设置对话框的 parent 指针,会看到在任务栏出现了对话框的位置    //QDialog dialog(this);设置对话框的 parent 指针,会看到在任务栏没有了对话框的位置    //dialog.setWindowTitle(tr("Hello, dialog!"));    ////dialog.exec();  //模态    //dialog.show();   //非模态  一闪而过    ////在堆上创建 非模态    //QDialog *dialog = new QDialog;    //dialog->setAttribute(Qt::WA_DeleteOnClose); //setAttribute()函数设置对话框关闭时,自动销毁非模态对话框。    //dialog->setWindowTitle(tr("Hello, dialog!"));    //dialog->show();    //在堆上创建 模态    QDialog *dialog = new QDialog;    dialog->deleteLater();   //销毁模态对话窗    dialog->setWindowTitle(tr("Hello, dialog!"));    dialog->exec();}
原创粉丝点击