QListWidget 自定义item

效果图如下:
在这里插入图片描述
在这里插入图片描述

//.cpp
#include "mainwindow.h"
#include "ui_mainwindow.h"

#define BACKGROUND_ICON() QString("background-image:url(:/resources/%1);background-attachment:fixed;background-position:center;background-repeat:no-repeat;")


MainWindow::MainWindow(QWidget *parent) :
    QMainWindow(parent),
    ui(new Ui::MainWindow)
{
    ui->setupUi(this);
    this->setWindowTitle("QListWidget");

    ui->listWidget->setObjectName("ListWidget");
    ui->listWidget->setStyleSheet("#ListWidget{background-color:#424655}");
    ui->listWidget->setHorizontalScrollBarPolicy(Qt::ScrollBarAlwaysOff);
    ui->listWidget->setDragEnabled(false);
    ui->listWidget->setWordWrap(true);
    ui->listWidget->setWrapping(false);
    ui->listWidget->setVerticalScrollMode(QListWidget::ScrollPerPixel);
    ui->listWidget->setFrameShape(QListWidget::NoFrame);
    ui->listWidget->setResizeMode(QListWidget::Adjust);
    ui->listWidget->setVerticalScrollBarPolicy(Qt::ScrollBarAlwaysOff);
    ui->listWidget->setFocusPolicy(Qt::NoFocus);
    ui->listWidget->setViewMode(QListWidget::ListMode);
    ui->listWidget->setFlow(QListWidget::TopToBottom);
    QScroller::grabGesture(this, QScroller::TouchGesture);
    connect(ui->listWidget, &QListWidget::itemClicked, this, &MainWindow::onItemClicked);
    /*
    //关闭越区
    QScroller* scroller = QScroller::scroller(ui->listWidget);
    QScrollerProperties properties = scroller->scrollerProperties();
    properties.setScrollMetric(QScrollerProperties::VerticalOvershootPolicy, QScrollerProperties::OvershootAlwaysOff);//关闭越区
    scroller->setScrollerProperties(properties);
    connect(scroller, &QScroller::stateChanged, this, &ListWidget::stateChanged);
    */

    listWidgetAddItem(BACKGROUND_ICON().arg("displaySetting.png"), "aaa");
    listWidgetAddItem(BACKGROUND_ICON().arg("standby.png"), "bbb");
    listWidgetAddItem(BACKGROUND_ICON().arg("update.png"), "ccc");
    listWidgetAddItem(BACKGROUND_ICON().arg("displaySetting.png"), "111");
    listWidgetAddItem(BACKGROUND_ICON().arg("standby.png"), "222");
    listWidgetAddItem(BACKGROUND_ICON().arg("update.png"), "333");
    listWidgetAddItem(BACKGROUND_ICON().arg("displaySetting.png"), "444");
    listWidgetAddItem(BACKGROUND_ICON().arg("standby.png"), "555");
    listWidgetAddItem(BACKGROUND_ICON().arg("update.png"), "666");
    listWidgetAddHeadItem(BACKGROUND_ICON().arg("update.png"), "啊啊啊");
}

MainWindow::~MainWindow()
{
    delete ui;
}


void MainWindow::listWidgetAddItem(QString icon, QString data)
{
    QListWidgetItem *item = new QListWidgetItem(ui->listWidget, 0);
    item->setData(Qt::UserRole, data);
    item->setSizeHint(QSize(ui->listWidget->width(), 57));
    QSize size = item->sizeHint();

    QWidget *widget = new QWidget(ui->listWidget);
    widget->setFixedSize(size);

    QLabel *icon_label = new QLabel(widget);
    icon_label->setFixedSize(36, 36);
    icon_label->setStyleSheet(icon);

    QLabel *text_label = new QLabel(widget);
    text_label->setText(data);
    text_label->setFixedSize(size.width()-36-40, size.height()-1);
    text_label->setStyleSheet("QLabel{color:#fff;font-size:30px;}");
    text_label->setAlignment(Qt::AlignLeft | Qt::AlignVCenter);

    QLabel *icon1_label = new QLabel(widget);
    icon1_label->setFixedSize(40, 40);
    icon1_label->setStyleSheet("border-image:url(:/resources/trunRight.png)");

    QHBoxLayout *Hboxlayout = new QHBoxLayout();
    Hboxlayout->setMargin(0);
    Hboxlayout->setSpacing(0);
    Hboxlayout->addWidget(icon_label,0,Qt::AlignCenter);
    Hboxlayout->addSpacing(2);
    Hboxlayout->addWidget(text_label,0,Qt::AlignCenter);
    Hboxlayout->addWidget(icon1_label,0,Qt::AlignCenter);

    QLabel *line = new QLabel();
    line->setFixedSize(size.width()-15, 1);
    line->setStyleSheet("background-color:#6E7489;");

    QVBoxLayout *Vboxlayout = new QVBoxLayout(widget);
    Vboxlayout->setMargin(0);
    Vboxlayout->setSpacing(0);
    Vboxlayout->addLayout(Hboxlayout);
    Vboxlayout->addStretch(1);
    Vboxlayout->addWidget(line);

    ui->listWidget->setItemWidget(item, widget);
}

