Qt视图加载表格

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

mainwindow.h

#ifndef MAINWINDOW_H
#define MAINWINDOW_H

#include 
#include "ui_mainwindow.h"
#include 
#include 
#include 
#include 
#include 

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 
#include 
#include 
#include 
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

Qt视图加载表格_第1张图片
参考书籍 《Qt5开发及实例》

你可能感兴趣的:(Qt)