diff --git a/VM-source/buildvbox.cpp b/VM-source/buildvbox.cpp index fc9a404..2f3f04b 100644 --- a/VM-source/buildvbox.cpp +++ b/VM-source/buildvbox.cpp @@ -2,6 +2,7 @@ * gfdgd xi、为什么您不喜欢熊出没和阿布呢 * 依照 GPLV3 开源 */ +#include #include "buildvbox.h" #include "vbox.h" #include @@ -47,13 +48,15 @@ int buildvbox::Download(QString url, QString path, QString fileName){ return system(("aria2c -x 16 -s 16 -c " + url + " -d " + path + " -o " + fileName).toUtf8()); } -buildvbox::buildvbox(QString isoPath, int id){ - /*QDir vboxPath(QDir::homePath() + "/VirtualBox VMs/Windows"); - if(vboxPath.exists()){ - qDebug("虚拟机存在,直接启动!"); - vbox vm("Windows"); - vm.Start(); - return; +buildvbox::buildvbox(QString isoPath, int id, int vm){ + /*if(vm == 1){ + QDir vboxPath(QDir::homePath() + "/VirtualBox VMs/Windows"); + if(vboxPath.exists()){ + qDebug("虚拟机存在,直接启动!"); + vbox vm("Windows"); + vm.Start(); + return; + } }*/ QString programPath = QCoreApplication::applicationDirPath(); @@ -67,65 +70,126 @@ buildvbox::buildvbox(QString isoPath, int id){ QString net = GetNet(); qDebug() << "使用网卡:" << net << endl; - //vbox *box = new vbox("Window"); - //vbox vm("Windows"); - qemu vm("Windows"); + if(vm == 0){ + //vbox *box = new vbox("Window"); + //vbox vm("Windows"); + qemu vm("Windows"); - switch (id) { - case 0: - vm.Create("Windows7"); - break; - case 1: - vm.Create("Windows7_64"); - break; - vm.Create("WindowsNT_64"); - } - vm.CreateDiskControl(); - //vm.CreateDiskControl("storage_controller_2"); - vm.CreateDisk(QDir::homePath() + "/Qemu/Windows/Windows.qcow2", 131072); - vm.MountDisk(QDir::homePath() + "/Qemu/Windows/Windows.qcow2"); - vm.MountISO(isoPath, "storage_controller_1", 0, 1); - switch (id) { - case 0: - vm.MountISO(programPath + "/Windows7X86Auto.iso", "storage_controller_1", 1, 2); - break; - case 1: - vm.MountISO(programPath + "/Windows7X64Auto.iso", "storage_controller_1", 1, 2); - break; - } - /*vm.MountISO(isoPath, "storage_controller_1", 0, 1); - switch (id) { - case 0: - vm.MountISO(programPath + "/Windows7X86Auto.iso", "storage_controller_1", 1, 0); - break; - case 1: - vm.MountISO(programPath + "/Windows7X64Auto.iso", "storage_controller_1", 1, 0); - break; - }*/ - // 判断 VirtualBox Guest ISO 是否存在 - // 在的话直接挂载 - /*if(QFile::exists("/usr/share/virtualbox/VBoxGuestAdditions.iso")){ - vm.MountISO("/usr/share/virtualbox/VBoxGuestAdditions.iso", "storage_controller_1", 1, 1); - }*/ + switch (id) { + case 0: + vm.Create("Windows7"); + break; + case 1: + vm.Create("Windows7_64"); + break; + vm.Create("WindowsNT_64"); + } + vm.CreateDiskControl(); + //vm.CreateDiskControl("storage_controller_2"); + vm.CreateDisk(QDir::homePath() + "/Qemu/Windows/Windows.qcow2", 131072); + vm.MountDisk(QDir::homePath() + "/Qemu/Windows/Windows.qcow2"); + vm.MountISO(isoPath, "storage_controller_1", 0, 1); + switch (id) { + case 0: + vm.MountISO(programPath + "/Windows7X86Auto.iso", "storage_controller_1", 1, 2); + break; + case 1: + vm.MountISO(programPath + "/Windows7X64Auto.iso", "storage_controller_1", 1, 2); + break; + } + /*vm.MountISO(isoPath, "storage_controller_1", 0, 1); + switch (id) { + case 0: + vm.MountISO(programPath + "/Windows7X86Auto.iso", "storage_controller_1", 1, 0); + break; + case 1: + vm.MountISO(programPath + "/Windows7X64Auto.iso", "storage_controller_1", 1, 0); + break; + }*/ + // 判断 VirtualBox Guest ISO 是否存在 + // 在的话直接挂载 + /*if(QFile::exists("/usr/share/virtualbox/VBoxGuestAdditions.iso")){ + vm.MountISO("/usr/share/virtualbox/VBoxGuestAdditions.iso", "storage_controller_1", 1, 1); + }*/ + + vm.SetCPU(get_nprocs()); + long memory = 0; + long memoryAll = 0; + long swap = 0; + long swapAll = 0; + infoUtils::memoryRate(memory, memoryAll, swap, swapAll); + //memoryRate(memory, memoryAll, swap, swapAll); + vm.SetMemory(memoryAll / 3 / 1024); + vm.SetDisplayMemory(32); + vm.SetNetBridge(net); + vm.EnabledAudio(); + vm.EnabledClipboardMode(); + vm.EnabledDraganddrop(); + vm.SetVBoxSVGA(); + vm.SetMousePS2(); + vm.SetKeyboardPS2(); + vm.OpenUSB(); + vm.ShareFile("ROOT", "/"); + vm.ShareFile("HOME", QDir::homePath()); + vm.Start(); + } + else if(vm == 1){ + // ? + //vbox *box = new vbox("Window"); + vbox vm("Windows"); + //qemu vm("Windows"); + + switch (id) { + case 0: + vm.Create("Windows7"); + break; + case 1: + vm.Create("Windows7_64"); + break; + vm.Create("WindowsNT_64"); + } + QDir dir("/home/gfdgd_xi/Qemu/Windows/"); + dir.mkpath("/home/gfdgd_xi/Qemu/Windows/"); + vm.CreateDiskControl(); + //vm.CreateDiskControl("storage_controller_2"); + vm.CreateDisk(QDir::homePath() + "/VirtualBox VMs/Windows/Windows.vdi", 131072); + vm.MountDisk(QDir::homePath() + "/VirtualBox VMs/Windows/Windows.vdi"); + vm.MountISO(isoPath, "storage_controller_1", 0, 1); + switch (id) { + case 0: + vm.MountISO(programPath + "/Windows7X86Auto.iso", "storage_controller_1", 1, 0); + break; + case 1: + vm.MountISO(programPath + "/Windows7X64Auto.iso", "storage_controller_1", 1, 0); + break; + } + + // 判断 VirtualBox Guest ISO 是否存在 + // 在的话直接挂载 + if(QFile::exists("/usr/share/virtualbox/VBoxGuestAdditions.iso")){ + vm.MountISO("/usr/share/virtualbox/VBoxGuestAdditions.iso", "storage_controller_1", 1, 1); + } + + vm.SetCPU(get_nprocs_conf()); + long memory = 0; + long memoryAll = 0; + long swap = 0; + long swapAll = 0; + infoUtils::memoryRate(memory, memoryAll, swap, swapAll); + //memoryRate(memory, memoryAll, swap, swapAll); + vm.SetMemory(memoryAll / 3 / 1024); + vm.SetDisplayMemory(32); + vm.SetNetBridge(net); + vm.EnabledAudio(); + vm.EnabledClipboardMode(); + vm.EnabledDraganddrop(); + vm.SetVBoxSVGA(); + vm.SetMousePS2(); + vm.SetKeyboardPS2(); + vm.OpenUSB(); + vm.ShareFile("ROOT", "/"); + vm.ShareFile("HOME", QDir::homePath()); + vm.Start(); + } - vm.SetCPU(1); - long memory = 0; - long memoryAll = 0; - long swap = 0; - long swapAll = 0; - infoUtils::memoryRate(memory, memoryAll, swap, swapAll); - //memoryRate(memory, memoryAll, swap, swapAll); - vm.SetMemory(memoryAll / 3 / 1024); - vm.SetDisplayMemory(32); - vm.SetNetBridge(net); - vm.EnabledAudio(); - vm.EnabledClipboardMode(); - vm.EnabledDraganddrop(); - vm.SetVBoxSVGA(); - vm.SetMousePS2(); - vm.SetKeyboardPS2(); - vm.OpenUSB(); - vm.ShareFile("ROOT", "/"); - vm.ShareFile("HOME", QDir::homePath()); - vm.Start(); } diff --git a/VM-source/buildvbox.h b/VM-source/buildvbox.h index 7762d09..c2f8139 100644 --- a/VM-source/buildvbox.h +++ b/VM-source/buildvbox.h @@ -10,7 +10,7 @@ class buildvbox { // Q_OBJECT public: - buildvbox(QString isoPath, int id=0); + buildvbox(QString isoPath, int id=0, int vm=0); void CleanScreen(); QString GetNet(); int Download(QString url, QString path, QString fileName); diff --git a/VM-source/mainwindow.cpp b/VM-source/mainwindow.cpp index c4b3cd2..75ab079 100755 --- a/VM-source/mainwindow.cpp +++ b/VM-source/mainwindow.cpp @@ -19,6 +19,7 @@ #include #include #include +#include MainWindow::MainWindow(QWidget *parent) : QMainWindow(parent), @@ -26,6 +27,13 @@ MainWindow::MainWindow(QWidget *parent) : { ui->setupUi(this); ui->tabWidget->setTabPosition(QTabWidget::West); // 标签靠左 + // 选择最优虚拟机 + if(!system("which qemu-x86_64")){ + ui->vmChooser->setCurrentIndex(0); + } + if(!system("which vboxmanage")){ + ui->vmChooser->setCurrentIndex(1); + } // 允许输出 qDebug 信息 QLoggingCategory::defaultCategory()->setEnabled(QtDebugMsg, true); // 判断是否安装 vbox(无需判断) @@ -79,6 +87,7 @@ MainWindow::MainWindow(QWidget *parent) : connect(ui->textBrowser_3, &QTextBrowser::anchorClicked, this, [=](const QUrl &link){ QDesktopServices::openUrl(link); }); + } void MainWindow::ShowCPUMessage(){ @@ -145,6 +154,22 @@ void MainWindow::on_browser_clicked() void MainWindow::on_install_clicked() { - buildvbox(ui->isoPath->text(), ui->systemVersion->currentIndex()); + switch (ui->vmChooser->currentIndex()) { + case 0: + if(system("which qemu-x86_64")){ + if(QMessageBox::question(this, "提示", "您似乎没有安装 Qemu,是否继续创建虚拟机?") == QMessageBox::No){ + return; + } + } + break; + case 1: + if(system("which vboxmanage")){ + if(QMessageBox::question(this, "提示", "您似乎没有安装 VBox,是否继续创建虚拟机?") == QMessageBox::No){ + return; + } + } + break; + } + buildvbox(ui->isoPath->text(), ui->systemVersion->currentIndex(), ui->vmChooser->currentIndex()); return; } diff --git a/VM-source/mainwindow.ui b/VM-source/mainwindow.ui index ab39926..51f79fe 100755 --- a/VM-source/mainwindow.ui +++ b/VM-source/mainwindow.ui @@ -25,7 +25,7 @@ QTabWidget::Rounded - 2 + 0 @@ -96,6 +96,40 @@ + + + + + + 虚拟机(建议默认): + + + + + + + qemu/kvm + + + 0 + + + false + + + + qemu/kvm + + + + + VirtualBox + + + + + + @@ -158,9 +192,10 @@ p, li { white-space: pre-wrap; } p, li { white-space: pre-wrap; } </style></head><body style=" font-family:'Noto Sans CJK SC'; font-size:10.5pt; font-weight:400; font-style:normal;"> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-size:26pt; font-weight:600;">给小白的一段话</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">其实本质上跑完安装程序就没有然后了,顶多如果想要运行舒服一点点,可以安装加强功能,直接拉到最底下看就可以了</p> +<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">其实本质上跑完安装程序就没有然后了,顶多如果想要运行舒服一点点,可以安装加强功能,直接拉到最底下看就可以了,<span style=" font-weight:600; font-style:italic; text-decoration: underline;">只限使用 VirtualBox</span></p> +<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-weight:600; font-style:italic; text-decoration: underline;">如果你是用非 X86 PC,那暂时只能使用 qemu(没 kvm),且跨架构的性能损失很大,推荐使用 Windows XP 而非 Windows 7</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">如果爱折腾的话,下面的都看看也无所谓的,想看往下翻就可以了</p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">(如果鼠标被锁定到里面了按下键盘右边的“Ctrl”键就可以了)</p> +<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">(如果鼠标被锁定到里面了按下键盘右边的“Ctrl”键就可以了,<span style=" font-weight:600; font-style:italic; text-decoration: underline;">qemu则是 Ctrl+Alt+G</span> )</p> <hr /> <p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><br /></p> <p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:26pt; font-weight:600;"><br /></p> diff --git a/mainwindow.py b/mainwindow.py index f9a3f95..2063144 100755 --- a/mainwindow.py +++ b/mainwindow.py @@ -381,14 +381,14 @@ def OpenUrl(url): print(url.url()) # 判断是否可以使用小窗打开 if not bad: - Temp.webWindow = QtWidgets.QMainWindow() + '''Temp.webWindow = QtWidgets.QMainWindow() web = QtWebEngineWidgets.QWebEngineView() web.setUrl(url) Temp.webWindow.setWindowTitle("浏览页面") Temp.webWindow.setCentralWidget(web) Temp.webWindow.setWindowIcon(QtGui.QIcon(iconPath)) Temp.webWindow.show() - return + return''' webbrowser.open_new_tab(url.url()) #QtCore.QUrl().url() @@ -1123,6 +1123,8 @@ class UpdateWindow(): updateWidgetLayout = QtWidgets.QGridLayout() versionLabel = QtWidgets.QLabel(f"当前版本:{version}\n最新版本:未知\n更新内容:") updateText = QtWidgets.QTextBrowser() + updateText.anchorClicked.connect(OpenUrl) + updateText.setOpenExternalLinks(False) ok = QtWidgets.QPushButton(transla.transe("U", "更新(更新时会自动关闭 Wine 运行器)")) ok.clicked.connect(UpdateWindow.Update) cancel = QtWidgets.QPushButton("取消") @@ -1147,7 +1149,7 @@ class UpdateWindow():

1、使用编译或者内测版本

2、自己修改了程序版本

3、作者忘记更新云端上的更新信息了

-

如果是第三种情况,请反馈到此:https://gitee.com/gfdgd-xi/deep-wine-runner/issues/I6T3FG

+

如果是第三种情况,请反馈到此:https://gitee.com/gfdgd-xi/deep-wine-runner/issues/I6T3FG

""") ok.setDisabled(True) break @@ -2942,7 +2944,7 @@ def AddLib(install: QtWidgets.QAction, uninstall, menu, info): menu.addAction(uninstall) if os.path.exists(f"{programPath}/InstallRuntime"): - installLib = menu.addMenu(transla.transe("U", "运行库")) + installLib = menu.addMenu(transla.transe("U", "运行库(&R)")) installQemuMenu = installLib.addMenu(transla.transe("U", "安装 Qemu User")) installQemu = QtWidgets.QAction("安装 Qemu User") removeQemu = QtWidgets.QAction("卸载 Qemu User")