QQ登录

只需一步,快速开始

 找回密码
 注册

QQ登录

只需一步,快速开始

查看: 5271|回复: 11

请教两个Qt的问题

[复制链接]
发表于 2012-4-2 23:21:53 | 显示全部楼层 |阅读模式
1.全局热键
写了一个带有tray的小程序,想用全局热键切换tray菜单上的功能;
Qt本身不支持对吧?第三方的Qxt的QxtGlobalShortcut支持;
可是我用的是PyQt……;
于是我我找到了一个别人剥离的QxtGlobalShortcut Python版:https://github.com/jmatt/pygs
make install完 运行他的example出错:
  1. Traceback (most recent call last):
  2.   File "simple.py", line 10, in <module>
  3.     import pygs
  4. 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.c ... 812012227103255202/;
觉得他/她描述的无焦点点击就是我要的;
于是我这样写:
  1. ……
  2.         widget.setAttribute(Qt.WA_X11DoNotAcceptFocus, True)
  3.         widget.show()
  4. ……
复制代码
还是PyQt,可是没效果,依旧抢……
不知道所谓“无焦点点击”是不是就是我想要的那种效果,有没有解决办法。

召唤各路Qt神仙~
谢谢了~

[ 本帖最后由 Jactry 于 2012-4-2 23:24 编辑 ]
 楼主| 发表于 2012-4-6 17:34:03 | 显示全部楼层
好惨……几天没人回
Google了N遍,发现Windows下全局热键那个真他妈容易实现……可是我要的是Linux下的……

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

使用道具 举报

发表于 2012-4-6 20:12:27 | 显示全部楼层
检查一下 QxtGlobalShortcut Qt库的安装位置。
回复

使用道具 举报

 楼主| 发表于 2012-4-6 20:28:34 | 显示全部楼层

回复 3# zy_sunshine 的帖子

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

使用道具 举报

发表于 2012-4-7 09:09:57 | 显示全部楼层
不会 pyqt ....
回复

使用道具 举报

 楼主| 发表于 2012-4-7 12:39:29 | 显示全部楼层

回复 5# nihui 的帖子

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

使用道具 举报

发表于 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库的安装位置。
回复

使用道具 举报

发表于 2012-4-7 20:05:34 | 显示全部楼层
另外,qt 中有热键绑定的接口
对应pyqt应该是
http://www.riverbankcomputing.co ... html/qshortcut.html
回复

使用道具 举报

发表于 2012-4-8 11:08:47 | 显示全部楼层
第二个有效果的啊
  1. import sys
  2. from PyQt4 import QtGui, QtCore

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

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

  10.     sys.exit(app.exec_())

  11. if __name__ == '__main__':
  12.     main()
复制代码
回复

使用道具 举报

发表于 2012-4-8 11:17:55 | 显示全部楼层
第一个看了下 qxt 代码,用的是 x11 的办法
http://stackoverflow.com/questio ... otkey-with-x11-xlib
注册快捷键 XGrabKey,取消注册快捷键 XUngrabKey
qxt 转换了下 qt key 和 x11 key,x11 eventFilter 得到 XKeyEvent 再回调 trigger
回复

使用道具 举报

 楼主| 发表于 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 ,亚历山大 shock:

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

使用道具 举报

发表于 2012-4-11 22:03:40 | 显示全部楼层
我倒是看到一些私照是班上女同学的。
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

GMT+8, 2024-4-19 17:03 , Processed in 0.059746 second(s), 15 queries .

© 2021 Powered by Discuz! X3.5.

快速回复 返回顶部 返回列表