1. 新创建1个Qt设计类(Widget):

    • Add New > Qt设计师界面类 > 模板选择: Widget > MyListWidgetItem
  2. 在界面布局好
    自定义 QListWidgetItem - 图1

    • 垂直策略: Fixed
    • 高度: 45

自定义 QListWidgetItem - 图2

  1. 头文件 MyListWidgetItem.h:
  1. lass MyListWidgetItem : public QWidget
  2. {
  3. Q_OBJECT
  4. public:
  5. explicit MyListWidgetItem(QWidget *parent = nullptr);
  6. ~MyListWidgetItem();
  7. void setData(QString title, QString subTitle, QString picFilePath);
  8. private:
  9. Ui::MyListWidgetItem *ui;
  10. };
  1. 代码 MyListWidgetItem.cpp:
  1. void MyListWidgetItem::setData(QString title, QString subTitle, QString picFilePath)
  2. {
  3. this->title = title;
  4. this->subTitle = subTitle;
  5. this->picFilePath = picFilePath;
  6. ui->labelTitle->setText(title);
  7. ui->labelSubTitle->setText(subTitle);
  8. QPixmap pixmapPic(picFilePath);
  9. int w = ui->labelPic->width();
  10. int h =ui->labelPic->height();
  11. QPixmap pixmapPicFit = pixmapPic.scaled(w, h, Qt::IgnoreAspectRatio, Qt::SmoothTransformation); // 饱满填充
  12. ui->labelPic->setPixmap(pixmapPicFit);
  13. }
  1. 调用 MainWindow.cpp
  1. // 设置自动适应布局调整(Adjust适应,Fixed不适应), 默认为不适应
  2. ui->listWidgetTalk->setResizeMode(QListView::Adjust);
  3. // 默认ListMode上下排列,IconMode左右
  4. // ui->listWidgetTalk->setViewMode(QListView::IconMode);
  5. ui->listWidgetTalk->setVerticalScrollBarPolicy(Qt::ScrollBarAsNeeded);
  1. QMap<QString, QMap<QString, QString>>::const_iterator iter;
  2. for (iter = this->myContacts.constBegin(); iter != this->myContacts.constEnd(); ++iter) {
  3. QString uid = iter.key();
  4. QString nickName = iter.value().value("nickName");
  5. QString email = iter.value().value("email");
  6. QString gender = iter.value().value("gender");
  7. QString pic = ":/images/images/male_white.png";
  8. if (gender == "0") {
  9. pic = ":/images/images/female_white.png";
  10. }
  11. QListWidgetItem *item = new QListWidgetItem();
  12. item->setData(Qt::UserRole+1, uid);
  13. item->setSizeHint(QSize(100, 50));
  14. ui->listWidgetTalk->addItem(item);
  15. MyListWidgetItem *myItem = new MyListWidgetItem();
  16. myItem->setData(nickName, email, pic);
  17. myItem->setUid(uid);
  18. myItem->setSizeIncrement(100, 50);
  19. ui->listWidgetTalk->setItemWidget(item, myItem);
  20. }
  1. MainWindow界面设置样式:
  1. QListWidget{background-color: #131313}
  2. QListWidget:Item{background-color: #131313}
  3. QListWidget:item:selected{background:#2b2a2b}
  • QListWidget和QListWidgetItem 的背景色
  • QListWidgetItem 被选中的背景色

其它的一些参数说明:

  1. // 设置自动适应布局调整(Adjust适应,Fixed不适应), 默认为不适应
  2. ui->listWidget->setResizeMode(QListView::Adjust);
  3. // 默认ListMode上下排列,IconMode左右
  4. ui->listWidget->setViewMode(QListView::IconMode);
  5. // 设置QListWidget中单元项的间距
  6. ui->listWidget->setSpacing(10);
  7. // 设置不能移动
  8. ui->listWidget->setMovement(QListWidget::Static);
  9. // 文字没虚线
  10. ui->listWidget->setFocusPolicy(Qt::NoFocus);
  11. // 设置滚轮策略
  12. ui->listWidget->setVerticalScrollMode(QAbstractItemView::ScrollPerItem);
  13. // 设置滚轮滚动速度
  14. ui->listWidget->verticalScrollBar()->setSingleStep(10);