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交流群,方便讨论学习。

相关文章
|
存储 C++
14 QT - QMainWindow
14 QT - QMainWindow
51 0
|
前端开发 数据可视化 C++
Qt 之 QWidget QLabel
Qt 之 QWidget QLabel
117 0
WK
|
2月前
QMainWindow
QMainWindow 是 Qt 中用于创建主窗口应用程序的类,支持菜单栏、工具栏、中央部件、停靠部件和状态栏等组件。菜单栏用于添加菜单项和子菜单;工具栏显示常用菜单项,可插入其他窗口部件;中央部件位于主窗口中心,实现主要功能;停靠部件可停靠在窗口四周,用于设置功能部件;状态栏显示程序状态信息。QMainWindow 提供了多种函数和高级用法,如自定义工具栏、多文档接口和快捷键设置。
WK
42 5
WK
|
2月前
|
C++ 开发者
QDialog
QDialog是Qt框架中的对话框基类,支持模态和非模态两种模式。它提供了丰富的函数,如exec()、show()、accept()和reject(),用于控制对话框的行为。QDialog可以包含多种控件,用于收集用户输入或显示信息。此外,Qt还提供了一些常用的标准化对话框,如QColorDialog、QFileDialog、QFontDialog、QInputDialog和QMessageBox,方便开发者快速实现特定功能。
WK
39 2
WK
|
2月前
|
数据可视化 开发者 容器
QWidget类
QWidget 是 Qt 框架中的基础类,用于创建用户界面的可视化组件。它是所有 UI 组件的基类,提供绘制、布局、事件处理、样式设置和部件通信等功能。常见子类包括 QMainWindow、QDialog、QPushButton 等,支持灵活的窗口管理和丰富的用户交互。
WK
35 3
|
3月前
|
iOS开发 MacOS
(11)QWidget的使用(two)
本文介绍了如何在Qt框架中使用QWidget类来设置和获取窗口的图标和标题,以及如何进行窗口状态和不透明度的设置。
32 3
WK
|
2月前
|
C++ 开发者
QPushButton
QPushButton 是 Qt 框架中的一个控件,用于创建可按压的按钮。它可以作为独立控件或嵌入其他窗口中,常用于添加按钮并绑定点击信号。支持设置文本、图标、快捷键等属性,可通过样式表自定义外观。示例代码展示了如何创建带有图标的按钮并连接点击信号。
WK
55 1
|
3月前
(10)QWidget的使用(one)
文章介绍了QWidget的使用,包括如何获取和设置QWidget的大小和位置、设置窗口固定大小、限定窗口大小、坐标系统转换、内容边距、鼠标指针形状以及自定义光标的使用。
52 0
(10)QWidget的使用(one)
|
5月前
Qt绘图之QWidget
Qt绘图之QWidget
99 1
|
7月前
Qt之QMainWindow
Qt之QMainWindow