精华内容
下载资源
问答
  • QTableView

    2020-02-29 23:44:00
    QTableView ​ 表格视图控件QTableView,需要和QStandardItemModel, 配套使用,这套框架是基于MVC设计模式设计的,M(Model)是QStandardItemModel数据模型,不能单独显示出来。V(view)是指QTableView视图,要来显示...

    QTableView
    ​    表格视图控件QTableView,需要和QStandardItemModel, 配套使用,这套框架是基于MVC设计模式设计的,M(Model)是QStandardItemModel数据模型,不能单独显示出来。V(view)是指QTableView视图,要来显示数据模型,C(controllor)控制在Qt中被弱化,与View合并到一起。

    1 QTableView简单应用
    ​    QStandardItmeModel表格的数据模型,那么这个模型需要填上每一行每一列的数据,就像execl表格一样。

    ​    widget.h

    #ifndef WIDGET_H
    #define WIDGET_H

    #include <QTableView>

    class Widget : public QTableView //继承至QTableView
    {
        Q_OBJECT

    public:
        Widget(QWidget *parent = 0);
        ~Widget();
    };

    #endif // WIDGET_H
    ​    widget.cpp

    #include "widget.h"
    #include <QStandardItemModel>
    #include <QDebug>
    Widget::Widget(QWidget *parent)
        : QTableView(parent)
    {
       QStandardItemModel* model = new QStandardItemModel(this);
       model->setItem(0, 0, new QStandardItem("张三")); 
       model->setItem(0, 1, new QStandardItem("3"));
       model->setItem(0, 2, new QStandardItem("男"));
       this->setModel(model);
    }

    Widget::~Widget()
    {

    }
    ​    以上代码实现了在model中添加一条数据,然后通过setModel函数设置view的数据模型为model,显示出来,如图:

     

    2 修改行列字段名
    ​    修改字段名可以使用QStandardItemModel::setHeaderData,但是在这之前你需要调用QStandardItemModel::setColumnCount和QStandardItemModel::setRowCount,例如:

    Widget::Widget(QWidget *parent)
        : QTableView(parent)
    {
       QStandardItemModel* model = new QStandardItemModel(this);
       /*设置列字段名*/
       model->setColumnCount(3);
       model->setHeaderData(0,Qt::Horizontal, "姓名");
       model->setHeaderData(1,Qt::Horizontal, "年龄");
       model->setHeaderData(2,Qt::Horizontal, "性别");

       /*设置行字段名*/
       model->setRowCount(3);
       model->setHeaderData(0,Qt::Vertical, "记录一");
       model->setHeaderData(1,Qt::Vertical, "记录二");
       model->setHeaderData(2,Qt::Vertical, "记录三");   
          
       /*设置一条数据*/   
       model->setItem(0, 0, new QStandardItem("张三"));
       model->setItem(0, 1, new QStandardItem("3"));
       model->setItem(0, 2, new QStandardItem("男"));
       this->setModel(model);
    }

    3 移除数据
    ​    移除数据的常用函数有:

    /*移除某行数据*/
    bool QAbstractItemModel::removeRow(int row, const QModelIndex &parent = QModelIndex()) 
    /*移除某列数据*/
    bool QAbstractItemModel::removeColumn(int column, const QModelIndex &parent = QModelIndex())
    例如:

    model->removeRow(0);//移除第0行数据
    model->removeColumn(0);//移除第0列数据

    4 插入数据

    插入一行数据

    void QStandardItemModel::insertRow(int row, const QList<QStandardItem *> &items)
    /*
    * row 表示从第几行插入数据
    * items 表示要插入的数据QStandardItem对象
    */

    例如:

    QList<QStandardItem*> list;
    list << new QStandardItem("王五") << new QStandardItem("22") << new QStandardItem("男");
    model->insertRow(0, list); //在第0行插入一条记录

    5 数据变更信号处理
    ​    当QStandardModel中的数据被更改的时候,会发射出dataChanged信号:

    [signal] void QAbstractItemModel::dataChanged(const QModelIndex &topLeft, const QModelIndex &bottomRight, const QVector<int> &roles = QVector<int> ());

    /*
    *topLeft bottomRight这两索引指的是表格中被更改数据的区域,如果只有一个数据被更改,那么topLeft等于bottomRight
    */

    例如:

    widget.h

    #ifndef WIDGET_H
    #define WIDGET_H

    #include <QTableView>
    class QStandardItemModel;
    class Widget : public QTableView
    {
        Q_OBJECT
    public slots:
        void dataChangedSlot(const QModelIndex &topLeft, const QModelIndex &bottomRight, const QVector<int> &roles = QVector<int> ());
    public:
        Widget(QWidget *parent = 0);
        QStandardItemModel* _model;
        ~Widget();
    };

    #endif // WIDGET_H

    widget.cpp

    #include "widget.h"
    #include <QStandardItemModel>
    #include <QDebug>
    Widget::Widget(QWidget *parent)
        : QTableView(parent)
    {
       _model = new QStandardItemModel(this);
       _model->setColumnCount(3);
       _model->setHeaderData(0,Qt::Horizontal, "姓名");
       _model->setHeaderData(1,Qt::Horizontal, "年龄");
       _model->setHeaderData(2,Qt::Horizontal, "性别");

       _model->setRowCount(3);
       _model->setHeaderData(0,Qt::Vertical, "记录一");
       _model->setHeaderData(1,Qt::Vertical, "记录二");
       _model->setHeaderData(2,Qt::Vertical, "记录三");

       _model->setItem(0, 0, new QStandardItem("张三"));
       _model->setItem(0, 1, new QStandardItem("3"));
       _model->setItem(0, 2, new QStandardItem("男"));


       connect(_model, SIGNAL(dataChanged(QModelIndex,QModelIndex,QVector<int>)), this, SLOT(dataChangedSlot(QModelIndex,QModelIndex,QVector<int>)));
       this->setModel(_model);
    }

    void Widget::dataChangedSlot(const QModelIndex &topLeft, const QModelIndex &bottomRight, const QVector<int> &roles)
    {
        qDebug() << _model->data(topLeft).toString() << endl;

    }

    Widget::~Widget()
    {

    }

    需要知道的是函数data可以获取想要的QStandardItem对象的索引:

    [pure virtual] QVariant QAbstractItemModel::data(const QModelIndex &index, int role = Qt::DisplayRole) const
    返回的QVariant对象是一种泛型变量,可以转换成QString、int、double等数据类型。

    6 常用函数
     //默认显示行头,如果你觉得不美观的话,我们可以将隐藏        
    tableview->verticalHeader()->hide();      

     //设置选中时为整行选中        
    tableview->setSelectionBehavior(QAbstractItemView::SelectRows);         
       
     //设置表格的单元为只读属性,即不能编辑        
    tableview->setEditTriggers(QAbstractItemView::NoEditTriggers);  

    //返回一个被选中的所有Item的索引,一般是去遍历这个链表进行处理
    [virtual protected] QModelIndexList QTableView::selectedIndexes() const

    7 QStandardItem被点选信号
    ​    当QStandardItemModel中的某个QStandardItem被点选后,QStandardItemModel对象会发出一个信号:

    void QAbstractItemView::clicked(const QModelIndex &index);
    /*
    *返回被点选的Item的索引
    */


    8 QItemDelegate代理
    ​    QTableView在处理信息显示编辑的时候比较单调,类似行编辑器,为了获得更多的灵性性,交互通过QItemDelegate执行。

    ​    下面通过派生一个SpinDelegate来实现一个整数旋转框的代理器。

    ​    一般我们要重写函数createEditor:

    [virtual] QWidget *QItemDelegate::createEditor(QWidget *parent, const QStyleOptionViewItem &option, const QModelIndex &index) const
    /*
    *QWidget *parent一般是指哪个窗口使用了这个代理,一般用来托管内存
    * QStyleOptionViewItem &option 样式风格
    * const QModelIndex &index 需要更改的Item索引
    */

    ​    spinDelegate.h

    #ifndef SPINDELEGATE_H
    #define SPINDELEGATE_H
    #include <QItemDelegate>
    class SpinDelegate : public QItemDelegate
    {
    public:
        SpinDelegate(QObject *parent = Q_NULLPTR);
        QWidget* createEditor(QWidget *parent, const QStyleOptionViewItem &option, const QModelIndex &index) const;
    };

    #endif // SPINDELEGATE_H

    ​    spinDelegate.cpp

    #include "spindelegate.h"
    #include <QSpinBox>
    SpinDelegate::SpinDelegate(QObject *parent): QItemDelegate(parent)
    {

    }
    QWidget* SpinDelegate::createEditor(QWidget *parent
               , const QStyleOptionViewItem &option, const QModelIndex &index) const
    {
        if(index.column() == 1) // 返回下拉框
        {
           QSpinBox* box = new QSpinBox(parent);
           box->setMinimum(1);
           box->setMaximum(99);
           return box;
        }
        return QItemDelegate::createEditor(parent, option, index);
    }

    将widget.cpp中的构造器中修改如下函数如下:

    Widget::Widget(QWidget *parent)
        : QTableView(parent)
    {
       QStandardItemModel* model = new QStandardItemModel(this);
       /*设置列字段名*/
       model->setColumnCount(3);
       model->setHeaderData(0,Qt::Horizontal, "姓名");
       model->setHeaderData(1,Qt::Horizontal, "年龄");
       model->setHeaderData(2,Qt::Horizontal, "性别");

       /*设置行字段名*/
       model->setRowCount(3);
       model->setHeaderData(0,Qt::Vertical, "记录一");
       model->setHeaderData(1,Qt::Vertical, "记录二");
       model->setHeaderData(2,Qt::Vertical, "记录三");   
          
       /*设置一条数据*/   
       model->setItem(0, 0, new QStandardItem("张三"));
       model->setItem(0, 1, new QStandardItem("3"));
       model->setItem(0, 2, new QStandardItem("男"));
       this->setModel(model);
       /*设置代理*/
       this->setItemDelegate(new SpinDelegate(this));
    }

    展开全文
  • QTableview

    2014-11-20 00:13:47
    Qt QTableview的用法详解 2012年05月10日 ⁄ 综合⁄ 共 8933字 ⁄ 字号 小 中 大 ⁄ 评论关闭 一. 对QTableWidget本身的效果实现 1. 将表格变为禁止编辑   在默认情况下,表格里的字符是可以更改的,比如双击...

    Qt QTableview的用法详解

    2012年05月10日 ⁄ 综合⁄ 共 8933字 ⁄ 字号 小 中 大 ⁄ 评论关闭

    一. 对QTableWidget本身的效果实现

    1. 将表格变为禁止编辑
     
    在默认情况下,表格里的字符是可以更改的,比如双击一个单元格,就可以修改原来的内容,如果想禁止用户的这种操作,让这个表格对用户只读,可以这样:
     
    tableWidget->setEditTriggers(QAbstractItemView::NoEditTriggers);
     
    QAbstractItemView.NoEditTriggers是QAbstractItemView.EditTrigger枚举中的一个,都是触发修改单元格内容的条件:
     
    QAbstractItemView.NoEditTriggers
    0
    No editing possible. 不能对表格内容进行修改
     
    QAbstractItemView.CurrentChanged
    1
    Editing start whenever current item changes.任何时候都能对单元格修改
     
    QAbstractItemView.DoubleClicked
    2
    Editing starts when an item is double clicked.双击单元格
     
    QAbstractItemView.SelectedClicked
    4
    Editing starts when clicking on an already selected item.单击已选中的内容
     
    QAbstractItemView.EditKeyPressed
    8
    Editing starts when the platform edit key has been pressed over an item.
     
    QAbstractItemView.AnyKeyPressed
    16
    Editing starts when any key is pressed over an item.按下任意键就能修改
     
    QAbstractItemView.AllEditTriggers
    31
    Editing starts for all above actions.以上条件全包括
     
    2. 设置表格为整行选择

    tableWidget->setSelectionBehavior(QAbstractItemView::SelectRows); //整行选中的方式
     
    QAbstractItemView.SelectionBehavior枚举还有如下类型
     
    Constant
    Value
    Description
     
    QAbstractItemView.SelectItems
    0
    Selecting single items.选中单个单元格
     
    QAbstractItemView.SelectRows
    1
    Selecting only rows.选中一行
     
    QAbstractItemView.SelectColumns
    2
    Selecting only columns.选中一列
     
    3.单个选中和多个选中的设置:
     
    tableWidget->setSelectionMode(QAbstractItemView::ExtendedSelection); //设置为可以选中多个目标
     
    该函数的参数还可以是:
     
    QAbstractItemView.NoSelection 不能选择
     
    QAbstractItemView.SingleSelection 选中单个目标
     
    QAbstractItemView.MultiSelection 选中多个目标
     
    QAbstractItemView.ExtendedSelection QAbstractItemView.ContiguousSelection 的区别不明显,主要功能是正常情况下是单选,但按下Ctrl或Shift键后,可以多选
     
    4. 表格表头的显示与隐藏
     
    对于水平或垂直方法的表头,可以用以下方式进行 隐藏/显示 的设置:
     view plain
     tableWidget->verticalHeader()->setVisible(false); //隐藏列表头
    tableWidget->horizontalHeader()->setVisible(false); //隐藏行表头

    注意:需要 #include <QHeaderView>
     
    5. 对表头文字的字体、颜色进行设置
    view plain
     QTableWidgetItem *columnHeaderItem0 = tableWidget->horizontalHeaderItem(0); //获得水平方向表头的Item对象
     columnHeaderItem0->setFont(QFont("Helvetica")); //设置字体
    columnHeaderItem0->setBackgroundColor(QColor(0,60,10)); //设置单元格背景颜色
    columnHeaderItem0->setTextColor(QColor(200,111,30)); //设置文字颜色

    注意:需要 #include <QHeaderView>
     
    6. 在单元格里加入控件:
     
    QTableWidget不仅允许把文字加到单元格,还允许把控件也放到单元格中。比如,把一个下拉框加入单元格,可以这么做:
     view plain
     QComboBox *comBox = new QComboBox();
    comBox->addItem("Y");
    comBox->addItem("N");
    tableWidget->setCellWidget(0,2,comBox);

    二. 对单元格的进行设置

    1. 单元格设置字体颜色和背景颜色 及字体字符
     view plain
     QTableWidgetItem *item = new QTableWidgetItem("Apple");
    item->setBackgroundColor(QColor(0,60,10));
    item->setTextColor(QColor(200,111,100));
    item->setFont(QFont("Helvetica"));
    tableWidget->setItem(0,3,item);

    另:如果需要对所有的单元格都使用这种字体,则可以使用 tableWidget->setFont(QFont("Helvetica"));
     
    2. 设置单元格内文字的对齐方式
     
    这个比较简单,使用newItem.setTextAlignment()函数即可,该函数的参数为单元格内的对齐方式,和字符输入顺序是自左相右还是自右向左。
     
    水平对齐方式有:
     Constant Value Description
     Qt.AlignLeft 0x0001 Aligns with the left edge.
     Qt.AlignRight 0x0002 Aligns with the right edge.
     Qt.AlignHCenter 0x0004 Centers horizontally in the available space.
     Qt.AlignJustify 0x0008 Justifies the text in the available space.
     
    垂直对齐方式:
     Constant Value Description
     Qt.AlignTop 0x0020 Aligns with the top.
     Qt.AlignBottom 0x0040 Aligns with the bottom.
     Qt.AlignVCenter 0x0080 Centers vertically in the available space.
     
    如果两种都要设置,只要用 Qt.AlignHCenter | Qt.AlignVCenter 的方式即可

    3. 合并单元格效果的实现:
     
    tableWidget->setSpan(0, 0, 3, 1) # 其参数为: 要改变单元格的 1行数 2列数 要合并的 3行数 4列数
     
    4. 设置单元格的大小
     
    首先,可以指定某个行或者列的大小
     view plain
     tableWidget->setColumnWidth(3,200);
    tableWidget->setRowHeight(3,60);

    还可以将行和列的大小设为与内容相匹配
     view plain
     tableWidget->resizeColumnsToContents();
    tableWidget->resizeRowsToContents();

    5. 获得单击单元格的内容

    通过实现 itemClicked (QTableWidgetItem *) 信号的槽函数,就可以获得鼠标单击到的单元格指针,进而获得其中的文字信息
     
    connect(tableWidget,SIGNAL(itemDoubleClicked(QTreeWidgetItem*,int)),this, SLOT( getItem(QTreeWidgetItem*,int)) );
     
    //将itemClicked信号与函数getItem绑定
     

     

    1.QTableWidget不能在mainwindow中随主窗口的大小变化?
     
      解决:在表格外部添加布局。
     
      代码:tableWidget = new QTableWidget;
     
             tableWidget ->setObjectName(QString::fromUtf8("tableWidget"));
     
             QVBoxLayout *verticalLayout;
     
             verticalLayout->addWidget(tableWidget );
     
    2.将表格变为禁止编辑:
     
      tableWidget->setEditTriggers(QAbstractItemView::NoEditTriggers);
     
      (参数含义:QAbstractItemView.NoEditTriggers--不能对表格内容进行修改
     
                  QAbstractItemView.CurrentChanged--任何时候都能对单元格修改
     
                  QAbstractItemView.DoubleClicked--双击单元格
     
                  QAbstractItemView.SelectedClicked--单击已选中的内容
     
                  QAbstractItemView.EditKeyPressed--
     
                  QAbstractItemView.AnyKeyPressed--按下任意键就能修改
     
                  QAbstractItemView.AllEditTriggers--以上条件全包括)
     
    3.设置表格为整行选择
     
      tableWidget->setSelectionBehavior(QAbstractItemView::SelectRows);  //整行选中的方式
     
      (参数含义:AbstractItemView.SelectItems--选中单个单元格
     
                  QAbstractItemView.SelectRows--选中一行
     
                  QAbstractItemView.SelectColumns--选中一列)
     
    4.单个选中和多个选中的设置:
     
      tableWidget->setSelectionMode(QAbstractItemView::ExtendedSelection);  //设置为可以选中多个目标
     
     (参数含义:QAbstractItemView.NoSelection--不能选择
     
                 QAbstractItemView.SingleSelection--选中单个目标
     
                 QAbstractItemView.MultiSelection--选中多个目标
     
      QAbstractItemView.ExtendedSelection/QAbstractItemView.ContiguousSelection 的区别不明显,主要功能是正常情况下是单选,但按下Ctrl或Shift键后,可以多选)
     
    5.表格表头的显示与隐藏
     
      对于水平或垂直方法的表头,可以用以下方式进行 隐藏/显示 的设置:
     
      tableWidget->verticalHeader()->setVisible(false);   //隐藏列表头 
     
      tableWidget->horizontalHeader()->setVisible(false); //隐藏行表头 
     
      注意:需要 #include <QHeaderView>
     
    6.对表头文字的字体、颜色进行设置
     
      QTableWidgetItem *columnHeaderItem0 = tableWidget->horizontalHeaderItem(0); //获得水平方向表头的Item对象 
     
      columnHeaderItem0->setFont(QFont("Helvetica")); //设置字体 
     
      columnHeaderItem0->setBackgroundColor(QColor(0,60,10)); //设置单元格背景颜色 
     
      columnHeaderItem0->setTextColor(QColor(200,111,30)); //设置文字颜色
     
      注意:需要 #include <QHeaderView>
     
    7.在单元格里加入控件:
     
       QComboBox *comBox = new QComboBox();
     
       comBox->addItem("Y");
     
       comBox->addItem("N");
     
       tableWidget->setCellWidget(0,2,comBox);
     
    8.单元格中添加图片:
     
      tableWidget->setItem(row, 0, new QTableWidgetItem(QIcon(":/new/images/kingdemo.ico"),tr("")));
     
    9设置单元格字体颜色、背景颜色和字体字符:
     
      QTableWidgetItem *item = new QTableWidgetItem("Apple");
     
      item->setBackgroundColor(QColor(0,60,10));
     
      item->setTextColor(QColor(200,111,100));
     
      item->setFont(QFont("Helvetica"));
     
      tableWidget->setItem(0,3,item);
     
      另:如果需要对所有的单元格都使用这种字体,则可以使用  tableWidget->setFont(QFont("Helvetica"));
     
    10.设置单元格内文字的对齐方式
     
     水平对齐方式有:
     
     Constant Value Description
     
     Qt.AlignLeft 0x0001 Aligns with the left edge.
     
     Qt.AlignRight 0x0002 Aligns with the right edge.
     
     Qt.AlignHCenter 0x0004 Centers horizontally in the available space.
     
     Qt.AlignJustify 0x0008 Justifies the text in the available space.
     
     垂直对齐方式:
     
     Constant Value Description
     
     Qt.AlignTop 0x0020 Aligns with the top.
     
     Qt.AlignBottom 0x0040 Aligns with the bottom.
     
     Qt.AlignVCenter 0x0080 Centers vertically in the available space.
     
     如果两种都要设置,只要用 Qt.AlignHCenter |  Qt.AlignVCenter 的方式即可
     
    11.合并单元格:
     
      tableWidget->setSpan(0, 0, 3, 1)  # 其参数为: 要改变单元格的1行数、2列数,要合并的3行数、4列数
     
    12.设置单元格的大小
     
      首先,可以指定某个行或者列的大小
     
       tableWidget->setColumnWidth(3,200);
     
       tableWidget->setRowHeight(3,60);
     
    还可以将行和列的大小设为与内容相匹配
     
       tableWidget->resizeColumnsToContents();
     
       tableWidget->resizeRowsToContents();
     
    13.获得单击单元格的内容
     
      通过实现 itemClicked (QTableWidgetItem *) 信号的槽函数,就可以获得鼠标单击到的单元格指针,进而获得其中的文字信息
     
    connect(tableWidget,SIGNAL(itemDoubleClicked(QTreeWidgetItem*,int)),this,SLOT(getItem(QTreeWidgetItem*,int)));
     
    //将itemClicked信号与函数getItem绑定
     
    14.QTableWidget要调整表格行宽主要涉及以下函数
     
      tableWidget->horizontalHeader()->setResizeMode(QHeaderView::Stretch);//使列完全填充并平分
     
      tableWidget->verticalHeader()->setResizeMode(QHeaderView::Stretch);//行自适应宽度                                                                                                     
     
      tableWidget->resizeColumnsToContents(); //根据内容调整列宽
     
      tableWidget->resizeColumnToContents(int col);//根据内容自动调整给定列宽
     
      tableWidget->horizontalHeader()->setResizeMode//把给定列设置为给定模式
     
      主要模式有Stretch和Fixed
     
    15.添加表头内容:
     
      方法一:
     
      QStringList header;
     
      header<<""<<tr("1")<<tr("2")<<tr("3")<<tr("4)<<tr("5");
     
      方法二:
     
      tableWidget->setHorizontalHeaderLabels(QStringList() << tr("1")<<tr("2")<<tr("3")<<tr("4)<<tr("5"));
     
    16.清除:
     
      tableWidget->clear();//清除所有可见数据(包括表头),行还在
     
      tableWidget->clearContents();//只清除表中数据,不清除表头内容
     
      tableWidget->setRowCount(0);//连行也清除掉
     
    15.一些零碎的知识点代码:
     
      int row = tableWidget->rowCount();//获取表格中当前总行数
     
      tableWidget->setRowCount(row+1);//添加一行
     
      tableWidget->removeRow(row);//清除已有的行列
     
      Int row1 = tableWidget->currentItem()->row();//当前选中行
     
      bool focus = tableWidget->isItemSelected(tableWidget->currentItem());//判断是否选中一行
     
      QString proName = tableWidget->item(row, col)->text();//获取某一格内容
     
      setShowGrid(true);//显示表格线
     
      verticalHeader()->setVisible(false);//隐藏左边垂直
     
      QHeaderView *headerView = horizontalHeader();
     
      headerView->setMovable(false);//去除表头的移动
     
      headerView->resizeSection(0,284);//设置第一列宽
     
      headerView->resizeSection(1,127);//设置第二列宽
     
      headerView->setResizeMode(QHeaderView::Fixed);//列表不能移动
     
      headerView->setClickable(false);//不响应鼠标单击
     
      setEditTriggers(QTableWidget::NoEditTriggers);//不能编辑
     
      setSelectionBehavior(QTableWidget::SelectRows);//一次选中一行
     
      setSelectionMode(QAbstractItemView::SingleSelection);//只能单选
     
      /*QScrollBar *scrollBar = horizontalScrollBar();
     
      scrollBar->hide();*/
     
      setHorizontalScrollBarPolicy(Qt::ScrollBarAlwaysOff);//去掉水平滚动条
     
      setVerticalScrollMode(QAbstractItemView::ScrollPerItem);//垂直滚动条按项移动
     
      setAutoScroll(false);//去掉自动滚动
     
    17.排序:
     
     
    tableWidget->sortByColumn(0,Qt::AscendingOrder);//顾名思义,该函数意思是将某列按升序/降序的方式排列

    展开全文
  • qTableview

    2015-06-04 15:41:03
    这个qtcreator5.01创建的工程,主要展示了tableview如何添加项,很简单的一个示例,主要是在网上找了很久自己才做出来的
  • tablewidget.h ...QTableView> class QStandardItemModel; class TableWidget : public QTableView { Q_OBJECT public slots: void dataChangedSlot(const QModelIndex &topLeft, cons...

    《one day》 以色列超震撼千人合唱 三种语言齐唱祈愿和平 超清

     

     

    tablewidget.h 

    #include <QTableView>
    class QStandardItemModel;
    
    class TableWidget : public QTableView
    {
        Q_OBJECT
    public slots:
        void dataChangedSlot(const QModelIndex &topLeft, const QModelIndex &bottomRight, const QVector<int> &roles = QVector<int> ());
    
    public:
        TableWidget(QWidget *parent = 0);
        QStandardItemModel* model;
    
        ~TableWidget();
    };

     

    tablewidget.cpp

    #include "tablewidget.h"
    #include <QStandardItemModel>
    #include <QDebug>
    
    TableWidget::TableWidget(QWidget *parent)
        : QTableView(parent)
    {
        model = new QStandardItemModel(this);
        model->setColumnCount(6);
        model->setHeaderData(0,Qt::Horizontal, "时间");
        model->setHeaderData(1,Qt::Horizontal, "学生");
        model->setHeaderData(2,Qt::Horizontal, "上线时间");
        model->setHeaderData(3,Qt::Horizontal, "下线时间");
        model->setHeaderData(4,Qt::Horizontal, "状态");
        model->setHeaderData(5,Qt::Horizontal, "班级");
        //model->setRowCount(3);
        //model->setHeaderData(0,Qt::Vertical, "记录一");
        //model->setHeaderData(1,Qt::Vertical, "记录二");
        //model->setHeaderData(2,Qt::Vertical, "记录三");
    
        this->setModel(model);
        this->setShowGrid(false);                          // 隐藏网格线
        this->setFocusPolicy(Qt::NoFocus);                 // 去除当前Cell周边虚线框
        this->setAlternatingRowColors(true);               // 开启隔行异色
        connect(model, SIGNAL(dataChanged(QModelIndex,QModelIndex,QVector<int>)), this, SLOT(dataChangedSlot(QModelIndex,QModelIndex,QVector<int>)));
        this->setModel(model);
    }
    
    void TableWidget::dataChangedSlot(const QModelIndex &topLeft, const QModelIndex &bottomRight, const QVector<int> &roles)
    {
        qDebug() << model->data(topLeft).toString() << endl;
    }
    
    TableWidget::~TableWidget()
    {
    }

     

    展开全文
  • QTableView demo

    2017-08-02 14:38:33
    QTableView小demo
  • QTableView

    2021-01-27 12:12:03
    在通常情况下,一个应用需要和一批数据进行交互,然后以表格的形式输出这些信息,这时就需要用到QTableView类了,在QTableView中可以使用自定义的数据模型来显示内容,通过setModel来绑定数据源。 QTableWidget继承...

    在通常情况下,一个应用需要和一批数据进行交互,然后以表格的形式输出这些信息,这时就需要用到QTableView类了,在QTableView中可以使用自定义的数据模型来显示内容,通过setModel来绑定数据源。

    QTableWidget继承自QTableView,主要区别是QTableView可以使用自定义的数据模型来显示内容(先通setModel来绑定数据源),而QTableWidget只能使用标准的数据模型,并且其单元格数据是通过QTableWidgetItem对象实现的,通常QTableWidget就能够满足我们的要求

    (1)Methods

    1. __init__(parent: QWidget = None)
    2. clearSpans()
    3. columnAt(int) → int
    4. columnCountChanged(int, int)
    5. columnMoved(int, int, int)
    6. columnResized(int, int, int)
    7. columnSpan(int, int) → int
    8. columnViewportPosition(int) → int
    9. columnWidth(int) → int
    10. currentChanged(QModelIndex, QModelIndex)
    11. gridStyle() → PenStyle
    12. hideColumn(int)
    13. hideRow(int)
    14. horizontalHeader() → QHeaderView
    15. horizontalOffset() → int
    16. horizontalScrollbarAction(int)
    17. indexAt(QPoint) → QModelIndex
    18. isColumnHidden(int) → bool
    19. isCornerButtonEnabled() → bool
    20. isIndexHidden(QModelIndex) → bool
    21. isRowHidden(int) → bool
    22. isSortingEnabled() → bool
    23. moveCursor(CursorAction, Union[KeyboardModifiers, KeyboardModifier]) → QModelIndex
    24. paintEvent(QPaintEvent)
    25. resizeColumnsToContents()
    26. resizeColumnToContents(int)
    27. resizeRowsToContents()
    28. resizeRowToContents(int)
    29. rowAt(int) → int
    30. rowCountChanged(int, int)
    31. rowHeight(int) → int
    32. rowMoved(int, int, int)
    33. rowResized(int, int, int)
    34. rowSpan(int, int) → int
    35. rowViewportPosition(int) → int
    36. scrollContentsBy(int, int)
    37. scrollTo(QModelIndex, hint: ScrollHint = EnsureVisible)
    38. selectColumn(int)
    39. selectedIndexes() → List[QModelIndex]
    40. selectionChanged(QItemSelection, QItemSelection)
    41. selectRow(int)
    42. setColumnHidden(int, bool)
    43. setColumnWidth(int, int)
    44. setCornerButtonEnabled(bool)
    45. setGridStyle(PenStyle)
    46. setHorizontalHeader(QHeaderView)
    47. setModel(QAbstractItemModel)
    48. setRootIndex(QModelIndex)
    49. setRowHeight(int, int)
    50. setRowHidden(int, bool)
    51. setSelection(QRect, Union[SelectionFlags, SelectionFlag])
    52. setSelectionModel(QItemSelectionModel)
    53. setShowGrid(bool)
    54. setSortingEnabled(bool)
    55. setSpan(int, int, int, int)
    56. setVerticalHeader(QHeaderView)
    57. setWordWrap(bool)
    58. showColumn(int)
    59. showGrid() → bool
    60. showRow(int)
    61. sizeHintForColumn(int) → int
    62. sizeHintForRow(int) → int
    63. sortByColumn(int, SortOrder)
    64. timerEvent(QTimerEvent)
    65. updateGeometries()
    66. verticalHeader() → QHeaderView
    67. verticalOffset() → int
    68. verticalScrollbarAction(int)
    69. viewOptions() → QStyleOptionViewItem
    70. viewportSizeHint() → QSize
    71. visualRect(QModelIndex) → QRect
    72. visualRegionForSelection(QItemSelection) → QRegion
    73. wordWrap() → bool
    展开全文
  • Qt QTableView

    千次阅读 2017-12-08 17:07:31
    表格数据基本需要用到QTableView 进行表示, 记录下QTableView 的使用方法和遇到的问题 创建QTableView QTableView* table = new QTableView(); // 设置表格属性 table->setEditTriggers(QAbstractItemView::...
  • QTableView使用

    千次阅读 2019-02-10 01:17:10
    ​ 表格视图控件QTableView,需要和QStandardItemModel, 配套使用,这套框架是基于MVC设计模式设计的,M(Model)是QStandardItemModel数据模型,不能单独显示出来。V(view)是指QTableView视图,要来显示数据模型,C...
  • QTableView大数据源码

    2018-07-07 14:25:57
    QTableView大数据源码显示,可一次显示超过100万数据而不卡
  • QTableView+QComboBox简单使用。采用Qt代理的方式,用QComboBox做了指定列的代理。 功能: 1. 采用QComboBox作为QtableView某一列的代理 2. 可添加QtableView的项; 3. 可删除QtableView的项;
  • QTableView Hover color

    2020-11-29 11:00:36
    <div><p>When hovering over a QTableView only column hovering is supported. I have my QTableView set to QAbstractItemView.SelectRows but only hovered columns are supported <p>Is there a way to edit ...
  • QTableView是Qt中用来把数据集以表格形式提供给用户的一个控件 QTableView类实现表格视图,QTableView的数据由继承QAbstractItemModel的子类models来提供 #include QStandardItemModel *model = new ...
  • QtableView使用

    2019-04-11 15:55:35
    QtableView中可以使用自定义的数据模型来显示内容,通过 setModel来绑定数据源。 import sys from PyQt5.QtWidgets import QApplication, QMainWindow from Ui_tblView import * from PyQt5.QtWidgets import *...
  • QTableView使用心得

    2020-12-16 17:02:35
    Qt中表格控件,常用的有QTableView和QTableWidget,为什么选择使用QTableView呢?因为QTableView支持MVC模式(模型-视图框架)。 QTableView* m_pTable = new QTableView; QStandardModel* m_pTable_Model = new ...
  • 使用pandas经常用到Qtableview,网上搜索不到,花了一会儿写了这个给需要的人,需要放进剪贴板就要自己写了,我是需要把它做成pandas模型放入新Qtableview
  • QTableview 使用

    2017-10-14 21:58:31
    实现QTableview 界面显示  1.初始化表头 void MainWindow::initHead() { //准备数据模型 QStandardItemModel *student_model = new QStandardItemModel(); student_model->setHorizontalHeaderItem(0, ...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 2,380
精华内容 952
关键字:

qtableview