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

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);
}


相关文章:

  • 十分钟了解 @MapperScan
  • LeetCode 热题 100 22. 括号生成
  • 大学之大:隆德大学2025.5.6
  • JSON 转换为 Word 文档
  • SLAM算法工程师面经大全:2025年面试真题解析与实战指南
  • 个人Unity自用面经(未完)
  • Three.js 基础与实践
  • JavaSE核心知识点01基础语法01-04(数组)
  • QQMUSIC测试报告
  • 双目标清单——AI与思维模型【96】
  • 智能机器人赋能小天互连IM系统,打造高效办公新生态
  • cephadm部署ceph集群
  • Flowable7.x学习笔记(二十)查看流程办理进度图
  • 从零开始学习人工智能Day6-Python3标准库概览
  • 【AI提示词】六顶思考帽工具专家
  • 智能学习空间的范式革新:基于AI驱动的自习室系统架构与应用研究
  • 使用DevTools工具调试前端页面,便捷脚本,鸿蒙调试webView
  • PyTorch常用命令详解:助力深度学习开发
  • day18-API(常见API,对象克隆)
  • yolov8 输出数据解释
  • 从“重规模”向“重回报”转变,公募基金迎系统性改革
  • 湖南张家界警方公告宣布一名外国人居留许可作废
  • 暴雨蓝色预警:南方开启较强降雨过程
  • 长三角多地重启游轮跨市游,“恢复苏杭夜航船”呼声又起
  • 外交部发言人就当前印巴局势答记者问
  • 最会说亚军感言的鲁德,站上了马德里公开赛的冠军领奖台