您的位置:首页 > 编程语言 > Qt开发

关于Qt信号与槽的小结

2016-01-17 22:34 429 查看
制作电子相册的时候,遇到了QMainWindow要添加控件的时候,要加上setCentralWidget()

还有要弄明白GraphicsView框架

一般来说,view是显示,QGraphicsScene则是为了控制里面的Item和widget

在Scene上添加的widget和item都会返回到相应的QGraphicsProxyWidget以及GraphicsItem

在做自动播放时,遇到了,只会循环一次以及循环方向相反

这里要注意的是QGraphicsScene管理item,widget时,是以堆栈形式管理的,是先进后出的顺序,那么循环也要倒过来

还有,定时器是一个大问题,起初只能循环一次,或者在第一第二张之间循环,第一个原因是在定时器在一个循环里面,那么只能出发外部循环的第一次

那么,要将定时器放在构造函数中,槽里面不需要添加循环,因为定时器会自动循环起来,以避免出现上述情况。

接下来就是对信号与槽之间的操作,每一定时器跳出,则刷新一副图片。

原本以为原本以为将数据库中的图片存入容器,在取出的同时写入图片这个流程是OK的。

但是,发现的是,这是一口全部写入图片,接着就只剩下第一张图片显示在上面,切换也只能切换到第二张去了。

发现这个问题之后,只能将定时器连接播放动画的信号与槽再一次分解。

中间需要多一个信号和槽进行中转,对数据库的id进行操作。

记住初始化的中转指针的数据,static必须加上。只有这样才能将指针里面的值在时时刻刻的变化。

要是要实例一个定时器,每一次输出timeout()信号,刷新一次图片,是不能一个connect()办到的。

必须将槽信号分解,只要槽受到信号的同时发出新的信号,同时更改存储同list容器数据的i值,在用list.at()调用,就能分解出这个流程了

void MainWindow::test()
{
qDebug() << *i << "test";
if(*i < list.size())
{

getshow(*i);
animation();
}
else
{

getshow(0);

}
}

void MainWindow::changetest()
{
static int j = 0;
if(j == 0 && j >= list.size())
{
j = 0;
i = &j;
emit getid(*i);
}
else
{
j = j + 1;
i = &j;
emit getid(*i);
qDebug() <<  *i;
}

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: