Qt_18 - 8BitsCoding/RobotMentor GitHub Wiki
// cmakelist.h
#pragma once
#include <QtWidgets/QMainWindow>
#include "ui_CMakeWidzard2.h"
class CMakeWidzard2 : public QMainWindow
{
Q_OBJECT
public:
CMakeWidzard2(QWidget *parent = Q_NULLPTR);
void InsertFlagItem(const QString&, const QString&);
void insertNewIncludeDirectory(const QString&);
void addSource(const QString&, const QString&);
void PrepareCMakeListVariables();
private slots:
void on_actionExport_triggered();
void on_AddBtn_clicked();
void on_RemoveBtn_clicked();
void on_addincludeBtn_clicked();
void on_includeList_itemChanged(QListWidgetItem* item);
void on_addsourceBtn_clicked();
void on_removesourceBtn_clicked();
void currentTabChanged(int tab);
private:
Ui::CMakeWidzard2Class ui;
};
// 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;
}
for (const auto& e : cmakeflags.keys()) {
ots << QString("set (%1 %2)").arg(e, cmakeflags.value(e)) << endl;
}
if (defines.size() > 0) {
QString def = "";
for (const auto& e : defines) {
def += "-D" + e + " ";
}
ots << QString("add_definitions(%1)").arg(def) << endl;
}
for (const auto& e : includeDirectories) {
ots << QString("include_directories(%1)").arg(e) << endl;
}
return outputString;
}
void CMakeWidzard2::on_actionExport_triggered()
{
QString dir = QFileDialog::getExistingDirectory(this, "Directory to save", QDir::currentPath(), QFileDialog::ShowDirsOnly);
if (dir.length() == 0) {
QMessageBox::critical(this, "Failed to get dir", "Failed to get directory to save", QMessageBox::Ok);
return;
}
auto filePath = QDir(dir).filePath("CMakeLists.txt");
QFile file(filePath);
if (!file.open(QIODevice::WriteOnly | QIODevice::Text))
{
return;
}
PrepareCMakeListVariables();
QTextStream stream(&file);
stream << cmakeListResult << endl;
file.close();
}