如何用gtkmm生成图形程序



我正试图用gtkmm生成过程,但我遇到了一个问题。下面是我的代码片段:

std::vector<std::string> args, envp;
args.push_back("/usr/libexec/mc/ext.d/doc.sh");
args.push_back("open");
args.push_back("pdf");
envp.push_back("MC_EXT_FILENAME="DATADIR"/bsbguide.pdf");
Glib::spawn_async("", args, envp, Glib::SPAWN_SEARCH_PATH);`

任务是打开安装在DATADIR中的pdf文件(这个变量是用automake定义的)。这个变量推入envp是必不可少的打开文件使用Midnight Commander的东西。命令

MC_EXT_FILENAME="some_file" /usr/libexec/mc/ext.d/doc.sh open pdf 

将使用PDF查看器准确打开some_file

程序编译并工作,但是当我试图用这些函数调用程序时,我得到这个:

(zathura:3014): Gtk-WARNING **: cannot open display:

什么也没发生。同样的命令从控制台结果打开pdf文件与我的pdf查看器(Zathura)。我在Devhelp中发现了这个:

如果您正在编写一个GTK+应用程序,并且您正在生成的程序也是一个图形应用程序,那么您可能希望使用gdk_spawn_on_screen()来确保生成的程序在正确的屏幕上打开窗口。

但是我没有找到这样的函数。也许有一种更优雅、更正确的方法,可以用用户默认的PDF打开文件,而不需要MC部件?如果不是,我怎样才能使它工作?如果是没有gdk_spawn_on_screen的c++风格就更好了。

所以,作为一个简单的解决方案,我发现是这样的代码

setenv("MC_EXT_FILENAME", DATADIR"/bsbguide.pdf", true);
Glib::spawn_command_line_async("/usr/libexec/mc/ext.d/doc.sh open pdf");

最新更新