首页 > 解决方案 > 将 QListWidgetItem CheckState(toggled on) 上的默认 plastique 小部件样式更改为右勾而不是交叉勾

问题描述

我在 Redhat linux 上使用 Qt 4.4。

我使用 QListWidgetItem 在 QListWidget 中添加了复选框,如下所示,

lstObjListGroup1 = new QListWidget( wgtGroup );
{//loop 
...
QListWidgetItem *itemChkList = new QListWidgetItem( itValue, lstObjListGroup1 );
itemChkList->setFlags (itemChkList->flags () | Qt::ItemIsUserCheckable ); 
itemChkList->setCheckState (Qt::Unchecked); //initialize check state
}

当我运行它时,在项目选择上它显示交叉勾号,但我必须将它显示为项目 CheckState 上的右勾号。

在此处输入图像描述

如何更改此小部件样式选择状态?

谢谢。

标签: qtqt4qlistwidgetitem

解决方案


使用函数 QWidget::setStyle() 和小部件样式作为“Windows”解决了这个问题。

在此处输入图像描述

我发现最简单的方法是创建 QListWidget 的子类。

//header file : echklistwidget.h

#include <qlistwidget.h>
#include <QWidget>

class EChkListWidget : public QListWidget
{
    Q_OBJECT
    public:
        EChkListWidget( QWidget *parent=0);
};
//source file : echklistwidget.cpp

#include "echklistwidget.h"

#include <qwidget.h>
#include <qstylefactory.h>

class QStyle;

EChkListWidget :: EChkListWidget(QWidget* parent) : QListWidget(parent)
{
    //setStyle(QStyleFactory::create("Fusion"));
    setStyle(QStyleFactory::create("Windows"));
}

//using object of subclass EChkListWidget
EChkListWidget *lstObjListGroup1;
lstObjListGroup1 = new EChkListWidget( wgtGroup );
{//loop 
...
QListWidgetItem *itemChkList = new QListWidgetItem( itValue, lstObjListGroup1 );
itemChkList->setFlags (itemChkList->flags () | Qt::ItemIsUserCheckable ); 
itemChkList->setCheckState (Qt::Unchecked); //initialize check state
}

推荐阅读