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-файла.