LINUX.ORG.RU

3
Всего сообщений: 31

Реализация Gio::ListModel, G_IS_LIST_MODEL assertion failed

Продолжаю грызть mm-кактус.

class Model: public Gio::ListModel {
    std::vector<Glib::RefPtr<Gtk::Button>> gobjects;

protected:
    Model() = default;
    GType get_item_type_vfunc() override {
        return Gtk::Button::get_type();
    }
    guint get_n_items_vfunc() override {
        return gobjects.size();
    }
    gpointer get_item_vfunc(guint position) override {
        if (position < gobjects.size()) {
            return gobjects[position].get();
        }
        return nullptr;
    }
public:
    static auto create() {
        return Glib::RefPtr<Model>{ new Model{} };
    }
    void add(const Glib::RefPtr<Gtk::Button>& button) {
        gobjects.push_back(button);
        items_changed(gobjects.size(), 0, 1);
    }
};

Реализация сыпет варнингами при вставке

g_list_model_items_changed: assertion 'G_IS_LIST_MODEL (list)' failed

ЧЯДНТ?

 , , , ,

Siborgium ()

Что думаете о gtkmm?

Что-то я попробовал писать на этом, думал, на крестах будет проще, чем на голой сишечке, но оказалось куда сложнее. Есть истории успеха?

Фанатиков более других тулкитов просьба не беспокоиться.

 , ,

meliafaro ()

Gtk SearchEntry не обрабатывает пробел

Собственно, этим все сказано. Печатает все остальные печатные символы с клавиатуры, но не пробел. Если передаю пробел, handle_event возвращает GDK_EVENT_PROPAGATE.

Минимальный пример:

#include <gtkmm.h>

class Window : public Gtk::Window {
public:
    Window(): Gtk::Window() {
        this->entry.set_placeholder_text("Сюда печатать");
        this->add(entry);
        this->show_all_children();
    }
    bool on_key_press_event(GdkEventKey* event) {
        if (event->keyval == GDK_KEY_Escape) {
            Gtk::Main::quit();
        }
        return this->entry.handle_event(event) == GDK_EVENT_STOP;
    }

    Gtk::SearchEntry entry;
};

int main(int argc, char** argv) {
    auto app = Gtk::Application::create(argc, argv, "org.primer.Primer");
    auto window = Window();
    window.show();
    app->run(window);
}

 , , ,

Siborgium ()

C++ Gtkmm spinbutton не может в вертикальную ориентацию?

не могу понять, как сделать вертикальную ориентацию у данной сущности в gtkmm?
через билдер вроде делается, через код не могу познать каким образом.

решения:

тут

тут

тут

тут

 ,

safocl ()

циклическая зависимость между mingw-w64-poppler и mingw-w64-cairo — как ее разрешить?

имеется archlinux

не могу поставить себе gtkmm minGW_64 версии из AUR...
столько мучений и ожидания и тут обнаружилась неразрешимая циклическая зависимость:
mingw-w64-poppler зависит от mingw-w64-cairo для запуска,
а mingw-w64-cairo зависит от mingw-w64-poppler для компиляции...

и второе не может произойти потому чо mingw-w64-poppler не может запуститься без mingw-w64-cairo...

что за бред?

gtkmm
cairo
poppler

 , ,

safocl ()

Gtk::grid плюс Gtk::label равно segfault

archlinux...
делаю будильник+таймер+логгер на gtkmm3, столкнулся с проблемой, что на сетке grid не отображается label — который я хотел использовать как разделитель ":" между spinButton — часы минуты секунды...

исходники :
clockentity.hpp

clockentity.cpp
если аттачить к grid данный delimiter то он не отображается и spin_buttton располагаются вплотную, вдобавок прога сегфолтится периодически при запуске.

как сделать красиво в данном случае?
https://i.imgur.com/c3CljDZ.png
вот тут необходимо между spinButton сделать разделители ":".


p.s. ответ найден — проблема была в ошибке в коде — инициализация строки была позже инициализации Gtk::Label — из-за чего последний инициализировался в конструкторе мусором.
ссылки на решение:
[тут](Gtk::grid плюс Gtk::label равно segfault (комментарий))
[или тут](Gtk::grid плюс Gtk::label равно segfault (комментарий))

 ,

