「Qt Widget中文示例指南」如何创建一个窗口标志?(二)

embedded/2024/11/17 19:28:40/

Qt 是目前最先进、最完整的跨平台C++开发工具。它不仅完全实现了一次编写,所有平台无差别运行,更提供了几乎所有开发过程中需要用到的工具。如今,Qt已被运用于超过70个行业、数千家企业,支持数百万设备及应用。

窗口标志要么是类型,要么是提示。类型用于为小部件指定各种窗口系统属性,一个小部件只能有一种类型,默认是Qt::Widget,但是小部件可以有零个或多个提示;提示用于自定义顶级窗口的外观。

小部件的标志存储在Qt::WindowFlags类型中,该类型存储标志的OR组合。

「Qt Widget中文示例指南」如何创建一个窗口标志?(一)

点击获取Qt Widget组件下载

在上文中(点击这里回顾>>),我们为大家介绍了ControllerWindow类定义和实现,本文将继续介绍PreviewWindow类的定义和实现!

class PreviewWindow : public QWidget
{
Q_OBJECTpublic:
PreviewWindow(QWidget *parent = nullptr);void setWindowFlags(Qt::WindowFlags flags);private:
QTextEdit *textEdit;
QPushButton *closeButton;
};

PreviewWindow类继承了QWidget,它是一个自定义小部件,在只读文本编辑器中显示其当前设置的窗口标志的名称,它还提供了一个关闭窗口的QPushbutton。

我们重新实现构造函数来创建关闭按钮和文本编辑器,并使用QWidget::setWindowFlags() 函数来显示窗口标志的名称。

「Qt Widget中文示例指南」如何创建一个窗口标志?(一)

PreviewWindow类实现
PreviewWindow::PreviewWindow(QWidget *parent)
: QWidget(parent)
{
textEdit = new QTextEdit;
textEdit->setReadOnly(true);
textEdit->setLineWrapMode(QTextEdit::NoWrap);closeButton = new QPushButton(tr("&Close"));
connect(closeButton, &QPushButton::clicked,
this, &PreviewWindow::close);QVBoxLayout *layout = new QVBoxLayout;
layout->addWidget(textEdit);
layout->addWidget(closeButton);
setLayout(layout);setWindowTitle(tr("Preview"));
}

在构造函数中,我们首先创建QTextEditt并确保它是只读的。

我们还使用QTextEdit::setLineWrapMode()函数禁止文本编辑器中的任何换行,结果是当窗口标志的名称超过编辑器的宽度时,将出现水平滚动条。这是一个合理的解决方案,因为我们使用内置的换行符来构造显示的文本。如果没有保证换行,使用另一个QTextEdit::LineWrapMode可能更有意义。

然后我们创建Close按钮,并在设置窗口标题之前将这两个小部件放入QVBoxLayout中。

void PreviewWindow::setWindowFlags(Qt::WindowFlags flags)
{
QWidget::setWindowFlags(flags);QString text;Qt::WindowFlags type = (flags & Qt::WindowType_Mask);
if (type == Qt::Window)
text = "Qt::Window";
else if (type == Qt::Dialog)
text = "Qt::Dialog";
else if (type == Qt::Sheet)
text = "Qt::Sheet";
else if (type == Qt::Drawer)
text = "Qt::Drawer";
else if (type == Qt::Popup)
text = "Qt::Popup";
else if (type == Qt::Tool)
text = "Qt::Tool";
else if (type == Qt::ToolTip)
text = "Qt::ToolTip";
else if (type == Qt::SplashScreen)
text = "Qt::SplashScreen";if (flags & Qt::MSWindowsFixedSizeDialogHint)
text += "\n| Qt::MSWindowsFixedSizeDialogHint";
if (flags & Qt::X11BypassWindowManagerHint)
text += "\n| Qt::X11BypassWindowManagerHint";
if (flags & Qt::FramelessWindowHint)
text += "\n| Qt::FramelessWindowHint";
if (flags & Qt::NoDropShadowWindowHint)
text += "\n| Qt::NoDropShadowWindowHint";
if (flags & Qt::WindowTitleHint)
text += "\n| Qt::WindowTitleHint";
if (flags & Qt::WindowSystemMenuHint)
text += "\n| Qt::WindowSystemMenuHint";
if (flags & Qt::WindowMinimizeButtonHint)
text += "\n| Qt::WindowMinimizeButtonHint";
if (flags & Qt::WindowMaximizeButtonHint)
text += "\n| Qt::WindowMaximizeButtonHint";
if (flags & Qt::WindowCloseButtonHint)
text += "\n| Qt::WindowCloseButtonHint";
if (flags & Qt::WindowContextHelpButtonHint)
text += "\n| Qt::WindowContextHelpButtonHint";
if (flags & Qt::WindowShadeButtonHint)
text += "\n| Qt::WindowShadeButtonHint";
if (flags & Qt::WindowStaysOnTopHint)
text += "\n| Qt::WindowStaysOnTopHint";
if (flags & Qt::WindowStaysOnBottomHint)
text += "\n| Qt::WindowStaysOnBottomHint";
if (flags & Qt::CustomizeWindowHint)
text += "\n| Qt::CustomizeWindowHint";textEdit->setPlainText(text);
}

