LINUX.ORG.RU

Использование классов в vala + glade ui

 


2

2

Попытался использовать классы таким образом:

using Gtk;

class YAudio : Window {

    // Gtk.ToolButton fullscreen_button;
    Gtk.ToolButton close_button;

    /* constructor */
    public YAudio () {
        
        var builder = new Builder ();
        builder.add_from_file ("111.ui");
        
        var window = builder.get_object ("window1") as Window;    
        builder.connect_signals (null);
        window.show_all ();     
        Gtk.main();
    }    

    public void on_closebtn_clicked (Button source) {
        stderr.printf("test");
    }
}



int main (string[] args) {
    Gtk.init (ref args);
    var yaudio = new YAudio ();   
    
    return 0; 
}
Но хандлер on_closebtn_clicked срабатывать не будет, до той поры, пока я его не вынесу вне класса, собственно это меня немного напрягает, есть ли возможность использовать класс с возможностью использования хандлеров в классе? Нашел только подобные примеры https://github.com/dcharles525/ValaTuts/blob/master/Glade/example.vala, тут все понятно и все работает, но используется процедурный подход, правильно ли это? Или более правильно в больших приложениях все же использовать классы? После python, nodejs и php возникают жуткие вопросы )
Все же для гуи решил юзать vala, вместо python

★★

Попробуйте так

[CCode (instance_pos = -1)]
public void on_closebtn_clicked (Button source) {

но используется процедурный подход

Ещё дополню, но наверняка это и так понятно, что любой метод класса в Vala при сборке (трансляция Vala->C) раскладывается в обычные C-шные процедуры.

Ещё можно использовать SimpleAction, если хочется повесить общее действие, например, открытие файла на кнопку тулбара, в менюшку и на хоткей.

void new_callback (SimpleAction action, Variant? parameter) {

И ещё есть примеры здесь.

backbone ★★★★★ ()
Последнее исправление: backbone (всего исправлений: 2)

Все же для гуи решил юзать vala, вместо python

Если не секрет, по каким причинам? PyQt5 - что может быть проще? Даже имея нулевой опыт (но опыт с Qt/C++ был), мне было несложно создать нужные программы.

Или проблема со сборкой в готовый пакет?

I-Love-Microsoft ★★★★★ ()

Если в Вале есть что-то типа статичных методов то именно они тебе и нужны

cvv ★★★★★ ()

А on_closebtn_clicked прописна в 111.ui? Если да, то:

[GtkCallback]
public void on_closebtn_clicked (Button source) {
        stderr.printf("test");
    }
anonymous ()

Да и в ui у тебя должен быть

<template class= .....

anonymous ()
Ответ на: комментарий от backbone

Забыл добавить, что имя метода должно включать namespace и имя класса в 111.ui: yaudio_on_closebtn_clicked.

backbone ★★★★★ ()
Ответ на: комментарий от I-Love-Microsoft

Вроде более менее разобрался с классами, спасибо.
Да, именно со сборкой траблы и весом готового пакета, при сборке много костылей нужно, если кроссплатформенное приложение

foozzi ★★ ()
Ответ на: комментарий от I-Love-Microsoft

Человек по правильному пути пошёл, а ты ему этот шлак советуешь. Если уж python, то PyGI и GTK+.

eternal_sorrow ★★★★★ ()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.