Qt在ListWidget中添加自定义ListItem对象


Qt中的QListWidget可以实现一个列表,比如网页上经常出现的下拉列表框,其中一行就是一个ListItem,在添加时,常用的函数是QListWidget::addItem(QListWidgetItem * item),但这样只能添加QListWidgetItem这样的对象,如果想到像QQ等软件使用自定义的ListItem,一个简单的方法是自定义一个QWidget,然后使用QListWidget::setItemWidget(QListWidgetItem * item, QWidget * widget)来设置它的显示widget.



自定义一个widget

首先,自定义了一个QWidget,作为QListWidgetItem的子元素,所有的布局都在这个widget中完成,它便是后来显示的每个小条目.

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
class customItem1 : public QWidget
{
     Q_OBJECT
public :
     explicit customItem1(QWidget *parent, const QIcon& icon1,
                          const QString& text1, const QString& text2);
 
signals:
 
public slots:
 
private :
     QLabel icon1;
     QLabel text1;
     QLabel text2;
};
 
class customItem2 : public QWidget
{
     Q_OBJECT
public :
     explicit customItem2(QWidget *parent,
                          const QIcon& icon1, const QIcon& icon2,
                          const QString& text1, const QString& text2);
 
signals:
 
public slots:
 
private :
     QLabel icon1;
     QLabel icon2;
     QLabel text1;
     QLabel text2;
};

添加自定义Item

首先,添加一个QListWidgetItem,然后为其设置Widget为我们自定义的Widget:

?
1
2
3
4
5
6
customItem1 *custom1 = new customItem1( this , icon1, text1, text2);
     QListWidgetItem *listItem1 = new QListWidgetItem();
     listItem1->setSizeHint(QSize(0, 50));
 
     ui->listWidget->addItem(listItem1);
     ui->listWidget->setItemWidget(listItem1, custom1);

你可能感兴趣的:(C++,QT)