スポンサーリンク
ホーム»Qt逆引きマニュアル»GUI» Qt: csvファイルのデータを表(QTable)に表示する

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

インクルードファイル

1
2
3
4
5
6
7
8
#include <QWidget>
#include <QMainWindow>
#include <QCommandLinkButton>
#include <QHBoxLayout>
#include <QVBoxLayout>
#include <QStandardItemModel>
#include <QStackedLayout>
#include <QTableView>

ヘッダーファイル

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
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

コード

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
#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<QStandardItem *> 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をコピーしました