Qt窗口部件——QWidget

  • QWidget类是所有用户界面对象的基类,被称为基础窗口部件。
  • QWidget继承子QObject类和QPaintDevc类。
  • QObject类:所有支持Qt对象模型的对象的基类。
  • QPaintDevc类:所有可以绘制的对象基类。

1. 窗口部件与子部件

  • 新建空的qmake项目,名称为mywidget1,添加main.cpp并编辑代码:
#include <QtWidgets>
//窗口与子部件
int main(int argc,char * argv[])
{
    QApplication a(argc,argv);
    //新建QWidget类对象,默认parent参数是0,所以它是个窗口
    //QWidget * widget=new QWidget();
    //QWidget * widget=new QWidget(0,Qt::Dialog);//对话框类型
    QWidget * widget=new QWidget(0,Qt::Dialog|Qt::FramelessWindowHint);//产生一个没有边框的窗口
    //设置窗口标题
    widget->setWindowTitle(QObject::tr("我是widget"));
    //新建QLabel对象,默认parent参数是0,所以它是个窗口
    //QLabel * label=new QLabel();
    //QWidget * widget=new QWidget(0,Qt::Dialog);//欢迎窗口类型
    QLabel * label=new QLabel(0,Qt::SplashScreen|Qt::WindowStaysOnTopHint);//使窗口停留在所有窗口上面
    label->setWindowTitle(QObject::tr("我是label"));
    //设置要显示的信息
    label->setText(QObject::tr("label:我是窗口"));
    //改变部件大小,显示出完整的内容
    label->resize(260,20);
    //label2指定父窗口为widget,所以不是窗口
    QLabel * label2=new QLabel(widget);
    label2->setText(QObject::tr("label2:我不是独立的窗口,只是widget的子部件"));
    label2->resize(260,20);
    //显示
    label->show();
    widget->show();


    int ret=a.exec();
    delete label;
    delete widget;
    //这里并没有对label2进行释放,是因为父对象widget销毁时会自动销毁子对象
    return ret;
}

在这里插入图片描述

  • Widget就是窗口部件,它是Qt中建立用户界面的主要元素。像主窗口、对话框、标签、按钮、文本输入框等都是窗口部件。
  • Qt中把没有嵌入到其他部件中的部件称为窗口,一般窗口都有边框和标题栏。窗口就是没有父部件的部件,所以又称为顶级部件。与之相对的是非窗口部件,又称为子部件。

2. 窗口类型

  • QWidget(QWidget *parent = Q_NULLPTR, Qt::WindowFlags f = Qt::WindowFlags())
  • QWidget的构造函数有两个参数,前面1个是父窗口部件,默认值是0,表明没有父窗口;后面的参数是指窗口类型。
  • Qt::WindowType枚举类型用来为部件指定各种窗口系统属性,比如 f=0 表明窗口类型为Qt::Widget,这是QWidget的默认类型。
  • Qt::WindowType还包括很多类型,如Qt::Dialog和Qt::SplashScreen
QWidget * widget=new QWidget(0,Qt::Dialog);//对话框类型
QWidget * widget=new QWidget(0,Qt::Dialog);//欢迎窗口类型

在这里插入图片描述

QWidget * widget=new QWidget(0,Qt::Dialog|Qt::FramelessWindowHint);//产生一个没有边框的窗口
QLabel * label=new QLabel(0,Qt::SplashScreen|Qt::WindowStaysOnTopHint);//使窗口停留在所有窗口上面

在这里插入图片描述

  • QWidget中还有一个 setWindowState() 函数可以直接设置窗口的状态。包括:
    • 最大化 Qt::WindowMaximized
    • 最小化 Qt::WindowMinimized
    • 全屏显示 Qt::WindowFullScreen
    • 活动窗口 Qt::WindowActive
    • 默认值为正常状态 Qt::WindowNoState

3. 窗口几何布局

  • 对于一个窗口,往往要设置它的大小和运行时出现的位置,这就是窗口几何布局。
  • 前面的例子中widget默认的大小就是它所包含的子部件label2的大小,而widget和label出现在窗口上的位置也是不确定的。
  • 对于窗口的大小和位置,根据是否包含边框和标题栏两种情况,要用不同的函数来获取。
  • 在帮助中搜索Window and Dialog Widgets:
    在这里插入图片描述
  • 包含框架:x(), y(), frameGeometry(), pos(), move()
  • 不包含框架:geometry(), width(), height(), rect(), resize()

4. qDebug调试程序

  • 非常好用!
#include <QApplication>
#include <QWidget>
#include <QDebug>
int main(int argc,char * argv[])
{
    QApplication a(argc,argv);
    QWidget widget;
    widget.resize(400,300);
    widget.move(200,100);
    widget.show();
    int x=widget.x();
    qDebug("X: %d",x);//C的形式
    int y=widget.y();
    qDebug("Y: %d",y);
    QRect geometry=widget.geometry();
    QRect frame=widget.frameGeometry();
    qDebug()<<"geometry"<<geometry<<"frame"<<frame<<endl;//流的形式必须添加头文件<QDebug>
    return a.exec();
}

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

MechMaster

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值