QT開發(八)——QT單元視圖組件

QT開發(八)——QT單元視圖組件

    QT中有四種單元視圖組件,分別爲列表視圖QListView、樹形視圖QTreeView、表格視圖QTableView、列視圖QColumnViewapp

1、QListView列表視圖

1QListView組件簡介

    QListView列表視圖,繼承自QAbstractItemView。QListView是基於模型的列表/圖標視圖,不顯示錶頭和表框,爲Qt的模型/視圖結構提供了更靈活的方式。框架

2QListView組件屬性

    QListView組件屬性設置:ide

    A、name:組件對應源代碼中的名稱。函數

    B、font:設置視圖內字體。佈局

 C、batchSize:若是將layoutMode設置爲Batched,則這個屬性保存批量處理的規格。字體

    D、layoutModel:項目的佈局模式。ui

    E、modeColumn:模型中可見的類,默認狀況下,置爲0,表述模型中第一列可見。this

    F、viewModel:保存ListView組件的視圖模型。spa

3QListView組件經常使用成員函數

QListView::QListViewQWidget *parent = 0code

構造一個父對象爲parent的ListView。

void QListView::currentChangedconst QModelIndex ¤tconst QModelIndex &previous[virtual protected]

current定位當前項目,previous是之前的項目。

void QListView::dataChangedconst QModelIndex &topLeftconst QModelIndex &bottomRight[virtual protected]

更改模型中項目topLeft到bottomRight。

QModelIndex QListView::indexAtconst QPoint &pconst [virtual]

返回座標點p處項目的模型索引。

void QListView::rowsInsertedconst QModelIndex &parentint startint end[virtual protected]

插入新行,新行的父母是parent,從start到end的全部項目。

QModelIndexList QListView::selectedIndexes()const[virtual protected]

返回全部選中的非隱藏的項目的模型索引。

void setViewMode ( ViewMode mode )

設置顯示模式,分爲QListView::ListModeQListView::IconMode默認ListMode

void setLayoutMode ( LayoutMode mode )

設置佈局模式,QListView::SinglePassQListView::Batched

virtual void QAbstractItemView::setModel(QAbstractItemModel * model)

設置view所關聯的model

四、QListView實例

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();
}


2、QTreeView樹形視圖

1QTreeView組件簡介

    QTreeView樹形視圖,繼承自QAbstractItemView,是基於模型的列表/圖標視圖,也是Qt模型/視圖框架的一部分。

2QTreeView組件屬性

    QTreeView組件屬性設置選項:

    A、name:組件對應源代碼中的名稱。

    B、font:設置組件內全部文本的字體。

    C、sortingEnable:項目是否排序。

3QTreeView組件經常使用成員函數

QTreeView::QTreeViewQWidget *parent = 0

構造一個父對象爲parent的TreeView。

void QTreeView::collapseconst QModena &index[slot]

摺疊模型索引爲index的項目

void QTreeView::collapseAll()[slot]

摺疊全部項目

int QTreeView::columnAtint xconst

返回x座標處的列。

void QTreeView::columnCountChangedint oldCountint newCount[protected slot]

通知樹形視圖中的列數,從oldCount改變到newCount。

void QTreeView::currentChangedconst QModelIndex ¤tconst QModelIndex &previous[virtual protected]

current定爲當前項目,previous是之前的當前項目

void QTreeView::dataChangedconst QModelIndex &topLeftconst QModelIndex &bottomRight[virtual]

更改模型中項目topLeft到bottomRight。

