QListWidget

1.失去焦点背景颜色,代码设置全选的时候,背景会是白色,需要设置失去焦点背景颜色。(设置焦点,会出现白转化成设置背景色,效果不好)

QPalette p;

    p.setColor(QPalette::Inactive,QPalette::Highlight,QColor(51,153,255));
    p.setColor(QPalette::Inactive,QPalette::HighlightedText,QColor(Qt::white));
    p.setColor(QPalette::Inactive,QPalette::Text,QColor(Qt::white));
    lwItems->setPalette(p);

去掉选择虚线框 MyListWidgetDelegate *listWidgetDelegate=new MyListWidgetDelegate(lwItems);
 lwItems->setItemDelegate(listWidgetDelegate);


void DataDlg::createMiddleListView()
{

    lwItems=new QListWidget();
    lwItems->setSelectionMode(QAbstractItemView::MultiSelection);
    lwItems->setEditTriggers(QAbstractItemView::SelectedClicked);
    QPalette p;
    p.setColor(QPalette::Inactive,QPalette::Highlight,QColor(51,153,255));
    p.setColor(QPalette::Inactive,QPalette::HighlightedText,QColor(Qt::white));
    p.setColor(QPalette::Inactive,QPalette::Text,QColor(Qt::white));
    lwItems->setPalette(p);
    lwItems->setIconSize(QSize(15,15));
    lwItems->setObjectName("lwItems");
    MyListWidgetDelegate *listWidgetDelegate=new MyListWidgetDelegate(lwItems);
    lwItems->setItemDelegate(listWidgetDelegate);
    addExportItems();
    contentLayout->addWidget(lwItems);

}

添加数据

void DataDlg::addExportItems()
{
    isExportData=true;
    lwItems->clear();
    btnImportExport->setText(exportText);
    for(int i=0;i<ExportFieldsCount;i++)
    {
       lwItems->addItem(ExportFields[i].fields);
       setListWidgetIcon(i,false);
    }

}

选择触发事件

void DataDlg::listWidgetEvent(QListWidgetItem *clickedItem)
{

    bool isSeleced=clickedItem->isSelected();

    if(isSeleced==true)
    {
        clickedItem->setIcon(QIcon(":/res/icons/images/checkbox_checked.png"));

    }
    else
    {
        clickedItem->setIcon(QIcon(":/res/icons/images/checkbox_unchecked.png"));

    }

}

设置全选或者取消全选

void DataDlg::onSelectAll()
{
    isSelectAll=!isSelectAll;

    int itemCount=lwItems->count();
    for(int i=0;i<itemCount;i++)
    {
      lwItems->item(i)->setSelected(isSelectAll);

      setListWidgetIcon(i,isSelectAll);
    }

}

添加图标

void DataDlg::setListWidgetIcon(int row,bool isChecked)
{
    if(isChecked)
    {
       lwItems->item(row)->setIcon(QIcon(":/res/icons/images/checkbox_checked.png"));
    }
    else
    {
        lwItems->item(row)->setIcon(QIcon(":/res/icons/images/checkbox_unchecked.png"));

    }

}

取出选中的值

int selectedCount=lwItems->selectedItems().count();
    if(selectedCount==0)
    {
        return;
    }

    QString selectedText="";
    for(int i=0;i<selectedCount;i++)
    {

        selectedText=lwItems->selectedItems().at(i)->text();
    }

2. 去掉选择虚线框

#ifndef MYLISTWIDGETDELEGATE_H
#define MYLISTWIDGETDELEGATE_H

#include <QObject>
#include<QItemDelegate>
#include<QPen>
#include<QPainter>
#include<QBrush>
#include<QStyledItemDelegate>

#include<QDebug>

class MyListWidgetDelegate : public QStyledItemDelegate
{
    Q_OBJECT
public:
    explicit MyListWidgetDelegate(QObject *parent = 0);

protected:
     void paint(QPainter *painter,const QStyleOptionViewItem &option, const QModelIndex &index) const;

private:

signals:

public slots:
};

#endif // MYLISTWIDGETDELEGATE_H
#include "mylistwidgetdelegate.h"

MyListWidgetDelegate::MyListWidgetDelegate(QObject *parent) : QStyledItemDelegate(parent)
{

}
void MyListWidgetDelegate::paint(QPainter *painter, const QStyleOptionViewItem &option, const QModelIndex &index) const
{     

      QStyleOptionViewItem itemOption(option);
      if(itemOption.state & QStyle::State_HasFocus)
      {
          itemOption.state = itemOption.state ^ QStyle::State_HasFocus;
      }

     //调用默认委托
      QStyledItemDelegate::paint(painter,itemOption,index);

      QPen pen;
      pen.setColor(QColor(255,255,255));
      pen.setStyle(Qt::DotLine);
      painter->setPen(pen);
      painter->drawLine(itemOption.rect.bottomLeft(),itemOption.rect.bottomRight());

}

qss

QListWidget#lwItems{

    color:#FFFFFF;
    font:16pt "DejaVu Sans";
    background-color:#190101;
    margin:2px;
    padding-left:10px;
    padding-right:10px;
    border: 1px solid #32435E;

}

