環境:Win10-x64+VS2015+Qt5.9.7
首先創建一個Qt GUI Application,工程名爲myTableWidget。
一、基本應用
頭文件
myTableWidget.h
#pragma once
#include <QtWidgets/QMainWindow>
#include <QTableWidget>
#include <QGridLayout>
#include <QPushButton>
#include "ui_myTableWidget.h"
#pragma execution_character_set("utf-8")
class myTableWidget : public QMainWindow
{
Q_OBJECT
public:
myTableWidget(QWidget *parent = Q_NULLPTR);
private:
Ui::myTableWidgetClass ui;
QTableWidget *m_qTableWidget;
QPushButton *m_qStartPushButton;
QPushButton *m_qStopPushButton;
private slots:
void runPushButtonSlot();
};
源文件
myTableWidget.cpp
#include "myTableWidget.h"
myTableWidget::myTableWidget(QWidget *parent)
: QMainWindow(parent)
{
ui.setupUi(this);
QHBoxLayout *hlayout1 = new QHBoxLayout;
//創建一個TableWidget,並填充內容
QString parameters = "長度,寬度,高度,密度,顏色,比例,數量,距離,半徑,周長";
QStringList parameterList = parameters.split(",");
m_qTableWidget = new QTableWidget;
hlayout1->addWidget(m_qTableWidget);
m_qTableWidget->setRowCount(parameterList.size());
m_qTableWidget->setColumnCount(2);
QStringList header;
header << "參數" << "數值";
m_qTableWidget->setHorizontalHeaderLabels(header);
for (size_t i = 0; i < parameterList.size(); i++)
{
m_qTableWidget->setItem(i, 0, new QTableWidgetItem(parameterList.at(i)));
m_qTableWidget->item(i, 0)->setFlags(Qt::NoItemFlags);
m_qTableWidget->item(i, 0)->setTextColor(QColor(0, 0, 255));
m_qTableWidget->setItem(i, 1, new QTableWidgetItem(QString::number(i*i)));
m_qTableWidget->item(i, 1)->setTextColor(QColor(100, 250, 0));
}
m_qTableWidget->setColumnWidth(0, 160);
m_qTableWidget->setColumnWidth(1, 90);
m_qTableWidget->setHorizontalScrollBarPolicy(Qt::ScrollBarAlwaysOff);
m_qTableWidget->verticalHeader()->setVisible(false);//隱藏左邊垂直
//下方創建兩個按鈕控件
QHBoxLayout *hlayout2 = new QHBoxLayout;
m_qStartPushButton = new QPushButton(tr("開始"));
m_qStartPushButton->setStyleSheet("background-color: rgb(0, 255, 127);");
QObject::connect(m_qStartPushButton, SIGNAL(clicked()), this, SLOT(runPushButtonSlot()));
m_qStopPushButton = new QPushButton(tr("停止"));
m_qStopPushButton->setStyleSheet("background-color: rgb(200, 80, 80);");
hlayout2->addWidget(m_qStartPushButton);
hlayout2->addWidget(m_qStopPushButton);
//定義佈局結構
QGridLayout *vlayout = new QGridLayout;
vlayout->addLayout(hlayout1, 0, 0);
vlayout->addLayout(hlayout2, 1, 0);
QWidget *widget = new QWidget();
this->setCentralWidget(widget);
centralWidget()->setLayout(vlayout);
}
void myTableWidget::runPushButtonSlot()
{
m_qTableWidget->clear();//清除所有可見數據包括表頭
}
效果如圖:
點擊“開始”後清楚表格內容:
二、加載參數列表
需求:現在需要從txt文件中,獲取一組參數列表,然後將參數列表映射到TableWidget中。
這裏的做法是:先將txt文件中的內容讀取出來,放到一個QMap中,然後再將QMap中的Key-Value映射到TableWidget中。
parameters.txt文件內容:
長度:0
寬度:1
高度:4
密度:9
顏色:16
比例:25
數量:36
距離:49
半徑:64
周長:91
頭文件
myTableWidget.h
#pragma once
#include <QtWidgets/QMainWindow>
#include <QTableWidget>
#include <QGridLayout>
#include <QPushButton>
#include <QFile>
#include <QTextCodec>
#include <QMessageBox>
#include "ui_myTableWidget.h"
#pragma execution_character_set("utf-8")
class myTableWidget : public QMainWindow
{
Q_OBJECT
public:
myTableWidget(QWidget *parent = Q_NULLPTR);
private:
Ui::myTableWidgetClass ui;
QTableWidget *m_qTableWidget;
QPushButton *m_qStartPushButton;
QPushButton *m_qStopPushButton;
QMap<QString, QString> m_qmTxtFileMap;
private slots:
void runPushButtonSlot();
};
源文件
myTableWidget.cpp
#include "myTableWidget.h"
myTableWidget::myTableWidget(QWidget *parent)
: QMainWindow(parent)
{
ui.setupUi(this);
QHBoxLayout *hlayout1 = new QHBoxLayout;
m_qTableWidget = new QTableWidget;
hlayout1->addWidget(m_qTableWidget);
QHBoxLayout *hlayout2 = new QHBoxLayout;
m_qStartPushButton = new QPushButton(tr("開始"));
m_qStartPushButton->setStyleSheet("background-color: rgb(0, 255, 127);");
QObject::connect(m_qStartPushButton, SIGNAL(clicked()), this, SLOT(runPushButtonSlot()));
m_qStopPushButton = new QPushButton(tr("停止"));
m_qStopPushButton->setStyleSheet("background-color: rgb(200, 80, 80);");
hlayout2->addWidget(m_qStartPushButton);
hlayout2->addWidget(m_qStopPushButton);
QGridLayout *vlayout = new QGridLayout;
vlayout->addLayout(hlayout1, 0, 0);
vlayout->addLayout(hlayout2, 1, 0);
QWidget *widget = new QWidget();
this->setCentralWidget(widget);
centralWidget()->setLayout(vlayout);
}
void myTableWidget::runPushButtonSlot()
{
QString filePath = "parameters.txt";
QFile file(filePath);
QStringList m_qlComboBoxList;
//--------------------------將txt文件內參數列表映射到QMap中--------------------------
m_qlComboBoxList.clear();
m_qmTxtFileMap.clear();
if (file.open(QIODevice::ReadOnly | QIODevice::Text))
{
while (!file.atEnd())
{
QTextCodec *codec = QTextCodec::codecForName("GB2312");
QString tmp = codec->toUnicode(file.readLine());
if (tmp.right(1) == "\n")
{
tmp.remove(tmp.length() - 1, tmp.length());
m_qmTxtFileMap.insert(tmp.split(':').at(0), tmp.split(':').at(1));
}
else
{
m_qmTxtFileMap.insert(tmp.split(':').at(0), tmp.split(':').at(1));
}
}
file.close();
}
else
{
QMessageBox::warning(this, tr("加載參數"), tr("參數加載失敗!"));
}
//--------------------------將QMap中的參數列表填充到TableWidget--------------------------
if (m_qmTxtFileMap.size() == 0)
{
return;
}
QStringList parameterList;
parameterList.clear();
parameterList = m_qmTxtFileMap.keys();
m_qTableWidget->setRowCount(parameterList.size());
m_qTableWidget->setColumnCount(2);
QStringList header;
header << "參數" << "數值";
m_qTableWidget->setHorizontalHeaderLabels(header);
for (size_t i = 0; i < parameterList.size(); i++)
{
m_qTableWidget->setItem(i, 0, new QTableWidgetItem(parameterList.at(i)));
m_qTableWidget->item(i, 0)->setFlags(Qt::NoItemFlags);
m_qTableWidget->item(i, 0)->setTextColor(QColor(0, 0, 255));
m_qTableWidget->setItem(i, 1, new QTableWidgetItem(m_qmTxtFileMap.find(parameterList.at(i)).value()));
m_qTableWidget->item(i, 1)->setTextColor(QColor(100, 250, 0));
}
m_qTableWidget->setColumnWidth(0, 160);
m_qTableWidget->setColumnWidth(1, 90);
m_qTableWidget->setHorizontalScrollBarPolicy(Qt::ScrollBarAlwaysOff);
m_qTableWidget->verticalHeader()->setVisible(false);//隱藏左邊垂直
}
效果:
點擊“開始”按鈕加載參數列表: