前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >QListWidget小例子

QListWidget小例子

作者头像
Qt君
发布2023-03-17 15:05:29
7220
发布2023-03-17 15:05:29
举报
文章被收录于专栏:跟Qt君学编程跟Qt君学编程

❝该例子演示如何实现QListWidget窗口列表的动态「添加」「删除」。❞

演示

一. 实现

  1. 小例子主要由MyListWidget和ItemWidget组成。
  2. 使用QListWidget的insertItem动态添加一项元素;
  3. 使用QListWidget的removeItemWidget动态删除一项元素;
  4. 使用QListWidget的setItemWidget设置指定的QWidget模板。
  5. 由于ItemWidget继承QWidget和QListWidgetItem,于是就有了以下操作:
代码语言:javascript
复制
/* 添加一项元素到QListWidget中 */
ItemWidget *itemWidget = new ItemWidget(this);
this->insertItem(this->count()-1, itemWidget);
/* 使用相同的ItemWidget */
this->setItemWidget(itemWidget, itemWidget); 

二. 源码

代码语言:javascript
复制
#include <QPushButton>
#include <QListWidget>
#include <QListWidgetItem>
#include <QHBoxLayout>
#include <QLabel>

class ItemWidget : public QWidget, public QListWidgetItem
{
    Q_OBJECT
public:
    ItemWidget(QListWidget *parent = NULL) :
        QWidget(parent),
        m_listWidget(parent)
    {
        QPushButton *deleteButton = new QPushButton(QStringLiteral("删除"));
        deleteButton->setStyleSheet(button_qss.arg("#EC7063"));
        deleteButton->setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Expanding);

        QLabel *label = new QLabel(QString("Index: %1 => Hello world!").arg(m_listWidget->count()));

        QHBoxLayout *h = new QHBoxLayout;
        h->addWidget(label, 4);
        h->addWidget(deleteButton, 1);

        this->setLayout(h);
        this->setSizeHint(QSize(300, 50));

        QObject::connect(deleteButton, &QPushButton::clicked, [&](){
            m_listWidget->removeItemWidget(this);
            this->deleteLater();
        });
    }

private:
    QListWidget *m_listWidget;
};

class MyListWidget : public QListWidget
{
    Q_OBJECT

public:
    MyListWidget(QWidget *parent = 0)
        : QListWidget(parent)
    {
        this->resize(480, 320);

        QPushButton *addButton = new QPushButton(QStringLiteral("添加"));
        addButton->setStyleSheet(button_qss.arg("#1ABC9C"));
        QListWidgetItem *item = new QListWidgetItem(this);
        item->setSizeHint(QSize(width(), 50));
        this->insertItem(0, item);
        this->setItemWidget(item, addButton);

        connect(addButton, &QPushButton::clicked, [&](){
            ItemWidget *itemWidget = new ItemWidget(this);
            this->insertItem(this->count()-1, itemWidget);
            this->setItemWidget(itemWidget, itemWidget);
        });
    }
};

三. 按钮样式

代码语言:javascript
复制
const QString button_qss = R"(
QPushButton {
    border: 0px;
    border-radius: 2px;
    margin: 0px;
    padding: 0px;
    font-size: 16px;
    background: transparent;
    color: black;
    outline: none;
}
QPushButton:pressed {
    outline: none;
    background: #EC7063;
    color: white;
}
QPushButton:hover {
    outline: none;
    background: %1;
    color: white;
}
)";

四. 相关

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2021-02-02,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 Qt君 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 一. 实现
  • 二. 源码
  • 三. 按钮样式
  • 四. 相关
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档