void MainWindow::listWidgetAddHeadItem(QString icon, QString data)
{
    QListWidgetItem *item = new QListWidgetItem();
    item->setData(Qt::UserRole, data);
    item->setSizeHint(QSize(ui->listWidget->width(), 57));
    QSize size = item->sizeHint();

    QWidget *widget = new QWidget(ui->listWidget);
    widget->setFixedSize(size);

    QLabel *icon_label = new QLabel(widget);
    icon_label->setFixedSize(36, 36);
    icon_label->setStyleSheet(icon);

    QLabel *text_label = new QLabel(widget);
    text_label->setText(data);
    text_label->setFixedSize(size.width()-36-40, size.height()-1);
    text_label->setStyleSheet("QLabel{color:#fff;font-size:30px;}");
    text_label->setAlignment(Qt::AlignLeft | Qt::AlignVCenter);

    QLabel *icon1_label = new QLabel(widget);
    icon1_label->setFixedSize(40, 40);
    icon1_label->setStyleSheet("border-image:url(:/resources/trunRight.png)");

    QHBoxLayout *Hboxlayout = new QHBoxLayout();
    Hboxlayout->setMargin(0);
    Hboxlayout->setSpacing(0);
    Hboxlayout->addWidget(icon_label,0,Qt::AlignCenter);
    Hboxlayout->addSpacing(2);
    Hboxlayout->addWidget(text_label,0,Qt::AlignCenter);
    Hboxlayout->addWidget(icon1_label,0,Qt::AlignCenter);

    QLabel *line = new QLabel();
    line->setFixedSize(size.width()-15, 1);
    line->setStyleSheet("background-color:#6E7489;");

    QVBoxLayout *Vboxlayout = new QVBoxLayout(widget);
    Vboxlayout->setMargin(0);
    Vboxlayout->setSpacing(0);
    Vboxlayout->addLayout(Hboxlayout);
    Vboxlayout->addStretch(1);
    Vboxlayout->addWidget(line);

    ui->listWidget->insertItem(0, item);
    ui->listWidget->setItemWidget(item, widget);
}

void MainWindow::onItemClicked(QListWidgetItem *item)
{
    if(item)
        WELOG_DEBUG() << item->data(Qt::UserRole).toString();
}
//.h
#ifndef MAINWINDOW_H
#define MAINWINDOW_H

#include <QMainWindow>
#include <QWidget>
#include <QMetaType>
#include <QVariant>
#include <QDebug>
#include <QMouseEvent>
#include <QLabel>
#include <QThread>
#include <QLocalSocket>
#include <QLocalServer>
#include <QTimer>
#include <QListView>
#include <QScroller>
#include <QListWidget>
#include <QHBoxLayout>

namespace Ui {
class MainWindow;
}


#define WELOG_FILE_LINE "[" << __FUNCTION__ << "][" << __LINE__ << "]: "
#define WELOG_DEBUG() qDebug().nospace() << WELOG_FILE_LINE


class MainWindow : public QMainWindow
{
    Q_OBJECT

public:
    explicit MainWindow(QWidget *parent = 0);
    ~MainWindow();

    void listWidgetAddItem(QString icon, QString data);
    void listWidgetAddHeadItem(QString icon, QString data);
    
private:
    Ui::MainWindow *ui;

public slots:
	void onItemClicked(QListWidgetItem *item);
};
#endif // MAINWINDOW_H

  • 2
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值