Qt6.5类库实例大全:QWidget

哈喽大家好,我是20YC小二!欢迎扫码关注公众号,现在可免费领取《C++程序员》在线视频教程哦!

~下面开始今天的分享内容~


1. QWidget介绍

QWidget 是 Qt 框架中的一个核心类,用于创建图形用户界面(GUI)应用程序的基本可视化元素。它是所有窗口组件类的父类,每个窗口组件都是一个 QWidget。QWidget 类对象常用作父组件或顶级组件使用。QWidget 提供了一套完整的窗口系统,包括窗口管理、事件处理、绘图等功能。

QWidget的主要功能和特点包括:

  • 窗口管理:QWidget 提供了创建和管理窗口的功能,包括设置窗口的大小、位置、标题等属性,以及处理窗口的显示、隐藏、移动等事件。
  • 事件处理:QWidget 支持各种事件处理机制,包括鼠标事件、键盘事件、定时器事件等。开发人员可以通过重写QWidget 的事件处理函数来实现自定义的事件处理逻辑。
  • 绘图功能:QWidget 具有强大的绘图功能,可以在窗口上绘制各种形状、图像和文本。通过重写 QWidget 的paintEvent() 函数,开发人员可以自定义绘制逻辑,实现复杂的图形渲染。
  • 子控件管理:QWidget 可以作为容器组件使用,包含其他子控件。开发人员可以通过添加子控件来创建复杂的用户界面,并通过布局管理器来控制子控件的位置和大小。
  • 信号与槽机制:QWidget 同样支持 Qt 的信号与槽机制,可以定义控件之间的事件传递和处理逻辑。这使得开发人员可以方便地实现控件之间的交互和协作。

QWidget具有窗口管理、事件处理、绘图功能、子控件管理、信号与槽机制等功能。通过合理地使用 QWidget,开发人员可以创建高效且用户友好的图形用户界面,提高应用程序的用户体验。

  • 如何使用:

头文件:#include <QWidget>

cmake:find_package(Qt6 REQUIRED COMPONENTS Widgets)

              target_link_libraries(mytarget PRIVATE Qt6::Widgets)

qmake:QT += widgets

继承于:QWidget 和 QPaintDevice

2. QWidget 单独显示例子:

#include <QWidget>
QWidget * p_widget = new QWidget();
p_widget->setAttribute(Qt::WA_DeleteOnClose, true);p_widget->setWindowTitle("20YC编程社区");
p_widget->show();

3. QWidget 常用信号

// 当窗口标题改变时,发射该信号。
void windowTitleChanged(const QString &title)
// 当窗口图标改变时,发射该信号。
void windowIconChanged(const QIcon &icon)
// 当请求弹开自定义右键菜单时,发射该信号。
void customContextMenuRequested(const QPoint &pos)

4. 自定义显示风格例子

QWidget::setStyleSheet() 函数,用于在 Qt 图形用户界面库中设置窗口控件的样式表。它允许你使用类似于 CSS 的语法来改变部件的外观和感觉。

所有 QWidget 控件及其派生类都支持 setStyleSheet() 函数。

以下例子实现设置红色背景,带 2 像素黑色边框,边框圆角。

/**** 例子: ****/
QWidget * p_widget = new QWidget(this);
p_widget->setGeometry(320, 150, 250, 220);
p_widget->setStyleSheet("background-color: rgb(255, 0, 0);border: 2px solid black; border-radius: 10px;");

5. QWidget 常用属性

  • winId() 窗口ID:
// 访问函数
WId winId() const
  • windowType 窗体类型:
// 访问函数;详细查看 Qt::WindowType 枚举定义
inline Qt::WindowType windowType() const
  • parentWidget 父窗体:
// 访问函数
QWidget *parentWidget() const
void setParent(QWidget *parent)
  • isModal 是否模态窗体:

窗体一般会有二种显示模式:

  • 模态窗体:模态窗体是指在其没有被关闭之前,用户不能与同一个应用程序的其他窗体 进行交互,直到该对话框关闭;模态窗体一般应用在提示用户输入或选择弹出界面。
  • 非模态窗体:非模态窗体是指当窗体被打开时,用户还可以与同一个应用程序的其他窗体进行交互;
