Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/qt/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用GDI句柄的Qt QGraphicsItem对象_Qt_Gdi - Fatal编程技术网

使用GDI句柄的Qt QGraphicsItem对象

使用GDI句柄的Qt QGraphicsItem对象,qt,gdi,Qt,Gdi,我们的产品显示基于矢量的示意图,这些示意图是使用QGraphicsView/QGraphicscene机制实现的。在Windows上,具有10000个项目的图形达到每个进程10000个GDI句柄的限制。我已经知道了如何增加可用GDI句柄的数量,但这并不是一个真正的解决方案,而且在我们的应用程序中,不可能增加足够的值来覆盖所有可能性,因为这将超过最大窗口限制 我一直在试图找出哪些Qt对象使用了GDI句柄(用户对象也有类似的问题),但我运气不太好。到目前为止,我提出的候选人是QBrush和QFont

我们的产品显示基于矢量的示意图,这些示意图是使用QGraphicsView/QGraphicscene机制实现的。在Windows上,具有10000个项目的图形达到每个进程10000个GDI句柄的限制。我已经知道了如何增加可用GDI句柄的数量,但这并不是一个真正的解决方案,而且在我们的应用程序中,不可能增加足够的值来覆盖所有可能性,因为这将超过最大窗口限制

我一直在试图找出哪些Qt对象使用了GDI句柄(用户对象也有类似的问题),但我运气不太好。到目前为止,我提出的候选人是QBrush和QFont。我能够从QGraphicsItem派生对象的每个实例中消除QBrush,但这并没有改变使用的GDI句柄的数量。即使对于简单的测试,也很难消除QFont

在我的测试显示中有两个我自己的类。对于其中之一,每个实例都包括一个QBrush、QFont、QStaticText、几个QRectF和一个QColor。另一个包括两个QGraphicsRecitem。提供源代码是有问题的

我一直在搜索Qt源代码,寻找创建GDI句柄的调用,但在这方面也不太走运。有人能给我指一个关于这个主题的特定于Qt的资源吗

我使用的是Qt4.8.5,Windows7 64位,VisualStudio2010

谢谢,,
Doug McGrath

也许可以创建一个小的测试应用程序,您可以测试到底是什么让GDI句柄计数上升。这也将为包含代码的新/重写问题打下良好的基础。你的问题听起来肯定不正常。我还没有机会创建一个可以发布的测试应用程序,但我已经将问题缩小到在QGraphicsProxyWidget中使用QLineEdit进行数据输入。它们中的每一个似乎都使用两个GDI句柄和一个用户对象。在适当的情况下,我们还使用QComboBox进行数据输入,它们也会出现类似的问题。我怀疑这是QGraphicsProxyWidget使用的一个副作用,使这些小部件在QGraphicscene中可用。我刚刚遇到了这个问题,我遇到了一个类似的问题。我没有意识到QGraphicsProxyWidget会创建用户对象,而我的每个进程都有最多的窗口。你还记得有没有运气弄明白这一点?从那以后我一直在睡觉…:)但只有我在QLineEdit评论中提到的内容。我记得最清楚的是,我只是限制了我创建的它们的数量。实际情况是,我们的产品在单个屏幕上有10000个数据输入字段,这是经过精心设计的。这个屏幕是一个显示数据而不是输入数据的测试屏幕,所以我可以通过删除一些数据输入小部件来解决这个问题。哇,你真的看到了那个评论…谢谢你的回复!:-)好吧,我将用图形小部件替换我的代理小部件,希望它能解决我的问题。我真的只需要完成我的QML替换并废弃所有这些旧代码。再次感谢。