safocl ()

Нарисовать закругленные углы в окне с использованием GTK-3

Здравствуйте, форумчане!

Столкнулся со следующей проблемой..
есть код на С++ :

int main (int argc, char *argv[])
{
  auto app = Gtk::Application::create(argc, argv, "org.gtkmm.example");

  Gtk::Window window;
  window.set_default_size(200, 200);

  Glib::RefPtr<Gtk::CssProvider> css_provider = Gtk::CssProvider::create();
  Glib::RefPtr<Gtk::StyleContext> styleContext = Gtk::StyleContext::create();

  try
  {
      css_provider->load_from_path("styles.css");
  }
  catch (/*Exeption &e*/...)
  {
      std::cout << "exeption " << std::endl;
  }

  styleContext->add_provider_for_screen(Gdk::Screen::get_default(), css_provider, GTK_STYLE_PROVIDER_PRIORITY_USER);

  return app->run(window);
}

и СSS код (styles.css файл)

GtkWindow
{
  border: 1px solid black;
  background: none;
  background-color : red;
  border-radius: 20px;
}

сборка:

g++ `pkg-config --cflags gtkmm-3.0` -o exampl main.cc `pkg-config --libs gtkmm-3.0`

в результате на выходе получаем окно с закругленными углами, но вместо прозрачности у нас черные углы
https://i.stack.imgur.com/5OvV1.png

После долгих поисков, оказалось, что надо включить фичу, которая называется Client Side Decoration

export GTK_CSD=1

сразу после этого окно запустилось как и должно быть: https://imgur.com/hJxJels

Но! на всех других машинах с убунту это решение не работает! там все еще черные углы! а еще почему-то вместо «GtkWindow» в СSS файле надо писать просто «window»

наверное у меня есть еще какой-то дополнительный пакет, который позволяет CSD работать хорошо. Кто с чем похожим сталкивался? В чем проблема? Как сделать так, чтобы работало для любого дистрибутива линукс? Я новичок в этой теме, поэтому не удивлюсь, если есть другой способ добиться закругленных углов

Перемещено Pinkbyte из general

 , , , ,

yukik ()

GTKmm и отслеживание перемещения окна

В общем и целом вопрос таков — каким образом отслеживать перемещение окна?
Класс кона унаследован или не унаследован от Gtk::window.

т.е. не могу найти эвент отслеживающий перемещение окна.
может что то недосмотрел, но вроде все эвенты проверил по офф докам и ничего не нашел — так ли енто?

 

safocl ()

GTK русификация

Добрый день.

Пишу кроссплатформенную программу на GTK. Под Линукс, где программа разрабатывается - все отлично.

Под Windows работает, кроме одной раздражающей вещи. Все надписи на стандартных кнопках по английски. Т.е. это не мои надписи, а самой библиотеки. В интернете много рецептов как переводить свои надписи. А как перевести принадлежащие самой GTK?

Наверняка есть стандартный способ. Подскажите, пожалуйста.

 , ,

shiche ()

В Inkscape 0.92.2 залипает выбор толщины кисти

Всем привет!

Кто-нибудь знает как лечить беду, когда просто залипают спинеры выборы толщины кисти и т.д.

Просто жмакаешь по ним и они пошли мотаться до конца сами.

Дистр бубунта - 17.10

 , , ,

nihirash ()

Не собирается gtkmm

Понадобилась библиотека gtkmm-3.x, попытался ее собрать:

emerge gtkmm

Сборка прошла неудачно. Собиралось все это тут (uname -a):

Linux funtoo 4.8.7-gentoo #2 SMP Mon Nov 14 05:49:26 +03 2016 
x86_64 Intel(R) Core(TM) i7-3770K CPU @ 3.50GHz GenuineIntel GNU/Linux

Из того, что в конце было предложено посмотреть:

emerge --info '=dev-cpp/gtkmm-3.20.1::gentoo'

( читать дальше... )