// 访问函数;默认 false 非模态窗体
bool isModal() const
  • isEnabled 是否启用状态:

非启用(禁用)的 QWidget 一般会灰色显示,并且不会处理鼠标、键盘等事件。

// 访问函数;默认 true 启用状态
bool isEnabled() const
void setEnabled(bool enabled)
void setDisabled(bool disabled)
  • acceptDrops 是否接受拖放事件:
// 访问函数;默认 false 不接受拖放事件
bool acceptDrops() const
void setAcceptDrops(bool on)
  • x,y 坐标和 width, height 大小:

// 访问函数
int x() const                    // 返回 x
int y() const                    // 返回 y
QPoint pos() const               // 返回 QPoint(x,y)
QSize size() const               // 返回 QSize(width,height)
inline int width() const         // 返回 width
inline int height() const        // 返回 height
inline QRect rect() const        // 返回 QRect(x,y,width,height)
const QRect &geometry() const    // 返回 QRect(x,y,width,height)void move(int x, int y)          // 移动到指定 x,y
void move(const QPoint &pos)     // 移动到指定 QPoint(x,y)
void resize(int w, int h)        // 调整大小 weight,height
void resize(const QSize &size)   // 调整大小 QSize(weight,height)// 设置 x,y,weight,height
inline void setGeometry(int x, int y, int w, int h)
// 设置 QRect(x,y,weight,height)
void setGeometry(const QRect &rect)
  • font 窗体绘制字体:
// 访问函数;详细查看 QFont 类定义
const QFont &font() const
void setFont(const QFont &font)
  • cursor 鼠标光标:
// 访问函数;默认 Qt::ArrowCursor;详细查看 QCursor 类定义
QCursor cursor() const
void setCursor(const QCursor &cursor)/**** 例子 ****/
p_widget->setCursor(Qt::IBeamCursor);
  • windowTitle 窗口标题:
// 访问函数
QString windowTitle() const
void setWindowTitle(const QString &)/**** 例子 ****/
p_widget->setWindowTitle("20YC编程社区");
  • windowIcon 窗口图标:
// 访问函数;详细查看 QIcon 类定义
QIcon windowIcon() const
void setWindowIcon(const QIcon &icon)/**** 例子 ****/
p_widget->setWindowIcon(QIcon("E:/20YC/logo1.png"));

  • focus 焦点:
// 设置焦点
inline void setFocus() { setFocus(Qt::OtherFocusReason); }// 清除焦点
void clearFocus()
// 设置焦点:详细查看 Qt::FocusReason 枚举定义
void setFocus(Qt::FocusReason reason)
// 是否有当前焦点
bool hasFocus() const
// 返回焦点策略;详细查看 Qt::FocusPolicy 枚举定义
Qt::FocusPolicy focusPolicy() const
// 设置焦点策略
void setFocusPolicy(Qt::FocusPolicy policy)
  • visible 窗体可视:
// 设置是否可视
virtual void setVisible(bool visible)
// 设置是否隐藏
void setHidden(bool hidden)
// 显示(可视)
void show()
// 隐藏
void hide()
// 是否可视
bool isVisible() const
// 是否隐藏
inline bool isHidden() const

6. tooltip 工具提示

设置工具提示文本,当鼠标停留在 QWidget 控件区域之上一段时间,自动弹出消息提示框,当鼠标移开自动消失。

所有 QWidget 控件及其派生类,都支持 tooltip 工具提示功能。

// 访问函数;
void setToolTip(const QString &)
QString toolTip() const
void setToolTipDuration(int msec)
int toolTipDuration() const/**** 例子: ****/
p_widget->setToolTip("红色方框演示");

7. QWidget 界面重绘

  • update() 刷新界面:

调用 QWidget::update() 函数不会立即重绘界面,而是把绘制指令放到主消息循环,由主消息循环统一调用绘制窗体

