gpt4 book ai didi

c++ - gtkmm 状态图标在创建后退出

转载 作者:行者123 更新时间:2023-11-30 03:10:04 26 4
gpt4 key购买 nike

我必须创建一个简单的应用程序,在系统托盘中显示一个图标和一个菜单,您可以从中执行一些操作。问题是状态图标在创建后立即关闭。少了什么东西?我放置 sleep 以确保它已创建。系统托盘中出现了 3 秒钟的东西,即使它不是我设置的图标。

初始化.cc

#include <gtkmm/main.h>
#include "Tray.h"

int main(int argc, char *argv[]) {
Gtk::Main kit(argc, argv);
printf("Statuicon starting\n");
Tray tray;
printf("Statuicon started\n");
return 0;
}

托盘.cc

#include "Tray.h"

Tray::Tray() {
set(Gtk::Stock::OK);

signal_activate().connect(sigc::mem_fun(*this, &Tray::on_statusicon_activated));
signal_popup_menu().connect(sigc::mem_fun(*this, &Tray::on_statusicon_popup));

set_visible(true);

printf("Statusicon created\n");

sleep(3);
}

Tray::~Tray() {}

void Tray::on_statusicon_popup(guint button, guint activate_time) {
printf("popup!");
}

void Tray::on_statusicon_activated() {
printf("active!");
}

托盘.h

#ifndef GTKMM_TRAY_H
#define GTKMM_TRAY_H
#include <gtkmm.h>
#include <unistd.h>
using namespace std;

class Tray : public Gtk::StatusIcon {
public:
Tray();
~Tray();

private:
virtual void on_statusicon_popup(guint button, guint activate_time);
virtual void on_statusicon_activated();
};

#endif //GTKMM_TRAY_H

最佳答案

您根本没有运行主循环,因此无法处理任何输入事件,程序在构建托盘后退出。您要做的是删除 sleep ,然后在您的 main() 函数中,在返回之前添加以下行:

Gtk::Main::run();

然后,当您希望应用程序退出时(通常是为了响应某种事件),调用

Gtk::Main::quit();

关于c++ - gtkmm 状态图标在创建后退出,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3547548/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com