热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

QTableView简单使用

QTableView入门先来看一下QTableView介绍:(Qt5.7.0)TheQTableViewclassprovidesadefaultmodelviewi

QTableView入门

先来看一下QTableView介绍:(Qt 5.7.0)
The QTableView class provides a default model/view implementation of a table view.

A QTableView implements a table view that displays items from a model. This class is used to provide standard tables that were previously provided by the QTable class, but using the more flexible approach provided by Qt's model/view architecture.

The QTableView class is one of the Model/View Classes and is part of Qt's model/view framework.

QTableView implements the interfaces defined by the QAbstractItemView class to allow it to display data provided by models derived from the QAbstractItemModel class.

本人英语水平有限,就不作翻译了,以免误人子弟。从官方的介绍,可以得到以下信息:

QTableView是用来展示item的,item包含在model中。QTableView和model各司其职。
怎么理解这个呢,拿相框、相片、相册来说吧,相框用来展示相片,相片是从相册中取出来的。
为了使用QTableView,必须使用一个model,可以使用QStandardItemModel。

来一个栗子:

// 头文件
#ifndef MYWIDGET_H
#define MYWIDGET_H#include
#include
#include class MyWidget : public QWidget
{Q_OBJECTpublic:MyWidget(QWidget *parent = 0);~MyWidget();private:QTableView * table_view;QStandardItemModel * item_model;
};#endif // MYWIDGET_H

// 源文件
#include "mywidget.h"
#include MyWidget::MyWidget(QWidget *parent): QWidget(parent)
{table_view &#61; new QTableView(this);item_model &#61; new QStandardItemModel(4,4); // 4行4列table_view->setModel(item_model); // 关联view与modelfor (int i &#61; 0; i <4; &#43;&#43;i)for (int j &#61; 0; j <4; &#43;&#43;j)item_model->setItem(i, j, new QStandardItem(QString("%1").arg(i &#43; j))); // 向model中添加item
}MyWidget::~MyWidget()
{}

运行结果&#xff1a;
_
可以看到&#xff0c;model中的item&#xff0c;都在QTableView中展示出来了&#xff0c;但这界面&#xff0c;好像只能用两个字来形容了&#xff0c;好丑。

为了让QTableView铺满窗口&#xff0c;可以使用布局&#xff0c;此处选择QHBoxLayout。

MyWidget::MyWidget(QWidget *parent): QWidget(parent)
{setFixedSize(600, 300); // 设置窗体大小QHBoxLayout * alayout &#61; new QHBoxLayout(this);table_view &#61; new QTableView;alayout->addWidget(table_view);item_model &#61; new QStandardItemModel(4,4);table_view->setModel(item_model);for (int i &#61; 0; i <4; &#43;&#43;i)for (int j &#61; 0; j <4; &#43;&#43;j)item_model->setItem(i, j, new QStandardItem(QString("%1").arg(i &#43; j)));
}

_
通过这张图&#xff0c;可以清晰的看到&#xff0c;QTableView包含下列内容&#xff1a;
_

可以看到&#xff0c;最后一列的右边&#xff0c;还有好大一片空白&#xff0c;看着好不别扭。为了能让最后一列一直伸展到最右边&#xff0c;可以使用水平表头的setStretchLastSection()函数。同时&#xff0c;也可以设置水平表头或垂直表头的标签内容&#xff0c;追加数据等操作。

MyWidget::MyWidget(QWidget *parent): QWidget(parent)
{setFixedSize(600, 300); // 设置窗体大小QHBoxLayout * alayout &#61; new QHBoxLayout(this);table_view &#61; new QTableView;alayout->addWidget(table_view);item_model &#61; new QStandardItemModel(4,4);table_view->setModel(item_model);// table_view->horizontalHeader()->hide(); // 隐藏水平表头
// table_view->verticalHeader()->hide(); // 隐藏垂直表头table_view->horizontalHeader()->setStretchLastSection(true); // 伸缩最后一列QStringList column, row;column <<"Column 1" <<"Column 2" <<"Column 3" <<"Column 4";row <<"row 1" <<"row 2" <<"row 3" <<"row 4";item_model->setHorizontalHeaderLabels(column); // 设置水平表头标签item_model->setVerticalHeaderLabels(row); // 设置垂直表头标签// 添加item到modelfor (int i &#61; 0; i <4; &#43;&#43;i)for (int j &#61; 0; j <4; &#43;&#43;j)item_model->setItem(i, j, new QStandardItem(QString("%1").arg(i &#43; j)));item_model->appendRow(new QStandardItem("HELLO")); // 追加行,此时仅第1列有数据QList lsi;lsi.append(new QStandardItem("HELLO"));lsi.append(new QStandardItem("WORLD"));lsi.append(new QStandardItem("你好"));item_model->appendRow(lsi); // 追加行&#xff0c;相应列均有数据,即前三列有数据table_view->setShowGrid(false); // 隐藏网格线table_view->setFocusPolicy(Qt::NoFocus); // 去除当前Cell周边虚线框table_view->setAlternatingRowColors(true); // 开启隔行异色
}

运行效果如下&#xff1a;
_

待续……



推荐阅读
  • 带添加按钮的GridView,item的删除事件
    先上图片效果;gridView无数据时显示添加按钮,有数据时,第一格显示添加按钮,后面显示数据:布局文件:addr_manage.xml<?xmlve ... [详细]
  • 使用ffmpeg进行视频格式转换的简单例子2006-12-1623:12主要参考FFMPEG里面的apiexample.c以及output_example.c编写intmain(in ... [详细]
  • 开发笔记:PyQt5QSlider(滑动条)控件使用
    本文由编程笔记#小编为大家整理,主要介绍了PyQt5-QSlider(滑动条)控件使用相关的知识,希望对你有一定的参考价值。QSlider控件提供了一个垂直或者水平的滑动条,滑 ... [详细]
  • android listview OnItemClickListener失效原因
    最近在做listview时发现OnItemClickListener失效的问题,经过查找发现是因为button的原因。不仅listitem中存在button会影响OnItemClickListener事件的失效,还会导致单击后listview每个item的背景改变,使得item中的所有有关焦点的事件都失效。本文给出了一个范例来说明这种情况,并提供了解决方法。 ... [详细]
  • 本文讨论了一个关于cuowu类的问题,作者在使用cuowu类时遇到了错误提示和使用AdjustmentListener的问题。文章提供了16个解决方案,并给出了两个可能导致错误的原因。 ... [详细]
  • CF:3D City Model(小思维)问题解析和代码实现
    本文通过解析CF:3D City Model问题,介绍了问题的背景和要求,并给出了相应的代码实现。该问题涉及到在一个矩形的网格上建造城市的情景,每个网格单元可以作为建筑的基础,建筑由多个立方体叠加而成。文章详细讲解了问题的解决思路,并给出了相应的代码实现供读者参考。 ... [详细]
  • WPF之Binding初探
      初学wpf,经常被Binding搞晕,以下记录写Binding的基础。首先,盗用张图。这图形象的说明了Binding的机理。对于Binding,意思是数据绑定,基本用法是:1、 ... [详细]
  • 来设定CPU工作相关参数  POWERMANAGEMENTSETUP(省电功能设定)  用来设定CPU、硬盘、显示器等等设备的省电功能  PNP/PCICONFIGURATION(即插即用设备与 ... [详细]
  • react里可以但是vue我不熟悉,没找到App.vue是父`这里我想加载导航这是路由 ... [详细]
  • 本文是《开发你的WordPress主题框架》专题的第10篇,共10篇:为你的WordPress主题框架添加动作挂钩WordPress主题框架是如何工作的决定如何开发你的WordPress主题框架为你的WordPress主题框架建立起始文件为你的Wo ... [详细]
  • Android开发之Notification(实现消息弹窗、提示音以及点击事件)
    文章目录通知管理器通知渠道通知发送通知更多效果添加点击事件取消消息通知管理器通知管理器(NotificationManager)类是一个通知管理器&# ... [详细]
  • 首页#father{border:0pxso ... [详细]
  • 在开发四国军棋的游戏中,通过flex联机游戏开发-四国军棋游戏(五)-提炼棋类开发api,我们提炼出了第一个关于棋类游戏开发的api-FlexChessAPI,这个a ... [详细]
  • iOS Auto Layout Demystify
    BookDescripterAutoLayouttransformsthewayyoucreateiOSuserinterfaces.Asflexibleasitispowerfu ... [详细]
  • 人生的旅途,前途很远,也很暗。然而不要怕,不怕的人的面前才有路。——鲁迅自从上一篇博客发布后,已经有很长时间没有更新博客了,一直忙着支付通的事情,在此给大家道个歉。先贴个图:你不要惊讶 ... [详细]
author-avatar
彭嘉侑舒良
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有