是否可以只运行 GTK 应用程序的一份拷贝而不创建任何窗口?此示例允许您运行该程序的多个拷贝,但我需要强制只允许运行一个拷贝。
#include <gtkmm.h>
int
main(int argc, char** argv)
{
Glib::RefPtr<Gtk::Application> app = Gtk::Application::create(argc, argv, "org.gtkmm.example");
app->hold();
return app->run();
}
如果我添加 GTK 窗口,一切都会按照我的预期运行。即只有一个拷贝正在运行,第二个拷贝刚刚退出。但我的application位于系统托盘中,并且在启动时不会创建任何窗口。
#include <gtkmm.h>
int
main(int argc, char** argv)
{
Glib::RefPtr<Gtk::Application> app = Gtk::Application::create(argc, argv, "org.gtkmm.example");
Gtk::Window window;
return app->run(window);
}
最佳答案
我对c++不熟悉,但我的建议是你把hold方法放错了。只应保留主要实例。第二个实例启动后,它会为主实例发出“激活”信号。因此,将所有操作放在 g_application_activate
方法中似乎是解决方案。
这就是它与 python 的工作方式,也许这可以帮助
import gi
gi.require_version('Gtk', '3.0')
from gi.repository import Gtk
class Application(Gtk.Application):
def __init__(self, *args, **kwargs):
super().__init__(application_id="org.example.myapp")
def do_activate(self):
if not hasattr(self, "my_app_settings"):
self.hold()
self.my_app_settings = "Primary application instance."
print(self.my_app_settings)
else:
print("Already running!")
app = Application()
app.run()
关于c++ - Gtk应用程序的独特性,无需创建任何窗口,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41883527/