0
我移植我gtkmm2到gtkmm3應用程序,這是我到目前爲止有:的Gtk ::窗口顯示和退出,而我移植到gtkmm2應用gtkmm3
// The main.cxx:
#include "alarmui.hxx"
int main (int argc, char *argv[]) {
Glib::RefPtr<Gtk::Application> app = Gtk::Application::create(argc, argv, "org.gtkmm." PACKAGE_ID);
alarm_ui win(app);
app->run();
return 0;
}
頁眉:
// The alarmui.hxx
#ifndef ALARMUI_HXX_INC
#define ALARMUI_HXX_INC
#ifdef HAVE_CONFIG_H
#include "config.h"
#endif
#include <gtkmm/application.h>
#include <gtkmm/window.h>
#include <gtkmm/statusicon.h>
#include <iostream>
#include <memory>
#include <functional>
class alarm_ui : public Gtk::Window
{
private:
Glib::RefPtr<Gtk::Application> _refApp;
Glib::RefPtr<Gtk::StatusIcon> m_status_icon;
public:
alarm_ui (Glib::RefPtr<Gtk::Application>&);
virtual ~alarm_ui();
protected:
virtual bool delete_event (GdkEventAny*);
void status_icon_activate_cb();
};
#endif
源代碼:
#include "alarmui.hxx"
alarm_ui::alarm_ui (Glib::RefPtr<Gtk::Application>& refApp) : _refApp(refApp)
{
std::cout << "init" << std::endl;
set_icon_from_file (ICON_PNG_PATH);
m_status_icon = Gtk::StatusIcon::create_from_file (ICON_PNG_PATH);
m_status_icon->signal_activate().connect (std::bind(&alarm_ui::status_icon_activate_cb, this));
show_all();
}
alarm_ui::~alarm_ui() {
std::cout << "done" << std::endl;
}
bool alarm_ui::delete_event (GdkEventAny* event) {
return false;
}
void alarm_ui::status_icon_activate_cb() {
if (get_visible()) {
iconify();
hide();
} else {
deiconify();
show();
}
}
我想表明我的一個狀態圖標窗口。切換窗口的可見性,同時點擊狀態圖標。代碼編譯好,但似乎當我執行二進制的構造函數和析構函數被調用。如果我用的是這樣的:
Glib::RefPtr<Gtk::Application> app = Gtk::Application::create(argc, argv, "org.gtkmm." PACKAGE_ID);
alarm_ui win(app);
app->run (win);
窗戶節目,但是...如預期,退出上的hide()命令...任何想法? 是否只有()和釋放()我唯一的選擇?
是的,似乎在構造函數上使用hold()和在析構函數上使用realease()或quit()。 – Joel 2015-04-11 00:59:32