对话框(1)

参考文献: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();
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值