Qt视图加载表格

Qt模型/视图这块看过后总容易忘记,为方便以后查找,记录一下!
利用QTableView加载表格

mainwindow.h

#ifndef MAINWINDOW_H
#define MAINWINDOW_H

#include <QtWidgets/QMainWindow>
#include "ui_mainwindow.h"
#include <QTableView>
#include <QtGui/QStandardItemModel>
#include <QMenu>
#include <QAction>
#include <QSplitter>

class mainwindow : public QMainWindow
{
    Q_OBJECT

public:
    mainwindow(QWidget *parent = 0);
    ~mainwindow();
    void createActions() ;
    void createMenus() ;
    void setupModels() ;
    void setupView() ;
    void openFile(QString strpath) ;
public slots:
    void slot_Open() ;
private:
    Ui::mainwindowClass ui;
    QMenu *m_fileMenu ;
    QAction *m_openAct ;
    QSplitter *m_splitter ;

    QStandardItemModel *m_model ;
    QTableView *m_table ;
    QWidget *m_central ;
};

mainwindow.cpp

#include "mainwindow.h"
#include <QMenuBar>
#include <QHBoxLayout>
#include <QFileDialog>
#include <QTextStream>
mainwindow::mainwindow(QWidget *parent)
    : QMainWindow(parent)
{
    ui.setupUi(this);
    m_central = new QWidget(this) ;
    setFixedSize(500 , 300) ; //设置尺寸大小
    createActions() ;
    createMenus() ;
    setupModels() ;
    setupView() ;
}

mainwindow::~mainwindow()
{

}
void mainwindow::createActions()
{
    m_openAct = new QAction(QStringLiteral("打开") , this) ;
    connect(m_openAct , SIGNAL(triggered()) , this , SLOT(slot_Open())) ;
}
void mainwindow::createMenus()
{
    m_fileMenu = menuBar()->addMenu(QStringLiteral("文件")) ;
    m_fileMenu->addAction(m_openAct) ;
}
void mainwindow::setupModels()
{
    m_model = new QStandardItemModel(4 ,4 , this) ;
    m_model->setHeaderData(0 , Qt::Horizontal , QStringLiteral("部门")) ;
    m_model->setHeaderData(1 , Qt::Horizontal , QStringLiteral("男")) ;
    m_model->setHeaderData(2 , Qt::Horizontal , QStringLiteral("女")) ;
    m_model->setHeaderData(3 , Qt::Horizontal , QStringLiteral("退休")) ;

}
void mainwindow::setupView()
{
    m_table = new QTableView ;
    m_table->setModel(m_model) ;

    QHBoxLayout *layout = new QHBoxLayout(m_central) ;

    QItemSelectionModel *selectionModel = new QItemSelectionModel(m_model) ;//新建一个QItemSelectionModel作为QTableView的选择模型
    m_table->setSelectionModel(selectionModel) ;
    layout->addWidget(m_table) ;
    connect(selectionModel , SIGNAL(selectionChanged(const QItemSelection , const QItemSelection)) , m_table , SLOT(selectionChanged(const QItemSelection , const QItemSelection))) ;

    setLayout(layout) ;
    setCentralWidget(m_central) ;
}
void mainwindow::slot_Open()
{
    QString name ;
    name = QFileDialog::getOpenFileName(this , QStringLiteral("打开") , QDir::currentPath() , QStringLiteral("*.txt")) ;

    if (!name.isEmpty())
    {
        openFile(name) ;
    }
}
void mainwindow::openFile(QString strpath)
{
    if (!strpath.isEmpty())
    {
        QFile file(strpath) ;
        if (file.open(QFile::ReadOnly|QFile::Text))
        {
            QTextStream stream(&file) ;
            QString line ;
            m_model->removeRows(0 , m_model->rowCount(QModelIndex()) , QModelIndex()) ;

            int row = 0 ;

            do 
            {
                line = stream.readLine() ;//读取一整行
                if (!line.isEmpty())
                {
                    m_model->insertRows(row , 1 , QModelIndex()) ;
                    QStringList pieces = line.split("," , QString::SkipEmptyParts) ;
                    m_model->setData(m_model->index(row , 0 , QModelIndex()) , pieces.value(0)) ;

                    m_model->setData(m_model->index(row , 1 , QModelIndex()) , pieces.value(1)) ;

                    m_model->setData(m_model->index(row , 2 , QModelIndex()) , pieces.value(2)) ;

                    m_model->setData(m_model->index(row , 3 , QModelIndex()) , pieces.value(3)) ;
                    row++ ;
                }
            } while (!line.isEmpty());
            file.close() ;
        }
    }
}


#endif // MAINWINDOW_H

加载数据
参考书籍 《Qt5开发及实例》

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值