QtQuick学习笔记(三)单元视图组件

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();
} 
  • 34
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值