您的位置:首页 > 编程语言 > Qt开发

Qt视图加载表格

2016-01-03 15:20 507 查看
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开发及实例》
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: