社区
Qt
帖子详情
Qt事件是怎么translate的
evildevil1986
2010-04-21 04:12:14
从event到QEvent
怎么知道事件是什么type,如mouseClick,keyPress?
...全文
325
16
打赏
收藏
Qt事件是怎么translate的
从event到QEvent 怎么知道事件是什么type,如mouseClick,keyPress?
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用AI写文章
16 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
evildevil1986
2010-04-22
打赏
举报
回复
不可能这么早进入widget
还有很多处理
我的理解是先进入 queueduserinputevents
再调用 event = source->d->queuedUserInputEvents.takeFirst();
变成qevent
在qguieventdispatcher_glib.cpp有xevent版本的调用
另外TranslateMessage、dispatchMessage这两个api是重载了还是直接调用windows的?
tingsking18
2010-04-22
打赏
举报
回复
直接调用handler了
就是这里
d->winEventNotifierList.at(i)->handle();
参考 我这篇文章:
QT源码解析(四)剖析Qt的事件机制原理
// still nothing - wait for message or signalled objects
QThreadData *data = d->threadData;
canWait = (!retVal
&& data->canWait
&& !d->interrupt
&& (flags & QEventLoop::WaitForMoreEvents));
if (canWait) {
DWORD nCount = d->winEventNotifierList.count();
Q_ASSERT(nCount < MAXIMUM_WAIT_OBJECTS - 1);
for (int i=0; i<(int)nCount; i++)
pHandles[i] = d->winEventNotifierList.at(i)->handle();
emit aboutToBlock();
waitRet = MsgWaitForMultipleObjectsEx(nCount, pHandles, INFINITE, QS_ALLINPUT, MWMO_ALERTABLE);
emit awake();
if (waitRet >= WAIT_OBJECT_0 && waitRet < WAIT_OBJECT_0 + nCount) {
d->activateEventNotifier(d->winEventNotifierList.at(waitRet - WAIT_OBJECT_0));
retVal = true;
}
}
[Quote=引用 11 楼 evildevil1986 的回复:]
代码里没说明
当把msg append 到queuedUserInputEvents后,怎么处理的?
[/Quote]
evildevil1986
2010-04-22
打赏
举报
回复
[Quote=引用 8 楼 tingsking18 的回复:]
自己读读代码
[/Quote]
代码里没说明
当把msg append 到queuedUserInputEvents后,怎么处理的?
kevin_0608
2010-04-22
打赏
举报
回复
QT的event事件与具体函数(或者动作)关联是通过slot实现的。
tingsking18
2010-04-22
打赏
举报
回复
自己读读代码
evildevil1986
2010-04-22
打赏
举报
回复
[Quote=引用 6 楼 tingsking18 的回复:]
参考1楼
[/Quote]
您能否讲得详细点
translate的过程是怎样的?
tingsking18
2010-04-22
打赏
举报
回复
参考1楼
evildevil1986
2010-04-22
打赏
举报
回复
[Quote=引用 4 楼 tingsking18 的回复:]
如果要过滤事件:
首先installEventFilter
然后在eventFilter处理
bool MainWindow::eventFilter(QObject *obj, QEvent *event)
{
if (obj == textEdit) {
if (event->type() == QEvent::KeyPress) {
……
[/Quote]
QEvent *event此时已经是QEvent了,而从event到QEvent这一步是如何完成的
tingsking18
2010-04-22
打赏
举报
回复
如果要过滤事件:
首先installEventFilter
然后在eventFilter处理
bool MainWindow::eventFilter(QObject *obj, QEvent *event)
{
if (obj == textEdit) {
if (event->type() == QEvent::KeyPress) {
qDebug("Ate key press");
return true;
} else {
return false;
}
} else {
// pass the event on to the parent class
return QMainWindow::eventFilter(obj, event);
}
}
yonglovemeng
2010-04-22
打赏
举报
回复
不可能这么早进入widget
还有很多处理
我的理解是先进入 queueduserinputevents
再调用 event = source->d->queuedUserInputEvents.takeFirst();
变成qevent
在qguieventdispatcher_glib.cpp有xevent版本的调用
另外TranslateMessage、d……
tingsking18
2010-04-22
打赏
举报
回复
确是有很多处理,你自己看下文章,或者是Qt的代码。
takefirst取得的不是event,是MSG,当然你可以理解为event。
但不是QEvent
xevent我就不懂了
TranslateMessage、dispatchMessage是windows的nativeAPI。
[Quote=引用 13 楼 evildevil1986 的回复:]
不可能这么早进入widget
还有很多处理
我的理解是先进入 queueduserinputevents
再调用 event = source->d->queuedUserInputEvents.takeFirst();
变成qevent
在qguieventdispatcher_glib.cpp有xevent版本的调用
另外TranslateMessage、d……
[/Quote]
lishaman
2010-04-21
打赏
举报
回复
直接看帮助文档 assistant 例子又丰富
benbenmajia
2010-04-21
打赏
举报
回复
至于event类型的问题
1,可以用event->tppe()来判断
2,对单独的事件进行处理,mouse,key等
tingsking18
2010-04-21
打赏
举报
回复
mouseClick,keyPress
这些事件是QWidget中才有的,也就是说只有QWidget才会响应这些事件。
看一下$QTDIR\src\gui\kernel\qwidget.cpp
而$QTDIR\src\corelib\kernel\qeventdispatcher_win.cpp
代码说明了消息是怎样分派的。
Qt把所有的UserInputEvents放到了一下队列中,然后从这个队列中取没有处理的消息,然后调用响应的handler,这样就到了上面的QWidget中了
关于
Qt
中
translate
、tr关系以及中文乱码的问题
关于
Qt
中
translate
、tr关系以及中文乱码的问题
Translate
Language
Qt
国际化动态语言切换,随意切换、游刃有余,不需要重启界面,即可完成,代码完整,屡试不爽!
QT
高级编程
QT
界面美化QSS
QT
网络编程
QT
绘图
QT
多线程视频课程
QT
核心基础概念体系编程实践
QT
Widgets图形窗口编程基础体系编程实践
QT
基础控件和高级复杂控件体系编程实践
QT
布局管理体系编程实践
QT
模型视图代理框架编程实践
QT
QSS式样表编程实践
QT
界面美化编程实践
QT
文件...
i18n-
translate
-
qt
-ts:通过Google
Translate
API自动将
Qt
语言学家使用的TS文件格式转换为其他语言
i18n-
translate
-
qt
-ts 通过Google
Translate
API自动将
Qt
Linguist TS文件翻译成其他语言。 注意:使用需要商业Google API密钥。 用法: i18n-
translate
-
qt
-ts <google
Translate
ApiKey> <workingFolder> ...
Vc -
Qt
- QPainter
translate
Qt
QPainter 坐标系平移
Qt
16,212
社区成员
26,592
社区内容
发帖
与我相关
我的任务
Qt
Qt 是一个跨平台应用程序框架。通过使用 Qt,您可以一次性开发应用程序和用户界面,然后将其部署到多个桌面和嵌入式操作系统,而无需重复编写源代码。
复制链接
扫一扫
分享
社区描述
Qt 是一个跨平台应用程序框架。通过使用 Qt,您可以一次性开发应用程序和用户界面,然后将其部署到多个桌面和嵌入式操作系统,而无需重复编写源代码。
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章