我在和Vala和GTK4一起玩。
FileChooserDialog不是为我工作的
using Gtk;
int main (string[] argv) {
// Create a new application
var app = new Gtk.Application ("com.example.GtkApplication",
GLib.ApplicationFlags.FLAGS_NONE);
app.activate.connect (() => {
// Create a new window
var window = new Gtk.ApplicationWindow (app);
window.title = "File chooser";
window.set_default_size (350, 70);
window.resizable = false;
// Create a new button
var file_choose_button = new Gtk.Button.with_label ("...");
file_choose_button.clicked.connect (() => {
var fileChooser = new FileChooserDialog(
"Select File",
window,
FileChooserAction.OPEN,
"Cancel",
ResponseType.CANCEL,
"Open",
ResponseType.ACCEPT,
null);
fileChooser.response.connect(()=> {
stdout.printf("File selectd!");
});
// WHAT TO DO IN ORDER TO SHOW FILE CHOOSER?
});
window.set_child (file_choose_button);
// Show
window.present ();
});
return app.run (argv);
}我遗漏了一些重要的代码,这将导致FileChooserDialog“出现”。
在GTK的早期版本中,有"dialog.run“--这在GTK4中是缺失的。
https://docs.gtk.org/gtk4/class.FileChooserDialog.html上的C-示例使用makro(?)"gtk_widget_show(xxx)“无法在Vala中找到表示。
任何帮助都很感激!
诚挚的问候
埃米尔
发布于 2022-09-27 19:46:35
经过一番努力,找到了解决办法(而且相当简单)。
正如Vala文档网站-文件选择器对话框中所述,它继承了两个类,其中一个类是GTK.Window。
因此,它就像调用present()方法一样简单。
因此,上面缺少的命令是:
fileChooser.present();一旦选择了文件或取消了选择,就不应该忘记使用close()方法。
重要注意: Vala中的"gtk_widget_show()“表示是GTK.Widget.show(),但我不够聪明,无法了解如何准备参数。它期望指针(GtkWidget*)并简单地传递"fileChooser“会导致各种编译器异常。
也许有人可以对此给予更多的关注(因为我用Vala来避免使用C--显然我不是这方面的专家)
https://stackoverflow.com/questions/73845051
复制相似问题