スポンサーリンク

Qt: csvファイルのデータを表(QTable)に表示する

当サイトは、アフィリエイト広告を利用しています

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();
}

コメント

タイトルとURLをコピーしました