void QTreeView::drawBranchesQPainter *painterconst QRect &rectconst QModelIndex &indexconst [virtual protected[

在項目index的同一行,用painter繪製指定的rect矩形分支。

void QTreeView::drawRowQPainter *painterconst QStyleOptionViewItem &optionconst QModelIndex &indexconst [virtual protected]

painter繪製新行,新行包含模型索引 爲index的項目,option是如何顯示項目。

void QTreeView::drawTreeQPainter *painterconst QRegion ionconst [protected]

painter在區域region繪製樹

void QTreeView::expandconst QModelIndex &index[slot]

展開模型索引爲index的項目。

void QTreeView::expandAll()[slot]

展開全部的項目

void QTreeView::expandToDepth(int depth) [slot]

展開樹形視圖中的項目,深度爲depth

QHeaderView *QTreeView::header()const

返回該樹形視圖的header

QModelIndex QTreeView::indexAboveconst QModelIndex &indexconst

返回模型索引index的上一個索引

 QModelIndex QTreeView::indexAtconst QPoint &pointconst [virtual]

返回點point處項目的模型索引

QModelIndex QTreeView::indexBelowconst QModelIndex &indexconst

返回模型索引index的下一個索引

bool QTreeView::isExpandedconst QModelIndex &indexconst

若是模型索引index處的項目是展開着的,返回true,不然返回false

void QTreeV::rowsInsertedconst QModelIndex &parentint startint end[virtual protected]

插入新行,新行的父母是parent,包括從start到end的全部項目。

void QTreeView::rowsRemovedconst QModelIndex &parentint startint end[protected slot]

刪除行,行的父母是parent,包括從start到end的全部項目

void QTreeView::selectAll()[virtual]

設置全部的項目都是選擇狀態

QModelIndexList QTreeView::selectedIndexes()const [virtual protected]

返回全部選中和非隱藏的項目的模型索引

void QTreeView::setHeaderQHeaderView *header

設置該TreeView的標題爲header

void QTreeView::sortByColumnint columnQT::SortOrder order

對列column按order進行排序

4QTreeView實例

#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();
}

3、QTableView表格視圖

1QTableView組件簡介

    QTableView表格視圖,是一個模型/視圖結構的表視圖實現,用來顯示模型的項目。QTableView提供了QTable類提供的標準表格,是Qt的模型/視圖框架的一部分,由QAbstractItemView類定義的接口來實現,使其可以顯示由QAbstractItemModel類派生的模型提供的數據。QTableView能夠使用自定義的數據模型來顯示內容

2QTableView組件屬性

    QTableView組件屬性設置選項:

    A、name:該控件對應源代碼中的名稱

    B、font:設置表格內部的字體

    C、cornerButtonEnabled:左上角的按鈕是否有用

    D、gridStyle:表格的格式

    E、showGrid:是否顯示網格,值爲true,顯示,不然不顯示

    F、sortingEnabled:是否對項目排序

3QTableView組件經常使用成員函數

QTableView::QTableViewQWidget *parent = 0

構造一個父對象爲parent的TableView

 void QTableView::clearSpans()

刪除TableView中的全部行和列的跨度

 int QTableView::columnAtint xconst

返回座標x處的列,若是座標處沒有項目則返回-1

 int QTableView::columnSpanint rowintcolumnconst

返回行row、列column處的行跨度

void QTableView::currentChangedconst QModelIndex ¤tconst QModelIndex &previous[virtual protected]

current指定爲當前項目,previous是之前的項目

QHeaderView *QTableView::horizontalHeader()const

返回TableView的水平標題

QModelIndex QTableView::indexAtconst QPoint *posconst [virtual]

返回點pos處項目的模型索引

int QTableView::rowAtint yconst

返回座標y處的行,若是座標處沒有項目則返回-1

 int QTableView::rowSpanint rowint columnconst

返回行row、列column處的列跨度

void QTableView::selectcolumnint column[slot]

設置列column爲選中狀態

void QTableView::selectRowint row[slot]

設置行row爲選中狀態

QModelIndexList QTableView::selectedIndexes()const [virtual protected]

返回全部選中和非隱藏的項目的模型索引

void QTableView::setHorizontalHeaderQHeaderView *header

設置TableView的水平標題爲header

void QTableView::setSpanint rowint columnint rowSpanCountint columnCount

設置行row、列column處的行跨度爲rowSpanCount、列跨度爲columnSpanCount

void QTableView::setVerticalHeaderQHeaderView *header

設置TableView的垂直標題爲header

void QTableView::showColumnint column[slot]

顯示列column

void QTableView::showRowint row[slot]

顯示行row

QHeaderView *QTableView::verticalHeader()const

返回TableView的垂直標題

四、QTableView實例

#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();
}

4、QColumnView列視圖

1QColumnView組件簡介

    QColumnView列視圖提供了一個模型/視圖的列視圖實現,是模型/視圖框架的一部分,提供了多級的視圖(每點開一個選項都會在它旁邊出現一個菜單,顯示它全部的子項目)。

2QColumnView組件屬性

    QColumnView組件屬性設置選項:

    A、name:組件對應源代碼中的名字

    B、font:設置表格內部的字體

3QColumnView組件經常使用成員函數

QColumnView::QColumnViewQWidget *parent = 0

構造一個父對象爲parent的ColumnView

QAbstractItemView * QColumnView::createColumnconst QModelIndex *index[virtual protected]

index是視圖的根模型索引,返回新的視圖

void QColumnView::currentChangedconst QModelIndex ¤tconst QModelIndex &previous[virtual protected]

current指定爲當前項目,previous是之前的當前項目

QModelIndex QColumnView::indexAtcosnt QPoint &pointconst [virtual]

返回點pos處項目的索引模型

QWidget *QColumnView::previewWidget()const

返回預覽組件,若是沒有則返回0

void QColumnView::rowsInsertedconst QModelIndex &parentint startint end[virtual protected]

插入新行,新行的父母是parent包括從start到end的全部項目

void QColumnView::selectAll()[virtual]

設置該ColumnView中的全部項目爲選中狀態

void QColumnView::setPreviewWidgetQWidget *widget

設置widget爲該columnView的預覽組件。

四、QColumnView實例

#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();
}
相關文章
相關標籤/搜索