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();
}

相关推荐
©️2020 CSDN 皮肤主题: 酷酷鲨 设计师:CSDN官方博客 返回首页