当前位置:首页 > 编程笔记 > 正文
已解决

Qt遇到常见问题记录

来自网友在路上 176876提问 提问时间:2023-11-22 00:16:50阅读次数: 76

最佳答案 问答题库768位专家为你答疑解惑

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及形参的使用,达到高内聚的要求。如:

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

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

void buttonClicked(QAbstractButton *);
void buttonClicked(int);

则需要进行类型转换

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

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

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

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

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

Supports only the background, background-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)

查看全文

99%的人还看了

猜你感兴趣

版权申明

本文"Qt遇到常见问题记录":http://eshow365.cn/6-41704-0.html 内容来自互联网,请自行判断内容的正确性。如有侵权请联系我们,立即删除!