QT Creator学习笔记——窗口部件QWidget、窗口类型区分

一 窗口部件

基础窗口部件QWidget类——是所有用户界面对象的基类,窗口和控件都是直接或间接继承自 QWidget,下面我们来看一个很简单的例子:

窗口部件(Widget)——简称部件,是QT中建立界面的主要元素,QT中把没有嵌入到其他部件部件成为窗口,一般的窗口都有边框,标题栏,窗口是指程序的整体界面,可以包含标题栏、菜单栏、工具栏、关闭按钮、最小化按钮、最大化按钮等;控件是指按钮、复选框、文本框、表格、进度条等这些组成程序的基本元素。一个程序可以有多个窗口,一个窗口也可以有多个控件。(但其实控件有时候就是窗口)

以上demo的代码:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
#include "dialog.h"
#include <QApplication>
#include <QtWidgets>
int  main( int  argc,  char  *argv[])
{
     QApplication a(argc, argv);
 
     QWidget *widget= new  QWidget();
     //新建QWidget类对象,默认parent是0,所以它是个窗口。
     widget->setWindowTitle(QObject::tr( "我是widget" ));
     QLabel *label= new  QLabel();
     label->setWindowTitle(QObject::tr( "我是label" ));
 
     label->setText(QObject::tr( "label:我是个窗口" ));
     label->resize(180,20);
     //指定了父窗口为widget,所以不是窗口
     QLabel *label2= new  QLabel(widget);
     label2->setText(QObject::tr( "label2:我不是独立窗口,只是widget的子部件" ));
 
     label2->resize(250,20);
     label->show();
     widget->show();
     int  ret =a.exec();
     delete  label;
     delete  widget;
     return  ret;
}

 二 窗口类型

QWidget的构造函数中有两个参数:QWidget* parent=0 和 Qt::WidowFlags f=0,前面的parent指的是父窗口部件,默认为哦,表明没有父窗口,而后面的f参数是Qt::WindowFlags类型,是Qt::WindowType枚举类型值或者组合。0表示Qt::Widget,默认的类型。

QMainWindow、QDialog 、QWidget三个类就是用来创建窗口的,可以直接使用也可以继承后再使用,区别如下:

如果是主窗口,就使用 QMainWindow;

如果是对话框,就是用 QDialog;

如果不确定,或有可能作为顶级窗口,也有可能嵌入到其他窗口中,那么使用 QWidget。

      (1)QMainWindow 窗口可以包含菜单栏、工具栏、状态栏、标题栏等。是最常见的窗口形式,可以作为GUI程序的主窗口。如下图所示:

    (2)QDialog 是对话框窗口的基类。对话框主要用来执行短期任务,或与用户进行互动,它可以是模态的也可以是非模态的。QDialog 没有菜单栏、工具栏、状态栏等,如下所示:

      注意:窗口和控件都继承自 QWidget,如果不为控件指定父对象,它就会被作为窗口处理,这时 setWindowTitle() 和 setWindowIcon() 函数就会生效。请看下面的代码:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
#include <QApplication>
#include <QLabel>
#include <QPushButton>
 
int  main( int  argc,  char  *argv[])
{
     QApplication app(argc, argv);
 
     QLabel label( "这是Label控件" );   //没有父对象
     label.setWindowTitle( "Label控件作为顶级窗口" );
     label.setGeometry(100, 50, 360, 160);
     label.setAlignment(Qt::AlignCenter);
     label.show();
 
     QPushButton btn;   //没有父对象
     btn.setWindowTitle( "PushButton控件作为顶级窗口" );
     btn.setText( "这是个大大的按钮" );
     btn.setGeometry(480, 50, 360, 160);
     btn.show();
 
     return  app.exec();
}

运行代码,会在距离显示器 x=100, y=50 的位置弹出两个窗口,如下图所示:


可以发现:窗口和控件没有绝对的区别,控件也可以成为窗口,这取决于它有没有父对象。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值