我们重新实现setWindowFlags()函数时,首先使用QWidget::setWindowFlags()函数设置小部件标志,然后遍历可用的窗口标志,创建一个文本,其中包含与flags参数匹配的标志的名称。最后,我们在widgets文本编辑器中显示文本。

Qt Widget组件推荐
  • QtitanRibbon - Ribbon UI组件:是一款遵循Microsoft Ribbon UI Paradigm for Qt技术的Ribbon UI组件,QtitanRibbon致力于为Windows、Linux和Mac OS X提供功能完整的Ribbon组件。
  • QtitanChart - Qt类图表组件:是一个C ++库,代表一组控件,这些控件使您可以快速地为应用程序提供漂亮而丰富的图表。
  • QtitanDataGrid - Qt网格组件:提供了一套完整的标准 QTableView 函数和传统组件无法实现的独特功能。使您能够将不同来源的各类数据加载到一个快速、灵活且功能强大的可编辑网格中,支持排序、分组、报告、创建带状列、拖放按钮和许多其他方便的功能。
  • QtitanDocking:允许您像 Visual Studio 一样为您的伟大应用程序配备可停靠面板和可停靠工具栏。黑色、白色、蓝色调色板完全支持 Visual Studio 2019 主题!

http://www.ppmy.cn/embedded/138075.html

相关文章

监控JVM的内存使用情况分析

监控JVM的内存使用情况对于确保应用性能和稳定性至关重要。以下是一些常用的方法和工具来监控JVM的内存使用情况: 1. JVM内置工具 jcmd jcmd是一个多功能的诊断命令行工具,可以用来监控和管理系统进程和核心Java虚拟机。使用jcmd可以获取堆内存和非堆…

封装map、set

红黑树中&#xff0c;封装map还是set是根据第二个节点参数决定的。 也就是说&#xff1a;树第一个参数是key&#xff0c;而第二个参数如果是set 就是 key&#xff0c;如果是map&#xff0c;则是pair。 RBTree.h#pragma once#include <iostream> using namespace std; #…

C#入门 020 事件(类型成员)

初步了解事件 定义:单词Event&#xff0c;译为“事件” 《牛津词典》中的解释是“a thing that happens, especially something important通顺的解释就是“能够发生的什么事情” 角色:使对象或类具备通知能力的成员 事件(event)是一种使对象或类能够提供通知的成员对象O拥有…

(蓝桥杯C/C++)——动态规划(DP)

目录 一、线性DP 1.DP(动态规划)简介 2.动态规划的分析步骤 3.例题讲解 二、二维DP 1.二维DP简介 2.选数异或 三、最长上升子序列LIS 1.LIS简介 2.例题讲解 四、最长公共子序列LCS 1.最长公共子序列 2.最长公共子序列 2.求出具体子序列 一、线性DP 1.DP(动态规划)…

动态规划-背包问题——1049.最后一块石头的重量II

1.题目解析 题目来源 1049.最后一块石头的重量II——力扣 测试用例 2.算法原理 首先需要将该问题转化为0-1背包问题后再做分析 1.状态表示 根据数学中的知识我们知道将一个数字分为两个子数后求这两个子数的最小差值&#xff0c;那么就要求这两个子数尽可能接近于原数字的一…

【RabbitMQ】09-取消超时订单

生产者完成创建订单和扣减库存之后&#xff0c;发送消息到延迟队列。 // 3.清理购物车商品cartClient.deleteCartItemByIds(itemIds);// cartService.removeByItemIds(itemIds);// 4.扣减库存try {itemClient.deductStock(detailDTOS);//itemService.deductStock(detailDTOS);…

解决Jenkins使用 Git 参数插件拉取 commit 列表缓慢问题

Jenkins使用 Git 参数插件拉取 commit 列表缓慢问题 项目问题问题描述解决方案具体实现 项目问题 在 Jenkins 中使用 Git 参数插件 进行参数化构建&#xff0c;具有多方面的重要性和好处。这不仅提高了构建的灵活性和透明度&#xff0c;还能大大提升开发和运维效率。以下是使用…

thinkphp route 配置 示例

在 ThinkPHP 中&#xff0c;路由配置允许你将 URL 请求映射到指定的控制器和方法。路由配置文件一般位于 application/route.php 中&#xff0c;下面是一些常见的路由配置示例。 1. 基本路由配置 最基本的路由配置方式是将 URL 路径映射到指定的控制器方法。 use think\faca…