【发布时间】:2021-07-14 09:28:02
【问题描述】:
使用 Gtkmm 2.24.5,我正在尝试使用以下代码创建一个带有单个 Gtk::Switch 的窗口:
#include <gtkmm.h>
#include <gtkmm/switch.h>
class SimpleWindow : public Gtk::Window
{
public:
SimpleWindow();
private:
Gtk::VBox m_VBox;
Gtk::Switch m_Switch;
};
SimpleWindow::SimpleWindow()
{
set_title("Simple");
add(m_VBox);
// Todo: Setup switch
show_all();
}
int main(int argc, char** argv)
{
Gtk::Main kit(argc, argv);
SimpleWindow simple;
kit.run(simple);
return 0;
}
尝试运行代码时,我收到以下警告和错误:
GLib-GObject-WARNING **: 11:21:22.896: cannot register existing type 'GtkWidget'
GLib-GObject-WARNING **: 11:21:22.896: cannot add class private field to invalid type '<invalid>'
GLib-GObject-WARNING **: 11:21:22.896: cannot add private field to invalid (non-instantiatable) type '<invalid>'
GLib-GObject-CRITICAL **: 11:21:22.896: g_type_add_interface_static: assertion 'G_TYPE_IS_INSTANTIATABLE (instance_type)' failed
GLib-GObject-WARNING **: 11:21:22.896: cannot register existing type 'GtkBuildable'
GLib-GObject-CRITICAL **: 11:21:22.896: g_type_interface_add_prerequisite: assertion 'G_TYPE_IS_INTERFACE (interface_type)' failed
GLib-CRITICAL **: 11:21:22.896: g_once_init_leave: assertion 'result != 0' failed
从类定义中删除开关后,程序运行正常,返回一个空窗口。这里有什么问题?
【问题讨论】:
-
您使用的是哪个 Gtkmm 版本?
-
std::cout << GTKMM_MAJOR_VERSION << "." << GTKMM_MINOR_VERSION << "." << GTKMM_MICRO_VERSIONl;给出 2.24.5 -
看来
Gtk::Switch是introduced in Gtkmm 3.0。您的应用程序甚至将其作为成员变量构建,这很奇怪。