GTKMM:GtkPopOver在Gtk TreeView的单元格中

时间:2015-01-15 08:17:47

标签: c++ gtkmm

如何将GtkPopOver放入Gtk TreeView的单元格中。当我点击单元格时,我需要出现Popover。 我在GTKMM中找不到任何示例,而不是将GtkTreeView的单元格与一个GtkPopover相关联。

感谢。

2 个答案:

答案 0 :(得分:0)

经历过类似的情况后,我能够用(python中的简化版本)来解决这个问题:

def click_callback(..., event):
    rect = Gdk.Rectangle()
    rect.x = event.button.x
    rect.y = event.button.y
    rect.width = rect.height = 1
    popover = Gtk.Popover.new_from_model(treeview, model)
    popover.set_pointing_to(rect)
    popover.show()

答案 1 :(得分:0)

我已经解决了它,这是我使用的代码的简化版本:

class Table(Gtk.TreeView):

    # Gtk stuff ...

    @GtkTemplate.Callback
    def on_button_press_event(self, widget, event):
        path, path_iter, col = self.__get_path_at_position(event)
        btn = event.button

        if btn == 3:
            pop = Gtk.Popover()
            # Customize
            pop.set_pointing_to(self.get_cell_area(path, col))
            pop.set_relative_to(self)
            pop.popup()
            return True

        return False

    def __get_path_at_position(self, event):
        path_info = self.get_path_at_pos(event.x, event.y)
        if path_info:
            path, column, cell_relative_x, cell_relative_y = path_info
            path_iter = self.__model.get_iter(path)
            return path, path_iter, column,
        return None, None, None

虽然它不是C ++,但我认为它足以在C ++中实现。原来这两个功能

pop.set_pointing_to(self.get_cell_area(path, col))
pop.set_relative_to(self)

是必需的。