GTK+ / Gtkmm,检查notebook tab是不是已经存在,不存在时才创建

Posted

技术标签:

【中文标题】GTK+ / Gtkmm,检查notebook tab是不是已经存在,不存在时才创建【英文标题】:GTK+ / Gtkmm, check if a notebook tab already exists, and create it only if it doesn't existGTK+ / Gtkmm,检查notebook tab是否已经存在,不存在时才创建 【发布时间】:2015-04-09 00:18:45 【问题描述】:

我正在学习使用 Gtkmm。现在我必须制作一个带有按钮的窗口,单击该按钮会打开一个“笔记本”选项卡。现在,我想让它检查选项卡是否已经存在,只有在选项卡不存在时才打开选项卡。请有人告诉我是否有办法使用 Gtkmm。 提前致谢。 我当前的代码如下:

#include <iostream>
#include <iomanip>
#include <gtkmm-3.0/gtkmm.h>
using namespace std;


class programa : public Gtk::Window
    
    public:
    //Constructor y destructor
    programa();
    ~programa();

    protected:
    //Signal handlers:
    void en_boton1();
    //Child widgets:
    Gtk::Grid w_grid;
    Gtk::Button boton1;
    Gtk::Notebook hojas;
    Gtk::Label nombre1;
    ;


void programa::en_boton1()
    
    hojas.append_page(nombre1, "Primera");
    show_all_children();
    


programa::programa() : boton1(), boton2(), nombre1("pestaña 1"), nombre2("pestaña 2")
    
    set_title("ventana");
    maximize();
    add(w_grid);
    set_border_width(10);

    boton1.add_pixlabel("info.xpm", "botoncito1");
    w_grid.attach(boton1, 1 ,1 ,1 ,1);
    boton1.signal_clicked().connect( sigc::mem_fun(*this,&programa::en_boton1 ) );

    w_grid.attach(hojas, 1,2,4,1);
    hojas.set_border_width(10);

    show_all_children();
    


programa::~programa() 


int main(int argc, char *argv[])
    
    Gtk::Main paq(argc, argv);

    programa principal;

    //Shows the window and returns when it is closed.
    Gtk::Main::run(principal);
    return 0;
    

【问题讨论】:

【参考方案1】:

Gtk::Notebook::get_n_pages() 和 get_nth_page() 应该做你需要的: https://developer.gnome.org/gtkmm/stable/classGtk_1_1Notebook.html#aee6987ef10d8e3afcc40824c53f4c1ad

但您需要自己的逻辑(可能在 dynamic_cast 之后)来决定是否有任何笔记本页面是您要查找的页面。

【讨论】:

以上是关于GTK+ / Gtkmm,检查notebook tab是不是已经存在,不存在时才创建的主要内容,如果未能解决你的问题,请参考以下文章

gtkmm 和系统剪贴板

在 gtkmm3 中使用 Gtk::Assistant

使用 Gtk::Viewport (gtkmm3) 直接滚动

GTKmm - 无法将固定大小设置为 Gtk::Scale 小部件

如何在 gtkmm 上将 Gtk::Widget 转换为 GtK::ScrolledWindow?

信号从 gtkmm 弹出列表中触发两次