本文学习自:
《Qt Creato快速入门》
#include "widget.h"
#include <QApplication>int main(int argc, char *argv[])
{QApplication a(argc, argv);Widget w;w.show();return a.exec();
}
1.
#include "widget.h"
#include "ui_widget.h"
#include <QDialog>
Widget::Widget(QWidget *parent) :QWidget(parent),ui(new Ui::Widget)
{ui->setupUi(this);QDialog dialog(this);dialog.resize(550,550);dialog.setStyleSheet("background-color:green;");dialog.show();
}Widget::~Widget()
{delete ui;
}
这样写dialog会一闪而逝的。
因为dialog的生命周期很短,构造函数完成后,它就析构了。
2.
#include "widget.h"
#include "ui_widget.h"
#include <QDialog>
Widget::Widget(QWidget *parent) :QWidget(parent),ui(new Ui::Widget)
{ui->setupUi(this);QDialog *dialog = new QDialog(this);dialog->resize(550,550);dialog->setStyleSheet("background-color:green;");dialog->show();
}
写成这样的话,会显示dialog,但不是模态的。
什么是模态对话框:
在关闭它之前,不能再与同一个应用程序的其他窗口进行交互。
3.
#include "widget.h"
#include "ui_widget.h"
#include <QDialog>
Widget::Widget(QWidget *parent) :QWidget(parent),ui(new Ui::Widget)
{ui->setupUi(this);QDialog dialog(this);dialog.resize(550,550);dialog.setStyleSheet("background-color:green;");dialog.exec();
}Widget::~Widget()
{delete ui;
}
写成这样的话,dialog是模态的。
而且,因为使用了exec()方法,当dialog关闭后,程序才继续向下执行。
exec():当对话框关闭时,函数返回值,程序向下进行。
show():调用完函数后,立即将控制权交给调用者,程序继续向下进行。
4.使用show()也可以建立模态对话框,需要在前面使用setModel()函数。
#include "widget.h"
#include "ui_widget.h"
#include <QDialog>
Widget::Widget(QWidget *parent) :QWidget(parent),ui(new Ui::Widget)
{ui->setupUi(this);QDialog dialog(this);dialog.resize(550,550);dialog.setStyleSheet("background-color:green;");dialog.setModal(true);dialog.show();
}Widget::~Widget()
{delete ui;
}
这样写的话,dialog是模态窗口,但还是一闪而逝。
#include "widget.h"
#include "ui_widget.h"
#include <QDialog>
Widget::Widget(QWidget *parent) :QWidget(parent),ui(new Ui::Widget)
{ui->setupUi(this);QDialog *dialog = new QDialog(this);dialog->resize(550,550);dialog->setModal(true);dialog->setStyleSheet("background-color:green;");dialog->show();
}Widget::~Widget()
{delete ui;
}
这样写的话,dialog是模态窗口,先显示dialog,关闭后,才显示widget。
5.
setWindowModel:
参数:设置模态对话框要阻塞的窗口类型
Qt::NonModel:不阻塞任何窗口
Qt::WindowModel:阻塞它的父窗口和所有祖先窗口和它们的子窗口
Qt::ApplicationModel(阻塞整个应用程序的所有窗口)
默认是Qt::ApplicationModel
---
学海无涯,加油!