0
你好StackOverflow的專家,QT5:與BitBlt到了QPainter ::的drawImage
我在Qt的漂亮的小白和我目前從升級到QT4一個QT5應用profesionnal。
我有一個問題,bitblt,需要升級到QPainter :: drawImage。
該應用程序正在編譯和運行,但我只有一個黑色的圖像顯示,而我應該在這個黑色的圖像上畫綠線。這就像背景總是在前面,沒有什麼東西可以畫在它的上面。
這裏是我以前的代碼
void View::paintEvent (QPaintEvent * Event)
{
QRect rcBounds=Event->rect();
QPainter tmp(this);
for (int lay=0;lay<(int)m_RectTable.size();lay++)
{
if (!m_RectTable[lay].isEmpty())
{
if (lay != 0)
{
bitBlt(m_BitmapTable[lay], m_RectTable[lay].left(), m_RectTable[lay].top(), m_BitmapTable[lay - 1], m_RectTable[lay].left(), m_RectTable[lay].top(), m_RectTable[lay].width(), m_RectTable[lay].height(), QPainter::CompositionMode_SourceOver);
}
tmp.begin(m_BitmapTable[lay]);
if (lay==0)
tmp.fillRect(m_RectTable[lay], *m_pBrush);
OnDraw(&tmp, lay);
tmp.end();
m_RectTable[lay].setRect(0, 0, -1, -1);
}
}
bitBlt(this, rcBounds.left(), rcBounds.top(),m_BitmapTable[m_LayerNb-1],rcBounds.left(), rcBounds.top(),rcBounds.width(), rcBounds.height(), QPainter::CompositionMode_SourceOver);
}
我代替:
bitBlt(m_BitmapTable[lay], m_RectTable[lay].left(), m_RectTable[lay].top(), m_BitmapTable[lay - 1], m_RectTable[lay].left(), m_RectTable[lay].top(), m_RectTable[lay].width(), m_RectTable[lay].height(), QPainter::CompositionMode_SourceOver);
和
bitBlt(this, rcBounds.left(), rcBounds.top(),m_BitmapTable[m_LayerNb-1],rcBounds.left(), rcBounds.top(),rcBounds.width(), rcBounds.height(), QPainter::CompositionMode_SourceOver);
有:
tmp.drawPixmap(m_RectTable[lay].left(), m_RectTable[lay].top(), *m_BitmapTable[lay - 1], m_RectTable[lay].left(), m_RectTable[lay].top(), m_RectTable[lay].width(), m_RectTable[lay].height());
tmp.drawPixmap(rcBounds.left(), rcBounds.top(), *m_BitmapTable[m_LayerNb - 1], rcBounds.left(), rcBounds.top(), rcBounds.width(), rcBounds.height());
此paintEvent函數用於顯示我的應用程序的全部元素,例如彈出窗口等等(lay是針對不同的圖形層)。
- 我的升級bitblt的方式有什麼問題嗎?
- 我應該有不同的體系結構,因爲bitblt和drawImage工作方式不一樣嗎?
如果有任何缺失的信息有更好的理解我的問題隨時問我!
非常感謝您的幫助!
您在end()(在循環中)之後調用drawPixmap()。在繪畫前試着用tmp.begin(),或者創建一個新的畫家。 –