QListWidget 插入QListWidgetItem 需要避开的坑

QListWidget 插入 QListWidgetItem 有两种方法:

1、addItem

在QListWidget的最后插入一项。

void QListWidget::addItem(QListWidgetItem *item)
Inserts the item at the end of the list widget.

2、insertItem

void QListWidget::insertItem(int row, QListWidgetItem *item)
Inserts the item at the position in the list given by row.

在QListWidget 指定位置(row参数)插入一项。
在这种方法中,需要注意一点:
在新建项的时候,项的父控件不能是QListWidget,否则还是添加到QListWidget的最后。

错误的写法:

QListWidgetItem * listItem = new QListWidgetItem(QListWidget);

正确的方法:

QListWidgetItem * listItem = new QListWidgetItem();

3、如何自定义QListWidgetItem

#include "QtListWidgetsApplication.h"
#include <QtWidgets/QApplication>
#include <QtWidgets/QListWidget>
#include <QtWidgets/QSplitter>
#include <QHBoxLayout>
#include <QCheckBox>
#include <QPushButton>

int main(int argc, char *argv[])
{
    QApplication a(argc, argv);

	QSplitter splitter;

	//<1> 使用QStringList做内部模型
	QListWidget * listLeft = new QListWidget();
	QStringList list;
	list << "98" << "99" << "100" << "101" << "102";
	listLeft->addItems(list);
	listLeft->sortItems();

	//<2> 使用QListWidgetItem做内部模型
	QListWidget * listRight = new QListWidget();
	for (int i = 98; i < 103; i++) 
	{
		QWidget *w = new QWidget(listRight);
		QHBoxLayout *layout = new QHBoxLayout(w);
		QPushButton *button = new QPushButton("push button", w);
		QCheckBox *check = new QCheckBox(QString::number(i), w);
		layout->setContentsMargins(50, 0, 0, 0);
		layout->addWidget(check);
		layout->addWidget(button);
		w->setLayout(layout);

		QListWidgetItem * item = new QListWidgetItem;
		item->setData(Qt::DisplayRole, i);
		item->setSizeHint(QSize(200, 28));
		listRight->addItem(item);
		listRight->setItemWidget(item, w);
	}
	listRight->sortItems();

	// 显示
	splitter.addWidget(listLeft);
	splitter.addWidget(listRight);
	splitter.show();

    return a.exec();
}

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

hellokandy

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值