2.2 QWidget

简介: 2.2 QWidget

本节小豆君就来讲述我们最重要的窗口类QWidget,QWidget是所有GUI控件的基类,所以掌握QWidget的用法是学习Qt的重中之重。

在进入正题之前,小豆君先讲一下我自己阅读Qt类的方法,现在就拿QWidget这个类来讲解。

2.2.1 阅读QWidget方法

在帮助文档中搜索QWidget,打开QWidget帮助文档。

  1. 阅读详细描述(Detailed Description):这部分内容告诉了我们QWidget是做什么的,QWidget都有哪些属性和方法,我们应如何使用这个类以及和这个类相关的其它类。
  2. 阅读类属性(Properties):在最熟悉的陌生人——你真的了解面向对象吗?文章中,我提到如何理解和创建一个类。一个事物之所以被抽象为某个类,是因为它拥有特定的属性,或者说它拥有什么样的属性就决定了它是什么,从而它就具有了什么样的功能,所以在看一个类时就需要看它的根本,而根本就是属性,同时,看属性的数据类型也是帮助理解属性的好方法
  3. 鼠标点击某个属性,查看属性对应的接口,也许有的属性不太理解,但是通过介绍和对应接口会帮助理解。


2.2.2 QWidget属性

新建窗口项目WidgetProperty,类名同为WidgetProperty,选择基类QWidget。

2.2.2.1 QWidget的几何属性

01ebd755782e4c909dad0843d3544acf.jpeg


  • frameGeometry,frameSize,x,y,pos:框架的几何区域和大小,框架指窗口的最外层。
  • geometry,width,height,size,rect:内部绘图区域的几何框架。

在WidgetProperty的构造函数中添加代码:

WidgetProperty::WidgetProperty(QWidget *parent) :
    QWidget(parent),
    ui(new Ui::WidgetProperty)
{
    ui->setupUi(this);
    setGeometry(0, 0, 400, 300);
}

运行代码,窗口的绘图区域左上角和屏幕的左上角刚好吻合,而标题栏都跑到了屏幕外面。

2.2.2.2 窗口标识

windowFlags属性。

我们还可以通过调用setWindowFlags(Qt::WindowFlags)来设置窗口类型和窗口标识。

在WidgetProperty构造函数后面继续添加代码

move(100, 100);
setWindowFlags(Qt::CustomizeWindowHint|Qt::WindowStaysOnTopHint);

运行程序,我们看到窗口的标题栏已经被隐藏掉了,并且当你点击其他外部窗口时,本窗口仍然在最屏幕最上面。

在WidgetProperty中的构造函数中,你可以调用此函数,通过传入不同的值来查看在不同窗口标识下窗口是如何表现的,这些值都可以在帮助文档中找到。

如果想省点事,可以在Qt的示例程序中查找关键字“window flags example”,编译并运行程序,看每个窗口标识的作用。

下面我总结了在实际项目中可能经常用到的标识

常用窗口类型:

Qt::Widget 默认窗口Qt::Dialog 对话框Qt::SplashScreen 启动窗口

常用窗口标识:

Qt::SplashScreen 在还没有展示出主界面前的启动画面Qt::FramelessWindowHint 隐藏标题栏,并且去掉窗口的边框,窗口不能移动和缩放。Qt::CustomizeWindowHint 隐藏标题栏,不会去掉窗口的边框,窗口不能移动,但可以缩放。Qt::WindowStaysOnTopHint 使窗口始终处于最顶部。类似于播放器中的总在最前功能。

2.2.2.3 其他属性

  • acceptDrops:接受放下事件。
  • autoFillBackground:如果将这个属性设置为true,Qt将在调用paintEvent之前填充背景。可以使用调色板来进行填充。
  • enabled:窗口是否可用,如果被设置为false,则不会接收用户操作,同时其子控件也不接收用户操作。
  • focus:是否获得焦点。
  • modal:是否为模态窗口,关于模态窗口,我会在QDialog中讲解。
  • mouseTracking:是否跟踪鼠标,默认为不跟踪。默认情况时,当鼠标按下后才会跟踪鼠标移动,如果被设置为true,在鼠标不按下时,也跟踪鼠标移动。
  • palette:调色板。
  • toolTip:鼠标悬停时的提示信息。
  • toolTipDuration:鼠标悬停时显示提示信息持续时间。
  • visible:是否可见。
  • windowOpacity:窗口透明度0-1。
  • windowTitle:窗口标题。

2.2.3 函数调用举例

下面我们来看个例子,构造函数中换成如下代码

WidgetProperty::WidgetProperty(QWidget *parent) :
    QWidget(parent),
    ui(new Ui::WidgetProperty)
{
    ui->setupUi(this);
    //设置窗口的背景颜色
    setAutoFillBackground(true);
    QPalette pa = this->palette();
    pa.setBrush(QPalette::Background, QBrush(Qt::green));
    setPalette(pa);
    //设置窗口透明度
    setWindowOpacity(0.9);
    //设置窗口标题
    setWindowTitle("窗口属性");
    //设置悬停提示
    setToolTip("悬停");
    //重设大小
    resize(600, 400);
    //移动
    move(0, 0);
}

运行程序

01ebd755782e4c909dad0843d3544acf.jpeg


好了,今天就到这里,我们下期再见。

如果你想第一时间看到我的技术分享,就赶快关注吧。

更多分享请关注微信公众号:小豆君,只要关注,便可加入小豆君为大家创建的C++\Qt交流群,方便讨论学习。

相关文章
|
芯片
毕业设计 基于51单片机的手机蓝牙控制8位LED灯亮灭设计
毕业设计 基于51单片机的手机蓝牙控制8位LED灯亮灭设计
396 0
|
Python
pycharm使用debug的时候遇到断点不停的问题
pycharm使用debug的时候遇到断点不停的问题
1601 0
|
5月前
|
数据采集 人工智能 自然语言处理
2025数字人竞争力榜单发布:实时交互数字人全面进化
在数字经济迅速发展的背景下,2025年中国数字人企业的崛起为各行业带来了新的机遇与挑战。本文将深入分析不同数字人企业的特点与全栈技术的应用,提供选型指南,帮助企业识别合适的合作伙伴,从而提升市场竞争力,实现数字化转型与创新发展。
278 8
|
机器学习/深度学习 人工智能 安全
基于YOLOv8的路面缺陷(路面裂缝、井盖、坑洼路面)识别项目【完整源码数据集+PyQt5界面+完整训练流程+开箱即用!】
本项目基于YOLOv8与PyQt5,打造路面缺陷检测系统,支持裂缝、井盖、坑洼识别,涵盖图片、视频、摄像头等多种输入方式。提供完整训练数据、预训练模型及图形化界面,开箱即用,本地运行,方便二次开发。适用于智慧城市建设与道路安全巡检,推动AI检测技术实际应用。项目包含源码、数据集、训练代码,支持科研学习与工程实战。
|
存储 XML 编解码
PyMuPDF 1.24.4 中文文档(三)(2)
PyMuPDF 1.24.4 中文文档(三)
484 0
PyMuPDF 1.24.4 中文文档(三)(2)
|
9月前
|
人工智能 数据可视化 API
2025大语言模型部署实战指南:从个人笔记本到企业级服务的全栈方案
本文深度解析四大主流大模型部署框架,覆盖个人开发、边缘设备与高并发生产场景。从Ollama、llama.cpp到vLLM与LM Studio,助你精准匹配技术方案,实现高效部署。
|
网络协议 安全 Linux
Kali渗透测试:拒绝服务攻击(一)
Kali渗透测试:拒绝服务攻击(一)
899 2
|
SQL 关系型数据库 Linux
PostgreSQL基础之psql的使用
PostgreSQL基础之psql的使用
1534 0
|
前端开发
React/Umi中实现移动端滑动图片验证功能
React/Umi中实现移动端滑动图片验证功能
570 0
|
安全 应用服务中间件 nginx
Docker安全性:最佳实践和常见安全考虑
Docker 的快速发展和广泛应用使其成为现代应用开发的热门选择,然而,容器环境的安全性也受到关注。本文将深入研究 Docker 安全性的最佳实践,包括容器镜像安全、容器运行时安全、网络安全等方面,并提供丰富的示例代码,帮助读者全面了解如何确保 Docker 环境的安全性。

热门文章

最新文章