QT界面:QTableWidget使用小結&加載txt參數列表

環境: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);//隱藏左邊垂直

}

效果:

在這裏插入圖片描述
點擊“開始”按鈕加載參數列表:
在這裏插入圖片描述

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章