6

在 Ubuntu Linux 上,我可以使用 Glade 应用程序创建一个 Hello World 对话框。现在如何让 D 编程语言显示它?

4

1 回答 1

13
  1. 在您的 Mac、Linux 或 Windows 计算机上安装编译 D 语言的DMD 编译器。您可以在此处获得有关此的更多信息。
  2. 在您的 Mac、Linux 或 Windows 计算机上安装Glade 界面设计器。你可以很容易地在 Ubuntu Linux 上安装Gladesudo apt-get install glade,但是关于在其他各种平台上安装的更多信息在这里
  3. 在您的 Mac、Linux 或 Windows 计算机上安装GTKd 。这并不容易。您需要从 gtkd.org 上的文档开始然后在DLang.org 学习论坛中进行互动以获得更多帮助(如有必要)。
  4. 打开Glade并创建一个新窗口,上面有一个标签,上面写着 Hello World。

请注意,Glade 中的工具面板显示了一个Window小部件和一个ApplicationWindow小部件。由于我们没有绘制任何菜单,因此请确保您使用的是Window小部件而不是ApplicationWidget。如果你没有这样做,你会在运行应用程序时收到警告,谈论一些缺少的菜单调用。

       将其保存为hello.glade

  1. 在文本编辑器中打开您的hello.glade文件并查找与此类似的行:

      <object class="GtkWindow" id="window1">

       在一张纸上写下id属性。

  1. 在与此hello.glade文件相同的目录中创建一个hello.d脚本并更改以下内容,将window1更改为您之前写下的任何id 。
import gtk.Builder;
import gtk.Main;
import gtk.Widget;
import gtk.Window;
import std.stdio;

int main (string[] args)
{
    Main.init(args);
    Builder b = new Builder();
    b.addFromFile("hello.glade");
    Window w = cast(Window)b.getObject("window1");
    w.addOnHide( delegate void(Widget aux){ Main.quit(); } );
    w.showAll();
    Main.run();
    return 0;
}
  1. 编译很棘手。在 Ubuntu Linux 上,我必须创建如下语句。您可能需要在dlang.org Learn 论坛中针对您的特定平台进行互动。
# dmd hello.d `pkg-config --cflags --libs gtkd3`
  1. 编译后,您可以运行 D 可执行文件以显示 Hello World 对话框。在 Ubuntu Linux 上,我只是做了:

       # ./hello

  1. 请注意,当您看到窗口并关闭它时,您可能会在 Linux 上收到一些警告。(在其他平台上,这可能会有所不同。)我收到有关“无法连接到无障碍总线 - 连接被拒绝”的警告。至少在 Linux 上的修复是将其添加到底部的~/.bashrc脚本中:

       export NO_AT_BRIDGE=1

       现在,当您打开命令提示符并再次运行已编译的 D 命令“hello”时,它不会显示该错误。

       如果您收到有关菜单的错误,那么您使用了ApplicationWindow小部件而不是        Window小部件,并且需要在Glade中进行切换。

添加按钮和信号

  1. 我的做法是在Glade中点击一个小部件,点击Signals,找到我要添加的事件,比如clicked,然后在 Handler 列中,输入一个函数。例如,在 button1 上,我会输入onButton1Clicked。保存文件。

  2. 现在,在您的 D 源代码中,在您创建 Window 对象之后,添加以下代码:

       b.connectSignals(null);

       ...其中 b 是您的 Builder 变量。

  1. 在您的 D 源代码中,为此信号添加一个函数。例如,我做了:
extern(C) void onButton1Clicked()
{
    writeln("got here");
    Main.quit();
}

       请注意,在这种情况下,extern(C) 是必需的。

  1. 重新编译并运行您的应用程序。您会看到它会自动为该按钮单击运行您的新功能。
于 2015-09-12T06:37:02.080 回答