在ListWidget中添加自定义的Item

来源:互联网 发布:下载ppt的软件 编辑:程序博客网 时间:2024/05/20 09:25


之前看过很多在ListWidget中添加item的方法,但是大部分都没能解决我的问题。

昨天把这个问题解决了,想着把它记下来。留个纪念吧。


先上一个图例。

就像这一样。这个是纯代码实现。以下是纯代码


#include "dialog.h"  #include "ui_dialog.h"  #include <QHBoxLayout>  #include <QMap>  Dialog::Dialog(QWidget *parent) :      QDialog(parent),      ui(new Ui::Dialog)  {      ui->setupUi(this);        widget = new QWidget;       // 设置透明度,当背景色为白色时,这样才能看到选中的颜色    widget->setStyleSheet("background-color: rgba(255, 255, 255, 0);}");     listwidget = new QListWidget(this);      layout = new QHBoxLayout(widget);          lab1 = new QLabel;      btn1 = new QPushButton;      layout->addWidget(lab1);      layout->addWidget(btn1);      lab1->setText(tr("把整个widget放入到item中"));      btn1->setText(tr("可点击"));      widget->setLayout(layout);          QListWidgetItem *aItem = new QListWidgetItem(listwidget);        listwidget->addItem(aItem);      listwidget->setItemWidget(aItem,widget);        listwidget->setGeometry(0,0,300,350);      aItem->setSizeHint(QSize(0,50));        widget->show();  }    Dialog::~Dialog()  {      delete ui;  }  





但是就像我就觉得用代码太麻烦了。用ui设计又快又方便



就像这样,画出一个listwidget 一个widget在widget中按照自己的想法布局


接下来必须到代码中实现“塞入”的动作。

只要在构造函数中用

[cpp] view plain copy
  1. QListWidgetItem *nitem = new QListWidgetItem(ui->listWidget);  
  2. ui->listWidget->addItem(nitem);  
  3. ui->listWidget->setItemWidget(nitem,ui->widget);  

这三句就搞定了。不过运行之后会发现


因为item的大小所以导致widget显示不完全。

所以需要注意设置item的大小。建议使用

[cpp] view plain copy
  1. aItem->setSizeHint(QSize(0,50));  

这样放大item的大小之后就可以正常显示自定义的widget的内容了。