我的一段代码如下:
class MyScrollView:public QScrollView
{
public:
enum{WIDTH=16000, HEIGHT=12000};
MyScrollView(QWidget * parent=0, const char *name=0, WFlags f=0)
:QScrollView(parent, name, f)
{
resizeContents(WIDTH, HEIGHT);
};
protected:
void drawContents(QPainter* p, int cx, int cy, int cw, int ch)
{
int CX=0, CY=0;
QScrollView::viewportToContents(0, 0, CX, CY);
p->setPen(QColor(255, 0, 0));
p->setBrush(QColor(0, 0, 255));
p->fillRect(0, 0, WIDTH, HEIGHT, green);
p->drawRect(CX, CY, 100, 100);
};
};
int main (int argc, char *argv[])
{
QApplication app(argc,argv);
MyScrollView mainWidget;
app.setMainWidget(&mainWidget);
mainWidget.show();
return app.exec();
}
我写了一个类MyScorllView继承了QScrollView,但是滚动视图时绘图结果也设想不符。另外:出现的不正确的结果后,如果其中的某个区域被遮挡再恢复时,被重绘的该区域是正确的结果。这是怎么回事?是不是QScrollView的updataContent()的问题?
调试时我发现p->fillRect(0, 0, WIDTH, HEIGHT, green)和p->drawRect(CX, CY, 100, 100)函数没有绘制到指定区域(估计只绘制了QRect(cx, cy, cw, ch)区域)。
我的本意是只要滚动视图就重绘viewport()区域,怎么解决好?多谢各位!