如何用gtkmm生成图形程序

时间:2014-05-26 22:09:55

标签: c++ gtk 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文件(此var由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查看器(Zathura)打开了pdf文件。我在Devhelp找到了这个:

  

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

但我找不到这样的功能。也许有一个更优雅和正确的方法来打开文件与用户的默认PDF,没有MC部分的查看器?如果没有,我该怎么做呢?如果没有gdk_spawn_on_screen,它将是C ++风格的更好。

1 个答案:

答案 0 :(得分:0)

因此,作为一个简单的解决方法,我发现了这样的代码

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