请教两个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 编辑 ] 好惨……几天没人回:cry:
Google了N遍,发现Windows下全局热键那个真他妈容易实现……可是我要的是Linux下的……:|
[ 本帖最后由 Jactry 于 2012-4-6 17:53 编辑 ] 检查一下 QxtGlobalShortcut Qt库的安装位置。
回复 3# zy_sunshine 的帖子
pygs.so 就在/usr/lib/python2.7/dist-packages/下面它是从qxt剥离出来的python版本
https://github.com/jmatt/pygs 不会 pyqt .... :?
回复 5# nihui 的帖子
都是Qt库,你无视第一个问题那个错误按照C++的方法给我说,我自己转换下:-D ImportError: /usr/lib/python2.7/dist-packages/pygs.so: undefined symbol: _ZTI17QxtGlobalShortcut
这个问题是因为
python 在加载 动态库 pygs.so 时 找不到 _ZTI17QxtGlobalShortcut 这个符号。
所以应该检查 C++ 库 QxtGlobalShortcut Qt库的安装位置。 另外,qt 中有热键绑定的接口
对应pyqt应该是
http://www.riverbankcomputing.co.uk/static/Docs/PyQt4/html/qshortcut.html
:wink: 第二个有效果的啊 :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()
第一个看了下 qxt 代码,用的是 x11 的办法
http://stackoverflow.com/questions/4037230/global-hotkey-with-x11-xlib
注册快捷键 XGrabKey,取消注册快捷键 XUngrabKey
qxt 转换了下 qt key 和 x11 key,x11 eventFilter 得到 XKeyEvent 再回调 trigger
回复 10# nihui 的帖子
@zy_sunshineQShortcut貌似没有全局的
@nihui
好了,下午回来一看……是因为setAttribute(QtCore.Qt.WA_X11DoNotAcceptFocus, True)被另一行代码和谐了……
还有,别人跟我说了 self.setAttribute(Qt.WA_ShowWithoutActivating, True),更符合我的要求。
谢谢了,看来得用xlib:cry: ,亚历山大 shock:
PS:nihui应该是男生吧?不过你的blog一直很萌…… 我倒是看到一些私照是班上女同学的。
页:
[1]