// 重绘整个区域
void update()
// 以下三个函数只重绘指定区域;详细查看 QRect,QRegion 类定义
inline void update(int x, int y, int w, int h)
void update(const QRect &rect)
void update(const QRegion &region)
  • repain() 重绘界面:

调用 QWidget::repaint() 函数会立即重绘界面

为了避免死循环,需要避免在 paintEvent 调用 repaint() 函数

// 重绘整个区域
void repaint()
// 以下三个函数只重绘指定区域;详细查看 QRect,QRegion 类定义
void repaint(int x, int y, int w, int h)
void repaint(const QRect &rect)
void repaint(const QRegion &region)

8. QWidget 窗口控制

// 窗口最小化
void showMinimized()
// 窗口最大化
void showMaximized()
// 全屏显示
void showFullScreen()
// 正常显示
void showNormal()
// 是否最小化
bool isMinimized() const
// 是否最大化
bool isMaximized() const
// 是否全屏显示
bool isFullScreen() const
// 关闭窗口
bool close()

9. QWidget 常用虚函数

派生类重写父类虚函数,可以捕捉父类指定事件。

// 【鼠标按下】事件处理函数
virtual void mousePressEvent(QMouseEvent *event)
// 【鼠标释放】事件处理函数
virtual void mouseReleaseEvent(QMouseEvent *event)
// 【鼠标双击】事件处理函数
virtual void mouseDoubleClickEvent(QMouseEvent *event)
// 【鼠标移动】事件处理函数
virtual void mouseMoveEvent(QMouseEvent *event)
// 【鼠标滚轮】事件处理函数
virtual void wheelEvent(QWheelEvent *event)
// 【键盘按键按下】事件处理函数
virtual void keyPressEvent(QKeyEvent *event)
// 【键盘按键释放】事件处理函数
virtual void keyReleaseEvent(QKeyEvent *event)
// 【窗体重绘】事件处理函数
virtual void paintEvent(QPaintEvent *event)
// 【窗体移动】事件处理函数
virtual void moveEvent(QMoveEvent *event)
// 【窗体尺寸改变】事件处理函数
virtual void resizeEvent(QResizeEvent *event)
// 【窗体关闭】事件处理函数
virtual void closeEvent(QCloseEvent *event)
// 【鼠标右键菜单】事件处理函数
virtual void contextMenuEvent(QContextMenuEvent *event)
// 【窗体显示】事件处理函数
virtual void showEvent(QShowEvent *event)
// 【窗体隐藏】事件处理函数
virtual void hideEvent(QHideEvent *event)

10. QWidget 各种风格显示例子

功能:创建各种显示风格的 QWidget 控件,如设置 QWidget 背景颜色、边框、圆角边框等。

  • .h 头文件源码:

#ifndef WIDGET_H
#define WIDGET_H
#include <QWidget>class Widget : public QWidget
{Q_OBJECT
public:Widget(QWidget *parent = nullptr);~Widget();};
#endif // WIDGET_H
  • .cpp 源文件源码:

