首页 > 其他分享 >Qt | QListWidgetItem返回错误的背景颜色(始终返回颜色值为0)问题解决

Qt | QListWidgetItem返回错误的背景颜色(始终返回颜色值为0)问题解决

时间:2023-02-01 21:31:10浏览次数:48  
标签:返回 index 颜色 Qt color ui brush listWidget


Qt | QListWidgetItem返回错误的背景颜色(始终返回颜色值为0)问题解决


使用场景:程序使用QListWidget显示一个列表,这个列表具有点击选择和再次点击取消选择的功能,点击之后需要更换背景色以表示被选中,由于软件有主题效果,所以打算让背景色自动选择背景颜色取反显示,让软件去自适应。

问题描述:使用​​ui->listWidget->item(index.row())->background()​​获取到的brush始终为0。

问题原因:默认情况下QListWidgetItem的背景QBrush是为空的,所以默认颜色为ListWidget的背景颜色,因此不会使用绘画,即不绘制背景颜色,所以获取到的brush转成qcolor后的颜色值始终为0。

前景也是同样的情况,而前景使用视图调色板的文本颜色作为前景色。

因此,如果您想要获得背景颜色和文本颜色,如果QBrush为空,那么可以获取视图的调色板的颜色。

我的代码修改前:

connect(ui->listWidget, &QListWidget::clicked, this, [=](const QModelIndex& index){

QBrush brush = ui->listWidget->item(index.row())->background();
QColor color(brush.color());
ui->listWidget->item(index.row())->setBackground(QBrush(QColor(255 - color.red(), 255 - color.green(), 255 - color.blue())));
});

修改后:

connect(ui->listWidget, &QListWidget::clicked, this, [=](const QModelIndex& index){
QBrush brush = ui->listWidget->item(index.row())->background();
if(brush.style() == Qt::NoBrush)
{
brush = ui->listWidget->palette().window(); // 或ui->listWidget->palette().background()
qDebug() << "no brush";
}
QColor color(brush.color());
ui->listWidget->item(index.row())->setBackground(QBrush(QColor(255 - color.red(), 255 - color.green(), 255 - color.blue())));
});

ends…


标签:返回,index,颜色,Qt,color,ui,brush,listWidget
From: https://blog.51cto.com/u_15950551/6031882

相关文章

  • 【嵌入式】微芯旺KungFu32A156MQT点灯程序
    编译器:ChipON32IDEKF32首先添加A156MQT启动代码然后添加库 然后在项目设置内添加编译路径  以下是点灯代码:#include"system_init.h"#include"kf32a156_gp......
  • QT(9)-QStyleOption及其子类
    1QStyleOptionQStyleOption及其子类包含QStyle函数绘制图形元素所需的所有信息。出于性能考虑,成员函数很少,对成员变量的访问是直接的(即使用。或者->运算符)。这种低级的......
  • QT(9)-QStyleOption及其子类
    1QStyleOptionQStyleOption及其子类包含QStyle函数绘制图形元素所需的所有信息。出于性能考虑,成员函数很少,对成员变量的访问是直接的(即使用。或者->运算符)。这种低级......
  • Qt 事件循环
    一、QT消息/事件循环机制Qt作为一个可视化GUI界面操作系统,是基于事件驱动的,我们程序执行的顺序不再是线性的,而是由一个个应用程序内部或外部的事件进行驱动的,无事件时......
  • lc144-给你二叉树的根节点 root ,返回它节点值的 前序 遍历。
    给你二叉树的根节点root,返回它节点值的前序遍历。//leetcodesubmitregionbegin(Prohibitmodificationanddeletion)/***Definitionforabinarytreenode......
  • Qt QString::contains() QString::startsWith() 在字符串中检索字符串
    函数QString::startsWith()判断一个字符串是否以某个字符串开头。此函数具有两个参数,第一个参数指定了一个字符串,第二个参数指定是否大小写敏感(默认情况下,是大小写敏......
  • JavaScript 输入一个数 返回 2数相乘 使得 2数尽可能接近
    functiongetRC(pageCount){vara=Math.round(Math.sqrt(pageCount));for(vari=0;i<10;i++){varb=pageCount/(a+i);if(b===Math.round(b))......
  • python pyqt5简单界面
    ​​https://doc.qt.io/qtforpython/PySide6/QtWidgets/QTableWidget.html​​importsysfromPyQt5.QtWidgetsimportQApplication,QWidget,QDesktopWidget,QHBoxLayou......
  • qt5模板
    fromPyQt5.Qtimport*importsysfromtextimportUi_MainWindowclassWindow(QMainWindow):def__init__(self,parent=None,*args,**kwargs):super().__i......
  • pyqt5 简单工具类
    fromPyQt5.QtWidgetsimportQPushButton,QLabel,QLineEdit,QTextEdit,QPlainTextEdit,QCheckBoxfromPyQt5.QtWidgetsimportQComboBox,QRadioButtonclassMYWIDGET():......