mirror of
https://gitee.com/gfdgd-xi/deep-wine-runner
synced 2025-07-20 20:42:23 +08:00
398 lines
20 KiB
C++
398 lines
20 KiB
C++
#include "mainwindow.h"
|
||
#include <QGridLayout>
|
||
#include <QLabel>
|
||
#include <QComboBox>
|
||
#include <QPushButton>
|
||
#include <QMainWindow>
|
||
#include <QObject>
|
||
#include <QSizePolicy>
|
||
#include <QSpacerItem>
|
||
#include <QTextBrowser>
|
||
#include <QCoreApplication>
|
||
#include <iostream>
|
||
#include <QDebug>
|
||
#include <QIODevice>
|
||
#include <QJsonDocument>
|
||
#include <QJsonObject>
|
||
#include <QFile>
|
||
#include <QProcess>
|
||
using namespace std;
|
||
|
||
MainWindow::MainWindow(){
|
||
/*********
|
||
* 设置变量
|
||
*********/
|
||
|
||
// 如果要添加其他 wine,请使用安装更多 Wine 功能
|
||
|
||
|
||
QMainWindow *window = new QMainWindow();
|
||
QWidget *widget = new QWidget();
|
||
window->setCentralWidget(widget);
|
||
QGridLayout *mainLayout = new QGridLayout();
|
||
QSizePolicy size;
|
||
//size->setVerticalPolicy(0);
|
||
QWidget *leftUp = new QWidget();
|
||
mainLayout->addWidget(leftUp, 0, 0, 1, 1);
|
||
QGridLayout *leftUpLayout = new QGridLayout();
|
||
leftUp->setLayout(leftUpLayout);
|
||
QLabel *fastLabel = new QLabel(QObject::tr("快速启动"));
|
||
fastLabel->setStyleSheet("font: 30px;");
|
||
leftUpLayout->addWidget(fastLabel, 0, 0, 1, 2);
|
||
leftUpLayout->addWidget(new QLabel("<hr>"), 1, 0, 1, 2);
|
||
leftUpLayout->addWidget(new QLabel(QObject::tr("请选择容器路径:")), 2, 0, 1, 1);
|
||
QComboBox *e1 = new QComboBox();
|
||
e1->setEditable(1);
|
||
leftUpLayout->addWidget(e1, 3, 0, 1, 1);
|
||
QPushButton *button1 = new QPushButton("浏览");
|
||
//button1.clicked.connect(liulanbutton);
|
||
leftUpLayout->addWidget(button1, 3, 1, 1, 1);
|
||
leftUpLayout->addWidget(new QLabel(QObject::tr("请选择要执行的程序(EXE、MSI或者命令):")), 4, 0, 1, 1);
|
||
QComboBox *e2 = new QComboBox();
|
||
e2->setEditable(1);
|
||
leftUpLayout->addWidget(e2, 5, 0, 1, 1);
|
||
QPushButton *button2 = new QPushButton(QObject::tr("浏览"));
|
||
//button2.clicked.connect(liulanexebutton);
|
||
leftUpLayout->addWidget(button2, 5, 1, 1, 1);
|
||
leftUpLayout->addWidget(new QLabel(QObject::tr("请选择WINE版本:")), 6, 0, 1, 1);
|
||
QComboBox *o1 = new QComboBox();
|
||
leftUpLayout->addWidget(o1, 7, 0, 1, 1);
|
||
// 设置空间权重
|
||
button1->setSizePolicy(size);
|
||
button2->setSizePolicy(size);
|
||
|
||
// UI 创建
|
||
QWidget *leftDown = new QWidget();
|
||
mainLayout->addWidget(leftDown, 1, 0, 1, 1);
|
||
QVBoxLayout *leftDownLayout = new QVBoxLayout();
|
||
leftDown->setLayout(leftDownLayout);
|
||
QLabel *highLabel = new QLabel(QObject::tr("高级功能"));
|
||
highLabel->setStyleSheet("font: 30px;");
|
||
leftDownLayout->addWidget(highLabel);
|
||
leftDownLayout->addWidget(new QLabel("<hr>"));
|
||
leftDownLayout->addWidget(new QLabel(QObject::tr("创建快捷方式(Desktop文件):")));
|
||
QHBoxLayout *createDesktopLink = new QHBoxLayout();
|
||
QLabel *label_r_2 = new QLabel(QObject::tr("名称:"));
|
||
createDesktopLink->addWidget(label_r_2);
|
||
QComboBox *combobox1 = new QComboBox();
|
||
combobox1->setEditable(1);
|
||
createDesktopLink->addWidget(combobox1);
|
||
QPushButton *button5 = new QPushButton(QObject::tr("创建到桌面"));
|
||
//button5.clicked.connect(make_desktop_on_desktop);
|
||
createDesktopLink->addWidget(button5);
|
||
QPushButton *saveDesktopFileOnLauncher = new QPushButton(QObject::tr("创建到开始菜单"));
|
||
//saveDesktopFileOnLauncher.clicked.connect(make_desktop_on_launcher);
|
||
createDesktopLink->addWidget(saveDesktopFileOnLauncher);
|
||
leftDownLayout->addLayout(createDesktopLink);
|
||
QGridLayout *programManager = new QGridLayout();
|
||
leftDownLayout->addLayout(programManager);
|
||
programManager->addWidget(new QLabel(QObject::tr("程序管理:")), 0, 0, 1, 1);
|
||
QPushButton *getProgramIcon = new QPushButton(QObject::tr("提取图标"));
|
||
//getProgramIcon.clicked.connect(lambda: RunWineProgram(f"{programPath}/BeCyIconGrabber.exe' '{e2.currentText()}" if e2.currentText()[:2].upper() == "C:" else f"{programPath}/BeCyIconGrabber.exe' 'z:/{e2.currentText()}"));
|
||
programManager->addWidget(getProgramIcon, 1, 0, 1, 1);
|
||
programManager->addWidget(new QLabel(" "), 1, 1, 1, 1);
|
||
QPushButton *trasButton = new QPushButton(QObject::tr("窗口透明工具"));
|
||
//trasButton.clicked.connect(lambda: RunWineProgram(f"{programPath}/窗体透明度设置工具.exe"));
|
||
programManager->addWidget(trasButton, 1, 2, 1, 1);
|
||
QPushButton *uninstallProgram = new QPushButton(QObject::tr("卸载程序"));
|
||
//uninstallProgram.clicked.connect(lambda: RunWineProgram(f"{programPath}/geek.exe"));
|
||
programManager->addWidget(new QLabel(" "), 1, 3, 1, 1);
|
||
programManager->addWidget(uninstallProgram, 1, 4, 1, 1);
|
||
QPushButton *miniAppStore = new QPushButton(QObject::tr("微型应用商店"));
|
||
//miniAppStore.clicked.connect(lambda: threading.Thread(target=MiniAppStore).start());
|
||
programManager->addWidget(new QLabel(" "), 1, 5, 1, 1);
|
||
programManager->addWidget(miniAppStore, 1, 6, 1, 1);
|
||
programManager->addWidget(new QLabel(" "), 1, 7, 1, 1);
|
||
QPushButton *getProgramStatus = new QPushButton(QObject::tr("获取该程序运行情况"));
|
||
//getProgramStatus.clicked.connect(ProgramRunStatusShow.ShowWindow);
|
||
programManager->addWidget(getProgramStatus, 1, 8, 1, 1);
|
||
QPushButton *getLoseDll = new QPushButton(QObject::tr("检测静态下程序缺少DLL"));
|
||
//getLoseDll.clicked.connect(GetLoseDll);
|
||
programManager->addWidget(new QLabel(" "), 1, 9, 1, 1);
|
||
programManager->addWidget(getLoseDll, 1, 10, 1, 1);
|
||
programManager->addItem(new QSpacerItem(20, 20, QSizePolicy::Expanding, QSizePolicy::Minimum), 1, 11, 1, 1);
|
||
programManager->addWidget(new QLabel(QObject::tr("WINE配置:")), 2, 0, 1, 1);
|
||
QPushButton *wineConfig = new QPushButton(QObject::tr("配置容器"));
|
||
//wineConfig.clicked.connect(lambda: RunWineProgram("winecfg"));
|
||
programManager->addWidget(wineConfig, 3, 0, 1, 1);
|
||
QPushButton *fontAppStore = new QPushButton(QObject::tr("字体商店"));
|
||
//fontAppStore.clicked.connect(FontAppStore);
|
||
programManager->addWidget(fontAppStore, 3, 2, 1, 1);
|
||
QPushButton *button_r_6 = new QPushButton(QObject::tr("RegShot"));
|
||
//button_r_6.clicked.connect(lambda: RunWineProgram(f"{programPath}/RegShot/regshot.exe"));
|
||
programManager->addWidget(button_r_6, 3, 4, 1, 1);
|
||
QPushButton *sparkWineSetting = new QPushButton(QObject::tr("星火wine配置"));
|
||
//sparkWineSetting.clicked.connect(lambda: threading.Thread(target=os.system, args=["bash /opt/durapps/spark-dwine-helper/spark-dwine-helper-settings/settings.sh"]).start());
|
||
programManager->addWidget(sparkWineSetting, 3, 6, 1, 1);
|
||
QPushButton *wineAutoConfig = new QPushButton(QObject::tr("自动/手动配置 Wine 容器"));
|
||
//wineAutoConfig.clicked.connect(WineBottonAutoConfig);
|
||
programManager->addWidget(wineAutoConfig, 3, 8, 1, 1);
|
||
QPushButton *wineBottleReboot = new QPushButton(QObject::tr("重启指定Wine容器"));
|
||
//wineBottleReboot.clicked.connect(lambda: RunWineProgram(f"wineboot' '-k"));
|
||
programManager->addWidget(wineBottleReboot, 3, 10, 1, 1);
|
||
|
||
// 权重
|
||
button5->setSizePolicy(size);
|
||
saveDesktopFileOnLauncher->setSizePolicy(size);
|
||
label_r_2->setSizePolicy(size);
|
||
getProgramIcon->setSizePolicy(size);
|
||
//trasButton.setSizePolicy(size);
|
||
button_r_6->setSizePolicy(size);
|
||
wineConfig->setSizePolicy(size);
|
||
|
||
QTextBrowser *returnText = new QTextBrowser();
|
||
returnText->setStyleSheet("background-color: black;"\
|
||
"color: white;");
|
||
returnText->setText(QObject::tr("在此可以看到wine安装应用时的终端输出内容\n"\
|
||
"=============================================\n"\
|
||
"如果解决了你的问题,请不要吝啬你的star哟!\n"\
|
||
"地址:\n"\
|
||
"https://gitee.com/gfdgd-xi/deep-wine-runner\n"\
|
||
"https://github.com/gfdgd-xi/deep-wine-runner\n"\
|
||
"https://sourceforge.net/projects/deep-wine-runner"));
|
||
mainLayout->setRowStretch(0, 2);
|
||
mainLayout->setRowStretch(1, 1);
|
||
mainLayout->setColumnStretch(0, 2);
|
||
mainLayout->setColumnStretch(1, 1);
|
||
mainLayout->addWidget(returnText, 0, 1, 2, 1);
|
||
|
||
// 版权
|
||
QLabel *copy = new QLabel("程序版本:{version},<b>提示:Wine 无法保证可以运行所有的 Windows 程序,如果想要运行更多 Windows 程序,可以考虑虚拟机和双系统</b><br/>"\
|
||
"<b>注:部分二进制兼容层会自动注册 binfmt(如原版的 Box86/64、Qemu User Static),则意味着无需在 Wine 版本那里特别指定兼容层,直接指定 Wine 即可</b><br/>"\
|
||
"©2020~{time.strftime('%Y')} gfdgd xi");
|
||
mainLayout->addWidget(copy, 2, 0, 1, 1);
|
||
|
||
// 程序运行
|
||
QWidget *programRun = new QWidget();
|
||
QHBoxLayout *programRunLayout = new QHBoxLayout();
|
||
programRun->setLayout(programRunLayout);
|
||
programRunLayout->addItem(new QSpacerItem(20, 20, QSizePolicy::Expanding, QSizePolicy::Minimum));
|
||
QPushButton *button3 = new QPushButton(QObject::tr("运行程序"));
|
||
//button3.clicked.connect(runexebutton);
|
||
programRunLayout->addWidget(button3);
|
||
QPushButton *killProgram = new QPushButton(QObject::tr("终止程序"));
|
||
//killProgram.clicked.connect(KillProgram);
|
||
programRunLayout->addWidget(killProgram);
|
||
QPushButton *killBottonProgram = new QPushButton(QObject::tr("终止指定容器的程序"));
|
||
//killBottonProgram.clicked.connect(lambda: threading.Thread(target=os.system, args=[f"'{programPath}/kill.sh' '{os.path.basename(e1.currentText())}'"]).start());
|
||
programRunLayout->addWidget(killBottonProgram);
|
||
mainLayout->addWidget(programRun, 2, 1, 1, 1);
|
||
|
||
// 窗口设置
|
||
window->resize(widget->frameGeometry().width() * 2, widget->frameGeometry().height());
|
||
//window->setWindowIcon(QIcon("{programPath}/deepin-wine-runner.svg"));
|
||
widget->setLayout(mainLayout);
|
||
window->show();
|
||
|
||
CheckWine();
|
||
|
||
// 控件设置
|
||
//if(setting.value("AutoWine") != 0)
|
||
o1->addItems(canUseWine);
|
||
|
||
// 一个 Wine 都没有却用 Wine 的功能
|
||
// 还是要处理的,至少不会闪退
|
||
if(o1->currentText() == ""){
|
||
o1->addItem("没有识别到任何Wine,请在菜单栏“程序”安装Wine或安装任意Wine应用");
|
||
}
|
||
}
|
||
|
||
MainWindow::~MainWindow()
|
||
{
|
||
//delete ui;
|
||
}
|
||
|
||
QString MainWindow::get_home(){
|
||
return QDir::homePath();
|
||
}
|
||
|
||
QString MainWindow::readtxt(QString path){
|
||
QFile file(path);
|
||
file.open(QIODevice::ReadOnly);
|
||
QString things = file.readAll();
|
||
file.close();
|
||
return things;
|
||
}
|
||
|
||
QByteArray MainWindow::readtxtByte(QString path){
|
||
QFile file(path);
|
||
file.open(QIODevice::ReadOnly);
|
||
QByteArray things = file.readAll();
|
||
file.close();
|
||
return things;
|
||
}
|
||
|
||
void MainWindow::write_txt(QString path, QByteArray things){
|
||
QFile file(path);
|
||
file.open(QIODevice::WriteOnly);
|
||
file.write(things);
|
||
file.close();
|
||
}
|
||
|
||
QString MainWindow::GetCommandResult(QString command){
|
||
QProcess process;
|
||
process.start(command);
|
||
process.waitForStarted();
|
||
process.waitForFinished();
|
||
QString result = process.readAll();
|
||
process.close();
|
||
return result;
|
||
}
|
||
|
||
/*
|
||
* 检测 Wine
|
||
*/
|
||
void MainWindow::CheckWine(){
|
||
QStringList wine7zUse = {"wine", "wine64", "wine-i386", "wine-aarch64", "wine-x86_64"};
|
||
wine.clear();
|
||
wine.insert("基于 UOS box86 的 deepin-wine6-stable",
|
||
"WINEPREDLL='" + programPath + "/dlls-arm' "\
|
||
"WINEDLLPATH=/opt/deepin-wine6-stable/lib BOX86_NOSIGSEGV=1 "\
|
||
"/opt/deepin-box86/box86 /opt/deepin-wine6-stable/bin/wine ");
|
||
wine.insert("基于 UOS exagear 的 deepin-wine6-stable",
|
||
"WINEPREDLL='" + programPath + "/dlls-arm' WINEDLLPATH=/opt/deepin-wine6-stable/lib"\
|
||
" /opt/exagear/bin/ubt_x64a64_al --path-prefix " + get_home() + "/.deepinwine/debian-buster --utmp-paths-list " + get_home() + ""\
|
||
"/.deepinwine/debian-buster/.exagear/utmp-list --vpaths-list " + get_home() + "/.deepinwine/debian-buster/.exagear/vpaths-list"\
|
||
" --opaths-list " + get_home() + "/.deepinwine/debian-buster/.exagear/opaths-list --smo-mode fbase --smo-severity smart "\
|
||
"--fd-limit 8192 --foreign-ubt-binary /opt/exagear/bin/ubt_x32a64_al -- /opt/deepin-wine6-stable/bin/wine ");
|
||
wine.insert("使用 Flatpak 安装的 Wine", "flatpak run org.winehq.Wine");
|
||
wine.insert("deepin-wine8-stable", "deepin-wine8-stable");
|
||
wine.insert("deepin-wine6 stable", "deepin-wine6-stable");
|
||
wine.insert("deepin-wine6-vannila", "deepin-wine6-vannila");
|
||
wine.insert("deepin-wine5 stable", "deepin-wine5-stable");
|
||
wine.insert("spark-wine", "spark-wine");
|
||
wine.insert("spark-wine7-devel", "spark-wine7-devel");
|
||
wine.insert("spark-wine8", "spark-wine8");
|
||
wine.insert("spark-wine8-wow", "spark-wine8-wow");
|
||
wine.insert("deepin-wine", "deepin-wine");
|
||
wine.insert("deepin-wine5", "deepin-wine5");
|
||
wine.insert("wine", "wine");
|
||
wine.insert("wine64", "wine64");
|
||
wine.insert("ukylin-wine", "ukylin-wine");
|
||
wine.insert("okylin-wine", "okylin-wine");
|
||
wine.insert("mono(这不是 wine,但可以实现初步调用运行 .net 应用)", "mono");
|
||
wine.insert("基于 linglong 的 deepin-wine6-stable(不推荐)", "ll-cli run '' --exec '/bin/deepin-wine6-stable'");
|
||
if(QFile::exists("/opt/deepin-box86/box86") && QFile::exists("/opt/deepin-wine6-stable/bin/wine")){
|
||
canUseWine.append("基于 UOS box86 的 deepin-wine6-stable");
|
||
}
|
||
if(QFile::exists("/opt/exagear/bin/ubt_x64a64_al") && QFile::exists("/opt/deepin-wine6-stable/bin/wine")){
|
||
canUseWine.append("基于 UOS exagear 的 deepin-wine6-stable");
|
||
}
|
||
for(QString i : wine.keys()){
|
||
if(!system(("which '" + wine.key(i) + "'").toUtf8())){
|
||
canUseWine.append(i);
|
||
}
|
||
}
|
||
if(!system("which flatpak") && QDir("/var/lib/flatpak/app/org.winehq.Wine").exists()){
|
||
canUseWine.append("使用 Flatpak 安装的 Wine");
|
||
}
|
||
if(QDir("/persistent/linglong/layers/").exists()){ // 判断是否使用 linglong
|
||
for(QString i : QDir("/persistent/linglong/layers/").entryList()){
|
||
try{
|
||
break; // bug
|
||
QString dire = QDir("/persistent/linglong/layers/" + i).entryList()[-1];
|
||
QString arch = QDir("/persistent/linglong/layers/" + i + "/" + dire)[-1];
|
||
if(QFile::exists("/persistent/linglong/layers/" + i + "/" + dire + "/" + arch + "/runtime/bin/deepin-wine6-stable")){
|
||
wine.insert("基于 linglong 的 deepin-wine6-stable(不推荐)", "ll-cli run " + i + " --exec '/bin/deepin-wine6-stable'");
|
||
canUseWine.append("基于 linglong 的 deepin-wine6-stable(不推荐)");
|
||
break;
|
||
}
|
||
}
|
||
catch(QString msg){
|
||
qDebug() << msg;
|
||
}
|
||
}
|
||
}
|
||
// 读取自定义安装的 Wine(需要解包的才能使用)
|
||
if(!system("which qemu-i386-static")){
|
||
if(QDir(qemuPath).exists()){
|
||
for(QString g: QDir(qemuPath).entryList()){
|
||
QString archPath = qemuPath + "/" + g;
|
||
QString arch = g;
|
||
if(QFileInfo(archPath).isDir()){
|
||
for(QString d: QDir(archPath).entryList()){
|
||
QString bottlePath = archPath + "/" + g;
|
||
if(QFileInfo(bottlePath).isDir()){
|
||
qemuBottleList.append(QStringList() << arch << d << bottlePath);
|
||
}
|
||
}
|
||
}
|
||
}
|
||
}
|
||
}
|
||
QJsonParseError jsonError;
|
||
QJsonDocument jsonDocument;
|
||
QJsonObject jsonObject;
|
||
QStringList historyList[] = {shellHistory, findExeHistory, wineBottonHistory, isoPath, isoPathFound};
|
||
QStringList historyListPath = {homePath + "/.config/deepin-wine-runner/ShellHistory.json",
|
||
homePath + "/.config/deepin-wine-runner/FindExeHistory.json",
|
||
homePath + "/.config/deepin-wine-runner/WineBottonHistory.json",
|
||
homePath + "/.config/deepin-wine-runner/ISOPath.json",
|
||
homePath + "/.config/deepin-wine-runner/ISOPathFound.json"};
|
||
for(int i = 0; i <= historyList->size(); i++){
|
||
QStringList *list = &historyList[i];
|
||
jsonDocument = QJsonDocument(QJsonDocument::fromJson(readtxtByte(historyListPath[i])));
|
||
jsonObject = jsonDocument.object();
|
||
list->clear();
|
||
for(QString i: jsonObject.keys()){
|
||
list->append(jsonObject.value(i).toString());
|
||
}
|
||
}
|
||
qDebug() << jsonError.errorString();
|
||
jsonDocument = QJsonDocument(QJsonDocument::fromJson(readtxtByte(homePath + "/.config/deepin-wine-runner/WineSetting.json")));
|
||
jsonObject = jsonDocument.object();
|
||
setting.clear();
|
||
for(QString i: jsonObject.keys()){
|
||
setting.insert(i, jsonObject.value(i).toString());
|
||
}
|
||
for(QString i: QDir(programPath + "/wine/").entryList()){
|
||
if(QDir(programPath + "/wine/" + i).exists() && QFileInfo(programPath + "/wine/" + i).isDir()){
|
||
QStringList nameValue = {{"", ""}};
|
||
try{
|
||
if(QFile::exists("/opt/deepin-box86/box86")){
|
||
nameValue.append(QStringList() << "基于 UOS box86 的 " <<
|
||
"WINEPREDLL='" + programPath + "/dlls-arm' WINEDLLPATH=/opt/deepin-wine6-stable/lib BOX86_NOSIGSEGV=1"\
|
||
" /opt/deepin-box86/box86 ");
|
||
}
|
||
if(!system("which box86")){
|
||
nameValue.append(QStringList() << "基于 box86 的 " << "box86 ");
|
||
}
|
||
if(!system("which box64")){
|
||
nameValue.append(QStringList() << "基于 box64 的 " << "box64 ");
|
||
}
|
||
if(!system("which qemu-i386") &&
|
||
GetCommandResult("arch").replace(" ", "").replace("\n", "") != "x86_64" &&
|
||
GetCommandResult("arch").replace(" ", "").replace("\n", "") != "i686"){
|
||
nameValue.append(QStringList() << "基于 qemu-i386 的 " << "qemu-i386 ");
|
||
}
|
||
if(!system("which qemu-x86_64") &&
|
||
GetCommandResult("arch").replace(" ", "").replace("\n", "") != "x86_64" &&
|
||
GetCommandResult("arch").replace(" ", "").replace("\n", "") != "i686"){
|
||
nameValue.append(QStringList() << "基于 qemu-x86_64 的 " << "qemu-x86_64 ");
|
||
}
|
||
if(QFile::exists("/opt/exagear/bin/ubt_x64a64_al") && QFile::exists(homePath + "/.deepinwine/debian-buster")){
|
||
nameValue.append(QStringList() << "基于 UOS exagear 的 " << "WINEPREDLL='" + programPath + "/dlls-arm' "\
|
||
"WINEDLLPATH=/opt/deepin-wine6-stable/lib /opt/exagear/bin/ubt_x64a64_al --path-prefix " + get_home() + "/.deepinwine/debian-buster "\
|
||
"--utmp-paths-list " + homePath + "/.deepinwine/debian-buster/.exagear/utmp-list --vpaths-list " + homePath + "/.deepinwine/debian-buster/.exagear/vpaths-list "\
|
||
"--opaths-list " + homePath + "/.deepinwine/debian-buster/.exagear/opaths-list --smo-mode fbase --smo-severity smart --fd-limit 8192 --foreign-ubt-binary /opt/exagear/bin/ubt_x32a64_al -- ");
|
||
}
|
||
if(!system("which exagear")){
|
||
nameValue.append(QStringList() << "运行 exagear 容器内的 " << "exagear -- ");
|
||
}
|
||
if(QFile::exists("/opt/exagear/bin/ubt_x64a64_al")){
|
||
nameValue.append(QStringList() << "使用 ubt_x64a64_al 运行" << "/opt/exagear/bin/ubt_x64a64_al -- ");
|
||
}
|
||
if(QFile::exists("/opt/exagear/bin/ubt_x32a64_al")){
|
||
nameValue.append(QStringList() << "使用 ubt_x32a64_al 运行" << "/opt/exagear/bin/ubt_x32a64_al -- ");
|
||
}
|
||
for(QString g: qemuBottleList){
|
||
nameValue.append(QStringList() << "使用qemu-" + g[0] + "-static 调用容器" + g[1] + "运行 " << "python3 '" + programPath + "/QemuRun.py' '" + g[0] + "/" + g[1] + "' " + setting.value("QemuUnMountHome").toInt());
|
||
}
|
||
}
|
||
catch(QString msg){
|
||
qDebug() << msg;
|
||
}
|
||
}
|
||
}
|
||
}
|