--- title: 3. Writing your first application layout: docs --- :doctitle: 3. Writing your first application :notitle: == Writing your first application === Building the QSkinny repository In this chapter we will write a simple QSkinny application on Linux from scratch in C++ with Qt6. As a prerequisite, a supported Qt6 version should be available. On debian bullseye we need to install these packages `build-essential cmake qtbase6-dev qtbase6-private-dev qtdeclarative6-dev qtdeclarative6-private-dev libqt6svg-dev qt6-shadertools`. Optional packages for the virtual keyboard are `libhunspell-dev libimepinyin-dev` Then we can build and install QSkinny to `/opt/qskinny` with the following commands: [source,shell] .... $ git clone https://github.com/uwerat/qskinny.git # clone $ cd qskinny $ mkdir build && cd build $ cmake .. $ cmake --build . $ sudo cmake --install . --prefix "/opt/qskinny" .... Considering that you want to use a specific Qt version that is installed below "/path/to/qt" you have 2 options: [source,shell] .... $ cmake .. -DCMAKE_PREFIX_PATH=/path/to/qt .... or [source,shell] .... $ /path/to/qt/bin/qt-cmake .. .... === Compiling our first app As a next step, we need to write our app. Let's start with a simple `main.cpp` file in a directory `myapp`: .main.cpp [source] .... #include #include int main( int argc, char* argv[] ) { QGuiApplication app( argc, argv ); QskWindow window; window.show(); return app.exec(); } .... For now this will just create an empty window (the `QskWindow`) without any controls. Next, we need to create a `CMakeLists.txt` file in our `myapp` directory. .CMakeLists.txt [source,cmake] .... cmake_minimum_required(VERSION 3.27) project(myapp VERSION 1.0.0 LANGUAGES CXX) set(CMAKE_CXX_STANDARD 17) set(CMAKE_CXX_STANDARD_REQUIRED ON) set(CMAKE_AUTOMOC ON) set(CMAKE_AUTORCC ON) set(CMAKE_AUTOUIC ON) find_package(Qt6 REQUIRED COMPONENTS Quick) find_package(QSkinny REQUIRED) add_executable(myapp src/main.cpp) target_link_libraries(myapp PRIVATE Qt6::Quick Qsk::QSkinny) .... Now we can compile our app: [source,shell] .... $ cd myapp $ mkdir build && cd build $ cmake ../ && make .... When running myapp it needs to find the skin plugins. Setting QT_PLUGIN_PATH is one option ( see https://doc.qt.io/qt/deployment-plugins.html ): [source,shell] .... $ QT_PLUGIN_PATH=/opt/qskinny/plugins ./myapp .... This should show just an empty window. === Adding UI controls Now that we have our app running, we can add some UI controls to it by extending the `main.cpp` file we created earlier. We will add some additional include directives, and then create a horizontal layout containing two push buttons. The layout with the two buttons will be shown in the window. Below is the complete updated source file: .main.cpp [source, cpp] .... #include #include #include #include int main( int argc, char* argv[] ) { QGuiApplication app( argc, argv ); auto box = new QskLinearBox( Qt::Horizontal ); /* some design systems work with transparencies ( f.e Fluent2 ) and we need to have a control providing a solid base color as bottom layer. */ box->setPanel( true ); (void) new QskPushButton( "Button 1", box ); (void) new QskPushButton( "Button 2", box ); QskWindow window; window.addItem( horizontalBox ); window.show(); return app.exec(); } .... Now the app is displaying the two buttons: image::../images/writing-first-application.png[An app showing two buttons] That's it; you just created a QSkinny application from scratch. For information on how the controls and layouts above behave, see the next chapters.