QT开发中文网

qt窗体应用我要调用一个包含很多阻塞函数的类,同时不想让他影响主程序的正常运行,不影响界面其他按钮的使用,如何实现,示例代码

要实现这样的功能,你可以在Qt中使用多线程来处理耗时的阻塞操作,以避免影响主程序的正常运行和界面按钮的使用。以下是一个简单示例代码:

// 包含头文件
#include <QThread>
#include <QObject>

// 自定义类,继承自QObject并实现耗时操作
class BlockingClass : public QObject
{
    Q_OBJECT

public slots:
    void performBlockingTask()
    {
        // 执行耗时的阻塞任务
        // ...
    }
};

// 主窗口类
class MainWindow : public QMainWindow
{
    Q_OBJECT

public:
    MainWindow(QWidget *parent = nullptr)
        : QMainWindow(parent)
    {
        // 创建并启动新线程处理阻塞操作
        QThread* thread = new QThread(this);
        BlockingClass* blockingObj = new BlockingClass();
        
        blockingObj->moveToThread(thread);

        connect(thread, &QThread::started, blockingObj, &BlockingClass::performBlockingTask);
        connect(blockingObj, &BlockingClass::finished, thread, &QThread::quit);
        connect(thread, &QThread::finished, thread, &QThread::deleteLater);
        
        thread->start();

        // 其他界面按钮等操作...
    }

signals:
    void finished();
};

int main(int argc, char *argv[])
{
    QApplication app(argc, argv);
    
    MainWindow mainWindow;
    mainWindow.show();

    return app.exec();
}

在这个示例代码中,我们创建了一个名为BlockingClass的自定义类,并将它放入单独的线程中执行耗时的阻塞任务。BlockingClass继承自QObject,并通过slots和signals来实现与主线程的通信。在主窗口类中,我们创建了一个新线程,并将BlockingClass对象移动到该线程中执行耗时任务。同时,我们还保留了其他界面按钮等操作。

这样做可以避免阻塞任务对主程序的影响,使得界面其他按钮仍然可用。


内容由零声教学AI助手提供,问题来源于学员提问

本站部分文章来源于网络,版权归原作者所有,如有侵权请联系站长删除。
转载请注明出处:https://qt.0voice.com/?id=6506

分享:
扫描分享到社交APP
上一篇
下一篇
发表列表
游客 游客
此处应有掌声~
评论列表

还没有评论,快来说点什么吧~

联系我们

在线咨询: 点击这里给我发消息

微信号:3007537140

上班时间: 10:30-22:30

关注我们
x

注册

已经有帐号?