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

Qt开发经验 --- 避坑指南(4)

文章目录

    • @[toc]
      • 1.1 Qt自定义控件是样式表无效的解决方法;
      • 1.2 QAbstractSpinBox设置+-图标无效问题
      • 1.3 Qss设置自定义属性
      • 1.4 QSpinBox样式

更多精彩内容
👉内容导航 👈
👉Qt开发经验 👈

1.1 Qt自定义控件是样式表无效的解决方法;

  1. 在构造函数设置属性:this->setAttribute(Qt::WA_StyledBackground);(最好)

  2. 改成继承QFrame,因为QFrame自带paintEvent函数已做了实现,在使用样式表时会进行解析和绘制;

  3. 新实现QWidget的paintEvent函数时,使用QStylePainter绘制;

    void MyWidget::paintEvent(QPaintEvent* e)
    {QStyleOption option;option.init(this);QPainter p(this);style()->drawPrimitive(QStyle::PE_Widget, &option, &p, this);
    }
    

1.2 QAbstractSpinBox设置±图标无效问题

  • QAbstractSpinBox类及其子类控件支持通过buttonSymbols属性设置使用上下箭头图标、加减图标,但我们常常发现buttonSymbols设置了PlusMinus后还是无法显示加减图标

  • 这个问题我不知道是不是qt bug还是使用的问题;

  • 解决办法: 通过qss加上边框样式border: 2px solid red;就可以了;

    在这里插入图片描述

    在这里插入图片描述

1.3 Qss设置自定义属性

  • widget.h

    class Widget : public QWidget
    {Q_OBJECTQ_PROPERTY(QColor color READ color WRITE setColor )   // 定义属性
    public:Widget(QWidget *parent = nullptr);~Widget();void setColor(QColor value);   // 设置属性函数QColor color();                // 返回函数private slots:void on_pushButton_clicked();private:Ui::Widget *ui;QColor m_color;    // 成员属性
    };
    
  • widget.cpp

    
    Widget::Widget(QWidget *parent): QWidget(parent), ui(new Ui::Widget)
    {ui->setupUi(this);qApp->setStyleSheet("Widget{qproperty-color: red;}");   // 加载Qss样式表ui->lineEdit->setText(this->m_color.name());            // 获取属性值(这里获取不到)
    }Widget::~Widget()
    {delete ui;
    }/*** @brief         设置属性值,Qss调用这个函数* @param value*/
    void Widget::setColor(QColor value)
    {m_color = value;
    }QColor Widget::color()
    {return m_color;
    }void Widget::on_pushButton_clicked()
    {ui->lineEdit->setText(this->m_color.name());   // 获取属性值
    }
    
  • 实现效果: 从图中可以看见,加载Qss后再构造函数中无法获取到属性值,也就是说在构造函数中还没生效;

  • 注意: 最好是使用qApp设置Qss,否则如果使用this设置则其它窗口无法获取到qss。

在这里插入图片描述

1.4 QSpinBox样式

在这里插入图片描述

QSpinBox  {background-color: rgb(0, 255, 255);border-image: url(:/C:/Users/MHF/Pictures/1.png);   /* 输入部分背景*/color: rgb(255, 255, 255);border: 2px solid #FF0000;margin-left: 30px;        /* 左边距 */margin-right: 30px;       /* 右边距*/
}
/* 设置使用加减图标的样式*/
QAbstractSpinBox::up-button {subcontrol-origin: border;subcontrol-position: right;border: 1px solid grey;width: 30px;height: 30px;right: -30px;background-color: rgb(255, 255, 255);
}QAbstractSpinBox::down-button {subcontrol-origin: border;subcontrol-position: left;border: 1px solid grey;width: 30px;height: 30px;left: -30px;background-color: rgb(255, 255, 255);
}


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

相关文章:

  • Linux/AndroidOS中进程间的通信线程间的同步 - POSIX IPC
  • SVG数据可视化设计(AI)完全工作流解读|计育韬
  • VSCode|IDEA|PyCharm无缝接入DeepSeek R1实现AI编程
  • hybird接口配置
  • 【基础】Python包管理工具uv使用教程
  • 从零实现基于Transformer的英译汉任务
  • 翻转二叉树(简单)
  • uniapp开发09-设置一个tabbar底部导航栏且配置icon图标
  • Ubuntu 安装 containerd
  • 【东枫科技】代理英伟达产品:交换机系统
  • 如何修改 JAR 包中的源码
  • 地级市-机器人、人工智能等未来产业水平(2009-2023年)-社科数据
  • mapbox基础,加载Fog云雾效果
  • 【C语言干货】野指针
  • 系统级编程(二):通过读取PE文件获取EXE或者DLL的依赖
  • Spring Cloud Stream集成RocketMQ(kafka/rabbitMQ通用)
  • 2025年OpenAI重大架构调整:资本与使命的再平衡
  • 在Star-CCM+中实现UDF并引用场数据和网格数据
  • 配置Jupyter Notebook环境及Token认证(Linux服务器)
  • Elasticsearch知识汇总之ElasticSearch监控方案
  • 关于 js:1. 基础语法与核心概念
  • Java实现堆排序算法
  • 代理式AI(Agentic AI):2025年企业AI转型的催化剂
  • 2、实验室测控系统 - /自动化与控制组件/lab-monitoring-system
  • 一文速览可证数学定理的DeepSeek-Prover系列模型:从Prover V1、Prover V1.5到DeepSeek-Prover V2
  • AI教你学VUE——Gemini版
  • 【Python】常用命令提示符
  • 【心海资源】0U攻击工具|一键模仿地址生成+余额归集+靓号生成系统
  • Waymo公司正在加快其位于亚利桑那州新工厂的无人驾驶出租车(robotaxi)生产进度
  • react-transition-group 在 React 18 及以上版本中的兼容性问题