问题标签 [gtkmm3]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
406 浏览

c++11 - 是否可以指示 `Gtk::TreeView` 显示自定义类型?

我不明白如何处理 Gtkmm 3。

我有一个自定义业务类型,我声明如下:

我想将此类型渲染为Gtk::TreeView具有Gtk::ListStoreas 模型的 a。所以我声明了一个Gtk::TreeModelColumn<Eurocents>,并将其添加到模型中。然后我append_column给这个模型栏Gtk::TreeView加上一个合适的标题。

然后我append_row到模型并将与列对应的值设置为(Eurocents)100.

我得到的结果是单元格显示为空。可以理解,因为我不希望 Gtkmm 知道如何呈现我的任意类型。

我想指导 Gtkmm 如何渲染我的类型。

我已经知道如何显示 Glib 类型,例如Glib::ustring和格式化以Glib::ustring进行显示是可能的,但这不是问题的主题。

是否可以对可以显示任意类型的列进行编码?如果是这样,怎么办?排序工作需要什么?

0 投票
1 回答
211 浏览

user-interface - GtkMM 在按钮回调中传递字符作为参数

有一个与此类似的问题,但它没有回答我的问题。我正在使用 GTKMM 开发 GUI。我试图在按钮的回调中传递一个字符。

然后将此字母分配给全局变量letter。但是,我不理解指针,并且一直试图让它工作很长一段时间但没有成功。

主文件

窗口.cpp

窗口.h

我尝试用这个替换它* pointer&反之亦然,mywindow但我还没有让它工作,也不知道如何继续。

0 投票
0 回答
391 浏览

c++ - GTKmm + cairo 实时图形应用程序经常冻结

我正在编写一个 C++ 应用程序,其主窗口需要从服务器接收实时数据,并根据这些数据实时绘制图表和直方图。我正在使用 GTK3(实际上是它的 C++ 绑定 gtkmm)和 Cairo。

特别是每1秒从网络接收一次数据,每次接收到数据都会刷新一次,因此每1秒一次。刷新是通过调用整个绘图区域的 invalidate_rect() 方法完成的,其 on_draw() 甚至使用新接收到的数据重新绘制所有图形和绘图。

现在,该应用程序可以工作,但它非常不可靠。特别是,它经常冻结,尤其是当 CPU 负载增加时。我的应用程序的 CPU 使用率以及内存非常低。突然窗口变成灰色且没有响应,我需要用 Ctrl-C 将其杀死,因为即使按下窗口关闭图标也不起作用。

我想知道:在上面的场景中调用 invalidate_rect() 是错误的方法吗?使用 GTKMM/Cairo 以可靠的方式获得平滑图形的更好方法是什么?

0 投票
1 回答
717 浏览

c++ - 在 GTK3 树视图中换行文本

我无法让 GTK3 中的 TreeView 正确换行文本。

我将其设置为以这种方式包装:

这行得通,文本被换行,但是当我调整窗口大小并使其更大时,单元格上方和下方有很多丑陋的空白,带有长文本。看来,GTK 根据换行宽度为单元格保留高度。这对我来说毫无意义。

我试图通过计算所需的宽度来解决 signal_check_resize 中所需的设置,如下所示:

但这让我只能让窗口更大。调整大小后无法缩小。

问题是,这是如何正确完成的?

我在 Arch linux 上使用 gtk3.20.3-1 和 gtkmm3.20.1-1。

编辑:修复了标题中的错字...

0 投票
5 回答
14698 浏览

gtk - 如何在 Windows 7+ 和 MSYS2 上的 GTK3 上获得本机 Windows 装饰

我正在尝试将我的应用程序从 linux 移植到 Windows,但我遇到了主题问题。在 linux 中,这是开箱即用的,只需编译它,应用程序就会使用好的主题并且看起来很原生。

我已经在 MSYS2 中安装了 gtkmm3 和 gtk3,我正在用 CMake 构建它。没关系,我必须使用二进制文件将所有 dll 复制到目录才能执行它。我没有复制其他任何东西。我正在尝试创建“解压缩并执行”包。

我的问题是,该应用程序看起来不合适。它看起来根本不是原生的。窗口周围有阴影,这在 Windows10 中很好,但在 Windows 7 中看起来不是原生的。还缺少几个图标。

Windows10 上的错误 gtk3 应用程序主题

甚至 gitk3-demo 看起来也不是本机的(但它至少具有正确的最小化/最大化/关闭图标)。

所以问题是:如何在 Windows 上实现 GTK3 应用程序的原生外观?或者至少是原生的窗饰?

谢谢

0 投票
1 回答
343 浏览

