制作电子相册的时候,遇到了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;
}
}