emerge -pqv '=dev-cpp/gtkmm-3.20.1::gentoo'

( читать дальше... )

cat /var/tmp/portage/dev-cpp/gtkmm-3.20.1/temp/build.log

( читать дальше... )

Подскажите, пожалуйста - куда копать?

 ,

Majestio ()

gtkmm 3.0 показать два окна

Нигде не могу найти простой пример для gtkmm, где стартуют сразу два и больше окон. Может подскажете?

Одно окно показываю так:

#include <gtkmm.h>


int main( int argc, char *argv[] )
{
	auto app = Gtk::Application::create();
	Gtk::Window win;
	
	app->run( win );
}

Почитал про Gtk::Application, но ничего путнего не нашел.

 ,

matrasa ()

gio, gtkmm signals vs. нити.

Подскажите, в каком треде происходит вызов слота в gio? Можно ли этим как-то управлять?

Например “ask-password” signal (https://developer.gnome.org/gio/stable/GMountOperation.html#GMountOperation-a...)

Я попробовал пользоваться gtkmm, но он мне прилетает в другую нить (thrradid в колбэке по крайней мере отличается от того, что я получаю в ните, где я начинаю процедуру монтирования)

 ,

invy ()

Ну и почему оно не линкуется?

Это я криворукий или нужно создавать issue на гитхабе автора?

FAILED: : && /usr/bin/clang++-3.8   -Wall -Wextra -Wno-unused-parameter -Wfloat-conversion -Werror=switch  -Wl,--as-needed src/CMakeFiles/solvespace.dir/util.cpp.o src/CMakeFiles/solvespace.dir/entity.cpp.o src/CMakeFiles/solvespace.dir/expr.cpp.o src/CMakeFiles/solvespace.dir/constraint.cpp.o src/CMakeFiles/solvespace.dir/constrainteq.cpp.o src/CMakeFiles/solvespace.dir/system.cpp.o src/CMakeFiles/solvespace.dir/platform/unixutil.cpp.o src/CMakeFiles/solvespace.dir/platform/gtkmain.cpp.o src/CMakeFiles/solvespace.dir/platform/gloffscreen.cpp.o src/CMakeFiles/solvespace.dir/bsp.cpp.o src/CMakeFiles/solvespace.dir/clipboard.cpp.o src/CMakeFiles/solvespace.dir/confscreen.cpp.o src/CMakeFiles/solvespace.dir/describescreen.cpp.o src/CMakeFiles/solvespace.dir/draw.cpp.o src/CMakeFiles/solvespace.dir/drawconstraint.cpp.o src/CMakeFiles/solvespace.dir/drawentity.cpp.o src/CMakeFiles/solvespace.dir/export.cpp.o src/CMakeFiles/solvespace.dir/exportstep.cpp.o src/CMakeFiles/solvespace.dir/exportvector.cpp.o src/CMakeFiles/solvespace.dir/file.cpp.o src/CMakeFiles/solvespace.dir/generate.cpp.o src/CMakeFiles/solvespace.dir/glhelper.cpp.o src/CMakeFiles/solvespace.dir/graphicswin.cpp.o src/CMakeFiles/solvespace.dir/group.cpp.o src/CMakeFiles/solvespace.dir/groupmesh.cpp.o src/CMakeFiles/solvespace.dir/importdxf.cpp.o src/CMakeFiles/solvespace.dir/mesh.cpp.o src/CMakeFiles/solvespace.dir/modify.cpp.o src/CMakeFiles/solvespace.dir/mouse.cpp.o src/CMakeFiles/solvespace.dir/polygon.cpp.o src/CMakeFiles/solvespace.dir/resource.cpp.o src/CMakeFiles/solvespace.dir/request.cpp.o src/CMakeFiles/solvespace.dir/solvespace.cpp.o src/CMakeFiles/solvespace.dir/style.cpp.o src/CMakeFiles/solvespace.dir/textscreens.cpp.o src/CMakeFiles/solvespace.dir/textwin.cpp.o src/CMakeFiles/solvespace.dir/toolbar.cpp.o src/CMakeFiles/solvespace.dir/ttf.cpp.o src/CMakeFiles/solvespace.dir/undoredo.cpp.o src/CMakeFiles/solvespace.dir/view.cpp.o src/CMakeFiles/solvespace.dir/srf/boolean.cpp.o src/CMakeFiles/solvespace.dir/srf/curve.cpp.o src/CMakeFiles/solvespace.dir/srf/merge.cpp.o src/CMakeFiles/solvespace.dir/srf/ratpoly.cpp.o src/CMakeFiles/solvespace.dir/srf/raycast.cpp.o src/CMakeFiles/solvespace.dir/srf/surface.cpp.o src/CMakeFiles/solvespace.dir/srf/surfinter.cpp.o src/CMakeFiles/solvespace.dir/srf/triangulate.cpp.o  -o src/solvespace  -rdynamic extlib/libdxfrw/libdxfrw.a -lGLU -lGL -lpng12 -lz -lfreetype -lgtkmm-3.0 -latkmm-1.6 -lgdkmm-3.0 -lgiomm-2.4 -lgtk-3 -lgdk-3 -latk-1.0 -lcairo-gobject -lgio-2.0 -lgdk_pixbuf-2.0 -lpangomm-1.4 -lglibmm-2.4 -lcairomm-1.0 -lsigc-2.0 -lpangocairo-1.0 -lpango-1.0 -lgobject-2.0 -lglib-2.0 -lcairo -lX11 -ljson-c -lfontconfig -lfreetype -lGLEW -lGLU -lGL -lgtkmm-3.0 -latkmm-1.6 -lgdkmm-3.0 -lgiomm-2.4 -lgtk-3 -lgdk-3 -latk-1.0 -lcairo-gobject -lgio-2.0 -lgdk_pixbuf-2.0 -lpangomm-1.4 -lglibmm-2.4 -lcairomm-1.0 -lsigc-2.0 -lpangocairo-1.0 -lpango-1.0 -lgobject-2.0 -lglib-2.0 -lcairo -lX11 -ljson-c -lfontconfig -lGLEW -lGLU -lGL && :
src/CMakeFiles/solvespace.dir/platform/gtkmain.cpp.o: In function `SolveSpace::GetOpenFile(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >*, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, SolveSpace::FileFilter const*)':
../src/platform/gtkmain.cpp:(.text+0x16fb): undefined reference to `Gtk::FileChooser::get_current_folder() const'
../src/platform/gtkmain.cpp:(.text+0x178f): undefined reference to `Gtk::FileChooser::get_filename() const'
src/CMakeFiles/solvespace.dir/platform/gtkmain.cpp.o: In function `SolveSpace::GetSaveFile(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >*, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, SolveSpace::FileFilter const*)':
../src/platform/gtkmain.cpp:(.text+0x2476): undefined reference to `Gtk::FileChooser::get_current_folder() const'
../src/platform/gtkmain.cpp:(.text+0x250a): undefined reference to `Gtk::FileChooser::get_filename() const'
src/CMakeFiles/solvespace.dir/platform/gtkmain.cpp.o: In function `SolveSpace::ChooserFilterChanged(Gtk::FileChooserDialog*)':
../src/platform/gtkmain.cpp:(.text+0x2b85): undefined reference to `Gtk::FileChooser::get_filename() const'
clang: error: linker command failed with exit code 1 (use -v to see invocation)
ninja: build stopped: subcommand failed.

 , , ,

CYB3R ()

GTK захват экрана

Доброго времени суток. Как с помощью gtkmm захватить экран? (для скрина и создание захваченной области в *.png
Заранее спасибо.

 ,

continue ()

WebKitGtk без GUI

Всем привет. Использую WebKitGTK в своем приложении. Не знаю как с ним работать, чтобы не создавать окна с помощью gtkmm и не рисовать сраницу. Прошу пример работы, чтобы webkit просто, подгружал страницу, строил DOM, но без GUI.

 , ,

surikon ()

Распределение размера в Gtk::Box

Каким образом можно отрегулировать распределение высоты между элементами в Gtk::Box?

Как видно из скрина, на кнопку и строку с полями выделяется слишком много места по вертикали, поэтому на гистограмму места не хватает. Каким образом можно перераспределить место между элементами? Доки курил, нужного не нашёл. http://itmages.ru/image/view/3364773/e77537bc

Ещё одна проблема - это то, что не отображается последняя Gtk::Entry. Вот код: http://pastebin.com/sm8mawFt

 , ,

SeTSeR ()

Стоит ли использовать Glade для создания gtk-приложений?

Или все же лучше описывать элементы интерфейса на языке C++? Сейчас изучаю c++, gtkmm. Пробовал создать ui в Glade, а затем подключить его с помощью Gtk::Builder, и у меня кроме отображения главного окна ничего не вышло. т.е. я не понял как указывать сигналы для виджетов, Нужно ли создавать отдельный заголовочный файл для описания объектов виджетов или нет? Сигналы описывать прямо в Glade(видел там в свойствах виджета можно ставить галочки) или нужно их описывать в исходном файле? Вообще тут Также читал про Qt, но там какая-то мутотень, для меня Gtkmm оказался намного проще.

Перемещено mono из talks

 , , ,

w1nner ()

GTK. Изменить цвет текста в таблице (дереве).

Не могу изменить цвет текста в таблице. Делаю так:

enum{COLUMN_NAME, COLUMN_VARIABLE, N_COLUMNS, COLORTEXT};
...
GdkRGBA color= {0.0, 0.5, 0.9, 0.5};
GtkWidget *tree;
	GtkTreeStore *store;
	GtkTreeIter iter, citer;
	GtkCellRenderer *renderer;
	GtkTreeViewColumn *column;
tree = gtk_tree_view_new();

	store = gtk_tree_store_new(N_COLUMNS, G_TYPE_STRING, G_TYPE_STRING, G_TYPE_BOOLEAN);
	gtk_tree_view_set_model(GTK_TREE_VIEW(tree), GTK_TREE_MODEL(store));


	renderer = gtk_cell_renderer_text_new();
	column = gtk_tree_view_column_new_with_attributes ("Item", renderer, "text", COLUMN_NAME, "foreground-rgba", COLORTEXT, NULL);
	gtk_tree_view_append_column(GTK_TREE_VIEW(tree), column);
	renderer = gtk_cell_renderer_text_new(); 
	  
	column = gtk_tree_view_column_new_with_attributes ("Num", renderer,  "text", COLUMN_VARIABLE, "foreground-rgba", COLORTEXT, NULL);
	gtk_tree_view_append_column(GTK_TREE_VIEW(tree), column);

	gchar i[]={"hello"};
	gtk_tree_store_append(store, &iter, NULL);
	gtk_tree_store_set(store, &iter, COLUMN_NAME, "Центральный процессор", COLUMN_VARIABLE, "lala", COLORTEXT, color,   -1);

	gtk_tree_store_append(store, &citer, &iter);
	gtk_tree_store_set(store, &citer, COLUMN_NAME, "apple", COLUMN_VARIABLE,  &i,  COLORTEXT, color, -1);
...

При запуске

(hello:11715): Gtk-WARNING **: /build/buildd/gtk+3.0-3.14.12/./gtk/gtktreestore.c:1042: Invalid column number 3 added to iter (remember to end your list of columns with a -1)

(hello:11715): Gtk-WARNING **: /build/buildd/gtk+3.0-3.14.12/./gtk/gtktreestore.c:1042: Invalid column number 3 added to iter (remember to end your list of columns with a -1)

(hello:11715): Gtk-CRITICAL **: gtk_tree_store_get_value: assertion 'column < priv->n_columns' failed

(hello:11715): GLib-GObject-CRITICAL **: g_object_set_property: assertion 'G_IS_VALUE (value)' failed

Прошу сильно не пинать. На этой неделе будет ещё 1 глупый вопрос.

 ,

iljuase ()

Подскажите примеры программ на GTKMM + С++

Например galculator. Какие еще есть? Хочу скачать несколько, поковырять исходники.

Перемещено mono из talks

 ,

w1nner ()