0

我复制了这个站点中的代码(https://sites.google.com/site/gtkdtutorial/#chapter2_2)并由dmd2编译。

import gtk.MainWindow;
import gtk.Box;
import gtk.Main;
import gtk.Menu;
import gtk.MenuBar;
import gtk.MenuItem;
import gtk.Widget;
import gdk.Event;

void main(string[] args)
{
    Main.init(args);
    MainWindow win = new MainWindow("MenuBar Example");
    win.setDefaultSize(250, 200);

    MenuBar menuBar = new MenuBar();  
    menuBar.append(new FileMenuItem());

    Box box = new Box(Orientation.VERTICAL, 10);
    box.packStart(menuBar, false, false, 0);

    win.add(box);
    win.showAll();
    Main.run();
}

class FileMenuItem : MenuItem
{
    Menu fileMenu;
    MenuItem exitMenuItem;

    this()
    {
        super("File");
        fileMenu = new Menu();

        exitMenuItem = new MenuItem("Exit");
        exitMenuItem.addOnButtonRelease(&exit);
        fileMenu.append(exitMenuItem);

        setSubmenu(fileMenu);
    }

    bool exit(Event event, Widget widget)
    {
        Main.quit();
        return true;
    }
}

窗口已正确显示,但当我单击 [Exit] MenuItem 时它并没有消失。我很困惑。有任何想法吗?

环境:Ubuntu 14.04 LTS

4

1 回答 1

0

button-release-eventaddOnButtonRelease()在 GtkD 中)是连接到 GtkMenuItem 的错误信号。这是一个低级别的GDK 事件;也就是说,当用户松开鼠标按钮时,窗口系统产生的原始事件的抽象。它用于自定义事件处理,就像您使用 GtkDrawingArea 一样。

相反,您需要activate信号(addOnActivate()在 GtkD 中)。

于 2015-03-06T01:32:16.080 回答