2010-05-28 100 views
3

我可以将Qt对象绘制到QImage上,然后将图像绘制到HDC或CDC。这可能会损害我们应用程序的性能。如果我可以将Qt对象直接绘制到Win32 HDC或MFC CDC上,那将会很棒。我希望有一类,说QWin32Image清晰,那么我就可以这样使用它:我可以直接将Qt对象绘制到Win32 DC(设备上下文)吗?

QWin32Image image(hdc, 100, 100, Format_ARGB32_Premultiplied); 
QPainter painter(&image); 
painter.drawText(....); 

是否有可能对我的思想?或者有更好的方法来做到这一点?

回答

4

简短的回答 - 在Qt中没有第AFAIK,他们抽象整个用户界面的平台独立在应用程序代码级别。 Qt将它的所有小部件绘制到它自己的缓冲区中,然后绘制到屏幕上。

长答案 - 合格是的。

Qt提供Win/MFC Integration Library这将允许Qt对象与HDC和MFC对象进行交互。这个库工作得很好。但是,直到我明白它是如何工作的,我才发现使用它有些困惑。

该库的功能允许您在Qt框架中的MFC窗口或MFC窗口中显示QWindows。只要你牢记这一点,就可以使其工作。另外,QImage.scanLine(0)指向整个原始位图,您可以使用它直接使用其中一个窗口函数直接写入屏幕。即使函数名称是扫描线,使用这种方法指向原始像素缓冲区的开始。

+0

为此可以使用哪些windows功能? QPixmap可以将QImage转换为Windows位图句柄:QPixmap :: fromImage(image).toWinHBITMAP(QPixmap :: PremultipliedAlpha),考虑到性能,哪种方法更好? – 2010-06-01 03:19:00

+0

这样做没有太多的经验。在我们的应用程序中,我们一直使用QImage.scanLine(0)来直接操作具有英特尔性能基元库的原始像素缓冲区,因为这更符合我们的应用。我的经验是,你需要做的转换越少越好。特别是在调试模式下,QImage和QPixmap有时会很慢。发布模式虽然没有这个问题。 – 2010-06-02 02:52:50

+0

'bits()'相当于'scanLine(0)'http://doc.qt.io/qt-4.8/qimage.html#bits – Winand 2016-02-26 10:20:10

相关问题