2010-11-29 15 views
2

私は、ダイアログをポップアップ表示しようとしているが失敗します。gtkmmのダイアログを実行すると、そのようgtkmmのを設定した後

MainWindow::MainWindow() : public Gtk::Window { //etc etc 

とメインに()

Gtk::Main ginit(argc,argv); 
MainWindow *mw = new MainWindow; // delcared as extern in header as well for the dialog 
ginit.run(*mw); 

必要なイベントが発生します 、次のコード実行する必要がありますが失敗します。 http://library.gnome.org/devel/gtkmm-tutorial/2.21/sec-dialogs-filechooserdialog.html.enの例が完全にコンパイルされて実行されているので、奇妙です。

Gtk::FileChooserDialog *dlg = new Gtk::FileChooserDialog(Glib::ustring("choose destination"), Gtk::FILE_CHOOSER_ACTION_SELECT_FOLDER); 

    dlg->set_transient_for(*mw); 

    dlg->add_button(Gtk::Stock::CANCEL, Gtk::RESPONSE_CANCEL); 
    dlg->add_button(Glib::ustring("Select"), Gtk::RESPONSE_OK); 
    dlg->show_all_children(); 

    int response =dlg->run(); 

GDBによると、すべてがdlg-> run()で失敗します。

(PCollab::4583):GLibの-GObjectの-CRITICAL **:g_object_ref:アサーション `G_IS_OBJECT(オブジェクト)」失敗した

そして、それは私の2つのエラーの1与え、それをより楽しく作ります(PCollab:4583):GLibの-GObjectの-WARNING ** :無効な非インスタンス化タイプ `-g型-民間のインスタンス - GTypeFlags'

(PCollab:4583):GLibの-GObjectの-CRITICAL **:g_signal_emit_valist:アサーション `G_TYPE_CHECK_INSTANCE(インスタンス) ' が失敗しました

(PCollab:4583):GLibの-GObjectのクリティカル **:g_object_unref:GLibの-GObjectのクリティカル **:g_object_ref:アサーションアサーション `G_IS_OBJECT(オブジェクト)は」

(:4583 PCollab)が失敗しました`G_IS_OBJECT(オブジェクト) 'が失敗した

(PCollab:4583):GLibの-GObjectの-WARNING ** :(ヌル)`無効な非インスタンス化タイプのインスタンスの

(PCollab:4583):GLib- GObject-CRITICAL **:g_signal_emit_valist:アサーション 'G_TYPE_CHECK_INSTANCE(インスタンス)'GLibの-GObjectのクリティカル **:g_object_unref:アサーション `G_IS_OBJECT(オブジェクト)」PCollabを失敗しました: 致命的IOエラー11(リソース 一時的に利用できない)Xサーバ で:0.は

(:4583 PCollab)が失敗しました。

だから私は一体何を考え出し、同じプログラムがX11に二回接続することができます(またはので、私は上読んいくつかの魔法をし

はsudoでxhost +

を走りましたすべて知っているインターネット)これはいくつか効果が、私が望むものではありません。今、それは私にはるかに多くの不可解な何かを与えるので は:

../../src/xcb_io.c: process_responses: Assertion `(((long) (dpy->last_request_read) - (long)(dpy->request)) <= 0)' failed. 

私は、最初のエラーがそれはGTKによって対象とはみなされないようMwはGtkの::ウィンドウを指していないことを意味していることを前提としたいです実際には、Gtk :: Main ginit(* mw)を実行すると、mwがエラーなく画面に完全に表示されます。 私はこれが何を意味しているかわからないので、Gtk/X11のGuruがコードを修正する正しい方向に向けることを願っています。

その他の詳細は、私がGCC 4.4.5とこれは少し奇妙に見える2.4

+1

にライン

MainWindow *mw = new MainWindow; // delcared as extern in header as well for the dialog 

を変更しようとしないでください、 'xhost +'はあなたのアプリケーションに特別なことをする必要はありません。 'dlg-> run()'のGDBに表示されるエラーは何ですか? –

+0

プログラムでスレッドを使用していますか? – ptomato

+2

@ptomato、私のプログラムの唯一のスレッドは、main()関数から実行されるGtk :: Mainループです。他のすべてはイベントベースであり、gtkループを通して呼び出されます。 – Michael

答えて

1
MainWindow::MainWindow() : public Gtk::Window { //etc etc 

のgtkmmでUbuntu Linuxの(AMD64)を実行している、あなたは定義の代わりに、宣言に継承しようとしていますか?それとも、それは単にタイプミスですか?

(新しい)チュートリアル(gtkmm 3)のサンプルコードは、次のようになります。

#include <gtkmm.h> 

class ExampleWindow : public Gtk::Window 
{ 
public: 
    ExampleWindow(); 
    virtual ~ExampleWindow(); 

protected: 
    //Signal handlers: 
    void on_button_file_clicked(); 
    void on_button_folder_clicked(); 

    //Child widgets: 
    Gtk::VButtonBox m_ButtonBox; 
    Gtk::Button m_Button_File, m_Button_Folder; 
}; 

ヒープ上ではなくスタックに変数を割り当てようとしましたか?

Gtk::FileChooserDialog dialog("Please choose a folder", 
      Gtk::FILE_CHOOSER_ACTION_SELECT_FOLDER); 
    dialog.set_transient_for(*this); 

    //Add response buttons the the dialog: 
    dialog.add_button(Gtk::Stock::CANCEL, Gtk::RESPONSE_CANCEL); 
    dialog.add_button("Select", Gtk::RESPONSE_OK); 

    int result = dialog.run(); 

代わりのnewとポインタと同じように?

0

それは本当に重要だ場合は知っているが、

あなたが実行しているXウィンドウシステムよりも、別のユーザーを使用してプログラムを実行している場合を除き
MainWindow *mw = new MainWindow(); // delcared as extern in header as well for the dialog 
// Missing parentheses --------^ 
関連する問題