如果沒有硬件支持,QPainter繪圖速度會很慢。如果所有行都可見,則使用QGraphicsView將無濟於事,因爲它無論如何都在內部使用QPainter。
如果你只需要每次更新,每個更新的背景畫20個新點(或線)將被清除,所以你必須再次渲染一切,有一些事情你可以嘗試:
1)禁止後臺自動填充。請參閱:QWidget::autoFillBackground 這樣的事情添加到您的控件初始化:
setAutoFillBackground(false);
setAttribute(Qt::WA_OpaquePaintEvent, true);
setAttribute(Qt::WA_NoSystemBackground, true);
現在,在第一次更新渲染背景和第一線。對於下一次更新,只需跳過渲染背景並僅渲染新行。
2)使用雙緩衝。例如,創建小部件大小的QImage。
.h
private:
QImage m_targetImage;
.cpp
// constructor
m_targetImage = QImage(width(), height(), QImage::Format_ARGB32);
// paint event
// draw to image
QPainter p;
p.begin(&m_targetImage);
static bool firstUpdate = true;
if (firstUpdate)
{
// draw background)
p.drawImage(...);
firstUpdate = false;
}
// draw latest lines
p.drawLines(....);
p.end();
// draw image in widget paint
QPainter painter;
painter.begin(this);
painter.drawImage(0, 0, m_targetImage);
painter.end();
3)如果可能,使用QGLWidget。從QGLWidget而不是QWidget繼承你的小部件。此方法不適用於所有平臺,並且速度提升可能還不夠。同樣使用OpenGL會帶來各種新問題。
你看過[graphicsview](http://doc.qt.nokia.com/4.6/graphicsview.html)還是嘗試使用GL小部件進行繪圖? – 2010-11-15 11:02:29
我讀到了,但我很困惑。 QWidget繪圖讓我感覺非常輕鬆。請給出一些建議。我繼續使用QWidget或使用GraphicsView?如果我使用grphicsview,那麼如何畫線? – saravanan 2010-11-15 11:14:23
你可以發佈你的實際代碼的樣本嗎? – 2010-11-15 13:17:06