QListWidget 插入QListWidgetItem 需要避开的坑

男娘i 2022-11-05 04:29 175阅读 0赞

QListWidget 插入 QListWidgetItem 有两种方法:

1、addItem

在QListWidget的最后插入一项。

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

2、insertItem

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

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

错误的写法:

  1. QListWidgetItem * listItem = new QListWidgetItem(QListWidget);

正确的方法:

  1. QListWidgetItem * listItem = new QListWidgetItem();

3、如何自定义QListWidgetItem

  1. #include "QtListWidgetsApplication.h"
  2. #include <QtWidgets/QApplication>
  3. #include <QtWidgets/QListWidget>
  4. #include <QtWidgets/QSplitter>
  5. #include <QHBoxLayout>
  6. #include <QCheckBox>
  7. #include <QPushButton>
  8. int main(int argc, char *argv[])
  9. {
  10. QApplication a(argc, argv);
  11. QSplitter splitter;
  12. //<1> 使用QStringList做内部模型
  13. QListWidget * listLeft = new QListWidget();
  14. QStringList list;
  15. list << "98" << "99" << "100" << "101" << "102";
  16. listLeft->addItems(list);
  17. listLeft->sortItems();
  18. //<2> 使用QListWidgetItem做内部模型
  19. QListWidget * listRight = new QListWidget();
  20. for (int i = 98; i < 103; i++)
  21. {
  22. QWidget *w = new QWidget(listRight);
  23. QHBoxLayout *layout = new QHBoxLayout(w);
  24. QPushButton *button = new QPushButton("push button", w);
  25. QCheckBox *check = new QCheckBox(QString::number(i), w);
  26. layout->setContentsMargins(50, 0, 0, 0);
  27. layout->addWidget(check);
  28. layout->addWidget(button);
  29. w->setLayout(layout);
  30. QListWidgetItem * item = new QListWidgetItem;
  31. item->setData(Qt::DisplayRole, i);
  32. item->setSizeHint(QSize(200, 28));
  33. listRight->addItem(item);
  34. listRight->setItemWidget(item, w);
  35. }
  36. listRight->sortItems();
  37. // 显示
  38. splitter.addWidget(listLeft);
  39. splitter.addWidget(listRight);
  40. splitter.show();
  41. return a.exec();
  42. }

发表评论

表情:
评论列表 (有 0 条评论,175人围观)

还没有评论,来说两句吧...

相关阅读