• 7314阅读
  • 6回复

QGraphicsItem项重绘问题 [复制链接]

上一主题 下一主题
离线kelyn
 

只看楼主 倒序阅读 楼主  发表于: 2012-07-16
求助啊。。我想让第一个项的背景色变成绿色,然后隔一秒将另外一个项背景色改为绿色,再隔一秒出现个动画,
可是程序运行时是隔两秒后,改背景色和动画一起出现。。
函数如下,点击一个QAction调用此函数
void Window::animation()
{    
n1->setBackgroundColor(Qt::green);   //n1,n2继承于QGraphicsObject类,setBackgroundColor函数中有update()
Sleep(1000);    
n2->setBackgroundColor(Qt::green);    
Sleep(1000);    
QObject *object1 = dynamic_cast<QObject*>(n1);    
QPropertyAnimation *animation1 = new QPropertyAnimation(object1,"pos",this);  
animation1->setDuration(1000);    
animation1->setKeyValueAt(0.0,n1->pos());  
animation1->setKeyValueAt(1.0,QPointF(500,250));    
animation1->start(QAbstractAnimation::DeleteWhenStopped);
}
离线XChinux

只看该作者 1楼 发表于: 2012-07-16
这里有问题,你不要Sleep(1000),而是用QTimer::singleShot(1000, this, SLOT(myStart1());
这样的形式去调用。
二笔 openSUSE Vim N9 BB10 XChinux@163.com 网易博客 腾讯微博
承接C++/Qt、Qt UI界面、PHP及预算报销系统开发业务
离线kelyn

只看该作者 2楼 发表于: 2012-07-17
这位大哥你这里的QTimer::singleshot是隔1s调用槽myStart1(),可我想隔1s执行下条语句,难道必须把这些语句分成几个函数用singleshot来调用,没有其他办法啦?
离线kelyn

只看该作者 3楼 发表于: 2012-07-17
回 1楼(XChinux) 的帖子
这位大哥你这里的QTimer::singleshot是隔1s调用槽myStart1(),可是我想隔1s执行下条语句,难道必须把这些语句分成几个函数用singleshot来调用,没有其他办法啦?
离线XChinux

只看该作者 4楼 发表于: 2012-07-17
你用Sleep(),会僵死在那里,直到时间到之前,你什么也做不了。刷新则是在一个事件处理完毕之后才会处理。
二笔 openSUSE Vim N9 BB10 XChinux@163.com 网易博客 腾讯微博
承接C++/Qt、Qt UI界面、PHP及预算报销系统开发业务
离线kelyn

只看该作者 5楼 发表于: 2012-07-17
引用第4楼XChinux于2012-07-17 11:14发表的  :
你用Sleep(),会僵死在那里,直到时间到之前,你什么也做不了。刷新则是在一个事件处理完毕之后才会处理。

恩恩,sleep()确实是不行的。我只是觉得用singleshot得把一步步要呈现的效果都做成槽函数比较麻烦。没办法就这样用吧
离线XChinux

只看该作者 6楼 发表于: 2012-10-24
singleShot()只是QTimer的一个静态方法,你可以直接创建个QTimer对象来处理啊.
二笔 openSUSE Vim N9 BB10 XChinux@163.com 网易博客 腾讯微博
承接C++/Qt、Qt UI界面、PHP及预算报销系统开发业务
快速回复
限100 字节
 
上一个 下一个