• Qt遇到常见问题记录


    1.Qt版本选择

    Qt4.8.7是Qt4的终结版本,是Qt4系列版本中最稳定最经典的

    (很多嵌入式板子还是用Qt4.8),其实该版本是和Qt5.5差不多时间发布的。

    参考链接

    Qt 5.5 Released

    Qt5.6.3最最后支持xp系统的长期支持版本,Qt5.7.0是最后支持xp系统的非长期支持版本。

    Qt5.12.3是最后提供mysql数据库插件的版本,往后的版本需要自行编译对应的mysql数据库插件,官方安装包不再提供。

    Qt5.12.5是最后样式表性能最高的版本,经过酷码大佬查阅代码发现此后版本的样式表源码中为了修复一个bug做了循环嵌套设置,导致性能急剧下降,界面越多性能暴降10倍以上。

    Qt5.14.2是最后提供二进制安装包的版本,后面的版本都需要在线安装。

    Qt5.15系列是最后支持win7的版本,Qt6系列版本需要更改源码编译才能支持,这对于小白来说难于上青天。

    如上,因用户使用Win7,并开发机属于离线工作模式,故选择5.14.2(含)之前版本作为IDE开发工具,性能方面,考虑5.12.5

    2. Qt QButtonGroup addButton添加后规律

    如果默认不指定id,则默认id从 -2 开始计数,依次递减

    可通过-(id+2)转为0-base的下标进行访问

    3. Qt Connect接lamda实现

    通常使用不挂接slot的lamda方式,可以忽略SIGNAL、SLOT及形参的使用,达到高内聚的要求。如:

    1. connect( button_circle, &QPushButton::toggled, this, [=](bool checked)
    2. {
    3. // todo
    4. });

    但是当遇到存在多个同名信号,如QButtonGroup的buttonClicked信号,

    1. void buttonClicked(QAbstractButton *);
    2. void buttonClicked(int);

    则需要进行类型转换

    1. connect(group, static_cast<void(QButtonGroup::*)(int)>(&QButtonGroup::buttonClicked), this, [=](int id)
    2. {
    3. });

    4. QWidget的QSS背景色设置失效

    试图重用某一块UI界面,通常做法会从QWidget派生出一个子类,将这部分局部功能进行封装。引入全局QSS,或直接构造时setStyleSheet,直接使用QWidget,正常。

    一旦派生子类,则出现背景色设置失效的情况。

    原因:Qt官方解释:Qt Style Sheets Reference | Qt Widgets 5.15.15

    Supports only the backgroundbackground-clip and background-origin properties.

    If you subclass from QWidget, you need to provide a paintEvent for your custom QWidget as below:

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

    The above code is a no-operation if there is no stylesheet set.

    解决方法:

    方法1: 听话,重载paintEvent

    方法2: 内叠一个QWidget,用它设置背景色

    方法3: 改祖,从QFrame派生

    方法4: setAttribute(Qt::WA_StyledBackground)

  • 相关阅读:
    DataBinding双向绑定简介
    多商户商城系统功能拆解41讲-平台端应用-客服设置
    HTML+CSS+Jquery实现北大官网所有效果
    JavaWeb ThreadLocal 的使用
    c语言-自研定时器计划任务语法
    YOLOV7训练自己的数据集(只需四步快速上手)
    03 自己写Keil ARM M3汇编的boot,并成功引导main进行打印输出
    livekit 源码编译
    [stm32]——uc/OS-III多任务程序
    学3D建模能作为副业吗?
  • 原文地址:https://blog.csdn.net/hellowithsmile/article/details/134456185