c++ - 使用 gtkmm3 的套接字服务器

我正在尝试制作一个当用户按下按钮时将连接到网络的 GUI。尝试编译 gui_ex.cpp 文件时出现编译错误。

似乎程序在套接字的关闭命令和 Gtk::Window 的关闭命令之间感到困惑。是否可以调整代码以便编译器区分两者?

这是我的代码:gui_ex.h 文件

gui_ex.cpp

0 投票
1 回答
1312 浏览

gtk3 - 向窗口发出信号

我有以下代码片段:

现在我还注册了一个生成信号的 IdleHandler:

我想要实现的目标:画布的处理程序应该接收一个事件并生成一个新事件,这个事件应该发送到对象,以便它再次调用 m_canvas->signal_event() 的处理程序。

换句话说:信号应该通过 Idle Handler 间接发送到发送对象本身。

但如果我开火

信号不是在画布本身中接收到的,而是在那里的一些子对象中接收到的。

问:如何再次发射到画布上?是否有类似“get_the_parent_signal_object_handler_father_receiver”或奇怪的东西?

我做了很多 gtk_widget_get_parent_window() 但都导致运行时错误,例如:

(go:15430):GLib-GObject-WARNING **:gsignal.c:3484:信号名称'button-press-event'无效,例如'GdkX11Window'类型的'0x9afbc48'

我根本不知道在哪里可以找到正确的实例,我必须发出一个信号,然后接收到画布。看起来 for 的实例g_signal_emit_by_name不是针对对象本身而是针对所有子实例触发的。我找不到如何处理信号以及如何遍历层次结构的文档。问题之一是 gtk+ 和 gtkmm 是相关的,但文档完全不清楚和分散。

0 投票
2 回答
1698 浏览

opengl - GtKGLArea 无法创建 OpenGL 2.1 上下文

我目前正在为我的游戏引擎项目开发一个简单的编辑器,而该项目似乎在我的主工作站上运行得很好(支持 OpenGL 3.3+ 的 GTX 650Ti),但是当我在我的测试桌面(最大支持 OpenGL 2.1 的 GMA4500)。

gtk_gl_area_make_current()即使我将 GL 版本指定为 2.1 ,GtkGLArea 也无法创建 OpenGL 2.1 上下文gtk_gl_area_set_required_version()

尝试通过测试 gtk glarea 演示 ( https://git.gnome.org/browse/gtk+/tree/demos/gtk-demo/glarea.c ) 对其进行故障排除并获得相同的结果。

已经在网上搜索过,但没有找到任何解决方案。尽管有人在 ebassi ( https://github.com/ebassi/glarea-example/issues/2 )的 glarea 示例中提到了同样的问题

有什么解决办法吗?

操作系统:Fedora 23 GTK 3.18 版


编辑: 操作系统(Fedora 23)正在使用 OpenGL 2.1(使用 glxinfo 检查),并且考虑到 GTK+ 源上给出的演示,我假设 GTK 默认使用 GL 3.0+。有什么办法可以忽略这一点吗?GdkGLContext(根据 ebassi 在下面的回答,如果核心配置文件不可用,从 GTK+ 3.20 开始将回退到旧配置文件。将在我升级到 GTK+ 3.20 后立即对其进行测试)

编辑 2: 我可以通过使用由 SDL 而不是创建的上下文来解决问题GdkGLContext,但我仍然有兴趣GdkGLContext使用 OpenGL 2.1。

0 投票
1 回答
680 浏览

c++ - 给定 PixBuf 时如何在对象创建后更改 Gtk::Image

我试图Gtk::Image通过给它 pixbuf 来更改派生对象,但我不知道如何解决这个问题。

简单的设置可以模仿为:

(请注意,这是我试图弄清楚的一个过于简化的版本,我知道我应该使用 Gtk::manage 而不是在没有另一个容器的情况下直接向窗口添加东西,这只是一个模型) .

我知道如果我要使用构造函数生成图像,如下所示:

那么我实际上会得到一个黄色方块。

不知何故,我拒绝相信只能在创建对象时使用 pixbuf。必须有一种方法可以以某种方式设置图像数据,而我只是找不到所需的功能。

0 投票
1 回答
290 浏览

c++ - 如何在 gtkmm3 中正确使用框或网格

我拼命尝试在树莓派上使用 gtkmm3 创建一个简单的 GUI,并且为此苦苦挣扎了太久。但是,当我运行程序时,我似乎遇到了分段错误,我不知道为什么..如果我取出网格上的最后一行,它就可以工作。我做错了什么还是更好的方法?

这是头文件gui_ex.h:

gui_ex.cpp:

main_gui_ex.cpp: