目录
  1. 1. Qt 学习之路 12-QListWidget、QTreeWidget 和 QTableWidget
  2. 2. QListWidget
  3. 3. QTreeWidget
Qt 学习之路 12-QListWidget、QTreeWidget 和 QTableWidget

Qt 学习之路 12-QListWidget、QTreeWidget 和 QTableWidget

在我们从最简单的QListWidget、QTreeWidget和QTableWidget三个类开始了解最简单的 model/view 的使用。

QListWidget

我们要介绍的第一个是QListWidget。先来看下面的代码示例

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
label = new QLabel(this);
label->setFixedWidth(70);

listWidget = new QListWidget(this);

new QListWidgetItem(QIcon(":/Chrome.png"), tr("Chrome"), listWidget);
new QListWidgetItem(QIcon(":/Firefox.png"), tr("Firefox"), listWidget);

listWidget->addItem(new QListWidgetItem(QIcon(":/IE.png"), tr("IE")));
listWidget->addItem(new QListWidgetItem(QIcon(":/Netscape.png"), tr("Netscape")));
listWidget->addItem(new QListWidgetItem(QIcon(":/Opera.png"), tr("Opera")));
listWidget->addItem(new QListWidgetItem(QIcon(":/Safari.png"), tr("Safari")));
listWidget->addItem(new QListWidgetItem(QIcon(":/TheWorld.png"), tr("TheWorld")));
listWidget->addItem(new QListWidgetItem(QIcon(":/Traveler.png"), tr("Traveler")));

QListWidgetItem *newItem = new QListWidgetItem;
newItem->setIcon(QIcon(":/Maxthon.png"));
newItem->setText(tr("Maxthon"));
listWidget->insertItem(3, newItem);

QHBoxLayout *layout = new QHBoxLayout;
layout->addWidget(label);
layout->addWidget(listWidget);

setLayout(layout);

connect(listWidget, SIGNAL(currentTextChanged(QString)),
label, SLOT(setText(QString)));

listWidget添加列表项可以:第一,使用下面的语句

1
new QListWidgetItem(QIcon(":/Chrome.png"), tr("Chrome"), listWidget);

第二,使用

1
2
3
4
5
6
listWidget->addItem(new QListWidgetItem(QIcon(":/IE.png"), tr("IE")));
// 或者
QListWidgetItem *newItem = new QListWidgetItem;
newItem->setIcon(QIcon(":/Maxthon.png"));
newItem->setText(tr("Maxthon"));
listWidget->insertItem(3, newItem);

注意这两种添加方式的区别:第一种需要在构造时设置所要添加到的QListWidget对象;第二种方法不需要这样设置,而是要调用addItem()或者insertItem()自行添加。如果你仔细查阅QListWidgetItem的构造函数,会发现有一个默认的type参数。该参数有两个合法值:QListWidgetItem::Type(默认)和QListWidgetItem::UserType。如果我们继承QListWidgetItem,可以设置该参数,作为我们子类的一种区别,以便能够在QListWidget区别处理不同子类。

QTreeWidget

我们要介绍的第二个组件是QTreeWidget。顾名思义,这是用来展示树型结构(也就是层次结构)的。同前面说的QListWidget类似,这个类需要同另外一个辅助类QTreeWidgetItem一起使用。不过,既然是提供方面的封装类,即便是看上去很复杂的树,在使用这个类的时候也是显得比较简单的。当不需要使用复杂的QTreeView特性的时候,我们可以直接使用QTreeWidget代替。

下面我们使用代码构造一棵树:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
QTreeWidget treeWidget;
treeWidget.setColumnCount(1);

QTreeWidgetItem *root = new QTreeWidgetItem(&treeWidget,
QStringList(QString("Root")));
new QTreeWidgetItem(root, QStringList(QString("Leaf 1")));
QTreeWidgetItem *leaf2 = new QTreeWidgetItem(root, QStringList(QString("Leaf 2")));
leaf2->setCheckState(0, Qt::Checked);

QList<QTreeWidgetItem *> rootList;
rootList << root;
treeWidget.insertTopLevelItems(0, rootList);

treeWidget.show();

首先我们创建了一个QTreeWidget实例。然后我们调用SetColumnCount()函数设定栏数。最后,我们向QTreeWidget添加QTreewidgetItemQTreewidgetItem有很多重载的构造函数。其中一个,

1
QTreeWidgetItem(QTreeWidget *parent, const QStringList &strings, int type = Type);

这里有三个参数,第一个参数用于指定这个项属于哪一个树,类似前面的QListWidget,如果指定了这个值,则意味着该项被直接添加到树中;第二个参数指定显示文字;第三个参数指定其类型,同QListWidgetItemtype参数十分类似。第二个参数是QStringList类型的,而不是QString类型的。

文章作者: XyLan
文章链接: https://blog.xylan.cn/2023/04/26/Qt%20%E5%AD%A6%E4%B9%A0%E4%B9%8B%E8%B7%AF%2012-QListWidget%E3%80%81QTreeWidget%20%E5%92%8C%20QTableWidget/
版权声明: 本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 XyLan
打赏
  • 微信
  • 支付寶