diff --git a/.gitignore b/.gitignore
index 9c1a3a1..b5b6ec3 100644
--- a/.gitignore
+++ b/.gitignore
@@ -1 +1,2 @@
lzstring.pro.user
+.DS_Store
diff --git a/CMakeLists.txt b/CMakeLists.txt
new file mode 100644
index 0000000..9e94470
--- /dev/null
+++ b/CMakeLists.txt
@@ -0,0 +1,10 @@
+cmake_minimum_required(VERSION 3.14)
+
+project(
+ qt-lzstring
+ LANGUAGES CXX
+ VERSION 1.4.5
+ DESCRIPTION "Qt6 port of LZString compression")
+
+add_subdirectory(src)
+add_subdirectory(tests)
diff --git a/README.md b/README.md
index 4d6d382..0163c83 100644
--- a/README.md
+++ b/README.md
@@ -1,5 +1,5 @@
-
Qt implementation of LZ-String, version 1.4.4.
+Qt6 (cmake) implementation of LZ-String, version 1.4.5.
Based on the LZ-String compression algorithm found here:
http://pieroxy.net/blog/pages/lz-string/index.html
@@ -16,3 +16,8 @@ Implemented functions:
compressToUint8Array() / decompressFromUint8Array() - NO
compressToEncodedURIComponent() / decompressFromEncodedURIComponent() - NO
+
+
+ This Qt6 port relies on Qt5-compat for classes QStringRef and QTextCodec.
+ Future improvements should focus on removing this dependency.
+
\ No newline at end of file
diff --git a/lzstring.pro b/lzstring.pro
deleted file mode 100644
index 8515aa2..0000000
--- a/lzstring.pro
+++ /dev/null
@@ -1,5 +0,0 @@
-
-TEMPLATE = subdirs
-SUBDIRS += tests
-
-include(src/lzstring.pri)
diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt
new file mode 100644
index 0000000..bfe3ef7
--- /dev/null
+++ b/src/CMakeLists.txt
@@ -0,0 +1,23 @@
+cmake_minimum_required(VERSION 3.14)
+
+project(qt-lzstring LANGUAGES CXX)
+
+set(CMAKE_AUTOUIC ON)
+set(CMAKE_AUTOMOC ON)
+set(CMAKE_AUTORCC ON)
+set(CMAKE_CXX_STANDARD 17)
+set(CMAKE_CXX_STANDARD_REQUIRED ON)
+
+find_package(QT NAMES Qt6 Qt5 REQUIRED COMPONENTS Core)
+find_package(Qt6 REQUIRED COMPONENTS Core)
+find_package(Qt6 REQUIRED COMPONENTS Core5Compat)
+
+add_library(qt-lzstring SHARED
+ lzstring.cpp
+ lzstring.h
+)
+
+target_link_libraries(qt-lzstring PRIVATE Qt6::Core)
+target_link_libraries(qt-lzstring PRIVATE Qt6::Core5Compat)
+
+target_compile_definitions(qt-lzstring PRIVATE QT6LZSTRING_LIBRARY)
diff --git a/src/lzstring.pri b/src/lzstring.pri
deleted file mode 100644
index 15ee7b8..0000000
--- a/src/lzstring.pri
+++ /dev/null
@@ -1,6 +0,0 @@
-
-INCLUDEPATH += $$PWD
-DEPENDPATH += $$PWD
-
-HEADERS += $$PWD/lzstring.h
-SOURCES += $$PWD/lzstring.cpp
diff --git a/tests/CMakeLists.txt b/tests/CMakeLists.txt
new file mode 100644
index 0000000..9a952dd
--- /dev/null
+++ b/tests/CMakeLists.txt
@@ -0,0 +1,7 @@
+cmake_minimum_required(VERSION 3.14)
+
+project(
+ qt-lzstring-tests
+ LANGUAGES CXX)
+
+add_subdirectory(lzstring_test)
diff --git a/tests/lzstring_test/CMakeLists.txt b/tests/lzstring_test/CMakeLists.txt
new file mode 100644
index 0000000..466f155
--- /dev/null
+++ b/tests/lzstring_test/CMakeLists.txt
@@ -0,0 +1,38 @@
+cmake_minimum_required(VERSION 3.5)
+
+
+project(lzstring_tests LANGUAGES CXX)
+
+enable_testing()
+
+find_package(QT NAMES Qt6 Qt5 REQUIRED COMPONENTS Test)
+find_package(Qt6 REQUIRED COMPONENTS Test)
+find_package(Qt6 REQUIRED COMPONENTS Core5Compat)
+
+set(CMAKE_AUTOUIC ON)
+set(CMAKE_AUTOMOC ON)
+set(CMAKE_AUTORCC ON)
+
+set(CMAKE_CXX_STANDARD 11)
+set(CMAKE_CXX_STANDARD_REQUIRED ON)
+
+add_executable(lzstring_tests lzstring_test.cpp)
+add_test(NAME lzstring_tests COMMAND lzstring_tests)
+
+target_include_directories(lzstring_tests PRIVATE "../../src")
+
+add_custom_command(
+ TARGET lzstring_tests POST_BUILD
+ COMMAND ${CMAKE_COMMAND} -E copy
+ ${CMAKE_SOURCE_DIR}/tests/lzstring_test/data_compressed.json
+ ${CMAKE_CURRENT_BINARY_DIR}/data_compressed.json)
+
+add_custom_command(
+ TARGET lzstring_tests POST_BUILD
+ COMMAND ${CMAKE_COMMAND} -E copy
+ ${CMAKE_SOURCE_DIR}/tests/lzstring_test/data.json
+ ${CMAKE_CURRENT_BINARY_DIR}/data.json)
+
+target_link_libraries(lzstring_tests PRIVATE Qt6::Test)
+target_link_libraries(lzstring_tests PRIVATE Qt6::Core5Compat)
+target_link_libraries(lzstring_tests PRIVATE qt-lzstring)
diff --git a/tests/lzstring_test/lzstring_test.pro b/tests/lzstring_test/lzstring_test.pro
deleted file mode 100644
index 2be58ad..0000000
--- a/tests/lzstring_test/lzstring_test.pro
+++ /dev/null
@@ -1,51 +0,0 @@
-#-------------------------------------------------
-#
-# Project created by QtCreator 2016-09-20T08:36:19
-#
-#-------------------------------------------------
-
-TARGET = lzstring_test
-TEMPLATE = app
-
-QT += testlib
-QT -= gui
-
-CONFIG += console
-CONFIG -= app_bundle debug_and_release debug_and_release_target
-
-DEFINES += SRCDIR=\\\"$$PWD/\\\"
-SOURCES += lzstring_test.cpp
-
-include(../../src/lzstring.pri)
-
-defineReplace(__quote) {
- return(\"$$1\")
-}
-
-defineTest(__copyFilesToDestdir) {
- files = $$1
- isEmpty(files) {
- return(1)
- }
- for(file, files) {
-
- PARTS = $$split(file, |)
- FILE = $$member(PARTS, 0)
- SUBDIR = $$member(PARTS, 1)
- DIR = $$OUT_PWD/$$SUBDIR
-
- # Replace / with \.
- win32:FILE ~= s,/,\\,g
- win32:DIR ~= s,/,\\,g
-
- if (!isEmpty(SUBDIR)) {
- QMAKE_PRE_LINK += $(CHK_DIR_EXISTS) $$__quote($$DIR) $(MKDIR) $$__quote($$DIR) $$escape_expand(\\n\\t)
- }
- QMAKE_PRE_LINK += $(COPY_FILE) $$__quote($$FILE) $$__quote($$DIR) $$escape_expand(\\n\\t)
- }
-
- export(QMAKE_PRE_LINK)
-}
-
-COPY_FILES += $$PWD/data.json
-__copyFilesToDestdir($$COPY_FILES)
diff --git a/tests/tests.pro b/tests/tests.pro
deleted file mode 100644
index d015952..0000000
--- a/tests/tests.pro
+++ /dev/null
@@ -1,3 +0,0 @@
-
-TEMPLATE = subdirs
-SUBDIRS += lzstring_test