CSV形式(カンマ区切り)ファイルからデータを読み込み、表(QTable)にデータを表示します。
環境:QT5.5
リンク
http://doc.qt.io/qt-5/qwidget.html
http://doc.qt.io/qt-5/qmainwindow.html
http://doc.qt.io/qt-5/qcommandlinkbutton.html
http://doc.qt.io/qt-5/qhboxlayout.html
http://doc.qt.io/qt-5/qvboxlayout.html
http://doc.qt.io/qt-5/qstandarditemmodel.html
http://doc.qt.io/qt-5/qstackedlayout.html
http://doc.qt.io/qt-5/qtableview.html
インクルードファイル
#include
#include
#include
#include
#include
#include
#include
#include
ヘッダーファイル
class ClassA : public QMainWindow
{
Q_OBJECT
public:
explicit ClassA(QWidget *parent = 0);
~ClassA();
private slots:
void csvDisplay(bool);
private:
Ui::ClassA *ui;
// Window Object
QHBoxLayout *mainLayout;
QVBoxLayout *leftLayout;
QVBoxLayout *rightLayaut;
QStackedLayout *rightTop;
QHBoxLayout *rightBottom;
QCommandLinkButton *csvButton;
QTableView *csvTable;
QStandardItemModel *csvModel;
// Function
void initWindow();
};
#endif // ClassA_H
コード
#include "ClassA.h"
#include "ui_ClassA.h"
//===========================================================
// コンストラクタ
//===========================================================
ClassA::ClassA(QWidget *parent) :
QMainWindow(parent),
ui(new Ui::ClassA)
{
ui->setupUi(this);
// 画面作成
initWindow();
// 画面動作設定 ボタンが押されたらログを表に表示する。
QObject::connect(csvButton, SIGNAL(clicked(bool)),this,SLOT(csvDisplay(bool)));
}
//===========================================================
// デストラクタ
//===========================================================
ClassA::~ClassA()
{
delete ui;
}
//===========================================================
// 画面の初期設定
//===========================================================
void ClassA::initWindow()
{
//*** 画面左側
// パーツ作成
leftLayout = new QVBoxLayout;
csvButton = new QCommandLinkButton(tr("CSVファイル表示"));
// 配置
leftLayout->addWidget(csvButton);
leftLayout->addStretch();
//*** 画面右側
rightLayaut = new QVBoxLayout;
rightTop = new QStackedLayout;
// Table:カーネルログ出力表示設定
csvTable = new QTableView;
csvTable->setSortingEnabled(true);
csvModel = new QStandardItemModel;
csvModel->setColumnCount(4); // 4カラム
csvModel->setHorizontalHeaderLabels(QStringList() << tr("カラム1") << tr("カラム2") << tr("カラム3") << tr("カラム4");
csvTable->setModel(csvModel);
rightTop->addWidget(csvTable);
rightTop->setCurrentWidget(csvTable);
//*** 画面全体
mainLayout = new QHBoxLayout;
mainLayout->addLayout(leftLayout);
mainLayout->addLayout(rightLayaut);
ui->centralwidget->setLayout(mainLayout);
}
//===========================================================
// csv表示
//===========================================================
void ClassA::csvDisplay(bool)
{
// CSVファイルからデータ読込→表示
QFile flcsv("C:\text.csv");
flcsv.open(QFile::ReadOnly | QFile::Text );
QTextStream in(&flcsv);
QString line;
QList itemList;
quint8 lineCnt = 0;
while ( !in.atEnd() ) {
line = in.readLine();
for(QString item: line.split(",")) {
itemList.append(new QStandardItem(item));
}
csvModel->insertRow(csvModel->rowCount(), itemList);
lineCnt++;
itemList.clear();
}
flcsv.close();
}
コメント