关于Qt信号与槽的小结

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

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值