gtkmm
gtkmm (ранее известный как gtk-- или gtk minus minus) — официальный C++-интерфейс для популярной GUI-библиотеки GTK. Включает слоты и сигналы с проверкой типов во время компиляции (благодаря библиотеке libsigc++[англ.]), наследование виджетов с использованием стандартного способа C++ и полный набор виджетов, предоставляемых GTK. Графический интерфейс программы может создаваться программно или с использованием Glade.
Библиотека gtkmm является свободным программным обеспечением и распространяется на условиях GNU LGPL.
Особенности
[править | править код]Основные возможности gtkmm:
- Использование наследования для создания новых виджетов.
- Слоты и сигналы с проверкой типов во время компиляции.
- Полиморфизм.
- Использование стандартной библиотеки C++, в том числе строк, контейнеров и итераторов.
- Поддержка UTF-8.
- Управление памятью C++.
- Агрегирование.
- Автоматическое освобождение динамически размещаемых виджетов.
- Использование пространств имен C++.
- Отсутствие макросов.
- Кросс-платформенность: Linux (gcc), FreeBSD (gcc), NetBSD (gcc), Solaris (gcc, Forte), Win32 (gcc, MSVC++, .Net 2003), Mac OS X (gcc) и другие.
Примеры программ
[править | править код]Создание пустого окна
[править | править код]#include <gtkmm.h> int main(int argc, char* argv[]) { auto application = Gtk::Application::create(argc, argv); Gtk::Window window; return application->run(window); }
Компиляция:
g++ file_name.cpp -o file_name `pkg-config gtkmm-3.0 --cflags --libs`
Hello World
[править | править код]//HelloWorldWindow.h #ifndef HELLOWORLDWINDOW_H #define HELLOWORLDWINDOW_H #include <gtkmm/window.h> #include <gtkmm/button.h> // Наследовать новый виджет окна от существующего. // Это окно будет содержать только кнопку с надписью "Hello World". class HelloWorldWindow : public Gtk::Window { public: HelloWorldWindow(); protected: Gtk::Button hello_world; }; #endif
//HelloWorldWindow.cc #include <iostream> #include "HelloWorldWindow.h" HelloWorldWindow::HelloWorldWindow() : hello_world("Hello World") { // Задать заголовок окна. set_title("Hello World"); // Добавить кнопку к окну. add(hello_world); // Обрабатывать клик. hello_world.signal_clicked().connect([] () { std::cout << "Hello world" << std::endl; }); // Отобразить дочерние виджеты окна. show_all_children(); }
//main.cc #include <gtkmm/main.h> #include "HelloWorldWindow.h" int main(int argc, char *argv[]) { // Инициализация Gtk::Main kit(argc, argv); // Создание объекта окна HelloWorldWindow example; // Main-цикл gtkmm Gtk::Main::run(example); return 0; }
Приведенная выше программа создаст окно с кнопкой «Hello World». При нажатии на кнопку «Hello world» выводится на стандартный вывод.
Программа запускается с помощью следующих команд:
$ g++ -std=c++11 *.cc -o example `pkg-config gtkmm-3.0 --cflags --libs` $ ./example
Обычно это делается с помощью простого make-файла.