首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 移动开发 > QT开发 >

请问一个关于update界面的有关问题

2012-04-10 
请教一个关于update界面的问题晚上闲得没事写点小程序,用designer拖了一个QWidget,morph into成了QFrame,p

请教一个关于update界面的问题
晚上闲得没事写点小程序,用designer拖了一个QWidget,morph into成了QFrame,promote了一个新的类,重写paintEvent,完成了绘制图片,图片的名称从widget.cpp的paintEvent函数中传进去。定时200ms update一次,改绘制一个新图片。问题是显示没问题,但图片不变。。。。也不是不变,最小化最大化一下就变了,怎么感觉这个update根本没用啊。。。。难道是win7的机制?以前在linux下写过类似的没啥问题
伪代码:
promotedQFrame:

C/C++ code
void promotedQFrame::paintEvent(QPaintEvent *){    QPainter painter(this);    painter.setRenderHint(QPainter::Antialiasing,true);     showPic();}void promotedQFrame::showPic(void){    QPixmap pixmap(this->picName);    QPalette palette;    palette.setBrush(this->backgroundRole(),QBrush(pixmap));    this->setPalette(palette);    this->setAutoFillBackground(true);    this->show();}


widget.cpp:
C/C++ code
Widget::Widget(QWidget *parent) :    QWidget(parent),    ui(new Ui::Widget){    ...    refreshTimer = new QTimer(this);    refreshTimer->start(200);    connect(refreshTimer,SIGNAL(timeout()),this,SLOT(refresh()));    ...}void Widget::paintEvent(QPaintEvent *){    if(count < 10)    {        ui->frameM1->setPicName("images/Null.png");        count++;    }    else if(count >= 10 && count < 20)    {        ui->frameM1->setPicName("images/Yeah.png");        count++;    }    else    {        count = 0;    }}void Widget::refresh(){    update();}


[解决办法]
多个连续的update()会被Qt压缩成一个,问题可能在这里。
还有count++放到paintEvent里容易计数不准,因为不光你自己update(),才会paint。
应该把count++放到void Widget::refresh()里面。

热点排行