jjzjj

c++ - Qt 小部件在某些情况下无法重新绘制

我遇到了一个奇怪的问题,一个小部件长时间无法重新绘制。我有一个非Qt线程播放音频并根据音频播放位置定期向我的GUI线程发送自定义事件。GUI线程通过生成一些视觉反馈(例如,在小部件顶部显示标签)并在其自身上调用repaint()来使用react。这在MacOSX上运行良好,在我拥有的单元测试应用程序中运行良好,该应用程序在Windows(XP和7)上运行该功能,但是,该小部件在我的真实应用程序(在WindowsXP/7上)无法正确重绘,直到音频播放结束。在OSX和我的单元测试中观察到的正确行为:->CustomEvent->QEvent::Paint(12)->CustomEvent-

c++ - Qt 应用程序状态生命周期

我从Qt开始,我对应用程序状态有些不清楚。我使用Qt5.5。我目前正在学习Windows,但下一步是Android设备,因此我关注应用程序状态。我已经创建了我自己的QApplication派生类,我已经注册了applicationStateChanged信号。我猜想当applicationStateChanged发出信号时,我应该保留我的部分配置。我想我必须使用Qt.labs.settings以及我想使用QML。显然,我有几处错误。首先,我没有收到任何Qt::ApplicationSuspended消息。我已经覆盖到QApplication::event(e)以查看我是否错过了信号,而

c++ - 管理 Win32 应用程序和 QWinMigrate 之间的键盘事件

我已经将Qt对话框集成到传统的Win32应用程序中,现在对如何管理从Qt->Win32传播的键盘事件感到有点困惑。有什么方法可以测试Qt是否正在“处理”事件(例如,输入到编辑框),并防止这些事件传播到主机应用程序?Win32应用程序有自己非常复杂的加速器系统,在使用native编辑框时,我们通常会手动禁用加速器。我无法为Qt对话框执行此操作,因为它是多个应用程序之间的共享小部件。目前我禁用了整个对话框上的主机加速器以获得焦点,但是是否可以告诉Qt阻止来自编辑框的kbd事件传播?理想情况下不修改QtDialogs代码(尽管我可以在必要时这样做?) 最佳答案

c++ - QMainWindow 不再是事件窗口

我正在用Qt制作一个简单的游戏,我想在用户切换到另一个窗口时暂停游戏(这可能是通过最小化它或不小心单击它旁边的窗口等)。我的游戏封装​​在QMainWindow中,因此我希望能够检测到它何时失去焦点。为此我尝试了几种不同的方法,但都没有成功。我首先尝试重载QMainWindow的focusOutEvent,但是这个方法只在我第一次用setFocus给窗口焦点时被调用。我还尝试重载窗口的event(QEvent*)方法来检查QEvent::ApplicationActive和QEvent::ApplicationDeactivate。我会发布我的QMainWindow的代码,但没有太多可

c++ - 如何监控 Qt Signal 事件队列深度

我的程序中有两个对象。一个物体正在发出信号。另一个在槽中接收信号,并一个接一个地处理传入的信号。这两个对象都在不同的线程中运行。现在我需要测量和监控接收对象的工作量。问题是我不知道在Qt信号队列中有多少信号在等待我的第二个对象处理。有没有办法获得这个队列的大小?或者是否有解决方法来了解仍有多少信号需要处理? 最佳答案 qGlobalPostedEventsCount()是一个起点,尽管它只适用于当前线程。要轮询任意线程,我们可以使用Qt的内部机制。那么实现就非常简单了。即使线程被阻塞并且不处理事件,它也能正常工作。//https:/

c++ - 在 C++ main() 执行之前处理 Mac OS X 文件打开事件

我在谷歌上搜索了很多,但仍然找不到好的解决方案:/因此,我正在将一个复杂的Qt5应用程序(某些网络服务的客户端)移植到MacOSX(10.7.0“Lion”及更高版本)。我需要处理像*.xyz这样的自定义文件和像xyz://这样的自定义URL方案。好的,Qt5有QFileOpenEvent类来处理OSX适当的事件。但是:此事件仅在应用程序事件循环开始后才到达(显然)!而且我需要“捕获”并处理OSX的文件打开事件BEFOREmain启动,因为程序逻辑旨在处理命令行参数仅处理。简化的main函数代码:intmain(intargc,char[]*argv){QApplicationapp(

【QT开发笔记-基础篇】| 第四章 事件QEvent | 4.4 鼠标按下、移动、释放事件

本章要实现的整体效果如下:QEvent::MouseButtonPress​鼠标按下时,触发该事件,它对应的子类是QMouseEventQEvent::MouseMove​鼠标移动时,触发该事件,它对应的子类是QMouseEventQEvent::MouseButtonRelease​鼠标释放时,触发该事件,它对应的子类是QMouseEvent本节通过两个案例来讲解这3个事件:按下、移动、释放事件的基本使用拖动一个标签,使之移动位置1.按下、移动、释放事件的基本使用同样使用上一节自定义的标签LabelX,来进行讲解1.1鼠标按下、释放事件首先,来到labelx.h,声明这3个函数:classL

c++ - Qt:定义自定义事件类型

我通过继承QEvent在我的Qt应用程序中创建了一个自定义事件。classMyEvent:publicQEvent{public:MyEvent():QEvent((QEvent::Type)2000)){}~MyEvent(){}}为了检查这个事件,我在event()方法中使用了以下代码:if(event->type()==(QEvent::Type)2000){...}我希望能够在我的应用程序中的某处定义自定义事件的类型,这样我就不需要在我的事件方法中转换实际的整数。所以在我的event()方法中,我希望能够做类似的事情if(event->type()==MyEventType){

c++ - Qt:定义自定义事件类型

我通过继承QEvent在我的Qt应用程序中创建了一个自定义事件。classMyEvent:publicQEvent{public:MyEvent():QEvent((QEvent::Type)2000)){}~MyEvent(){}}为了检查这个事件,我在event()方法中使用了以下代码:if(event->type()==(QEvent::Type)2000){...}我希望能够在我的应用程序中的某处定义自定义事件的类型,这样我就不需要在我的事件方法中转换实际的整数。所以在我的event()方法中,我希望能够做类似的事情if(event->type()==MyEventType){

c++ - 为什么按下 "Tab"键只会发出 QEvent::ShortcutOverride 事件?

背景我用QLineEdit和几个QPushButtons制作了一个自定义小部件,以将其与自定义项目委托(delegate)一起使用:classLineEditor:publicQWidget{public:explicitLineEditor(QWidget*parent=0):QWidget(parent){setLayout(newQHBoxLayout);layout()->setContentsMargins(0,0,0,0);layout()->setSpacing(0);QLineEdit*edit=newQLineEdit(this);layout()->addWidge