• 5188阅读
  • 0回复

关于QScrollView滚动视图的问题 [复制链接]

上一主题 下一主题
离线fhn847744
 

只看楼主 倒序阅读 楼主  发表于: 2007-05-09
关于QScrollView滚动视图的问题
— 本帖被 XChinux 执行加亮操作(2008-07-19) —
我的一段代码如下:
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()区域,怎么解决好?多谢各位!
快速回复
限100 字节
 
上一个 下一个