Qt中的QListWidget可以实现一个列表,比如网页上经常出现的下拉列表框,其中一行就是一个ListItem,在添加时,常用的函数是QListWidget::addItem(QListWidgetItem * item),但这样只能添加QListWidgetItem这样的对象,如果想到像QQ等软件使用自定义的ListItem,一个简单的方法是自定义一个QWidget,然后使用QListWidget::setItemWidget(QListWidgetItem * item, QWidget * 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;
};
|
首先,添加一个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);
|