QT中有四種單元視圖組件,分別爲列表視圖QListView、樹形視圖QTreeView、表格視圖QTableView、列視圖QColumnView。app
QListView列表視圖,繼承自QAbstractItemView。QListView是基於模型的列表/圖標視圖,不顯示錶頭和表框,爲Qt的模型/視圖結構提供了更靈活的方式。框架
QListView組件屬性設置:ide
A、name:組件對應源代碼中的名稱。函數
B、font:設置視圖內字體。佈局
C、batchSize:若是將layoutMode設置爲Batched,則這個屬性保存批量處理的規格。字體
D、layoutModel:項目的佈局模式。ui
E、modeColumn:模型中可見的類,默認狀況下,置爲0,表述模型中第一列可見。this
F、viewModel:保存ListView組件的視圖模型。spa
QListView::QListView(QWidget *parent = 0)code
構造一個父對象爲parent的ListView。
void QListView::currentChanged(const QModelIndex ¤t,const QModelIndex &previous)[virtual protected]
把current定位當前項目,previous是之前的項目。
void QListView::dataChanged(const QModelIndex &topLeft,const QModelIndex &bottomRight)[virtual protected]
更改模型中項目topLeft到bottomRight。
QModelIndex QListView::indexAt(const QPoint &p)const [virtual]
返回座標點p處項目的模型索引。
void QListView::rowsInserted(const QModelIndex &parent,int start,int end)[virtual protected]
插入新行,新行的父母是parent,從start到end的全部項目。
QModelIndexList QListView::selectedIndexes()const[virtual protected]
返回全部選中的非隱藏的項目的模型索引。
void setViewMode ( ViewMode mode )
設置顯示模式,分爲QListView::ListMode,QListView::IconMode,默認ListMode
void setLayoutMode ( LayoutMode mode )
設置佈局模式,QListView::SinglePass,QListView::Batched
virtual void QAbstractItemView::setModel(QAbstractItemModel * model)
設置view所關聯的model
Widget.h文件:
#ifndef WIDGET_H #define WIDGET_H #include <QtGui/QWidget> #include <QStringListModel> #include <QListView> #include <QDialogButtonBox> #include <QPushButton> #include <QVBoxLayout> class Widget : public QWidget { Q_OBJECT public: Widget(const QStringList &leaders, QWidget *parent = 0); ~Widget(); private: QStringListModel *model; QListView *listView; QDialogButtonBox *buttonBox; private slots: void onDelete(); void onInsert(); }; #endif // WIDGET_H
Widget.cpp文件:
#include "widget.h" Widget::Widget(const QStringList &leaders, QWidget *parent) : QWidget(parent) { model = new QStringListModel(this); model->setStringList(leaders); listView = new QListView; listView->setModel(model); listView->setEditTriggers(QAbstractItemView::AnyKeyPressed | QAbstractItemView::DoubleClicked); buttonBox = new QDialogButtonBox; QPushButton *insertButton = buttonBox->addButton( tr("&Insert"),QDialogButtonBox::ActionRole); QPushButton *deleteButton = buttonBox->addButton( tr("&Delete"), QDialogButtonBox::ActionRole); connect(insertButton, SIGNAL(clicked()), this, SLOT(onInsert())); connect(deleteButton, SIGNAL(clicked()), this, SLOT(onDelete())); QVBoxLayout *layout = new QVBoxLayout; layout->addWidget(listView); layout->addWidget(buttonBox); setLayout(layout); setWindowTitle(tr("QStringListModel")); } Widget::~Widget() { } void Widget::onDelete() { model->removeRows(listView->currentIndex().row(), 1); } void Widget::onInsert() { int row = listView->currentIndex().row(); model->insertRows(row, 1); QModelIndex index = model->index(row); listView->setCurrentIndex(index); listView->edit(index); }
Main.cpp文件:
#include <QtGui/QApplication> #include "widget.h" int main(int argc, char *argv[]) { QApplication a(argc, argv); QStringList list; list << QObject::tr("xianziyu") << QObject::tr("yangwangming") << QObject::tr("yinshixin") << QObject::tr("baichengshuang") << QObject::tr("zhangzurui"); Widget w(list); w.show(); return a.exec(); }
QTreeView樹形視圖,繼承自QAbstractItemView,是基於模型的列表/圖標視圖,也是Qt模型/視圖框架的一部分。
QTreeView組件屬性設置選項:
A、name:組件對應源代碼中的名稱。
B、font:設置組件內全部文本的字體。
C、sortingEnable:項目是否排序。
QTreeView::QTreeView(QWidget *parent = 0)
構造一個父對象爲parent的TreeView。
void QTreeView::collapse(const QModena &index)[slot]
摺疊模型索引爲index的項目
void QTreeView::collapseAll()[slot]
摺疊全部項目
int QTreeView::columnAt(int x)const
返回x座標處的列。
void QTreeView::columnCountChanged(int oldCount,int newCount)[protected slot]
通知樹形視圖中的列數,從oldCount改變到newCount。
void QTreeView::currentChanged(const QModelIndex ¤t,const QModelIndex &previous)[virtual protected]
把current定爲當前項目,previous是之前的當前項目
void QTreeView::dataChanged(const QModelIndex &topLeft,const QModelIndex &bottomRight)[virtual]
更改模型中項目topLeft到bottomRight。
void QTreeView::drawBranches(QPainter *painter,const QRect &rect,const QModelIndex &index)const [virtual protected[
在項目index的同一行,用painter繪製指定的rect矩形分支。
void QTreeView::drawRow(QPainter *painter,const QStyleOptionViewItem &option,const QModelIndex &index)const [virtual protected]
用painter繪製新行,新行包含模型索引 爲index的項目,option是如何顯示項目。
void QTreeView::drawTree(QPainter *painter,const QRegion ion)const [protected]
用painter在區域region繪製樹
void QTreeView::expand(const QModelIndex &index)[slot]
展開模型索引爲index的項目。
void QTreeView::expandAll()[slot]
展開全部的項目
void QTreeView::expandToDepth(int depth) [slot]
展開樹形視圖中的項目,深度爲depth
QHeaderView *QTreeView::header()const
返回該樹形視圖的header
QModelIndex QTreeView::indexAbove(const QModelIndex &index)const
返回模型索引index的上一個索引
QModelIndex QTreeView::indexAt(const QPoint &point)const [virtual]
返回點point處項目的模型索引
QModelIndex QTreeView::indexBelow(const QModelIndex &index)const
返回模型索引index的下一個索引
bool QTreeView::isExpanded(const QModelIndex &index)const
若是模型索引index處的項目是展開着的,返回true,不然返回false
void QTreeV::rowsInserted(const QModelIndex &parent,int start,int end)[virtual protected]
插入新行,新行的父母是parent,包括從start到end的全部項目。
void QTreeView::rowsRemoved(const QModelIndex &parent,int start,int end)[protected slot]
刪除行,行的父母是parent,包括從start到end的全部項目
void QTreeView::selectAll()[virtual]
設置全部的項目都是選擇狀態
QModelIndexList QTreeView::selectedIndexes()const [virtual protected]
返回全部選中和非隱藏的項目的模型索引
void QTreeView::setHeader(QHeaderView *header)
設置該TreeView的標題爲header
void QTreeView::sortByColumn(int column,QT::SortOrder order)
對列column按order進行排序
#include <QtGui> #include <QString> #include <QTextCodec> #include <QSplitter> int main(int argc, char *argv[]) { QApplication a(argc, argv); QSplitter *splitter = new QSplitter; QDirModel *model = new QDirModel; //從缺省目錄建立數據 QTreeView *tree = new QTreeView(splitter); tree->setModel(model); tree->setRootIndex(model->index("d:\\")); QTextCodec::setCodecForTr(QTextCodec::codecForName("GBK")); //中文顯示 QTextCodec *codec = QTextCodec::codecForLocale(); QString s = codec->toUnicode("目錄"); splitter->setWindowTitle(s); splitter->show(); return a.exec(); }
QTableView表格視圖,是一個模型/視圖結構的表視圖實現,用來顯示模型的項目。QTableView提供了QTable類提供的標準表格,是Qt的模型/視圖框架的一部分,由QAbstractItemView類定義的接口來實現,使其可以顯示由QAbstractItemModel類派生的模型提供的數據。QTableView能夠使用自定義的數據模型來顯示內容。
QTableView組件屬性設置選項:
A、name:該控件對應源代碼中的名稱
B、font:設置表格內部的字體
C、cornerButtonEnabled:左上角的按鈕是否有用
D、gridStyle:表格的格式
E、showGrid:是否顯示網格,值爲true,顯示,不然不顯示
F、sortingEnabled:是否對項目排序
QTableView::QTableView(QWidget *parent = 0)
構造一個父對象爲parent的TableView
void QTableView::clearSpans()
刪除TableView中的全部行和列的跨度
int QTableView::columnAt(int x)const
返回座標x處的列,若是座標處沒有項目則返回-1
int QTableView::columnSpan(int row,intcolumn)const
返回行row、列column處的行跨度
void QTableView::currentChanged(const QModelIndex ¤t,const QModelIndex &previous)[virtual protected]
把current指定爲當前項目,previous是之前的項目
QHeaderView *QTableView::horizontalHeader()const
返回TableView的水平標題
QModelIndex QTableView::indexAt(const QPoint *pos)const [virtual]
返回點pos處項目的模型索引
int QTableView::rowAt(int y)const
返回座標y處的行,若是座標處沒有項目則返回-1
int QTableView::rowSpan(int row,int column)const
返回行row、列column處的列跨度
void QTableView::selectcolumn(int column)[slot]
設置列column爲選中狀態
void QTableView::selectRow(int row)[slot]
設置行row爲選中狀態
QModelIndexList QTableView::selectedIndexes()const [virtual protected]
返回全部選中和非隱藏的項目的模型索引
void QTableView::setHorizontalHeader(QHeaderView *header)
設置TableView的水平標題爲header
void QTableView::setSpan(int row,int column,int rowSpanCount,int columnCount)
設置行row、列column處的行跨度爲rowSpanCount、列跨度爲columnSpanCount
void QTableView::setVerticalHeader(QHeaderView *header)
設置TableView的垂直標題爲header
void QTableView::showColumn(int column)[slot]
顯示列column
void QTableView::showRow(int row)[slot]
顯示行row
QHeaderView *QTableView::verticalHeader()const
返回TableView的垂直標題
#include <QtGui/QApplication> #include <QTableView> #include <QStandardItemModel> #include <QHeaderView> int main(int argc, char *argv[]) { QApplication a(argc, argv); QStandardItemModel *model = new QStandardItemModel(); model->setColumnCount(2); model->setHeaderData(0,Qt::Horizontal,QString::fromLocal8Bit("卡號")); model->setHeaderData(1,Qt::Horizontal,QString::fromLocal8Bit("姓名")); QTableView *tableview = new QTableView(); tableview->setModel(model); tableview->horizontalHeader()->setDefaultAlignment(Qt::AlignLeft); tableview->horizontalHeader()->setResizeMode(0,QHeaderView::Fixed); tableview->horizontalHeader()->setResizeMode(1,QHeaderView::Fixed); tableview->setColumnWidth(0, 100); tableview->setColumnWidth(1, 100); for(int i = 0; i < 100; i++) { model->setItem(i,0,new QStandardItem("220161101")); //設置字符顏色 model->item(i,0)->setForeground(QBrush(QColor(255, 0, 0))); //設置字符位置 model->item(i,0)->setTextAlignment(Qt::AlignCenter); model->setItem(i,1,new QStandardItem(QString::fromLocal8Bit("哈哈"))); } tableview->show(); return a.exec(); }
QColumnView列視圖提供了一個模型/視圖的列視圖實現,是模型/視圖框架的一部分,提供了多級的視圖(每點開一個選項都會在它旁邊出現一個菜單,顯示它全部的子項目)。
QColumnView組件屬性設置選項:
A、name:組件對應源代碼中的名字
B、font:設置表格內部的字體
QColumnView::QColumnView(QWidget *parent = 0)
構造一個父對象爲parent的ColumnView
QAbstractItemView * QColumnView::createColumn(const QModelIndex *index)[virtual protected]
index是視圖的根模型索引,返回新的視圖
void QColumnView::currentChanged(const QModelIndex ¤t,const QModelIndex &previous)[virtual protected]
把current指定爲當前項目,previous是之前的當前項目
QModelIndex QColumnView::indexAt(cosnt QPoint &point)const [virtual]
返回點pos處項目的索引模型
QWidget *QColumnView::previewWidget()const
返回預覽組件,若是沒有則返回0
void QColumnView::rowsInserted(const QModelIndex &parent,int start,int end)[virtual protected]
插入新行,新行的父母是parent包括從start到end的全部項目
void QColumnView::selectAll()[virtual]
設置該ColumnView中的全部項目爲選中狀態
void QColumnView::setPreviewWidget(QWidget *widget)
設置widget爲該columnView的預覽組件。
#include <QtGui/QApplication> #include <QMainWindow> #include <QColumnView> #include <QStandardItemModel> #include <QStandardItem> int main(int argc, char *argv[]) { QApplication app(argc, argv); QMainWindow win; QColumnView *cview = new QColumnView(&win); win.setCentralWidget(cview); QStandardItemModel model; for (int groupnum = 0; groupnum < 3 ; ++groupnum) { QStandardItem *group = new QStandardItem(QString("Group %1").arg(groupnum)); for (int personnum = 0; personnum < 5 ; ++personnum) { QStandardItem *child = new QStandardItem(QString("Person %1 (group %2)").arg(personnum).arg(groupnum)); group->appendRow(child); } model.appendRow(group); } cview->setModel(&model); win.show(); return app.exec(); }