使用QT界面显示打开其他软件

本文介绍了如何在Qt应用中搜索并嵌套外部软件,通过QProcess实现启动和窗口管理,展示了如何过滤和显示特定类型的EXE文件。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

搜索其他软件并嵌套到QT界面

QDir dir = qApp->applicationDirPath();
    if (!dir.exists()) {
        return;
    }
    QStringList filters;
    filters << QString("*.exe");
    dir.setFilter(QDir::Files | QDir::NoSymLinks); //设置类型过滤器,只为文件格式
    dir.setNameFilters(filters);                   //设置文件名称过滤器,只为filters格式
    int dirCount = dir.count();
    if (dirCount <= 0) {
        return;
    }
    QStringList stringList;
    for (int i = 0; i < dirCount; i++) 
    {
        QString filename = dir[i];
        if (filename.left(filename.size()-4) == qApp->applicationDisplayName())
        {
            continue;
        }
        QProcess *p=new QProcess;
        p->start(filename, QStringList(filename));
        connect(this, &QMainWindow::destroyed, p, [=] {
            p->close();
        });
        QThread::msleep(500);
        WId wid = (WId)FindWindow(NULL, filename.left(filename.size() - 4).toStdWString().c_str());//软件标题

        QWindow* m_window = QWindow::fromWinId(wid);
        m_window->setFlags(m_window->flags() | Qt::CustomizeWindowHint | Qt::WindowTitleHint); 
        QWidget *m_widget; 
        m_widget = QWidget::createWindowContainer(m_window, ui.widget);
        /*HWND mm = (HWND)wid;
        SetWindowTextA(mm, (LPCSTR)filename.left(filename.size() - 4).toStdWString().c_str());*/
        qDebug() << wid<< filename.left(filename.size() - 4);
        l->addWidget(m_widget);

    }
    ui.widget->setLayout(l);
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值