QListWidget#scaleItemsList,QListWidget#connectedIPList{

    color:#FFFFFF;
    font:16pt "DejaVu Sans";
    background-color:#190101;
    margin:20px;
    border: 1px solid #32435E;

}
QListWidget::item{

     border:solid #656565;
     border-width:0px 0px 1px 0px;
     padding:10px 0px 10px 15px;
     margin:0px 5px 0px 5px;

}

QListWidget::item:selected {

     background: qlineargradient(x1: 0, y1: 0, x2: 0, y2: 1,
                                 stop: 0 #6A848C,  stop: 1.0 #0F9EAF);

}

QListWidget::item:selected:!active {
     border-width: 0px ;

}
QListWidget::item:selected:active {
     border-width: 0px;

}
时间: 2024-12-30 00:05:27

QListWidget的相关文章

Qt QListWidget常用方法

类 QListWidget 在其内部定义了一个具有列表结构的模型,并以列表形式显示其中的数据项.列表中的每个数据项被表示为类 QListWidgetItem 的一个对象.在列表视图中所要显示的数据被存放在每个数据项的角色 DisplayRole 对应的数据子项中.这个数据子项的类型为 QVariant ,其中可以存放类型为 QString 的字符串,也可以存放类型为 int 或者 double 的数值.我们可以调用 QListWidget 的成员函数 addItem() 向列表添加一个数据项.

QListWidget笔记

1.头文件:#include <QListWidget> 2.继承自:QListView 3.基本代码: #include "mainwindow.h" #include <QApplication> #include <QListWidget> #include <QListWidgetItem> #include <QDebug> int main(int argc, char *argv[]) { QApplicatio

Qt学习之QListWidget删除Item

将QListWidgetItem从QListWidget列表中删除有两种方法可以做到,但也要根据自己的需要进行选择. 第一种是 QListWidgetItem *takeItem(int row); 使用此方法需要知道删除的是第几个Item,并且返回删除的Item指针. 第二种是 inline void removeItemWidget(QListWidgetItem *item); 需要知道删除的Item的对象. 代码测试:先添加5个Item,然后删除第三个(索引为2,从0开始),再使用第二种

QListWidget控件的使用

1)说明: 用来展示数据与QListView控件有诸多类似之处,更进一步说,它是在QListView基础之上进一步改造了,使用起来更加方便. 2)使用流程: 声明并定义QListWidget对象,并将其置于合适的容器中: 可通过函数addItems(QStringList &labels)或addItem(QString &label)进行添加成员: 之后可以通过函数insertItems(int row,QStringList &labels)或insertItem(int ro

QListWidget代码刷新界面

我有一个特殊效果要求实现(其实很弱智,也变成特殊效果,汗一下自己):两个QRadioButton切换的时候,让旁边的QListWidget自动变化不同的背景色.想了很多办法: 1. 控件自己刷新,不行 list_widget->update(); list_widget->repaint(); QCoreApplication::processEvents(); // 加上这句也不行 2. 试图使用QListView的dataChanged(),可这是个保护函数,由于QListWidget封装

关于QListWidget的Drag和Drop用法

QListWIdget的Drag和Drop. 真是坑爹到不行... 其实很简单的.. 最后搞到好多行代码.. 真是作死的节奏............... 先上代码:<这种方法也可以实现, 但是太麻烦了...> #include "PlayerDragWidget.h" #include "PlayerLyricsListItem.h" #include <QDrag> #include <QPainter> #include &

QListWidget与QTableWidget的使用以及样式设置

QListWidget和QTableWidget的使用和属性,QTableWidget和QListWidget样式表的设置,滚动条的样式设置 一.QListWidget的使用 //一.QListWidget list_widget = new QListWidget(); //list_widget->resize(200,300); list_widget->setFixedWidth(300); //设置item图标大小 list_widget->setIconSize(QSize(

QListWidget的QComboBox下拉列表添加复选框及消息处理

要在QComboBox下拉列表项中添加复选框,并进行消息处理,在网上搜索了很久没有找到太多有用的信息和实际的例子,但从中还是找到了一些提示性的资料,根据这些简短的介绍,最终实现了这个功能. QComboBox有一个setView的方法,因此,可以自定义的一个视图类,将复选框在视图中实现,本例自定义视图类继承于QListWidget,因为在该视图类中,有一个setItemWidget方法,可以直接将QCheckBox附加在QListWidgetItem项上. 具体看下面得的示例: //QCombo

QListWidget添加小控件

在写一个简单的文件浏览器时,遇到一个问题,想实现新建文件夹时能像一般的文件管理器那样,文件夹图标下面有一个编辑框提示用户给文件夹命名(如下图),但是不知道怎么给单元项QListWidgetItem添加QLineEdit控件.查了好久Qt帮助文档,终于发现了QListWidget::setItemWidget(),就试了一下,成功添加了,还算满意.大家如果有更好的方法请告诉我. void QListWidget::setItemWidget(QListWidgetItem * item, QWid

QPushButton 与 QListWidget 的按键响应

在Qt中添加按钮或表格控件时需要添加其按键响应,一般来说有两种方法,一种是直接实现其响应函数,第二种是自己写一个响应函数,然后用Qt的信号槽将它们连接起来.愚以为第一种方法更为简单一些. 声明这些控件: QPushButton *pbutton; QListWidget *lwidget; 然后实现它们的响应函数: void YourClass::on_pbutton_clicked() { // Implement here } void YourClass::on_lwidget_itemC