2017-02-26 5 views
0

GTKMM configure_event信号に接続しようとしています。 property_is_activeやdelete_eventなどの他のシグナルは正常に動作します。GTKMMに接続できませんsignal_configure_event

以下のコードサンプルでは、​​コンパイルして実行しますが、マウスでウィンドウを移動またはサイズ変更すると、コンソールに「cout」は表示されません。

私は何が間違っているのだろうと困惑しています。このコードはGTKMMのドキュメントのように、私が前に行ったボタンの押下など、他の「イベント」と同じパターンです。イベントのマスクを有効にしてから、シグナルをハンドラに接続します。いくつかの "google"が返されたので、add_event(...)とset_event(...)の両方を試してみました。古いチュートリアル(GTK2の可能性もある)でいくつかのヒントを満たす努力。人々を示唆様々なフォーラムがC以外の(ほとんどの言語++。

(現在のDebian Linuxでは、GTK 3)

任意の助けをいただければ幸いです。この点を越え得ている上の他の記事があります。

#include <fstream> 
#include <istream> 
#include <ostream> 
#include <iostream> 
#include <gdkmm.h> 
#include <gtkmm.h> 

using namespace std; 

class AdjunctWindow : public Gtk::Window { 

public: 

AdjunctWindow(); 
~AdjunctWindow(); 

bool on_configure_changed(GdkEventConfigure* configure_event); 
}; 

AdjunctWindow::AdjunctWindow() { 
    add_events(Gdk::STRUCTURE_MASK); 
    signal_configure_event().connect(sigc::mem_fun(*this, 
    &AdjunctWindow::on_configure_changed)); 
} 

AdjunctWindow::~AdjunctWindow(){ 
} 

bool AdjunctWindow::on_configure_changed(GdkEventConfigure* configure_event) { 
cout << "configure changed\n"; 
return false; 
} 

int main(int argc, char** argv) { 
    Gtk::Main kit(argc, argv); 
    Gtk::Main::run(*(new AdjunctWindow())); 
} 

答えて

0

connect()は、デフォルトのシグナルハンドラの前または後にシグナルハンドラを呼び出す必要がある場合、2番目の引数をとります。デフォルトはtrueです。これはシグナルハンドラがデフォルトの後に呼び出されることを意味します。以前はを追加してください。引数。

詳細については、https://developer.gnome.org/glibmm/2.48/classGlib_1_1SignalProxy.htmlを参照してください。

シグナルハンドラが呼び出されているコードの調整されたバージョンは以下のとおりです。それは名前空間の間の名前の衝突を引き起こす可能性としてusing namespace std;使用するのが最善ではありませんただ、メモとして

#include <iostream> 
#include <gtkmm.h> 

class AdjunctWindow : public Gtk::Window { 
public: 
    AdjunctWindow(); 
    ~AdjunctWindow(); 

    bool on_configure_changed(GdkEventConfigure* configure_event); 
}; 

AdjunctWindow::AdjunctWindow() { 
    add_events(Gdk::STRUCTURE_MASK); 
    signal_configure_event().connect(
    sigc::mem_fun(*this, &AdjunctWindow::on_configure_changed), false); 
} 

AdjunctWindow::~AdjunctWindow(){ 
} 

bool AdjunctWindow::on_configure_changed(GdkEventConfigure* configure_event) { 
std::cout << "configure changed\n"; 
return false; 
} 

int main(int argc, char** argv) { 
    Gtk::Main kit(argc, argv); 
    Gtk::Main::run(*(new AdjunctWindow())); 
} 

。詳しくは、Why is "using namespace std" considered bad practice?の説明を読んでください。

関連する問題