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();
}
还没有评论,来说两句吧...