diff --git a/tests/CMakeLists.txt b/tests/CMakeLists.txt
index 753d0a39b..5dfb9dab1 100644
--- a/tests/CMakeLists.txt
+++ b/tests/CMakeLists.txt
@@ -24,5 +24,6 @@ message("PROJECT_SOURCE_DIR: " ${PROJECT_SOURCE_DIR})
message("QET_DIR: " ${QET_DIR})
# Add sub directories
+add_subdirectory(qttest)
add_subdirectory(catch)
add_subdirectory(googletest)
diff --git a/tests/qttest/.clang-format b/tests/qttest/.clang-format
new file mode 100644
index 000000000..3f1da8525
--- /dev/null
+++ b/tests/qttest/.clang-format
@@ -0,0 +1,67 @@
+---
+BasedOnStyle: LLVM
+AlignAfterOpenBracket: AlwaysBreak
+AlignConsecutiveMacros: 'true'
+AlignConsecutiveAssignments: 'true'
+AlignConsecutiveDeclarations: 'true'
+AlignEscapedNewlines: Right
+AlignOperands: 'true'
+AlignTrailingComments: 'true'
+AllowAllArgumentsOnNextLine: 'false'
+AllowAllConstructorInitializersOnNextLine: 'true'
+AllowAllParametersOfDeclarationOnNextLine: 'true'
+AllowShortBlocksOnASingleLine: 'true'
+AllowShortCaseLabelsOnASingleLine: 'true'
+AllowShortFunctionsOnASingleLine: All
+AllowShortIfStatementsOnASingleLine: Always
+AllowShortLambdasOnASingleLine: All
+AllowShortLoopsOnASingleLine: 'true'
+AlwaysBreakAfterReturnType: None
+AlwaysBreakBeforeMultilineStrings: 'true'
+AlwaysBreakTemplateDeclarations: 'Yes'
+BinPackArguments: 'false'
+BinPackParameters: 'false'
+BreakAfterJavaFieldAnnotations: 'true'
+BreakBeforeBinaryOperators: NonAssignment
+BreakBeforeBraces: Allman
+BreakBeforeTernaryOperators: 'false'
+BreakConstructorInitializers: AfterColon
+BreakInheritanceList: AfterColon
+BreakStringLiterals: 'true'
+ColumnLimit: '80'
+CompactNamespaces: 'false'
+ConstructorInitializerAllOnOneLineOrOnePerLine: 'true'
+Cpp11BracedListStyle: 'true'
+FixNamespaceComments: 'true'
+IncludeBlocks: Regroup
+IndentCaseLabels: 'false'
+IndentPPDirectives: AfterHash
+IndentWidth: '4'
+JavaScriptWrapImports: 'true'
+Language: Cpp
+MaxEmptyLinesToKeep: '1'
+NamespaceIndentation: All
+PointerAlignment: Left
+ReflowComments: 'true'
+SortIncludes: 'true'
+SortUsingDeclarations: 'true'
+SpaceAfterCStyleCast: 'true'
+SpaceAfterLogicalNot: 'true'
+SpaceAfterTemplateKeyword: 'true'
+SpaceBeforeAssignmentOperators: 'true'
+SpaceBeforeCpp11BracedList: 'true'
+SpaceBeforeCtorInitializerColon: 'true'
+SpaceBeforeInheritanceColon: 'true'
+SpaceBeforeParens: ControlStatements
+SpaceBeforeRangeBasedForLoopColon: 'true'
+SpaceInEmptyParentheses: 'false'
+SpacesInAngles: 'false'
+SpacesInCStyleCastParentheses: 'false'
+SpacesInContainerLiterals: 'false'
+SpacesInParentheses: 'false'
+SpacesInSquareBrackets: 'false'
+Standard: Cpp11
+TabWidth: '4'
+UseTab: Always
+
+...
diff --git a/tests/qttest/.gitignore b/tests/qttest/.gitignore
new file mode 100644
index 000000000..fab7372d7
--- /dev/null
+++ b/tests/qttest/.gitignore
@@ -0,0 +1,73 @@
+# This file is used to ignore files which are generated
+# ----------------------------------------------------------------------------
+
+*~
+*.autosave
+*.a
+*.core
+*.moc
+*.o
+*.obj
+*.orig
+*.rej
+*.so
+*.so.*
+*_pch.h.cpp
+*_resource.rc
+*.qm
+.#*
+*.*#
+core
+!core/
+tags
+.DS_Store
+.directory
+*.debug
+Makefile*
+*.prl
+*.app
+moc_*.cpp
+ui_*.h
+qrc_*.cpp
+Thumbs.db
+*.res
+*.rc
+/.qmake.cache
+/.qmake.stash
+
+# qtcreator generated files
+*.pro.user*
+
+# xemacs temporary files
+*.flc
+
+# Vim temporary files
+.*.swp
+
+# Visual Studio generated files
+*.ib_pdb_index
+*.idb
+*.ilk
+*.pdb
+*.sln
+*.suo
+*.vcproj
+*vcproj.*.*.user
+*.ncb
+*.sdf
+*.opensdf
+*.vcxproj
+*vcxproj.*
+
+# MinGW generated files
+*.Debug
+*.Release
+
+# Python byte code
+*.pyc
+
+# Binaries
+# --------
+*.dll
+*.exe
+
diff --git a/tests/qttest/CMakeLists.txt b/tests/qttest/CMakeLists.txt
new file mode 100644
index 000000000..e8e2b8f35
--- /dev/null
+++ b/tests/qttest/CMakeLists.txt
@@ -0,0 +1,69 @@
+# Copyright 2006 The QElectroTech Team
+# This file is part of QElectroTech.
+#
+# QElectroTech is free software: you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation, either version 2 of the License, or
+# (at your option) any later version.
+#
+# QElectroTech is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with QElectroTech. If not, see .
+
+cmake_minimum_required(VERSION 3.5)
+
+message("_____________________________________________________________________")
+
+project(qt_unittests LANGUAGES CXX)
+
+if(DEFINED ENV{QET_DIR})
+ set(QET_DIR "../..")
+ message("QET_DIR is not set, assuming QET is ../..")
+endif()
+
+message("PROJECT_NAME: " ${PROJECT_NAME})
+message("PROJECT_SOURCE_DIR: " ${PROJECT_SOURCE_DIR})
+message("QET_DIR: " ${QET_DIR})
+
+find_package(Qt5Test REQUIRED)
+find_package(Qt5Gui REQUIRED)
+find_package(Qt5Xml REQUIRED)
+find_package(Qt5Svg REQUIRED)
+find_package(Qt5Sql REQUIRED)
+find_package(Qt5Concurrent REQUIRED)
+find_package(Qt5Widgets REQUIRED)
+find_package(KF5WidgetsAddons)
+find_package(KF5CoreAddons)
+
+set(CMAKE_INCLUDE_CURRENT_DIR ON)
+
+set(CMAKE_AUTOUIC ON)
+set(CMAKE_AUTOMOC ON)
+set(CMAKE_AUTORCC ON)
+
+SET(CMAKE_CXX_STANDARD 17)
+
+set(CMAKE_CXX_STANDARD_REQUIRED ON)
+enable_testing()
+
+add_executable(${PROJECT_NAME} tst_mytest.cpp)
+add_test(NAME ${PROJECT_NAME} COMMAND ${PROJECT_NAME})
+
+target_link_libraries(
+ ${PROJECT_NAME}
+ PRIVATE
+ Qt5::Test
+ KF5::WidgetsAddons
+ KF5::CoreAddons
+ Qt5::Gui
+ Qt5::Xml
+ Qt5::Svg
+ Qt5::Sql
+ Qt5::Widgets
+ Qt5::Concurrent
+ )
+
diff --git a/tests/qttest/tst_mytest.cpp b/tests/qttest/tst_mytest.cpp
new file mode 100644
index 000000000..0a8fa62b4
--- /dev/null
+++ b/tests/qttest/tst_mytest.cpp
@@ -0,0 +1,48 @@
+#include
+#include
+
+// add necessary includes here
+
+class mytest : public QObject
+{
+ Q_OBJECT
+
+public:
+ mytest();
+ ~mytest();
+
+private slots:
+ void initTestCase();
+ void cleanupTestCase();
+ void test_case1();
+
+};
+
+mytest::mytest()
+{
+
+}
+
+mytest::~mytest()
+{
+
+}
+
+void mytest::initTestCase()
+{
+
+}
+
+void mytest::cleanupTestCase()
+{
+
+}
+
+void mytest::test_case1()
+{
+
+}
+
+QTEST_MAIN(mytest)
+
+#include "tst_mytest.moc"