学习目标: Qt 基础组件复习/速学 视图与控件篇
前置环境:
运行环境:qt creator 4.12
学习内容:
视图与控件的区别:
视图主要负责数据的展示和交互,而控件则更侧重于构建用户界面。代码编写的思想也不同。
//清单视图控件 思想:先搞模型 再往模型注入数据
Widget::setQListView();
//树视图
Widget::setQTreeView();
//表视图
Widget::setQTableView();//清单 树 表控件 思想:需要则直接注入
Widget::setQTableWidget();
Widget::setQListWidget();
Widget::setQTreeWidget();
详细代码和运行测试
视图
清单视图
void Widget::setQListView(){
QStringList qls;
qls.append("国学类:黄帝内经,道德经,孔子圣经");
qls.append("计算机类:操作系统,计网,数据结构算法");
qls.append("数学类:高等数学,线性代数,微分方程");
QStringListModel* qslmode = new QStringListModel(qls);
QListView* qlv = new QListView(this);
qlv->setModel(qslmode);
qlv->setWindowTitle("清单视图控件");
qgrid->addWidget(qlv,0,0);
connect(qlv,SIGNAL(clicked(const QModelIndex)),this,SLOT(QListViewslot(const QModelIndex)));
}
void Widget::QListViewslot(const QModelIndex& data){
QMessageBox::information(NULL,"你选择的课程",data.data().toString());
}
树视图
void Widget::setQTreeView(){
QTreeView* treeview = new QTreeView(this);
QStandardItemModel * standMode = new QStandardItemModel(treeview);
standMode->setHorizontalHeaderLabels(QStringList()<<QStringLiteral("国家")<<QStringLiteral("省份"));
QList<QStandardItem*> itemSet;
itemSet.append(new QStandardItem("俄罗斯"));
itemSet.append(new QStandardItem("莫斯科"));
QList<QStandardItem*> itemSet2;
itemSet2.append(new QStandardItem("中国"));
itemSet2.append(new QStandardItem("北京"));
//1级
QList<QStandardItem*> itemSet3;
QStandardItem* cn = new QStandardItem("中国");
QStandardItem* cn_gd = new QStandardItem("广东");
itemSet3.append(cn);
itemSet3.append(cn_gd);
// 二级节点,添加到第一个一级节点
QList<QStandardItem*> itemSet32;
QStandardItem* gd = new QStandardItem("广东");
QStandardItem* gd_gz = new QStandardItem("广州");
itemSet32.append(gd);
itemSet32.append(gd_gz);
cn->appendRow(itemSet32);
QList<QStandardItem*> itemSet33;
QStandardItem* gd2 = new QStandardItem("广东");
QStandardItem* gd_sz = new QStandardItem("深圳");
itemSet33.append(gd2);
itemSet33.append(gd_sz);
cn->appendRow(itemSet33);
// 3级节点,添加到第一个2级节点
QList<QStandardItem*> itemSet323;
QStandardItem* gz = new QStandardItem("广州");
QStandardItem* gz_th = new QStandardItem("天河");
itemSet323.append(gz);
itemSet323.append(gz_th);
gd->appendRow(itemSet323);
QList<QStandardItem*> itemSet333;
QStandardItem* gd_sz2 = new QStandardItem("深圳");
QStandardItem* sz_gm = new QStandardItem("光明");
itemSet333.append(gd_sz2);
itemSet333.append(sz_gm);
gd2->appendRow(itemSet333);
standMode->appendRow(itemSet);
standMode->appendRow(itemSet2);
standMode->appendRow(itemSet3);
treeview->setModel(standMode);
treeview->setRootIsDecorated(true);
qgrid->addWidget(treeview,1,0);
}
表格视图
void Widget::setQTableView(){
QTableView* tabView = new QTableView(this);
QStandardItemModel* standModel = new QStandardItemModel(tabView);
standModel->setHorizontalHeaderItem(0,new QStandardItem("学号"));
standModel->setHorizontalHeaderItem(1,new QStandardItem("姓名"));
standModel->setHorizontalHeaderItem(2,new QStandardItem("性别"));
standModel->setHorizontalHeaderItem(3,new QStandardItem("分数"));
standModel->setItem(0,0,new QStandardItem("231320206111"));
standModel->setItem(0,1,new QStandardItem("张子房"));
standModel->setItem(0,2,new QStandardItem("男"));
standModel->setItem(0,3,new QStandardItem("768"));
standModel->setItem(1,0,new QStandardItem("231320206112"));
standModel->setItem(1,1,new QStandardItem("倾国"));
standModel->setItem(1,2,new QStandardItem("男"));
standModel->setItem(1,3,new QStandardItem("658"));
standModel->setItem(2,0,new QStandardItem("231320206113"));
standModel->setItem(2,1,new QStandardItem("项羽"));
standModel->setItem(2,2,new QStandardItem("男"));
standModel->setItem(2,3,new QStandardItem("999"));
tabView->setModel(standModel);
//设置 不可修改
tabView->setEditTriggers(QAbstractItemView::NoEditTriggers);
//排序 Qt::AscendingOrder 降序 DescendingOrder升
tabView->sortByColumn(3,Qt::DescendingOrder);
tabView->windowTitleChanged("列表视图");
qgrid->addWidget(tabView,3,0);
}
控件
清单控件
void Widget::setQListWidget(){
QListWidget* lswidget = new QListWidget(this);
QListWidgetItem* qlistitem = new QListWidgetItem("龟虽寿 曹操");
qlistitem->setTextAlignment(Qt::AlignVCenter | Qt::AlignCenter);
lswidget->addItem(qlistitem);
lswidget->addItem("神龟虽寿,犹有竟时。\n \
螣蛇乘雾,终为土灰。 \n\
老骥伏枥,志在千里。 \n\
烈士暮年,壮心不已。 \n\
盈缩之期,不但在天; \n\
养怡之福,可得永年。 \n\
幸甚至哉,歌以咏志。\n");
qgrid->addWidget(lswidget,0,1);
}
树控件
void Widget::setQTreeWidget(){
QTreeWidget* treeWidget = new QTreeWidget(this);
//1
QTreeWidgetItem* twtitle = new QTreeWidgetItem(treeWidget);
twtitle->setText(0,"北京大学");
//twtitle->setCheckState(0,Qt::Checked);
//1
QTreeWidgetItem* twtitle2 = new QTreeWidgetItem(treeWidget);
twtitle2->setText(0,"清华大学");
//twtitle->setCheckState(0,Qt::Checked);
//2
QTreeWidgetItem* item = new QTreeWidgetItem(twtitle);
item->setText(0,"数学系");
item->setCheckState(0,Qt::Checked);
QTreeWidgetItem* item2 = new QTreeWidgetItem(twtitle);
item2->setText(0,"计算机系");
item2->setCheckState(0,Qt::Checked);
QTreeWidgetItem* item3 = new QTreeWidgetItem(twtitle);
item3->setText(0,"哲学系");
item3->setCheckState(0,Qt::Checked);
QTreeWidgetItem* item21 = new QTreeWidgetItem(twtitle2);
item21->setText(0,"数学系");
item21->setCheckState(0,Qt::Checked);
QTreeWidgetItem* item22 = new QTreeWidgetItem(twtitle2);
item22->setText(0,"计算机系");
item22->setCheckState(0,Qt::Checked);
QTreeWidgetItem* item32 = new QTreeWidgetItem(twtitle2);
item32->setText(0,"哲学系");
item32->setCheckState(0,Qt::Checked);
//隐藏表单头部
treeWidget->setHeaderHidden(true);
//展开
treeWidget->expandAll();
treeWidget->addTopLevelItem(twtitle);
qgrid->addWidget(treeWidget,1,1);
}
表格控件
void Widget::setQTableWidget(){
QTableWidget* tableWidget = new QTableWidget();
tableWidget->setColumnCount(2);
tableWidget->setRowCount(3);
QStringList slist;
slist<<"学号"<<"高考分数";
tableWidget->setHorizontalHeaderLabels(slist);
QList<QString> idset;
idset <<"231320206110"<<"231320206111"<<"231320206112";
QList<QString> scoreset;
scoreset <<"110"<<"211"<<"206";
for(int i=0; i<3;i++){
int cloum = 0;
// 0 0 data
tableWidget->setItem(i,cloum++,new QTableWidgetItem(idset.at(i)));
tableWidget->setItem(i,cloum++,new QTableWidgetItem(scoreset.at(i)));
}
tableWidget->sortItems(1,Qt::DescendingOrder);
qgrid->addWidget(tableWidget,3,1);
}
总结:
视图 :先搞模型 再往模型注入数据
控件:需要则直接注入