基础窗口部件QWidget
#include<QApplication>//QT每一个类都有一个与之同名的头文件,这一点有点像java
#include<QDialog>
#include<QLabel>
#include"ui_helloworld.h"//导入ui文件的头文件
int main(int argc,char *argv[]){
QApplication a(argc,argv);
QWidget * widget=new QWidget(nullptr,Qt::Dialog);//新建类对象,它是一个窗口
//nullptr表示父窗口指针为无,既它是一个独立窗口,Qt::Dialog表示窗口类型
widget->setWindowTitle("我是widegt");//设置窗口标题
QLabel * label=new QLabel(nullptr,Qt::SplashScreen | Qt::WindowStaysOnTopHint);//它是一个窗口
//Qt::WindowStaysOnTopHint表示让该窗口停留在所有窗口的上面
label->setWindowTitle("我是label");
label->setText("你好,我是label");
label->resize(180,200);//设置窗口大小
QLabel * label2=new QLabel(widget);//参数是widget,既指定widget为父窗口,是父窗口的一个子部件,不是一个窗口
label2->setText("我不是独立窗口,是widget的子部件");
label2->resize(250,20);
widget->show();
label->show();
int e=a.exec();
delete widget;//销毁父对象的时候自动销毁子对象,所以label2也在这里被销毁了
delete label;
return e;//让a进入事件循环,而不是退出程序
}
对话框QDialog
模态对话框
点不了其他的功能和界面。这种对话框就称为模态对话框。还有一些能够操作其他的窗口属于非模态对话框。
Qt中的QWidget对象自带setWindowModality(type)方法,用以设置窗口模态类型。参数type可选为一下三种:
- Qt:NonModal非模态:正常模式
- Qt:WindowModal半模态:窗口级模态对话框,阻塞父窗口、父窗口的父窗口及兄弟窗口。
- Qt…ApplicationModal模态:应用程序级模态对话框,阻塞整个应用程序的所有窗几。
一个例子:
helloworld代码:
#include "helloworld.h"
#include "ui_helloworld.h"
#include<QDialog>
helloworld::helloworld(QWidget *parent)
: QDialog(parent)
, ui(new Ui::helloworld)
{
ui->setupUi(this);
QDialog dialog(this);
dialog.exec();//让dialog成为模态对话框,带有阻塞功能,没办法对其他窗口进行操作
//当关闭对话框后,代码才会接着往下执行,应用程序输出窗口才开始输出调试信息。
}
helloworld::~helloworld()
{
delete ui;
}
main文件代码:
#include<QApplication>//QT每一个类都有一个与之同名的头文件,这一点有点像java
#include<QDialog>
#include<QLabel>
#include"ui_helloworld.h"//导入ui文件的头文件
#include"helloworld.h"
int main(int argc,char *argv[]){
QApplication a(argc,argv);
QWidget * w=new QWidget();
helloworld* he=new helloworld(w);
w->show();
int e=a.exec();
return e;//让a进入事件循环,而不是退出程序
}
非模态对话框可以对其他窗口进行操作。