1. QListView
功能
基于模型的列表/图标视图,不显示表头和表框
常用函数
- QListView::QListView(QWidget *parent = 0)
构造一个父对象为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
效果与实例
main.cpp
#include "widget.h"
#include <QApplication>
int main(int argc, char *argv[])
{
QApplication a(argc, argv);
QStringList list;
list << QObject::tr("apple")
<< QObject::tr("banana")
<< QObject::tr("orange")
<< QObject::tr("pear")
<< QObject::tr("melon");
Widget w(list);
w.show();
return a.exec();
}
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("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);
}
widget.h
#ifndef WIDGET_H
#define WIDGET_H
#include <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
2. QTreeView
功能
基于模型的树状列表/图标视图
常用函数
- 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::ndexAt(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进行排序
效果与实例
main.cpp
#include <QString>
#include <QTextCodec>
#include <QSplitter>
#include <QtGui>
#include <QDirModel>
#include <QTreeView>
#include <QApplication>
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::setCodecForLocale(QTextCodec::codecForName("GBK"));
QTextCodec *codec = QTextCodec::codecForLocale();
QString s = codec->toUnicode("Content");
splitter->setWindowTitle(s);
splitter->show();
return a.exec();
}
3. QTableView
功能
表格视图,多用于显示模型,且支持使用自定义数据模型显示内容
常用函数
- 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的垂直标题
效果与实例
main.cpp
#include <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()->setSectionResizeMode(0,QHeaderView::Fixed);
tableview->horizontalHeader()->setSectionResizeMode(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("admin")));
}
tableview->show();
return a.exec();
}
4. QColumnView
功能
列视图,提供了多级视图
常用函数
- 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的预览组件。
效果与实例
main.cpp
#include <QMainWindow>
#include <QColumnView>
#include <QApplication>
#include <QStandardItemModel>
#include <QStandardItem>
int main(int argc, char *argv[])
{
QApplication a(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("QGroup %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 a.exec();
}