我可以在Ubuntu中为Qt应用程序添加全局快捷方式挂钩吗?

时间:2011-02-26 12:40:53

标签: linux qt ubuntu hotkeys

我的应用程序位于托盘中,我希望它显示其对话框以响应全局热键,例如Google桌面搜索。它不一定是跨平台的。

2 个答案:

答案 0 :(得分:1)

搜索SO以获取 [qt]全球热键以及其他结果:

Trouble with QxtGlobalShortcut [solved]

答案 1 :(得分:0)

Ubuntu使用GConf来存储设置。它看起来像Windows注册表。 Those keys用于存储全局快捷方式。要设置全局键控,您应该处理GTK。所以安装这些包:

App Centre

并在以下行中添加到您的.pro文件中:

INCLUDEPATH += /usr/include/gconfmm-2.6\
                /usr/include/glibmm-2.4\
                /usr/lib/glibmm-2.4/include\
                /usr/include/glib-2.0\
                /usr/lib/glib-2.0/include\
                /usr/include/sigc++-2.0\
                /usr/lib/sigc++-2.0/include\
                /usr/include/gconf/2

LIBS += -L/usr/lib -lgconfmm-2.6

然后您需要创建新的.cpp文件或类,因为您不能在同一文件中包含Qt和GTK标头。

#include <gconfmm.h>
using namespace Gnome;

和主要部分:

Conf::init();
    try
    {
        Glib::RefPtr<Conf::Client> pointer(Conf::Client::get_default_client());
        pointer->set("/apps/metacity/keybinding_commands/command_2",Glib::ustring("gedit"));
        pointer->set("/apps/metacity/global_keybindings/run_command_2",Glib::ustring("<Control><Alt>e"));
    }
    catch(Conf::Error error)
    {
        std::cerr << "Error code: " << error.code();
    }

您可以使用所有预定义的密钥而不是command_2(例如command_screenshot),您可以创建自己的密钥,例如

/apps/metacity/keybinding_commands/command_textedit
/apps/metacity/global_keybindings/run_command_textedit

但您还需要为自定义键设置架构(我不知道如何操作,我是GTK的新手)。执行代码后,快捷方式可以正常工作。