Qt窗口小部件类QWidget学习

1. 简介

QWidget类:

QWidget类是所有用户界面对象的基类。它从窗口系统接收鼠标,键盘和其他事件,并将其自身绘制在屏幕上。

pro文件 QT+= widgets

头文件 #include <QWidget>

同时继承:QObject 类 和 QPaintDevice

  • QWidget:类是所有用户界面对象的基类。

  • QObject:是所有Qt类的基类。提供了信号-槽的机制。

  • QPaintDevice:可以使用QPainter绘制的对象的基类。

image-20210505202936859

2. 构造函数

QWidget::QWidget(
   QWidget *parent = Q_NULLPTR,
   Qt::WindowFlags f = Qt::WindowFlags()
);

参数:

parent:如果是 nullptr,则小部件将成为一个主窗口,否则小部件将成为 parent内的子窗口删除其父窗口时,将删除他的小部件。

f:由任何窗口标志的按位“或”组成的值。Qt::Window Flags()就是构造了一个模板类对象默认是Qt::Widget

enum WindowType {
       Widget = 0x00000000,
       Window = 0x00000001,
       Dialog = 0x00000002 | Window,
       Sheet = 0x00000004 | Window,
       Drawer = Sheet | Dialog,
       Popup = 0x00000008 | Window,
       Tool = Popup | Dialog,
       ToolTip = Popup | Sheet,
       SplashScreen = ToolTip | Dialog,
       Desktop = 0x00000010 | Window,
       SubWindow = 0x00000012,
       ForeignWindow = 0x00000020 | Window,
       CoverWindow = 0x00000040 | Window,

       WindowType_Mask = 0x000000ff,
       MSWindowsFixedSizeDialogHint = 0x00000100,
       MSWindowsOwnDC = 0x00000200,
       BypassWindowManagerHint = 0x00000400,
       X11BypassWindowManagerHint = BypassWindowManagerHint,
       FramelessWindowHint = 0x00000800,
       WindowTitleHint = 0x00001000,
       WindowSystemMenuHint = 0x00002000,
       WindowMinimizeButtonHint = 0x00004000,
       WindowMaximizeButtonHint = 0x00008000,
       WindowMinMaxButtonsHint = WindowMinimizeButtonHint | WindowMaximizeButtonHint,
       WindowContextHelpButtonHint = 0x00010000,
       WindowShadeButtonHint = 0x00020000,
       WindowStaysOnTopHint = 0x00040000,
       WindowTransparentForInput = 0x00080000,
       WindowOverridesSystemGestures = 0x00100000,
       WindowDoesNotAcceptFocus = 0x00200000,
       MaximizeUsingFullscreenGeometryHint = 0x00400000,

       CustomizeWindowHint = 0x02000000,
       WindowStaysOnBottomHint = 0x04000000,
       WindowCloseButtonHint = 0x08000000,
       MacWindowToolBarButtonHint = 0x10000000,
       BypassGraphicsProxyWidget = 0x20000000,
       NoDropShadowWindowHint = 0x40000000,
       WindowFullscreenButtonHint = 0x80000000
   };

3. 成员函数

成员函数用法
setToolTipwidget设置提示
setWindowlcon设置窗口图标
setwindowState设置窗口状态
setWindowOpacity设置窗口透明度
setWindowTitle设置窗口标题
setEnabled是否禁用窗口
show显示窗口
hide隐藏窗口
close关闭窗口
frameGeometry获取相对父窗口的整个窗口矩形,包括边框
frameSize获取整个窗口长宽,包括边框
pos获取相对父窗口的整个窗口的左上角坐标
x获取相对父窗口的整个窗口的左上角x坐标
y获取相对父窗口的整个窗口的左上角y坐标
geometry获取相对父窗口的客户区矩形,不包括边框
setGeometry设置相对父窗口的客户区矩形,不包括边框
size客户区的长宽,不包括边框
resize修改客户区的长宽,不包含边框
width客户区的长,不包括边框
height客户区的宽,不包括边框
rect相当于(0,0,width(),height())
setFixedSize设置客户区固定长宽,并且窗口大小无法拉升

image-20210505204555551

4. 示例代码

#include <QApplication>
#include <QWidget>
#include <QDebug>

int main(int argc, char *argv[])
{
    //基于Widget的GUI程序需要使用QApplication的实例
    QApplication a(argc, argv);
    
    QWidget  w;
    //设置窗口标题
    w.setWindowTitle("窗口");
    //设置窗口透明度范围0-1
    w.setWindowOpacity(1);
    //设置窗口提示
    w.setToolTip("这是提示");
    
    //设置Widget背景色
    QPalette pal=w.palette();
    pal.setColor(QPalette::Background, Qt::red);
    w.setPalette(pal);
    
    //设置 固定大小,无法调整
    w.setFixedSize(300,300);
    
    //显示窗口
    w.show();
    
    //设置客户区域的矩形
    //w.setGeometry(0,0,300,300);
    
    //仅设置客户区的长宽
    //w.resize(300,300);

    {//获取整个窗口的一些尺寸
        qDebug()<<"整个窗口矩形"<< w.frameGeometry()<<endl;
        qDebug()<<"整个窗口长宽"<< w.frameSize()<<endl;
        qDebug()<<"整个窗口左上坐标"<< w.pos()<<w.x()<<w.y()<<endl;
    }
    
    {//获取客户区的一些尺寸
        qDebug()<<"客户区的矩形"<< w.geometry()<<endl;
        qDebug()<<"客户区的矩形,以0,0为左上角"<< w.rect()<<endl;
        qDebug()<<"客户区的长宽"<< w.size()<< w.width()<<w.height() << endl;
        qDebug()<<"客户左上坐标"<< w.geometry().x()<< w.geometry().y() <<endl;
    }
    
    return a.exec();
}

执行结果:

image-20210505205510032

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

超级D洋葱

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

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

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

打赏作者

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

抵扣说明:

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

余额充值