qt子线程无法直接操作ui,需要发信号到主线程

需求是在数据加载的时候显示等待动画,加载结束关闭动画。

            QWidget *qw = new QWidget(w);
            qw->setFixedSize(125,80);

            QProgressIndicator *pgi= new QProgressIndicator(qw);
            pgi->setColor(QColor(9, 126, 186));
            //text
            QLabel *label = new QLabel(qw);
            label->setText(u8"数据正在加载中");
            label->setAlignment(Qt::AlignLeft);

            //设置布局
            QVBoxLayout *hLayout = new QVBoxLayout(this);
            hLayout->setMargin(0);
            hLayout->addWidget(pgi);
            hLayout->addWidget(label);
            hLayout->setAlignment(pgi, Qt::AlignCenter);
            qw->setLayout(hLayout);


            //设置位置
            int x = (w->width() - qw->width()) / 2;
            int y = (w->height() - qw->height()) / 2;
            qw->move(x, y);
            qw->show();

            QFutureWatcher<void> *pwatcher = new QFutureWatcher<void>;
            pgi->startAnimation();
            //执行耗时任务
            QFuture<void> future = QtConcurrent::run([=]() {
                w->readRawFolder(str);
            });

            connect(pwatcher, &QFutureWatcher<void>::finished, this, [=]() {
                pgi->stopAnimation();
                qw->hide();
                delete qw;
                delete pwatcher;
            });

            pwatcher->setFuture(future);

这样导致我主界面有些操作无法正常运行了。

QObject::connect: Cannot queue arguments of type 'QVector<int>'

(Make sure 'QVector<int>' is registered using qRegisterMetaType().)QBasicTimer::start: Timers cannot be started from another thread

QObject::setParent: Cannot set parent, new parent is in a different thread

控制台会打印这些东西。

问了问别人是,qt子线程无法直接操作ui,需要发信号到主线程,也就是ui线程。

#qt##多线程#
全部评论

相关推荐

沉淀一会:**圣经 1.同学你面试评价不错,概率很大,请耐心等待;2.你的排名比较靠前,不要担心,耐心等待;3.问题不大,正在审批,不要着急签其他公司,等等我们!4.预计9月中下旬,安心过节;5.下周会有结果,请耐心等待下;6.可能国庆节前后,一有结果我马上通知你;7.预计10月中旬,再坚持一下;8.正在走流程,就这两天了;9.同学,结果我也不知道,你如果查到了也告诉我一声;10.同学你出线不明朗,建议签其他公司保底!11.同学你找了哪些公司,我也在找工作。
点赞 评论 收藏
分享
ProMonkey2024:5个oc?厉害! 但是有一个小问题:谁问你了?😡我的意思是,谁在意?我告诉你,根本没人问你,在我们之中0人问了你,我把所有问你的人都请来 party 了,到场人数是0个人,誰问你了?WHO ASKED?谁问汝矣?誰があなたに聞きましたか?누가 물어봤어?我爬上了珠穆朗玛峰也没找到谁问你了,我刚刚潜入了世界上最大的射电望远镜也没开到那个问你的人的盒,在找到谁问你之前我连癌症的解药都发明了出来,我开了最大距离渲染也没找到谁问你了我活在这个被辐射蹂躏了多年的破碎世界的坟墓里目睹全球核战争把人类文明毁灭也没见到谁问你了(别的帖子偷来的,现学现卖😋)
点赞 评论 收藏
分享
1 1 评论
分享
牛客网
牛客企业服务