Start gtkmm 4 Programming (range controls)_

文章目录

  • 基础
  • 解析 Chapter 7. Range Widgets

  • https://gtkmm.org/en/documentation.html
  • https://gnome.pages.gitlab.gnome.org/gtkmm-documentation/index.html

基础

  • 容器:
    • 容器小部件与其他小部件一样,派生自Gtk::Widget.例如Gtk::Grid可以容纳许多子小部件,因此这些小部件通常具有更复杂的接口。其他的,例如 Gtk::Frame只包含一个子部件。
    • 从技术上讲Gtk::Button,它们Gtk::Window是单项容器,
    • 大多数单项容器小部件都具有set_child() 用于unset_child()子小部件的方法, 多项容器则是append(), attach() (用于Gtk::Grid)
    • 如果区域内超过一个widget 就可以用容器box来包含他们, 这能更好的排版
  • GTK::ustring
    • 用法几乎与C++中的 string 类相同
  • 内存管理
    • 类内widget:
      #include 
      #include 
      class Foo : public Gtk::Window
      {
      private:
        Gtk::Button theButton;
        // will be destroyed when the Foo object is destroyed
      };
      
    • Dynamic allocation with make_managed() and append()
      MyContainer::MyContainer()
      {
          auto pButton = Gtk::make_managed<Gtk::Button>("Test");
          append(*pButton); //add *pButton to MyContainer
      }
      
      当类型对象MyContainer被销毁时,按钮也将被删除。不再需要删除pButton 来释放按钮的内存;它的删除已委托给该 MyContainer对象。

解析 Chapter 7. Range Widgets

  • https://gnome.pages.gitlab.gnome.org/gtkmm-documentation/sec-range-example.html

  • 容器大纲:
    Start gtkmm 4 Programming (range controls)__第1张图片

    • 这些容器的第二个参数是其所包含的每个子辈widget之间的间隔(不影响孙辈)
  • 控件滑块(slider) 在gtkmm里 定义为 Gtk::Scale
    布局第一行有两个 Gtk::Scale 和一个 Gtk::Scrollbar
    它们在初始化时传的第一个参数都为 m_adjustment 是一个 Glib::RefPtr 类型, 这意味着这三个范围widget 滑动一个时会其他两个会同步滑动

  • 剩余两个Gtk::Scale 他们用的是不同的( 都为Glib::RefPtr类型 )实体对象m_adjustment_pagesize和m_adjustment_digits 他们要获取对滑动(滚动)的当前值做一些逻辑处理;

    m_adjustment_pagesize->signal_value_changed().connect(
                sigc::mem_fun(*this,
                &ExampleWindow::on_adjustment2_value_changed)
    );
    

    比如Page Size 滑块滑动时 要求修改 m_adjustment 的 page size和 page 增量, 这些会直接影响到布局第一行的三个范围控件, 可以自己调调, 看看对应关系 这也与初始化m_adjustment 时设置的值相关

    void ExampleWindow::on_adjustment2_value_changed()
    {
        const double val = m_adjustment_pagesize->get_value();
        m_adjustment->set_page_size(val);
        m_adjustment->set_page_increment(val);
    
        // Note that we don't have to emit the "changed" signal
        // because gtkmm does this for us.
    }
    
  • 其他就是按钮(值显示与否)和DropDown(设置值位置)
    Gtk::Scale 对象本身就自己维护着一个对应值, 也提供了与值有关的方法
    set_value_pos(PositionType); //设置值位置
    set_draw_value(bool); //值显示与否
    set_digits(int); //设置值精度
    事件触发函数回调写法如上;

你可能感兴趣的:(GTK,c++,Application,Desktop,app,gtkmm4)