快捷键处理

屏蔽alt+F4等快捷键

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28

class GlobalEventFilter(QAbstractNativeEventFilter):

def __init__(self):
super(GlobalEventFilter, self).__init__()

def nativeEventFilter(self, event_type, sip_voidptr):
if event_type == "windows_generic_MSG" or event_type == "windows_dispatcher_MSG":
msg = MSG.from_address(sip_voidptr.__init__())
if msg.message in [WM_KEYDOWN, WM_SYSKEYDOWN]:
if VK_F4 == msg.wParam and win32api.GetKeyState(VK_MENU) & 0xF000:
return True, 1 # True 代表我处理了消息,不需要Qt处理
elif VK_ESCAPE == msg.wParam:
return True, 1 # 屏蔽esc键
return False, 1

class App(QApplication):

def __init__(self, *args):
super(App, self).__init__(*args)

self.global_event_filter = GlobalEventFilter()
self.intallNativeEventFilter(self.global_event_filter)

def exit_app(self):
self.removeNativeEventFilter(self.global_event_filter)


Qt视图模型

  • 数据(Data):是实际的数据,如数据库的一个数据表或SQL查询结果,内存中的一个 StringList,或磁盘文件结构等。
  • 视图或视图组件(View):是屏幕上的界面组件,视图从数据模型获得每个数据项的模型索引(model index),通过模型索引获取数据,然后为界面组件提供显示数据。Qt 提供一些现成的数据视图组件,如 QListView、QTreeView 和 QTableView 等。
  • 模型或数据模型(Model):与实际数据通信,并为视图组件提供数据接口。它从原始数据提取需要的内容,用于视图组件进行显示和编辑。Qt 中有一些预定义的数据模型,如 QStringListModel 可作为 StringList 的数据模型,QSqlTableModel 可以作为数据库中一个数据表的数据模型。
Read More

PyQt5开发心得

其实大部分的客户端开发都有共通性。一套GUI API,Button、Text、Dialog等等,绘制机制,事件传递机制,都是根据不同平台的特性做了封装。但开发的时候,用法是类似的。而Python由于语法的简易性,开发效率比使用C++版的Qt高很多。所谓的性能损耗其实在大部分的应用中是可以忽略的。

基础结构的搭建

不管是做一个项目还是多个项目,准备一套基础框架,对开发效率是非常有帮助的。这个基础框架通常包括:

  • 基础结构
    基础工具类、工具函数:字符串处理、时间处理、日期处理、线程处理、网络请求、拖拽工具、缩放工具、资源下载工具、
    基础控件:弹窗提示、确认框、webview的封装和通讯模块、loading框、全局样式处理
    日志工具:
    数据模拟工具:mock
    单元测试框架:
    性能分析工具:分析代码质量
  • 打包工具:分发安装包
Read More