Gtk::在将我的gtkmm2移植到gtkmm3应用程序时,窗口显示并退出
Gtk::Window shows and exits while porting my gtkmm2 to gtkmm3 application
我正在将我的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()和release()是我唯一的选择吗?
默认情况下,当应用程序的所有窗口都关闭(隐藏)时,Gtk::Application::run()返回。当main()结束时,当窗口超出范围时,它将被销毁。
Gtk::Application::hold()和release()可能确实是您所需要的。或者,在run()返回后,您可以做任何需要做的事情。我想这取决于你想做什么以及什么时候做。
相关文章:
- 如何将一个窗口保留在另一个应用程序窗口的前面
- 在C++中获取应用程序窗口的大小
- 如何隐藏最大化和最小化按钮并在qml应用程序窗口中显示关闭按钮?
- 当电子的窗口隐藏时如何激活另一个应用程序窗口
- 如何在QT中获取背景应用程序窗口标题
- 您如何使用Winrt创建经典的Win32应用程序窗口
- 当模式窗口最小化时,最小化所有应用程序窗口(在 Linux 上)
- 更改 C++ 应用程序的应用程序窗口图标
- 仅从 EnumDesktopWindows 识别应用程序窗口
- 隐藏自定义应用程序窗口,但应在任务栏上显示应用程序图标(不是作为托盘图标)
- 如何在应用程序窗口中设置光标位置?(C )
- QT QML - 在 C++ 的现有应用程序窗口中显示一个矩形
- 如何通过QT 5.6设置QML应用程序窗口透明
- 打开不同的图像文件,并使用GDI 库在主应用程序窗口的背景上绘制它们
- 获取应用程序窗口的完整目录
- 在linux中动态地将应用程序窗口排列在一个又一个之上
- 在Gnome或KDE中以编程方式移动桌面上的应用程序窗口
- Qt5.6 RHEL全屏应用程序窗口和子窗口
- Visual Studio 2012应用程序窗口创建/调整大小与VS2008窗口创建不同?为什么?
- QtQuick2 无法将应用程序窗口关闭信号连接到方法(C++新手)