十一、项目部件ItemWidget
11.1 清单控件QListWidget
首先我们创建Widget工程。
首先设置widget.ui。
这次我们利用QListWidgetItem类来应用清单控件。
widget.cpp
首先创建一个QListWidgetItem对象,把它加入到ui中去。
QListWidgetItem *lwi=new QListWidgetItem("沁园春-雪");
ui->listWidget->addItem(lwi);
//居中
lwi->setTextAlignment(Qt::AlignCenter|Qt::AlignVCenter);
对于setTextAlignment函数是与setLabelAlignment函数非常相似
添加数据。
QStringList slist;
slist<<"1:北国风光,千里冰封,万里雪飘。";
slist<<"2:望长城内外,惟余莽莽;大河上下,顿时滔滔。";
ui->listWidget->addItems(slist);
值得注意的是addItem和addItems的区别。
void QListWidget:: addItem (const QString & label )
插入项采用文本 label 在列表 Widget 末尾。
void QListWidget:: addItem ( QListWidgetItem * item )
插入 item 在列表 Widget 末尾。
警告: A QListWidgetItem 只可以被添加到 QListWidget 一次。添加相同 QListWidgetItem 多次到 QListWidget 将产生未定义行为。
另请参阅 insertItem ().
void QListWidget:: addItems (const QStringList & labels )
插入项采用文本 labels 在列表 Widget 末尾。
另请参阅 insertItems ().
完整代码
#include "widget.h"
#include "ui_widget.h"
#include<QListWidget>
Widget::Widget(QWidget *parent)
: QWidget(parent)
, ui(new Ui::Widget)
{
ui->setupUi(this);
QListWidgetItem *lwi=new QListWidgetItem("沁园春-雪");
ui->listWidget->addItem(lwi);
//居中
lwi->setTextAlignment(Qt::AlignCenter|Qt::AlignVCenter);
QStringList slist;
slist<<"1:北国风光,千里冰封,万里雪飘。";
slist<<"2:望长城内外,惟余莽莽;大河上下,顿时滔滔。";
ui->listWidget->addItems(slist);
}
Widget::~Widget()
{
delete ui;
}
11.2 树形控件QTreeWidget
同样,首先设置widget.ui文件,因为我们应QTreeWidgetItem类应用树形控件。
widget.ui
widget.cpp
添加一级节点。
//添加一级节点
QTreeWidgetItem *tei1=new QTreeWidgetItem(ui->treeWidget);
tei1->setText(0,"清华大学");
tei1->setCheckState(0,Qt::Checked);
ui->treeWidget->addTopLevelItem(tei1);
发现有个表头,隐藏它。
//隐藏表头
ui->treeWidget->setHeaderHidden(true);
//展开节点
ui->treeWidget->expandAll();
对于setCheckState看这篇文章
void QTreeWidget::addTopLevelItem(QTreeWidgetItem *item):
将项目作为顶级项目追加到小部件中。
void setHeaderHidden(bool hide):
此属性保留是否显示标题。
如果此属性为true,则不显示标题,否则显示标题。默认值为false。
void QTreeView::expandAll():
扩展所有可扩展的物品。
警告:如果模型包含大量项目,此函数将需要一些时间来执行。
添加二级节点。
QTreeWidgetItem *item11=new QTreeWidgetItem(tei1);
item11->setText(0,"清华大学建筑学院");
item11->setCheckState(0,Qt::Checked);
QTreeWidgetItem *item12=new QTreeWidgetItem(tei1);
item12->setText(0,"清华大学建筑学院");
item12->setCheckState(0,Qt::Checked);
QTreeWidgetItem *item13=new QTreeWidgetItem(tei1);
item13->setText(0,"清华大学土木学院");
item13->setCheckState(0,Qt::Checked);
QTreeWidgetItem *item14=new QTreeWidgetItem(tei1);
item14->setText(0,"清华大学信息科学技术学院");
item14->setCheckState(0,Qt::Checked);
QTreeWidgetItem *item15=new QTreeWidgetItem(tei1);
item15->setText(0,"清华大学马克思主义学院");
item15->setCheckState(0,Qt::Checked);
完整代码
#include "widget.h"
#include "ui_widget.h"
#include<QListWidget>
Widget::Widget(QWidget *parent)
: QWidget(parent)
, ui(new Ui::Widget)
{
ui->setupUi(this);
//添加一级节点
QTreeWidgetItem *tei1=new QTreeWidgetItem(ui->treeWidget);
tei1->setText(0,"清华大学");
tei1->setCheckState(0,Qt::Checked);
ui->treeWidget->addTopLevelItem(tei1);
//隐藏表头
ui->treeWidget->setHeaderHidden(true);
//展开节点
ui->treeWidget->expandAll();
QTreeWidgetItem *item11=new QTreeWidgetItem(tei1);
item11->setText(0,"清华大学建筑学院");
item11->setCheckState(0,Qt::Checked);
QTreeWidgetItem *item12=new QTreeWidgetItem(tei1);
item12->setText(0,"清华大学建筑学院");
item12->setCheckState(0,Qt::Checked);
QTreeWidgetItem *item13=new QTreeWidgetItem(tei1);
item13->setText(0,"清华大学土木学院");
item13->setCheckState(0,Qt::Checked);
QTreeWidgetItem *item14=new QTreeWidgetItem(tei1);
item14->setText(0,"清华大学信息科学技术学院");
item14->setCheckState(0,Qt::Checked);
QTreeWidgetItem *item15=new QTreeWidgetItem(tei1);
item15->setText(0,"清华大学马克思主义学院");
item15->setCheckState(0,Qt::Checked);
}
Widget::~Widget()
{
delete ui;
}
11.3 表控件QTableWidget
还是一样先设置widget.ui文件
widget.cpp
设置行和列
//设置行和列
ui->tableWidget->setRowCount(3);
ui->tableWidget->setColumnCount(2);
设置表头
//设置水平表头
QStringList sl;
sl<<"学号"<<"高考分数";
ui->tableWidget->setHorizontalHeaderLabels(sl);
添加数据
QList<QString> no;
no<<"123"<<"456"<<"789";
QList<QString> score;
score<<"100"<<"200"<<"300";
for(int i=0;i<3;i++)
{
int col=0;
QTableWidgetItem *twi=new QTableWidgetItem(no.at(i));
ui->tableWidget->setItem(i,col++,twi);
ui->tableWidget->setItem(i,col,new QTableWidgetItem(score.at(i)));
}
void QTableWidget::setItem(int row, int column, QTableWidgetItem *item):
将给定行和列的项设置为item。
表获得项的所有权。
注意,如果启用了排序(请参阅sortingEnabled)并且column是当前排序列,则该行将被移动到由item确定的排序位置。
如果你想设置特定行的几个项(比如,通过在循环中调用setItem()),你可能想在这样做之前关闭排序,然后再打开它;这将允许您对同一行中的所有项使用相同的row参数(即setItem()不会移动该行)。
完整代码
#include "widget.h"
#include "ui_widget.h"
Widget::Widget(QWidget *parent)
: QWidget(parent)
, ui(new Ui::Widget)
{
ui->setupUi(this);
//设置行和列
ui->tableWidget->setRowCount(3);
ui->tableWidget->setColumnCount(2);
//设置水平表头
QStringList sl;
sl<<"学号"<<"高考分数";
ui->tableWidget->setHorizontalHeaderLabels(sl);
QList<QString> no;
no<<"123"<<"456"<<"789";
QList<QString> score;
score<<"100"<<"200"<<"300";
for(int i=0;i<3;i++)
{
int col=0;
QTableWidgetItem *twi=new QTableWidgetItem(no.at(i));
ui->tableWidget->setItem(i,col++,twi);
ui->tableWidget->setItem(i,col,new QTableWidgetItem(score.at(i)));
}
}
Widget::~Widget()
{
delete ui;
}