Jactry 发表于 2012-4-2 23:21:53

请教两个Qt的问题

1.全局热键
写了一个带有tray的小程序,想用全局热键切换tray菜单上的功能;
Qt本身不支持对吧?第三方的Qxt的QxtGlobalShortcut支持;
可是我用的是PyQt……;
于是我我找到了一个别人剥离的QxtGlobalShortcut Python版:https://github.com/jmatt/pygs
make install完 运行他的example出错:Traceback (most recent call last):
File "simple.py", line 10, in <module>
    import pygs
ImportError: /usr/lib/python2.7/dist-packages/pygs.so: undefined symbol: _ZTI17QxtGlobalShortcut
能力有限不知道怎么解决,google了也没找到解决;
或者实现全局热键还有别的办法?不care windows,不care Mac,Linux下OK就行。

2.无焦点点击?
我就是想实现一个widget show时,不要和原来输入焦点所在的窗口抢输入焦点;
然后找到了nihui这篇日志:http://shuizhuyuanluo.blog.163.com/blog/static/7781812012227103255202/;
觉得他/她描述的无焦点点击就是我要的;
于是我这样写:……
      widget.setAttribute(Qt.WA_X11DoNotAcceptFocus, True)
      widget.show()
……还是PyQt,可是没效果,依旧抢……
不知道所谓“无焦点点击”是不是就是我想要的那种效果,有没有解决办法。

召唤各路Qt神仙~
谢谢了~:-D

[ 本帖最后由 Jactry 于 2012-4-2 23:24 编辑 ]

Jactry 发表于 2012-4-6 17:34:03

好惨……几天没人回:cry:
Google了N遍,发现Windows下全局热键那个真他妈容易实现……可是我要的是Linux下的……:|

[ 本帖最后由 Jactry 于 2012-4-6 17:53 编辑 ]

zy_sunshine 发表于 2012-4-6 20:12:27

检查一下 QxtGlobalShortcut Qt库的安装位置。

Jactry 发表于 2012-4-6 20:28:34

回复 3# zy_sunshine 的帖子

pygs.so 就在/usr/lib/python2.7/dist-packages/下面
它是从qxt剥离出来的python版本
https://github.com/jmatt/pygs

nihui 发表于 2012-4-7 09:09:57

不会 pyqt .... :?

Jactry 发表于 2012-4-7 12:39:29

回复 5# nihui 的帖子

都是Qt库,你无视第一个问题那个错误
按照C++的方法给我说,我自己转换下:-D

zy_sunshine 发表于 2012-4-7 20:03:47

ImportError: /usr/lib/python2.7/dist-packages/pygs.so: undefined symbol: _ZTI17QxtGlobalShortcut
这个问题是因为
python 在加载 动态库 pygs.so 时 找不到 _ZTI17QxtGlobalShortcut 这个符号。
所以应该检查 C++ 库 QxtGlobalShortcut Qt库的安装位置。

zy_sunshine 发表于 2012-4-7 20:05:34

另外,qt 中有热键绑定的接口
对应pyqt应该是
http://www.riverbankcomputing.co.uk/static/Docs/PyQt4/html/qshortcut.html
:wink:

nihui 发表于 2012-4-8 11:08:47

第二个有效果的啊 :roll:import sys
from PyQt4 import QtGui, QtCore

def main():
    app = QtGui.QApplication(sys.argv)

    w = QtGui.QWidget()
    w.resize(250, 150)
    w.setWindowTitle('Hello World')
    w.setAttribute(QtCore.Qt.WA_X11DoNotAcceptFocus, True)
    w.show()

    sys.exit(app.exec_())

if __name__ == '__main__':
    main()

nihui 发表于 2012-4-8 11:17:55

第一个看了下 qxt 代码,用的是 x11 的办法
http://stackoverflow.com/questions/4037230/global-hotkey-with-x11-xlib
注册快捷键 XGrabKey,取消注册快捷键 XUngrabKey
qxt 转换了下 qt key 和 x11 key,x11 eventFilter 得到 XKeyEvent 再回调 trigger

Jactry 发表于 2012-4-8 17:59:48

回复 10# nihui 的帖子

@zy_sunshine
QShortcut貌似没有全局的

@nihui
好了,下午回来一看……是因为setAttribute(QtCore.Qt.WA_X11DoNotAcceptFocus, True)被另一行代码和谐了……
还有,别人跟我说了 self.setAttribute(Qt.WA_ShowWithoutActivating, True),更符合我的要求。

谢谢了,看来得用xlib:cry: ,亚历山大 shock:

PS:nihui应该是男生吧?不过你的blog一直很萌……

haulm 发表于 2012-4-11 22:03:40

我倒是看到一些私照是班上女同学的。
页: [1]
查看完整版本: 请教两个Qt的问题