2012-07-10 10 views
0

我寫我的窗口的文件 - 事件的事件處理程序>退出按鈕:GTK默認的文件 - >退出行爲

void on_file_quit() { 
    int err = pthread_cancel(work); 
    if (err) { 
    std::cerr << "no thread to cancel\n"; 
    } 
    else { 
    pthread_join(work, NULL); 
    } 
} 

實例吧:

pfile_quit->signal_activate().connect(sigc::ptr_fun(on_file_quit)); 

我想然後在on_file_quit()的末尾關閉窗口,就像按下窗口頂部的關閉按鈕一樣。我還沒有找到解決方案。預先感謝任何幫助!

+0

根據[this](http://zetcode.com/tutorials/gtktutorial/gtkevents/),按下窗口頂部的X按鈕發送'destroy'信號。發送該信號或直接調用它的處理程序。 – 2012-07-10 19:16:22

+0

我讀過這篇文章...我是GTK新手。我不知道如何*引起這個信號。 – tweaksp 2012-07-10 20:32:08

+0

好吧,在四處尋找一種方式發送一個小部件的摧毀信號後,我就不了了之。我的解決方案是調用窗口的析構函數...這似乎工作乾淨。當我使用stackoverflow時,我會發布更改。 – tweaksp 2012-07-10 21:19:52

回答

0

你可以用Gtk :: Widget :: hide()關閉窗口。如果您想要執行與點擊X按鈕(發送delete_event信號)時發生的相同的事情,請直接調用on_delete_event()處理函數。

順便說一句,你不是「實例化」一個信號處理程序。你正在連接一個信號處理程序。此外,這是gtkmm,而不是GTK +。

0

感謝您的回覆。打電話Gtk::Widget::hide()關閉窗口,以便我可以退出應用程序?我的解決辦法是簡單地調用窗口的析構函數,像這樣:

void on_file_quit() { 
    int err = pthread_cancel(work); 
    if (err) { 
    std::cerr << "no thread to cancel\n"; 
    } 
    else { 
    pthread_join(work, NULL); 
    } 
    delete pwindow; 
    pwindow = NULL; 
} 

然後,我連這個處理程序,按X鍵:

g_signal_connect (pwindow->gobj(), "delete_event", G_CALLBACK (on_file_quit), NULL); 

我無法弄清楚如何在gtkmm的做到這一點。我對這個解決方案很滿意,但我不知道它是最安全/最標準的。

這也奏效:pwindow->hide()