На главную Наши проекты:
Журнал   ·   Discuz!ML   ·   Wiki   ·   DRKB   ·   Помощь проекту
ПРАВИЛА FAQ Помощь Участники Календарь Избранное RSS
msm.ru
! Правила раздела *nix / gcc / Eclipse / Qt / wxWidgets / GTK+
  • При создании темы ОБЯЗАТЕЛЬНО указывайте версию тулкита / библиотеки / компилятора.
  • Перед тем как задать вопрос, сформулируйте его правильно, чтобы вас могли понять.
  • Нарушение Правил может повлечь наказание со стороны модераторов.


Полезные ссылки:
user posted image Boost по-русски
user posted image Qt по-русски
Модераторы: Majestio
  
> Как реализовать страничность в gtkmm?
    С использованием glade. Есть главное окно в одном glade-файле, там есть контейнер Gtk::Box. Есть другой glade-файл, там окно в котором Gtk::FlowBox с кнопками. Его надо достать и вставить в Gtk::Box главного окна. И таких файлов со страницами несколько плюс там еще свой код и каллбеки. Как это реализовать? Есть ли примеры?
    Когда просто получаешь билдером этот FlowBox и вставляешь потом в Box не вставляется. Видимо, надо как-то клонировать этот FlowBox или извлекать, а потом вставлять в другой контейнер.
      Положа честную лапу на доброе сердце ...=) GTK никогда не юзал. Но, если ты выложишь сюда тестовый пример - обещаю, попробую разобраться. Ну конечно, в меру моих сил :whistle:
        ExpandedWrap disabled
          #include <gtkmm.h>
          #include <iostream>
          #include <string>
           
          class MainWindow : public Gtk::ApplicationWindow {
              public:
                  MainWindow(BaseObjectType* obj, Glib::RefPtr<Gtk::Builder> const& builder)
                  : Gtk::ApplicationWindow(obj)
                  , builder{builder}
                      {
                          ...                
           
                          builder->get_widget("mainbox",mainbox);     // контейнер страниц
           
                          Gtk::FlowBox* menu_main = nullptr;
                          builder->get_widget("menu_main", menu_main); // главное меню
           
                          if(menu_main)  
                          {  
                              //mainbox->pack_start( btn1);
                              mainbox->pack_start(*menu_main);
                          }
           
                          ...    
                          this->show_all();  
           
                      }
                  MainWindow(BaseObjectType* obj, Glib::RefPtr<Gtk::Builder> const& builder, char *gladefile): Gtk::ApplicationWindow(obj)
                  {
           
                  }
              private:
           
                  Glib::RefPtr<Gtk::Builder> builder;
                  Gtk::Box *mainbox;
          };
           
           
          int add_glade_res(Glib::RefPtr<Gtk::Builder> refBuilder, char* gxml_path)
          {
              try{
                  refBuilder->add_from_resource(gxml_path);
              } catch (...){
                  std::cerr << "Error loading glade map resource" << gxml_path << std::endl;
                  return 0;
              }
              return 1;
          }
           
          int on_cmd(const Glib::RefPtr<Gio::ApplicationCommandLine> &,
            Glib::RefPtr<Gtk::Application> &app) {
              app->activate(); // <----
              return 0;
          }
           
          int main(int argc, char **argv){
           
              auto app = Gtk::Application::create(argc, argv, "r21", Gio::APPLICATION_HANDLES_COMMAND_LINE);
              app->signal_command_line().connect(sigc::bind(sigc::ptr_fun(on_cmd), app), false);
           
              // Load the GtkBuilder file and instantiate its widgets:
              auto refBuilder = Gtk::Builder::create();
           
              if(!add_glade_res(refBuilder, "/r21/glade/main.glade")) return 1;
              if(!add_glade_res(refBuilder, "/r21/glade/mainmenu.glade")) return 1;
              
              MainWindow *wnd = nullptr;
              refBuilder->get_widget_derived("main_window", wnd);
           
              if (wnd){
                  app->run(*wnd);        
              }
           
              delete wnd;
              return 0;
          }

        glade файлы:
        main.glade
        ExpandedWrap disabled
          <?xml version="1.0" encoding="UTF-8"?>
          <!-- Generated with glade 3.40.0 -->
          <interface>
            <requires lib="gtk+" version="3.20"/>
          ...
            <object class="GtkApplicationWindow" id="main_window">
          ...
              <child>
                <object class="GtkBox" id="mainbox">
          ...
                  <child>
                    <object class="GtkToolbar">
                    
                    ...
                      <child>
                        <object class="GtkToolButton" id="main_btn_connect">
                          ...
                        </object>
                        <packing>
                          <property name="expand">False</property>
                          <property name="homogeneous">True</property>
                        </packing>
                      </child>
                      <child>
                        <object class="GtkMenuToolButton" id="main_btn_help">
                         ...
                        </object>
                        ...
            </object>
          </interface>

        mainmenu.glade:
        ExpandedWrap disabled
          <?xml version="1.0" encoding="UTF-8"?>
          <!-- Generated with glade 3.40.0 -->
          <interface>
            <requires lib="gtk+" version="3.24"/>
            <object class="GtkWindow">
              ...
              <child>
                <object class="GtkFlowBox" id="menu_main">
                  <property name="visible">True</property>
                  <property name="can-focus">False</property>
                  <child>          
                      ...
                  </child>
                </object>
              </child>
            </object>
          </interface>


        Добавлено
        Как в glade-файлах делать просто FlowBox без окна чтобы без родительского окна я не знаю. Пробовал OffscreenBox не помогает.
        1 пользователей читают эту тему (1 гостей и 0 скрытых пользователей)
        0 пользователей:


        Рейтинг@Mail.ru
        [ Script execution time: 0,0197 ]   [ 15 queries used ]   [ Generated: 18.07.25, 00:05 GMT ]