Qt教程 — 3.6 深入了解Qt 控件:Display Widgets部件(2)
目录
1 Display Widgets简介
2 如何使用Display Widgets部件
2.1 QTextBrowser组件-简单的文本浏览器
2.2 QGraphicsView组件-简单的图像浏览器
Display Widgets将分为两篇文章介绍
文章1(Qt教程 — 3.5 深入了解Qt 控件:Display Widgets部件-CSDN博客):Label(标签)、Calendar Widget(日历)、LCD Number(液晶数字)、Progress Bar(进度条)、Horizontal Line(水平线)、Vertical Line(垂直线)、OpenGL Widget(开放式图形库工具)、QQuick Widget(嵌入式 QML 工具)
文章2(本文):Text Browser(文本浏览器)、Graphics View(图形视图)
1 Display Widgets简介
Qt Designer 显示窗口部件提供的面板中,提供了 10 种显示小部件。以下是Display Widgets 的介绍:
-
Text Browser(文本浏览器):QTextBrowser 是用于显示富文本文档的控件。这个部件可以显示来自本地文件或网络的HTML文档,并且可以解析HTML链接。
-
Graphics View(图形视图):QGraphicsView 是一个用于图形项(如线条、形状、图像等)交互的控件。它是基于场景(QGraphicsScene)和视图(QGraphicsView)框架的一部分,用于管理和显示复杂的图形界面。
2 如何使用Display Widgets部件
2.1 QTextBrowser组件-简单的文本浏览器
QTextBrowser
是 Qt 中用于显示富文本内容的组件,可以显示格式化的文本、图片和超链接等。
QTextBrowser
继承自QTextEdit
,用于显示富文本内容,支持 HTML 标记。- 可以显示静态文本、超链接、表格、图片等富文本内容。
- 用户可以选择文本内容、复制文本内容和点击超链接。
- 可以设置文本颜色、字体、对齐方式等样式。
- 支持滚动条,可以滚动查看大段文本内容。
下面详细介绍一下QTextBrowser
的全部功能设置和参数:
-
设置文本内容。
ui->textBrowser->setText("Hello, world!");
-
设置 HTML 格式的文本内容。
ui->textBrowser->setHtml("<b>Hello</b>, <i>world</i>!");
-
设置文本颜色。
ui->textBrowser->setTextColor(Qt::blue);
-
设置文本字体。
ui->textBrowser->setFont(QFont("Arial", 12));
-
设置文本对齐方式。
ui->textBrowser->setAlignment(Qt::AlignCenter);
-
设置文本是否只读。
ui->textBrowser->setReadOnly(true);
-
获取当前文本内容。
QString text = ui->textBrowser->toPlainText();
clear():清空文本内容。ui->textBrowser->clear();
-
链接点击事件处理。
connect(ui->textBrowser, &QTextBrowser::anchorClicked, this, &MyClass::onAnchorClicked);
-
获取文本显示区域的视口。
QWidget *viewport = ui->textBrowser->viewport();
本例设计一个文本浏览器程序,可以打开并显示 txt、 html 等文件。本小节还用到 QAction,菜单栏,学习文件的打开以及处理等。
(1)首先按照文章新建项目(Qt教程 — 1.3 如何创建Qt项目-CSDN博客)。
(2)在头文件“mainwindow.h”修改代码,具体代码如下。1)导入<QTextBrowser>文件 —> 2)声明一个QTextBrowser、QAction对象用于显示字符串和图像。完整代码如下。
#ifndef MAINWINDOW_H
#define MAINWINDOW_H#include <QMainWindow>
#include <QTextBrowser>QT_BEGIN_NAMESPACE
namespace Ui { class MainWindow; }
QT_END_NAMESPACEclass MainWindow : public QMainWindow
{Q_OBJECTpublic:MainWindow(QWidget *parent = nullptr);~MainWindow();private:Ui::MainWindow *ui;// 声明对象QTextBrowser *textBrowser;QAction *openAction;private slots:// 槽函数void openActionTriggered();
};
#endif // MAINWINDOW_H
(3)在文件“mainwindow.cpp”修改代码,具体代码如下。 1)设置主窗体的显示位置与大小,将窗口标题设置为文本浏览器。—>2)实例化QTextBrowser对象,将文本浏览器窗口居中。—>3)实例化QAction,将动作添加到菜单栏。—>4)信号槽连接。—>5)编写打开文件的槽函数。
#include "mainwindow.h"
#include "ui_mainwindow.h"#include <QFileDialog>
#include <QTextStream>MainWindow::MainWindow(QWidget *parent): QMainWindow(parent), ui(new Ui::MainWindow)
{ui->setupUi(this);// 设置主窗体位置与大小this->setGeometry(0, 0, 800, 480);// 将窗口标题设置为文本浏览器 */this->setWindowTitle("文本浏览器");// 实例化 */textBrowser = new QTextBrowser(this);// 将文本浏览器窗口居中 */this->setCentralWidget(textBrowser);// 实例化 */openAction = new QAction("打开",this);// ui 窗口自带有 menubar(菜单栏)、 mainToolbar(工具栏)与statusbar(状态栏)// 将动作添加到菜单栏ui->menubar->addAction(openAction);// 信号槽连接connect(openAction, SIGNAL(triggered()), this, SLOT(openActionTriggered()));
}MainWindow::~MainWindow()
{delete ui;
}void MainWindow::openActionTriggered()
{// 调用系统打开文件窗口,过滤文件名QString fileName = QFileDialog::getOpenFileName(this,tr("打开文件"),"",tr("Files(*.txt *.cpp *.h *.html *.htm)"));QFile myFile(fileName);// 以只读、文本方式打开,若打开失败,则返回if(!myFile.open(QIODevice::ReadOnly | QIODevice::Text))return;// 用 QTextStream 对象接收QTextStream in (&myFile);// 读取全部数据QString myText = in.readAll();// 判断打开文件的后缀,如果是 html 格式的则设置文本浏览器为 html 格式if(fileName.endsWith("html") || fileName.endsWith("htm")){textBrowser->setHtml(myText);} else {textBrowser->setPlainText(myText);}// ui 窗口自带有 statusbar(状态栏),设置打开的文件名ui->statusbar->showMessage("文件名: " + fileName);
}
(4)程序编译运行的结果如下。在菜单栏点击打开后,系统默认是打开的最近打开的位置,选择任意一个可打开的文件,本次打开的是该工程中的 mainwindow.h 文件,结果如下图。根据上面的例子可自行拓展打造自己的文本浏览器,例如在菜单栏上加上关闭动作等,在工具栏还可以添加字体颜色,与及背景颜色,以及字体的放大与缩小等,可自行拓展。
2.2 QGraphicsView组件-简单的图像浏览器
QGraphicsView
是Qt中用于显示QGraphicsScene
中图形项的组件。它提供了对图形场景中项的视图,并允许用户进行缩放、平移和交互操作。以下是QGraphicsView
的一些常用功能和设置详解:
- 显示场景内容:
QGraphicsView
用于显示QGraphicsScene
中的图形项,可以通过setScene()
方法将场景设置到视图中。 -
视图变换:缩放:可以通过
scale()
方法进行视图的缩放操作。平移:可以通过translate()
方法进行视图的平移操作。旋转:可以通过rotate()
方法进行视图的旋转操作。 -
视图交互:鼠标拖拽:可以通过设置
setDragMode()
方法来启用或禁用鼠标拖拽功能。滚轮缩放:可以通过设置setTransformationAnchor()
方法来指定缩放的中心点。 -
背景设置:可以通过
setBackgroundBrush()
方法设置视图的背景颜色或背景画刷。 -
边界设置:可以通过
setSceneRect()
方法设置视图的边界矩形,限制显示的区域。 -
视图更新:可以通过
update()
方法手动更新视图内容。 -
坐标转换:可以通过
mapToScene()
和mapFromScene()
等方法进行视图坐标和场景坐标之间的转换。 -
视图大小策略:可以通过
setResizeAnchor()
和setAlignment()
等方法设置视图的大小策略和对齐方式。 -
视图边框:可以通过
setFrameShape()
和setFrameShadow()
等方法设置视图的边框形状和阴影效果。 -
视图渲染:可以通过
setRenderHint()
方法设置视图的渲染选项,如抗锯齿、平滑等。
本例设计一个图像浏览器程序,在上一节一的基础上,将它改变为图像浏览器。
(1)首先按照文章新建项目(Qt教程 — 1.3 如何创建Qt项目-CSDN博客)。
(2)在头文件“mainwindow.h”修改代码,具体代码如下。1)导入<QGraphicsView>文件 —> 2)声明 QGraphicsView,QGraphicsScene, QAction对象和槽函数。完整代码如下。
#ifndef MAINWINDOW_H
#define MAINWINDOW_H#include <QMainWindow>
#include <QGraphicsView>QT_BEGIN_NAMESPACE
namespace Ui { class MainWindow; }
QT_END_NAMESPACEclass MainWindow : public QMainWindow
{Q_OBJECTpublic:MainWindow(QWidget *parent = nullptr);~MainWindow();private:Ui::MainWindow *ui;// 声明对象QGraphicsView *graphicsView;QGraphicsScene *graphicsScene;QAction *openAction;private slots:// 槽函数void openActionTriggered();};
#endif // MAINWINDOW_H
(3)在文件“mainwindow.cpp”修改代码,具体代码如下。 1)设置主窗体的显示位置与大小,将窗口标题设置为图像浏览器。—>2)实例化QTextBrowser对象,将图像浏览器窗口居中。—>3)实例化QAction,将动作添加到菜单栏。—>4)信号槽连接。—>5)编写打开图像的槽函数。
#include "mainwindow.h"
#include "ui_mainwindow.h"#include <QFileDialog>MainWindow::MainWindow(QWidget *parent): QMainWindow(parent), ui(new Ui::MainWindow)
{ui->setupUi(this);/***** 1 *****/// 设置主窗体位置与大小this->setGeometry(0, 0, 800, 480);/***** 2 *****/// 将窗口标题设置为图像浏览器this->setWindowTitle("图像浏览器");// 实例化图形视图对象graphicsView = new QGraphicsView(this);// 将图像浏览器窗口居中this->setCentralWidget(graphicsView);// 实例化场景对象graphicsScene = new QGraphicsScene(this);// 在QGraphicsView 设置场景graphicsView->setScene(graphicsScene);// 将动作添加到菜单栏openAction = new QAction("打开",this);ui->menubar->addAction(openAction);// 信号槽连接connect(openAction, SIGNAL(triggered()), this, SLOT(openActionTriggered()));}MainWindow::~MainWindow()
{delete ui;
}void MainWindow::openActionTriggered()
{/*调用系统打开文件窗口,设置窗口标题为“打开文件”,过滤文件名*/QString fileName = QFileDialog::getOpenFileName(this,tr("打开文件"), "",tr("Files(*.png *.jpg *.bmp)"));// 定义 QPixmap 对象,指向 fileNameQPixmap image(fileName);// 将 image 用 scaled 来重新设置长宽为 graphicsView 的长宽,保持纵横比等// 假若用户没选择文件,则返回if(image.isNull())return;image = image.scaled(graphicsView->width(),graphicsView->height(),Qt::KeepAspectRatio,Qt::FastTransformation);// 在添加场景内容前,先清除之前的场景内容graphicsScene->clear();// 添加场景内容 imagegraphicsScene->addPixmap(image);// ui 窗口自带有 statusBar(状态栏),设置打开的文件名ui->statusbar->showMessage("文件名: " + fileName);
}
(4) 程序编译运行的结果如下。菜单栏点击打开后,系统默认是打开的最近打开的位置,选择任意一个可打开的图片。
相关文章:

Qt教程 — 3.6 深入了解Qt 控件:Display Widgets部件(2)
目录 1 Display Widgets简介 2 如何使用Display Widgets部件 2.1 QTextBrowser组件-简单的文本浏览器 2.2 QGraphicsView组件-简单的图像浏览器 Display Widgets将分为两篇文章介绍 文章1(Qt教程 — 3.5 深入了解Qt 控件:Display Widgets部件-CSDN…...

Golang案例开发之gopacket抓包三次握手四次分手(3)
文章目录 前言一、理论知识三次握手四次分手二、代码实践1.模拟客户端和服务器端2.三次握手代码3.四次分手代码验证代码完整代码总结前言 TCP通讯的三次握手和四次分手,有很多文章都在介绍了,当我们了解了gopacket这个工具的时候,我们当然是用代码实践一下,我们的理论。本…...

如何减少pdf的文件大小?pdf压缩工具介绍
文件发不出去,有时就会耽误工作进度,文件太大无法发送,这应该是大家在发送PDF时,常常会碰到的问题吧,那么PDF文档压缩大小怎么做呢?因此我们需要对pdf压缩后再发送,那么有没有好用的pdf压缩工具…...

TypeScript基础类型
string、number、bolean 直接在变量后面添加即可。 let myName: string Tomfunction sayHello(person: string) {return hello, person } let user Tom let array [1, 2, 3] console.log(sayHello(user))function greet(person: string, date: Date): string {console.lo…...

长安链智能合约标准协议第二草案——BNS与DID协议邀请社区用户评审
长安链智能合约标准协议 在智能合约编写过程中,不同的产品及开发人员对业务理解和编程习惯不同,即使同一业务所编写的合约在具体实现上也可能有很大差异,在运维或业务对接中面临较大的学习和理解成本,现有公链合约协议规范又不能完…...

安防监控视频汇聚平台EasyCVR接入海康Ehome设备,设备在线但视频无法播放是什么原因?
安防视频监控/视频集中存储/云存储/磁盘阵列EasyCVR平台可拓展性强、视频能力灵活、部署轻快,可支持的主流标准协议有国标GB28181、RTSP/Onvif、RTMP等,以及支持厂家私有协议与SDK接入,包括海康Ehome、海大宇等设备的SDK等。平台既具备传统安…...

【Python + Django】表结构创建
以员工管理系统为例。 事前呢,我们先把项目和app创建出来,详细步骤可以看我同栏目的第一篇、第二篇文章。 我知道你们是不会下来找的,就把链接贴在下面吧: 【Python Django】启动简单的文本页面-CSDN博客 【Python Django】…...

解锁编程潜能:ChatGPT如何革新软件开发
目录 一、背景 二、功能描述 三、总结 一、背景 在这个飞速发展的数字时代,软件开发的效率和质量成了衡量一个开发者能力的重要标准。随着人工智能技术的不断进步,越来越多的开发者开始寻找能够提升工作效率的新方法。我就是其中之一,最近…...

内网使用rustdesk进行远程协助
文章目录 前言一、搭建rustdesk中继服务器二、搭建文件下载服务器三、创建引导脚本四、使用 前言 内网没有互联网环境,没法使用互联网上有中继服务器的远程协助工具,如teamviewer、todesk、向日癸等;在内网进行远程维护可以自己搭建中继服务…...

linux内核input子系统概述
目录 一、input子系统二、关键数据结构和api2.1 数据结构2.1.1 input_dev2.1.2 input_handler2.1.3 input_event2.1.4 input_handle 2.2 api接口2.2.1 input_device 相关接口input_device 注册流程事件上报 2.2.2 input handle 相关接口注册 handle指定 handle 2.2.3 input han…...
【解决报错】vi/vim修改文件时报错:Found a swap file by the name xxxxx
目录 报错内容报错原因解决方法 报错内容 vim打开文件提示: Found a swap file by the name xxxxx报错原因 使用vi或vim编辑器编写代码时由于网络不稳定(或其他种种原因)断开了连接,编辑好的代码没有运行和保存,再次…...

BRAM底层原理详细解释(1)
目录 一、原语 二、端口简述 2.1 端口简介 2.2 SDP端口映射 三、端口信号含义补充说明 3.1 字节写使能(Byte-Write Enable)- WEA and WEBWE: 3.2 地址总线—ADDRARDADDR and ADDRBWRADDR 3.3 数据总线—DIADI, DIPADIP, DIBDI, and D…...
GEE:为什么在机器学习分类或回归时,提取特征变量后的样本点下载到本地时,数据为空且缺少坐标?
作者:CSDN @ _养乐多_ 在博客《GEE:随机森林分类教程(样本制作、特征添加、训练、精度、参数优化、贡献度、统计面积)》和《GEE:随机森林回归预测教程(样本点、特征添加、训练、精度、参数优化、贡献度)》中,详细记录了在 Google Earth Engine(GEE)平台上进行机器学…...

电脑安装双系统windows和ubuntu server
1.创建Ubuntu-server的启动盘 首先要从官网下载Ubuntu-server18.04的ISO文件,用rufs烧录到U盘。如下所示 2. 磁盘分区 在windows创建两个盘(linuxboot 和linuxroot),后面一个一个用于boot,一个用于root. 3.开机U盘启…...

掌握这8大工具,自媒体ai写作之路畅通无阻! #媒体#媒体
在当今信息爆炸的时代,写作成为了人们表达思想、分享知识和传递情感的重要方式之一。对于很多人来说,写作并非易事。我们会陷入困境,无法找到灵感,我们会苦恼于语言表达的准确性,还有时候我们可能遭遇到了创作瓶颈&…...

「渗透笔记」致远OA A8 status.jsp 信息泄露POC批量验证
前言部分 在本节中,我会分两部分来说明致远OA A8 status.jsp 信息泄露的验证问题,其实就是两种验证方式吧,都一样,都是批量验证,主要如下所示: 通过Python脚本进行批量验证,但是前提是你可以收…...

uni-app打包证书android
Android平台打包发布apk应用,需要使用数字证书(.keystore文件)进行签名,用于表明开发者身份。 Android证书的生成是自助和免费的,不需要审批或付费。 可以使用JRE环境中的keytool命令生成。 以下是windows平台生成证…...

YOLOv5全网首发改进: 注意力机制改进 | 上下文锚点注意力(CAA) | CVPR2024 PKINet 遥感图像目标检测
💡💡💡本文独家改进:引入了CAA模块来捕捉长距离的上下文信息,利用全局平均池化和1D条形卷积来增强中心区域的特征,从而提升检测精度,CAA和C3进行结合实现二次创新,改进思路来自CVPR2024 PKINet,2024年前沿最新改进,抢先使用 💡💡💡小目标数据集,涨点近两个…...

数字孪生底层技术框架
数字孪生是一种将现实世界中的物理实体、过程或系统数字化并映射到计算机模型中的方法。它在数学建模与仿真方面具有重要作用,为了实现数字孪生,以下是一些底层技术框架和方法,希望对大家有所帮助。北京木奇移动技术有限公司,专业…...
docker和kubectl客户端安装Linux
一、docker安装 1.配置yum源(系统组) 2.查看可安装docker的所有版本 yum provides docker3.安装最新版本dockers yum install docker3.1确定版本没问题输入 y 4.验证 docker -v5.开启私有仓库的证书验证,没有创建一个daemon.json sudo vi…...

linux arm系统烧录
1、打开瑞芯微程序 2、按住linux arm 的 recover按键 插入电源 3、当瑞芯微检测到有设备 4、松开recover按键 5、选择升级固件 6、点击固件选择本地刷机的linux arm 镜像 7、点击升级 (忘了有没有这步了 估计有) 刷机程序 和 镜像 就不提供了。要刷的时…...
实现弹窗随键盘上移居中
实现弹窗随键盘上移的核心思路 在Android中,可以通过监听键盘的显示和隐藏事件,动态调整弹窗的位置。关键点在于获取键盘高度,并计算剩余屏幕空间以重新定位弹窗。 // 在Activity或Fragment中设置键盘监听 val rootView findViewById<V…...
css3笔记 (1) 自用
outline: none 用于移除元素获得焦点时默认的轮廓线 broder:0 用于移除边框 font-size:0 用于设置字体不显示 list-style: none 消除<li> 标签默认样式 margin: xx auto 版心居中 width:100% 通栏 vertical-align 作用于行内元素 / 表格单元格ÿ…...

什么是Ansible Jinja2
理解 Ansible Jinja2 模板 Ansible 是一款功能强大的开源自动化工具,可让您无缝地管理和配置系统。Ansible 的一大亮点是它使用 Jinja2 模板,允许您根据变量数据动态生成文件、配置设置和脚本。本文将向您介绍 Ansible 中的 Jinja2 模板,并通…...
Xen Server服务器释放磁盘空间
disk.sh #!/bin/bashcd /run/sr-mount/e54f0646-ae11-0457-b64f-eba4673b824c # 全部虚拟机物理磁盘文件存储 a$(ls -l | awk {print $NF} | cut -d. -f1) # 使用中的虚拟机物理磁盘文件 b$(xe vm-disk-list --multiple | grep uuid | awk {print $NF})printf "%s\n"…...

Docker 本地安装 mysql 数据库
Docker: Accelerated Container Application Development 下载对应操作系统版本的 docker ;并安装。 基础操作不再赘述。 打开 macOS 终端,开始 docker 安装mysql之旅 第一步 docker search mysql 》〉docker search mysql NAME DE…...
flow_controllers
关键点: 流控制器类型: 同步(Sync):发布操作会阻塞,直到数据被确认发送。异步(Async):发布操作非阻塞,数据发送由后台线程处理。纯同步(PureSync…...
React核心概念:State是什么?如何用useState管理组件自己的数据?
系列回顾: 在上一篇《React入门第一步》中,我们已经成功创建并运行了第一个React项目。我们学会了用Vite初始化项目,并修改了App.jsx组件,让页面显示出我们想要的文字。但是,那个页面是“死”的,它只是静态…...

dvwa11——XSS(Reflected)
LOW 分析源码:无过滤 和上一关一样,这一关在输入框内输入,成功回显 <script>alert(relee);</script> MEDIUM 分析源码,是把<script>替换成了空格,但没有禁用大写 改大写即可,注意函数…...
PCA笔记
✅ 问题本质:为什么让矩阵 TT 的行列式为 1? 这个问题通常出现在我们对数据做**线性变换(旋转/缩放)**的时候,比如在 PCA 中把数据从原始坐标系变换到主成分方向时。 📌 回顾一下背景 在 PCA 中ÿ…...