当我在GTK中创建一个自定义对话框(GTK2或GTK3)并将其设置为模态时,我的应用程序的其他窗口的所有输入都将被忽略.这几乎总是有效,但在某些条件下会失败.
当我将包含TreeView的ScrolledWindow添加到我的对话框时,它仍然可以正常工作.但是,如果我用条目填充TreeView,直到ScrolledWindow开始显示其滚动条 - 模态突然丢失,我可以点击我的其他窗口!
这是我能够设置的最基本的例子.它是用Vala编写的,但你会明白这个想法:
class MyDialog: Gtk.Dialog {
public MyDialog() {
this.modal = true;
var data = new Gtk.ListStore(1, typeof(string));
// increase this number -- the dialog is not modal anymore!
for (int i=0; i<2; ++i) {
Gtk.TreeIter current;
data.append(out current);
data.set(current, 0, "Lorem Ipsum");
}
var render = new Gtk.CellRendererText();
var column = new Gtk.TreeViewColumn();
column.pack_start(render, true);
column.add_attribute(render, "text", 0);
var treeview = new Gtk.TreeView.with_model(data);
treeview.append_column(column);
treeview.show();
var scroll = new Gtk.ScrolledWindow(null, null);
scroll.set_size_request(100, …
Run Code Online (Sandbox Code Playgroud) 我想创建一个自定义GTK模块,当我启动GTK应用程序时应该加载它.
关于这个主题的文档是罕见的,我搜索了很多,但我没有让它运行.我在使用GTK3的Ubuntu Linux上尝试使用sofar:
void gtk_module_init(gint *argc, gchar ***argv[])
内部方法编译并链接共享库.据我所知,这应该足以创建一个简单的模块.完整代码:#include <iostream>
#include <gtk/gtk.h>
void gtk_module_init(gint *argc, gchar ***argv[]) {
std::cout << "huhu" << std::endl;
}
Run Code Online (Sandbox Code Playgroud)
gnomine --gtk-module=libtest-gtk-module.so
但我得到的是:Gtk-Message: Failed to load module "libtest-gtk-module.so"
那么还有什么方法可以让GTK加载这个库?
提前谢谢了!