#!/usr/bin/env bash set -euo pipefail TARGET_DIR="${1:-qt5-before/qt5-legacy-migration-benchmark}" mkdir -p "${TARGET_DIR}" cat > "${TARGET_DIR}/CMakeLists.txt" <<'FILE_EOF' cmake_minimum_required(VERSION 3.10) project(Qt5LegacyMigrationBenchmark LANGUAGES CXX) set(CMAKE_CXX_STANDARD 11) set(CMAKE_CXX_STANDARD_REQUIRED ON) set(CMAKE_AUTOMOC ON) set(CMAKE_AUTOUIC ON) set(CMAKE_AUTORCC ON) find_package(Qt5 REQUIRED COMPONENTS Core Gui Widgets) add_executable(Qt5LegacyMigrationBenchmark main.cpp MainWindow.h MainWindow.cpp MainWindow.ui resources.qrc ) target_link_libraries(Qt5LegacyMigrationBenchmark Qt5::Core Qt5::Gui Qt5::Widgets ) FILE_EOF cat > "${TARGET_DIR}/MainWindow.h" <<'FILE_EOF' #pragma once #include #include QT_BEGIN_NAMESPACE namespace Ui { class MainWindow; } QT_END_NAMESPACE class MainWindow : public QMainWindow { Q_OBJECT public: explicit MainWindow(QWidget *parent = 0); ~MainWindow(); private slots: void onValidateClicked(); void onScreenInfoClicked(); private: Ui::MainWindow *ui; QRegExp legacyPattern; }; FILE_EOF cat > "${TARGET_DIR}/MainWindow.cpp" <<'FILE_EOF' #include "MainWindow.h" #include "ui_MainWindow.h" #include #include #include #include #include #include MainWindow::MainWindow(QWidget *parent) : QMainWindow(parent) , ui(new Ui::MainWindow) , legacyPattern("^[A-Za-z]+\\d+$") { ui->setupUi(this); QTextCodec *codec = QTextCodec::codecForName("UTF-8"); QString title = codec->toUnicode("Qt5 Legacy Migration Benchmark"); setWindowTitle(title); ui->label->setText(codec->toUnicode("Bitte Text wie Test123 eingeben.")); ui->iconLabel->setPixmap(QPixmap(":/icons/app.png").scaled(48, 48)); connect(ui->validateButton, SIGNAL(clicked()), this, SLOT(onValidateClicked())); connect(ui->screenButton, SIGNAL(clicked()), this, SLOT(onScreenInfoClicked())); } MainWindow::~MainWindow() { delete ui; } void MainWindow::onValidateClicked() { QString text = ui->lineEdit->text(); if (legacyPattern.exactMatch(text)) { ui->resultLabel->setText("Match"); } else { ui->resultLabel->setText("No match"); } } void MainWindow::onScreenInfoClicked() { QRect screenGeometry = QApplication::desktop()->screenGeometry(); QString info = QString("Screen: %1x%2") .arg(screenGeometry.width()) .arg(screenGeometry.height()); ui->resultLabel->setText(info); } FILE_EOF cat > "${TARGET_DIR}/main.cpp" <<'FILE_EOF' #include #include #include "MainWindow.h" int main(int argc, char *argv[]) { #if QT_VERSION < QT_VERSION_CHECK(6, 0, 0) QTextCodec::setCodecForLocale(QTextCodec::codecForName("UTF-8")); #endif QApplication a(argc, argv); MainWindow w; w.show(); return a.exec(); } FILE_EOF cat > "${TARGET_DIR}/MainWindow.ui" <<'FILE_EOF' MainWindow 0 0 420 240 Qt5 Legacy App Initial text Enter value like Test123 Validate Screen Info Result appears here FILE_EOF cat > "${TARGET_DIR}/resources.qrc" <<'FILE_EOF' app.png FILE_EOF ( cd "${TARGET_DIR}" python3 - <<'FILE_EOF' import base64 png = base64.b64decode( "iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAQAAAC1HAwCAAAAC0lEQVR42mP8/x8AAusB9Wn8nKsAAAAASUVORK5CYII=" ) with open("app.png", "wb") as f: f.write(png) FILE_EOF ) echo "Qt5 legacy benchmark created at: ${TARGET_DIR}"