Qt_17 - 8BitsCoding/RobotMentor GitHub Wiki

데이터를 저장할 클래스(CMakeList) 생성

// cmakelist.h
#pragma once
#include <qstring.h>
#include <qmap.h>
#include <qlist.h>

class CMakeLists
{
public:
	CMakeLists();
	~CMakeLists();

	void SetProjectName(const QString&);
	void AddCMakeFlags(const QString&, const QString&);
	void AddDefine(const QString&);
	void AddIncludeDirectory(const QString&);
	void AddSource(const QString&, const QString&);

	QString GenerateCMakeLists();

private:
	QString projectName;
	QMap<QString, QString> cmakeflags;
	QList<QString> includeDirectories;
	QMap<QString, QString> sources;
	QList<QString> defines;
};
// cmakelist.cpp
#include "CMakeLists.h"
#include <qtextstream.h>

CMakeLists::CMakeLists()
{
}


CMakeLists::~CMakeLists()
{
}

void CMakeLists::SetProjectName(const QString& name)
{
	projectName = name;
}

void CMakeLists::AddCMakeFlags(const QString& key, const QString& value)
{
	cmakeflags.insert(key, value);
}

void CMakeLists::AddDefine(const QString& value)
{
	defines.append(value);
}

void CMakeLists::AddIncludeDirectory(const QString& dir)
{
	includeDirectories.append(dir);
}

void CMakeLists::AddSource(const QString& key, const QString& value)
{
	sources.insert(key, value);
}

QString CMakeLists::GenerateCMakeLists()
{
	QString outputString;
	QTextStream ots(&outputString);

	ots << "cmake_minimum_required (VERSION 2.6)" << endl;
	ots << QString("project (%1)").arg(projectName) << endl;
	
	for (const auto& e : sources.keys()) {
		ots << QString("add_executable(%1 %2)").arg(e, sources.value(e)) << endl;
	}
	
	
	return outputString;
}

출력해 보기

void CMakeWidzard2::currentTabChanged(int tab)
{
	qDebug() << "current tab index" << tab << endl;

	if (tab == 4) {
		// Make CMake file
		PrepareCMakeListVariables();
	}
}

void CMakeWidzard2::PrepareCMakeListVariables()
{
	CMakeLists cmakelists;

	// project tab
	QString projectName = ui.ProjectNamelineEdit->text();

	cmakelists.SetProjectName(projectName);

	// flags tab
	auto flagsCount = ui.flagsTable->rowCount();
	for (int rowIndex = 0; rowIndex < flagsCount; rowIndex++) {
		auto keyItem = ui.flagsTable->item(rowIndex, 0);
		auto valueItem = ui.flagsTable->item(rowIndex, 1);

		QString flagsKey = keyItem->text();
		QString flasvalye = valueItem->text();
		cmakelists.AddCMakeFlags(flagsKey, flasvalye);
	}

	// preprocessor tab
	if (ui.definesEdit->toPlainText().size() > 0) {
		QStringList defines = ui.definesEdit->toPlainText().split(QRegExp("\\| \\;|\\n"));
		for (int index = 0; index < defines.length(); index++) {
			qDebug() << defines.at(index) << endl;
			cmakelists.AddDefine(defines.at(index));
		}
	}

	// directory tab
	// 1. include dir(QListWidget)
	for (int row = 0; row < ui.includeList->count(); row++) {
		auto item = ui.includeList->item(row);	// QListWidgetItem
		QString includeDir = item->text();
		cmakelists.AddIncludeDirectory(includeDir);
	}
	// 2. sources(QtableWidget)
	for (int row = 0; row < ui.sourcesTable->rowCount(); row++) {
		auto target = ui.sourcesTable->item(row, 0);
		auto sources = ui.sourcesTable->item(row, 1);

		cmakelists.AddSource(target->text(), sources->text());
	}

	// preview tab
	QString previewCMakeList_txt = cmakelists.GenerateCMakeLists();

}
⚠️ **GitHub.com Fallback** ⚠️