表格QTableView单元中添加控件

本文主要总结在Qt5.9中,用表格类QTableView,在表格单元中添加控件用法。

想要在表格QTableView中添加控件,有多种方法,可以参考如下地址:http://qimo601.iteye.com/blog/1538364。

其中,我用的是最常用和简单的方式,使用函数QTableView::setIndexWidget(const QModelIndex &index, QWidget *widget)

void setIndexWidget(const QModelIndex &index, QWidget *widget);

用法:

tableView->setIndexWidget(standItemModel->index(10,1),m_PushButton);    //向表格单元添加一个控件

下面将通过一个例子展示像表格中添加控件的例子。


1.1新建一个widget工程,不要勾选ui界面。然后分别在widget.h,widget.cpp,main.cpp分别添加如下代码。

widget.h

#ifndef WIDGET_H
#define WIDGET_H

#include <QWidget>
#include <QVBoxLayout>
#include <QPushButton>
#include <QStandardItem>
#include <QStandardItemModel>
#include <QTreeView>
#include <QTableView>
#include <QHeaderView>

class Widget : public QWidget
{
    Q_OBJECT

public:
    Widget(QWidget *parent = 0);

    void CreateView();

private:
    QPushButton *testBtn;
    QPushButton *m_PushButton;
    QVBoxLayout *mainLayout;
//    QTreeView *treeView;
    QStandardItemModel *standItemModel;
    QTableView *tableView;

};

#endif // WIDGET_H

widget.cpp

#include "widget.h"

Widget::Widget(QWidget *parent)
    : QWidget(parent)
{
    CreateView();
}

void Widget::CreateView()
{
    mainLayout = new QVBoxLayout;       //垂直布局
    mainLayout->setSpacing(10);         //设置控件间距
    mainLayout->setMargin(10);          //设置边缘间距
    testBtn = new QPushButton("Test");
    m_PushButton = new QPushButton("PushButton");

    //添加QTableView代码
    tableView = new QTableView;
    standItemModel = new QStandardItemModel();

    //添加表头
    standItemModel->setColumnCount(3);
    standItemModel->setHeaderData(0,Qt::Horizontal,QStringLiteral("序号"));   //设置表头内容
    standItemModel->setHeaderData(1,Qt::Horizontal,QStringLiteral("名称"));
    standItemModel->setHeaderData(2,Qt::Horizontal,QStringLiteral("地址"));

    //向表格添加100行内容
    for(int i=0;i<100;i++)
    {
        QStandardItem *standItem1 = new QStandardItem(tr("%1").arg(i+1));
        QStandardItem *standItem2 = new QStandardItem(tr("第%1行").arg(i+1));
        standItemModel->setItem(i,0,standItem1);                                //表格第i行,第0列添加一项内容
        standItemModel->item(i,0)->setForeground(QBrush(QColor(255,0,0)));      //设置字符颜色
        standItemModel->item(i,0)->setTextAlignment(Qt::AlignCenter);           //设置表格内容居中
        standItemModel->setItem(i,1,standItem2);                                //表格第i行,第1列添加一项内容
    }

    tableView->setModel(standItemModel);    //挂载表格模型

    //设置表格属性
    tableView->horizontalHeader()->setDefaultAlignment(Qt::AlignCenter);        //表头信息显示居中
    tableView->horizontalHeader()->setSectionResizeMode(0,QHeaderView::Fixed);  //设定表头列宽不可变
    tableView->horizontalHeader()->setSectionResizeMode(1,QHeaderView::Fixed);
    tableView->horizontalHeader()->setSectionResizeMode(2,QHeaderView::Stretch);//设定第2列表头弹性拉伸

    tableView->setColumnWidth(0,100);       //设定表格第0列宽度
    tableView->setColumnWidth(1,200);

    tableView->verticalHeader()->hide();    //隐藏默认显示的行头
    tableView->setSelectionBehavior(QAbstractItemView::SelectRows); //设置选中时整行选中
    tableView->setEditTriggers(QAbstractItemView::NoEditTriggers);  //设置表格属性只读,不能编辑
//    tableView->setContextMenuPolicy(Qt::CustomContextMenu);         //需要在表格使用右键菜单,需要启动该属性
//    tableView->sortByColumn(0,Qt::AscendingOrder);                 //表格第0列,按降序排列

    tableView->setIndexWidget(standItemModel->index(10,1),m_PushButton);    //向表格单元添加一个控件
    tableView->setIndexWidget(standItemModel->index(10,2),testBtn);         //向表格单元添加一个控件
    tableView->setShowGrid(false);

    standItemModel->removeRows(0,10);                               //删除从第0行开始的连续10行

//    mainLayout->addWidget(testBtn);
    mainLayout->addWidget(tableView);    //添加控件
    this->setLayout(mainLayout);        //显示垂直布局
}

main.cpp

#include "widget.h"
#include <QApplication>

int main(int argc, char *argv[])
{
    QApplication a(argc, argv);
    Widget w;
    w.resize(960,640);
    w.setWindowTitle(QString::fromUtf8("表格控件QTableView用法示例"));
    w.show();

    return a.exec();
}


1.2程序构建运行后,结果如下图所示:



参考内容:

http://blog.sina.com.cn/s/blog_a6fb6cc90101iadm.html

http://qimo601.iteye.com/blog/1538364

http://www.cnblogs.com/jiangu66/archive/2013/07/18/3199041.html#undefined

©️2020 CSDN 皮肤主题: 书香水墨 设计师:CSDN官方博客 返回首页