#include "widget.h"Widget::Widget(QWidget *parent): QWidget(parent)
{this->setWindowTitle("20YC编程社区");// 设置蓝色背景;QWidget * p_widget1 = new QWidget(this);p_widget1->setGeometry(20, 20, 200, 100);p_widget1->setStyleSheet("background-color: blue;");// 设置带透明度的蓝色背景;// rgba(0, 0, 255, 125):rgb分别表示红色 绿色 蓝色的值;a表示透明度;取值范围:0 - 255QWidget * p_widget2 = new QWidget(this);p_widget2->setGeometry(250, 20, 300, 100);p_widget2->setStyleSheet("background-color: rgba(0, 0, 255, 125);");// 设置绿色背景,带 2 像素黑色边框QWidget * p_widget3 = new QWidget(this);p_widget3->setGeometry(20, 150, 250, 220);p_widget3->setStyleSheet("background-color: rgb(0, 255, 0);border: 2px solid black;");// 设置红色背景,带 2 像素黑色边框,边框圆角QWidget * p_widget4 = new QWidget(this);p_widget4->setStyleSheet("QWidget {background-color: rgb(255, 0, 0);border: 2px solid black; border-radius: 10px;}");p_widget4->setToolTip("红色方框演示");
}Widget::~Widget()
{
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/218889.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

iic应用篇

一.iic的优点 1. IIC总线物理链路简单&#xff0c;硬件实现方便&#xff0c;扩展性非常好&#xff08;1个主机控制器可以根据需求增加从机数量&#xff0c;同时删减从机数量也不会影响总线通信&#xff09;&#xff1b;IIC总线只需要SDA和SCL两条信号线&#xff0c;相比于PCI/…

融了超24亿一分钱不花,放银行吃利息,这家存储创企厉害了

​引言&#xff1a;AI与大模型风起云涌&#xff0c;催生了这匹存储“黑马” 【全球存储观察 &#xff5c; 科技热点关注】 这家总部设在美国的存储初创公司&#xff0c;真的赶上AI与大模型时代的风口了。Vast Data公司最新再次获得E轮融资1.18亿美元&#xff0c;但是这个存储…

【MySQL】:表的约束(上)

表的约束 一.非空约束二.default约束三.列描述四.zerofill五.主键1.单个主键2.复合主键 真正约束字段的是数据类型&#xff0c;但是数据类型约束很单一&#xff0c;需要有一些额外的约束&#xff0c;更好的保证数据的合法性&#xff0c;从业务逻辑角度保证数据的正确性。比如有…

TrustGeo代码理解(一)main.py

代码链接&#xff1a;https://github.com/ICDM-UESTC/TrustGeo 一、导入各种模块和数据库 # -*- coding: utf-8 -*- import torch.nnfrom lib.utils import * import argparse, os import numpy as np import random from lib.model import * import copy from thop import p…

sillyGirl(傻妞机器人)安装以及对接go-cqhttp(2023年12月)

目录 编写的原因 下载傻妞 注意&#xff01;&#xff01;注意&#xff01;&#xff01;&#xff01;注意&#xff01;&#xff01;&#xff01;&#xff01; 同样的下载go-cqhttp 安装以及配置 go-cqhttp 下载screen 创建go-cqhttp窗口 创建sillyGirl窗口 常见错误 编写…

Python玩转PDF:几招搞定的高效操作方法

更多资料获取 &#x1f4da; 个人网站&#xff1a;ipengtao.com 当在Python中操作PDF时&#xff0c;有几种常见的方法&#xff0c;每种方法都有其独特的优点和用例。在本文中&#xff0c;我们将深入探讨这些方法&#xff0c;并提供丰富的示例代码&#xff0c;以帮助大家更好地…

「Verilog学习笔记」可置位计数器

专栏前言 本专栏的内容主要是记录本人学习Verilog过程中的一些知识点&#xff0c;刷题网站用的是牛客网 timescale 1ns/1nsmodule count_module(input clk,input rst_n,input set,input [3:0] set_num,output reg [3:0]number,output reg zero);reg [3:0] cnt ; always (posed…

3-分布式存储之Ceph

任务背景 虽然使用了分布式的glusterfs存储, 但是对于爆炸式的数据增长仍然感觉力不从心。对于大数据与云计算等技术的成熟, 存储也需要跟上步伐. 所以这次我们选用对象存储. 任务要求 1, 搭建ceph集群 2, 实现对象存储的应用 任务拆解 1, 了解ceph 2, 搭建ceph集群 3, 了…

深度学习 | Pytorch深度学习实践 (Chapter 12 Basic RNN)

十二、Basic RNN —— 实际上就是对线性层的复用 使用RNN最重要的两点&#xff1a; 了解序列数据的维度&#xff1b;循环过程所用的权重共享机制&#xff1b; 一般就是自己写个循环&#xff0c;权重层重复用就行了&#xff1b; 回顾&#xff1a;-----------------------------…

破局创新,天翼云HBlock如何以小见大、以柔克刚?

引言&#xff1a;另辟蹊径开拓创新 不走传统存储厂商的“寻常路” 【全球存储观察 &#xff5c; 科技热点关注】 在分布式块存储领域&#xff0c;大部分厂商的安装软件套件大小都在GB级。然而&#xff0c;天翼云破天荒地将存储资源盘活系统HBlock的软件安装包浓缩到了170MB&a…

linux中proc与sys的区别

在Linux系统中&#xff0c;/sys目录和/proc目录都是特殊的虚拟文件系统&#xff0c;用于提供对系统内核和设备信息的访问。 虽然它们的作用有一些重叠&#xff0c;但它们在功能和用途上有一些区别。 功能&#xff1a; /sys目录主要用于提供对设备和驱动程序的信息和配置的访…

Python-乒乓球小游戏【附完整源码】

乒乓球小游戏 乒乓球小游戏是一个简单而有趣的2D页面交互式游戏&#xff0c;玩家可以通过键盘输入来控制球拍上下移动来接球&#xff0c;从而体验乒乓球的乐趣。该游戏有单人和双人两种模式 运行效果&#xff1a; 一&#xff1a;主程序&#xff1a; import sys import cfg …

Jupyter Notebook: 交互式数据科学和编程工具

Jupyter Notebook: 功能强大的交互式编程和数据科学工具 简介 Jupyter Notebook是一个开源的Web应用程序&#xff0c;广泛用于数据分析、科学计算、可视化以及机器学习等领域。它允许创建和共享包含实时代码、方程式、可视化和解释性文本的文档。总而言之&#xff0c;我认为它…

3D Font

在游戏中使用3D文本 只需添加预制件并立即生成您的文本。 特点: *真实3D字母&#xff0c;可用作游戏对象*移动友好低聚 *VR兼容 *WebGL兼容 *30种以上不同字体 *材料和颜色可定制 WebGL演示 https://indiechest.itch.io/3d-font-engine 下载&#xff1a; ​​Unity资源商店链…

【tips】base64编码怎么反显出图片

格式 <img width"400" height"300" src"data:image/jpeg;base64,这里存放base64的图片内容/>实际的数据展示是这样的 然后把以上的文件内容放置到html文件中 最终展示样例 点击这个 展示出来是这样的

opencv 十五 红外图像中虹膜的提取

一、算法需求 在医疗检测中&#xff0c;需要使用红外相机拍摄眼睛照片&#xff0c;然后提取出虹膜的区域。在拍摄过程瞳孔需要进行运动&#xff0c;其通常不在正前方&#xff0c;无法形成圆形&#xff0c;不能使用常规的霍夫圆检测进行提取定位。且在在红外图像中&#xff0c;…

将输入的字符串反向输出(c语言)

#include<stdio.h> #include<string.h> int main() {int i, j, k;char s[50], temp;gets(s);//输入k strlen(s);//计算字符的长度//反向输出for (i 0, j k - 1;i < k / 2;i, j--){temp s[i];s[i] s[j];s[j] temp;}puts(s);//输出 }

最近面试了一位5年的测试,一问三不知,还反怼我...

最近看了很多简历&#xff0c;很多候选人年限不小&#xff0c;但是做的都是一些非常传统的项目&#xff0c;想着也不能通过简历就直接否定一个人&#xff0c;何况现在大环境越来 越难&#xff0c;大家找工作也不容易&#xff0c;于是就打算见一见。 在沟通中发现&#xff0c;由…

GB28181学习(十八)——图像抓拍

前言 本文主要介绍图像抓拍功能&#xff0c;通过自研的sip库&#xff08;mysipsdk.dll&#xff09;对接真实设备&#xff0c;使用http方式实现图像数据传输&#xff0c;最终达到图像抓拍与保存的目的。 基本要求 图像格式宜使用JPEG&#xff1b;图像分辨率宜采用与主码流相同…

linux ksm实现与代码简述

KSM 全称是 Kernel Samepage Merging&#xff0c;表示相同的物理页只映射一份拷贝。 原理 在ksm初始化时&#xff08;ksm_init&#xff09;&#xff0c;注册了一个ksm_scan_thread线程&#xff0c;这个线程的核心入口是ksm_do_scan。当对一个进程第一次通过madvice(MADV_MERGE…