当前位置: 首页 > ds >正文

QT进阶之路:带命名空间的自定义控件在Qt设计器与qss中的使用技巧

文章目录

  • 0.前言
  • 1.带命名空间Qt自定义类在QT设计器中的使用技巧
    • 1.1 定义一个带命令空间QLabel自定义类
    • 1.2 在QT设计器中引入自定义控件类
  • 2.带命名空间Qt自定义类在qss中的使用技巧
    • 2.1 命名空间在 QSS 中的特殊语法
    • 2.1 在QSS中定义带命名空间的样式
  • 3.在项目中使用带命名空间的Qt自定义控件类
  • 4.总结

0.前言

在大型QT项目中我们需要定义自己的自定义控件库,而这种自定义控件为了避免类名冲突往往都会将类放到特定的命名空间中,从而会在一些场景中导致使用上的问题,本篇文章主要介绍Qt自定义控件在Qt设计器中使用的问题和qss中样式的定义问题。

1.带命名空间Qt自定义类在QT设计器中的使用技巧

1.1 定义一个带命令空间QLabel自定义类

// ColorTextLabel.h


#ifndef COLORTEXTLABEL_H
#define COLORTEXTLABEL_H#include <QLabel>
#include <QMetaObject>
#include <QMetaEnum>namespace CustomCotrols
{class ColorTextLabel : public QLabel{Q_OBJECTQ_ENUMS(ColorMode)Q_PROPERTY(ColorMode colorMode READ colorMode WRITE setColorMode NOTIFY colorModeChanged)public:enum ColorMode {Normal,Success,Warning,Danger};explicit ColorTextLabel(QWidget *parent = nullptr);~ColorTextLabel();ColorMode colorMode() const;void setColorMode(ColorMode mode);signals:void colorModeChanged(ColorMode mode);private:ColorMode m_colorMode;};
}
#endif // COLORTEXTLABEL_H

#include “ColorTextLabel.h”

// ColorTextLabel.cpp
namespace CustomCotrols
{ColorTextLabel::ColorTextLabel(QWidget *parent) : QLabel(parent), m_colorMode(Normal){// 设置对象名称以便在QSS中引用setObjectName("ColorTextLabel");// 启用样式表中的属性选择器setProperty("colorMode", Normal);}ColorTextLabel::~ColorTextLabel(){}ColorTextLabel::ColorMode ColorTextLabel::colorMode() const{return m_colorMode;}void ColorTextLabel::setColorMode(ColorMode mode){if (m_colorMode != mode) {m_colorMode = mode;setProperty("colorMode", mode);style()->unpolish(this);style()->polish(this);update();emit colorModeChanged(mode);}}
}

1.2 在QT设计器中引入自定义控件类

实际项目开发中为了提高开发效率,对于比较固定的页面我们都是通过Qt设计器进行布局的,而要在Qt设计器中使用自定义类,我们需要对Qt内置空间类进行提升。
在提升对话框上填写提升类名时需要将命名空间全部写上CustomCotrols::ColorTextLabel,写头文件时如果头文件有目录需要将目录也写上CustomControls/ColorTextLabel,这样就能正常使用带命名空间的自定义Qt类了。

2.带命名空间Qt自定义类在qss中的使用技巧

2.1 命名空间在 QSS 中的特殊语法

在 C++ 中,命名空间的写法是使用 “::”,比如MyNamespace::MyCustomWidget,用于明确标识类所属的命名空间,避免命名冲突。然而,在 QSS 中,这种写法会与 Q 的子控件写法产生冲突。为了解决这个问题,QSS 采用了 “–” 来表示命名空间 。

2.1 在QSS中定义带命名空间的样式

/* styles.qss */
CustomCotrols--ColorTextLabel {border: 1px solid #cccccc;border-radius: 4px;padding: 6px;min-height: 24px;color: #333333;
}CustomCotrols--ColorTextLabel[colorMode="0"] { /* Normal */background-color: #f0f0f0;
}CustomCotrols--ColorTextLabel[colorMode="1"] { /* Success */background-color: #d4edda;color: #155724;border-color: #c3e6cb;
}CustomCotrols--ColorTextLabel[colorMode="2"] { /* Warning */background-color: #fff3cd;color: #856404;border-color: #ffeeba;
}CustomCotrols--ColorTextLabel[colorMode="3"] { /* Danger */background-color: #f8d7da;color: #721c24;border-color: #f5c6cb;
}

3.在项目中使用带命名空间的Qt自定义控件类

// main.cpp (示例使用)
#include <QApplication>
#include "colortextlabel.h"int main(int argc, char *argv[])
{QApplication a(argc, argv);// 加载QSS样式QFile styleFile(":/styles.qss");if (styleFile.open(QIODevice::ReadOnly | QIODevice::Text)) {QString styleSheet = styleFile.readAll();a.setStyleSheet(styleSheet);styleFile.close();}// 创建示例标签ColorTextLabel label("Hello World");label.setColorMode(ColorTextLabel::Success);label.show();return a.exec();
}

4.总结

带命名空间的QT类在QT设计器中和qss中使用时都需要把命名空间带上。

http://www.xdnf.cn/news/12733.html

相关文章:

  • Android音频开发:Speex固定帧与变长帧编解码深度解析
  • Windows账户管理,修改密码,创建帐户...(无需密码)
  • k3s入门教程(集群部署、使用,镜像拉取失败网络问题排查)
  • C++.OpenGL (2/64)你好,三角形(Hello Triangle)
  • N2语法 列挙、話題提出
  • 黑盒测试用例设计方法-全
  • gvim比较两个文件不同并合并差异
  • 【三余升序数对个数】2022-4-17
  • 数学:学好数学需要对数系进行系统的对比和分析
  • 蓝牙技术栈BR/EDR和LE详解
  • Linux驱动学习day1
  • Numpy5——数组的扩充(相加、复制、广播)排序,形状调整
  • 计算机图形学:(七)渲染目标
  • MybatisPlus中LambdaQueryWrapper 校验非空,非空判断
  • 解决cesium加载模型太黑暗,程序崩溃,不显示,位置不对模型太大,Cesium加载gltf/glb模型后变暗,变慢问题
  • x32dbg/x64dbg SwissArmyKnife 插件导入map文件不生效
  • 数论——同余问题全家桶2 不定方程和同余方程
  • 高考:如何合理选择学科、专业以及职业
  • 大模型时代的“思考“与“行动“:人工智能的认知革命
  • 智能仓储解决方案:如何为您的企业选择最佳系统 (提升效率 降低成本)
  • 多模态动态图卷积神经网络及Transformer多头注意力机制设计
  • window查看SVN账号密码
  • Blaster - Multiplayer P145-P152: 多种武器
  • 2025年SDK游戏盾实战深度解析:防御T级攻击与AI反作弊的终极方案
  • 大学课程:计算机科学与技术专业主要课程,是否落伍了?
  • ORM框架(SQLAlchemy 与 Tortoise )
  • idea中 maven 本地仓库有jar包,但还是找不到,解决打包失败和无法引用的问题
  • 【iSAQB软件架构】魔法成功软件项目的矩形
  • D1675/HBT191单通道高清视频放大电路解析
  • DAY 23 pipeline管道