Popularity
2.6
Growing
Activity
10.0
-
122
14
9

Programming language: C++
License: MIT License
Tags: GUI     Windows     Linux     Cross-platform     C++17     Mac     C++20    

xtd alternatives and similar libraries

Based on the "GUI" category.
Alternatively, view xtd alternatives based on common mentions on social networks and blogs.

Do you think we are missing an alternative of xtd or a related project?

Add another 'GUI' Library

README

xtd

Modern C++17/20 framework to create console (CLI), forms (GUI like WinForms) and tunit (unit tests like Microsoft Unit Testing Framework) applications on Windows, macOS, Linux, iOS and android.

[logo](docs/pictures/logo.png)

Continuous Integration build status

Operating system Status
Windows Appveyor
macOS TravisCI
Linux CircleCI

Features

  • Free and open-source (MIT License);
  • a collection of native C++ classes libraries, to complete std;
  • API close to the .net API with a modern C++ approach and full integration with the std standard;
  • written in efficient, modern C++17 / C++20 with RAII programming idiom;
  • and highly portable and available on many different platforms;

For more information see

Examples

The classic first application 'Hello World'.

Console (CLI)

hello_world_console.cpp

#include <xtd/xtd>

using namespace xtd;

int main() {
  console::background_color(console_color::blue);
  console::foreground_color(console_color::white);
  console::write_line("Hello, World!");
}

CMakeLists.txt

cmake_minimum_required(VERSION 3.3)

project(hello_world_console)
find_package(xtd REQUIRED)
add_sources(hello_world_console.cpp)
target_type(CONSOLE_APPLICATION)

Build and run

Open "Command Prompt" or "Terminal". Navigate to the folder that contains the project and type the following:

xtdc run

Output

Hello, World!

Forms (GUI like WinForms)

hello_world_forms.cpp

#include <xtd/xtd>

using namespace xtd::forms;

class main_form : public form {
public:
  main_form() {
    text("Hello world (message_box)");

    button1.location({10, 10});
    button1.parent(*this);
    button1.text("&Click me");
    button1.click += [] {
      message_box::show("Hello, World!");
    };
  }

private:
  button button1;
};

int main() {
  application::run(main_form());
}

CMakeLists.txt

cmake_minimum_required(VERSION 3.3)

project(hello_world_forms)
find_package(xtd REQUIRED)
add_sources(hello_world_forms.cpp)
target_type(GUI_APPLICATION)

Build and run

Open "Command Prompt" or "Terminal". Navigate to the folder that contains the project and type the following:

xtdc run

Output

Windows

[Screenshot](docs/pictures/examples/hello_world_message_box_w.png)

[Screenshot](docs/pictures/examples/hello_world_message_box_wd.png)

macOS

[Screenshot](docs/pictures/examples/hello_world_message_box_m.png)

[Screenshot](docs/pictures/examples/hello_world_message_box_md.png)

Linux Gnome

[Screenshot](docs/pictures/examples/hello_world_message_box_g.png)

[Screenshot](docs/pictures/examples/hello_world_message_box_gd.png)

tunit (Unit tests like Microsoft Unit Testing Framework)

hello_world_test.cpp

#include <xtd/xtd>
#include <string>

using namespace std;
using namespace xtd::tunit;

namespace unit_tests {
  class test_class_(hello_world_test) {
  public:
    void test_method_(create_string_from_literal) {
      string s = "Hello, World!";
      valid::are_equal(13, s.size());
      assert::are_equal("Hello, World!", s);
    }

    void test_method_(create_string_from_chars) {
      string s = {'H', 'e', 'l', 'l', 'o', ',', ' ', 'W', 'o', 'r', 'l', 'd', '!'};
      valid::are_equal(13, s.size());
      string_assert::starts_with("Hello,", s);
      string_assert::ends_with(" World!", s);
    }
  };
}

int main() {
  return console_unit_test().run();
}

CMakeLists.txt

cmake_minimum_required(VERSION 3.3)

project(hello_world_test)
find_package(xtd REQUIRED)
add_sources(hello_world_test.cpp)
target_type(TEST_APPLICATION)

Build and run

Open "Command Prompt" or "Terminal". Navigate to the folder that contains the project and type the following:

xtdc run

Output

Start 2 tests from 1 test case
Run tests:
  SUCCEED hello_world_test.create_string_from_literal (0 ms total)
  SUCCEED hello_world_test.create_string_from_chars (0 ms total)

Test results:
  SUCCEED 2 tests.
End 2 tests from 1 test case ran. (0 ms total)

Getting Started

  • [Installation](docs/downloads.md) provides download and install documentation.
  • [Portability](docs/portability.md) provides information about C++, libraries dependency, Operating System supported, Compilers and Development Environment tools.
  • [Examples](examples/README.md) provides some examples.

Contributing

The [authors file](AUTHORS.md) lists contributors together with contact information. If you make a contribution, please add yourself to the list.

Your contributions are welcome.

  • First read [Code of conduct](CODE_OF_CONDUCT.md) and the [design guidelines](docs/design_guidelines.md) to make sure your contribution follows the rules.
  • Fork the project and use a pull request for adding your contribution.
  • If you face any problems feel free to open an issue at the issues tracker, If you feel like there is a missing feature, please raise a ticket on Github. Pull request are also welcome.

Your feedback is important for the evolution of the project.

Gallery

[minesweeper](docs/pictures/minesweeper.png)

minesweeper (on Windows)


[game_of_life](docs/pictures/game_of_life.png)

game_of_life (on macOS)


[calculator](docs/pictures/calculator.png)

calculator (on Ubuntu)


[stopwatch](docs/pictures/stopwatch.png)

stopwatch (on Windows)


[xtdc-gui](docs/pictures/xtdc-gui.png)

xtdc-gui - Create a new project (on macOS)


[painting](docs/pictures/painting.png)

painting (on Ubuntu)


*Note that all licence references and agreements mentioned in the xtd README section above are relevant to that project's source code only.