Compare commits

...

37 Commits
3.5.0 ... 3.6.1

Author SHA1 Message Date
269c800341 3.6.1 2023-12-25 22:18:19 +08:00
1390ca65aa Repairing some machine can't open the runner problem 2023-12-25 22:13:03 +08:00
194f086b58 修改错别字 2023-12-24 11:59:27 +08:00
e12ca11b08 3.6.0 2023-12-24 10:03:34 +08:00
506c33085f Add youtube link 2023-12-24 09:52:01 +08:00
f7a683ebf0 调整构建脚本 2023-12-24 09:14:11 +08:00
6d6aa30557 调整构建脚本 2023-12-24 09:07:44 +08:00
c0aaf54ea4 调整构建脚本 2023-12-24 08:44:30 +08:00
4a47d95cd6 新增频道链接 2023-12-23 22:51:41 +08:00
6be5b433ca Repairing off line runner can't read /opt wine problem 2023-12-23 21:25:14 +08:00
08e7d2997d Repairing off line runner can't read /opt wine problem 2023-12-23 21:14:06 +08:00
a991d7de04 Repairing off line runner can't read /opt wine problem 2023-12-23 20:38:21 +08:00
d0dc90b95d Update github action 2023-12-23 16:42:33 +08:00
10b2d8c72b Update github action 2023-12-23 16:41:05 +08:00
5d819b3c8e Add makefile 2023-12-23 16:32:08 +08:00
c7166d9330 Change runner version 2023-12-23 16:17:23 +08:00
053f32e5f2 Change log reporter template 2023-12-23 16:11:22 +08:00
07db3bf724 Have finished log report maker 2023-12-23 12:24:20 +08:00
949fd1a07f Develop log report saver preliminary 2023-12-22 21:55:38 +08:00
1f5cc8f6c6 Support to run okylin wine 2023-12-21 22:18:34 +08:00
4fc20d94aa Add asking for star text 2023-12-21 22:12:30 +08:00
eb049f8560 Remove out of date wine installer 2023-12-21 22:07:27 +08:00
0173dae3e2 Support to run or pack deepin wine8 stable applications 2023-12-21 20:56:22 +08:00
e60b7fbbd0 调整关于窗口图标 2023-12-11 20:27:52 +08:00
bdcae751c7 add a file 2023-12-11 20:02:36 +08:00
c7eb70780e repair advanced builder problem about spark dwine helper config shell https://gitee.com/gfdgd-xi/deep-wine-runner/issues/I8I110 2023-12-11 12:11:23 +08:00
b30be9ff48 able to identify wine in /opt 2023-12-03 11:12:40 +08:00
6ee9e2a85f Update tools can update program without dpkg 2023-12-03 10:33:04 +08:00
02c882c33c Forget to code off-line-shell/GetNewestDebUrl.py 2023-12-03 10:10:11 +08:00
e811970e08 Wine runner off-line packager for github action 2023-12-03 10:01:56 +08:00
7436ae72a5 Change README 2023-12-02 14:55:27 +08:00
f1498a376b Add some mainwindow translate 2023-11-26 14:34:08 +08:00
516a854f84 lead qt translator into mainwindow.py (preliminary) 2023-11-26 09:11:26 +08:00
d019d0d223 国外IP判断以实现自动选择合适源 2023-11-26 08:58:42 +08:00
be57235f02 新增sourceforge源 2023-11-25 20:26:25 +08:00
fd9d08b328 初步多语言支持 2023-11-25 16:38:14 +08:00
a8c5acfae2 初步多语言支持 2023-11-25 16:03:47 +08:00
38 changed files with 3401 additions and 934 deletions

View File

@@ -0,0 +1,78 @@
name: Building Wine Runner Off-line Pages(amd64)
run-name: ${{ github.actor }} Building Wine Runner Off-line Pages(amd64) 🚀
on:
workflow_dispatch:
jobs:
Explore-GitHub-Actions:
runs-on: ubuntu-latest
steps:
- name: Building DEB
env:
GUSER: ${{ secrets.GUSER }}
PASSWORD: ${{ secrets.PASSWORD }}
UPLOADURL: ${{ secrets.UPLOADURL }}
run: |
# 获取所需数据
cpu=$(cat /proc/cpuinfo | grep processor | wc -l)
# 配置环境
sudo apt update
sudo apt install python3-requests debootstrap xz-utils -y
sudo apt install qtbase5-dev qtchooser qt5-qmake qtbase5-dev-tools psmisc -y
cd ~
mkdir package
# 部署 chroot 环境
sudo debootstrap bookworm debian
wget https://github.com/gfdgd-xi/deep-wine-runner/raw/main/pardus-chroot
sudo cp pardus-chroot /usr/bin
sudo chmod 777 /usr/bin/pardus-chroot
sudo pardus-chroot debian
### 配置容器
## 加入 wine 源
sudo chroot debian dpkg --add-architecture i386
sudo chroot debian apt update
sudo chroot debian apt install wget -y
sudo chroot debian wget -O /etc/apt/keyrings/winehq-archive.key https://dl.winehq.org/wine-builds/winehq.key
sudo chroot debian wget -NP /etc/apt/sources.list.d/ https://dl.winehq.org/wine-builds/debian/dists/bookworm/winehq-bookworm.sources
sudo chroot debian apt update
## 获取 Wine 运行器安装包
git clone https://github.com/gfdgd-xi/deep-wine-runner --depth=1
cd deep-wine-runner
make build
cd ..
url=`python3 deep-wine-runner/off-line-shell/GetNewestDebUrl.py`
#wget $url
mv deep-wine-runner/spark-deepin-wine-runner.deb debian/tmp/wine-runner.deb
## 安装
sudo chroot debian apt install locales /tmp/wine-runner.deb winehq-devel xfce4-terminal -y
# 构建软件包
mkdir package/opt -p
mkdir package/runner -p
sudo cp debian/opt/wine-devel package/opt -rv
sudo cp debian/usr/bin package -rv
sudo cp debian/usr/lib package -rv
sudo cp debian/usr/lib32 package -rv
sudo cp debian/usr/lib64 package -rv
sudo cp debian/opt/apps/deepin-wine-runner/* package/runner -rv
cp deep-wine-runner/off-line-shell/run.sh package -rv
cp deep-wine-runner/off-line-shell/bwrap_amd64 package/bwrap -rv
sudo chmod 777 -Rv package ; true
cd package
# 添加 Wine 运行器离线模式标识
touch runner/off-line.lock
tar -cvf ../spark-deepin-wine-runner-off-line.tar *
cd ..
xz -T $cpu spark-deepin-wine-runner-off-line.tar
cp deep-wine-runner/off-line-shell/compression-packager.sh spark-deepin-wine-runner-off-line.sh
cat spark-deepin-wine-runner-off-line.tar.xz >> spark-deepin-wine-runner-off-line.sh
- name: upload result
uses: actions/upload-artifact@v1
with:
name: spark-deepin-wine-runner-off-line.tar.xz
path: /home/runner/spark-deepin-wine-runner-off-line.tar.xz
- name: upload result
uses: actions/upload-artifact@v1
with:
name: spark-deepin-wine-runner-off-line.sh
path: /home/runner/spark-deepin-wine-runner-off-line.sh

1
.gitignore vendored Normal file
View File

@@ -0,0 +1 @@
*.user*

View File

@@ -81,6 +81,11 @@ if os.system("which deepin-wine6-stable > /dev/null"):
choose = input().upper()
if not choose == "N":
os.system("sudo apt install deepin-wine6-stable -y")
if os.system("which deepin-wine8-stable > /dev/null"):
print("请问是否要安装 deepin-wine8-stable[Y/N]", end=' ')
choose = input().upper()
if not choose == "N":
os.system("sudo apt install deepin-wine6-stable -y")
if os.system("which spark-wine7-devel > /dev/null"):
print("请问是否要安装 spark-wine7-devel需要安装最新版星火应用商店[Y/N]", end=' ')
choose = input().upper()

View File

@@ -1,8 +1,18 @@
#!/usr/bin/env python3
# 读取设置单独用一个 py 文件
import os
import sys
import json
import base64
import shutil
import getpass
import datetime
import traceback
import subprocess
import configparser
import PyQt5.QtGui as QtGui
import PyQt5.QtCore as QtCore
import PyQt5.QtWidgets as QtWidgets
# 获取用户主目录
def get_home():
@@ -18,7 +28,7 @@ def readtxt(path):
defultProgramList = {
"Architecture": "Auto",
"Debug": True,
"DefultWine": "deepin-wine6 stable",
"DefultWine": "deepin-wine8-stable",
"DefultBotton" : get_home() + "/.wine",
"TerminalOpen": False,
"WineOption": "",
@@ -36,6 +46,15 @@ defultProgramList = {
"FontSize": 1
}
programPath = os.path.split(os.path.realpath(__file__))[0] # 返回 string
iconPath = "{}/deepin-wine-runner.svg".format(programPath)
try:
information = json.loads(readtxt(f"{programPath}/information.json"))
setting = json.loads(readtxt(get_home() + "/.config/deepin-wine-runner/WineSetting.json"))
except:
traceback.print_exc()
setting = defultProgramList
def SetFont(app):
defaultFont = app.font()
size = setting["FontSize"]
@@ -47,7 +66,286 @@ def SetFont(app):
font.setPointSize(int(defaultFont.pointSize() / size))
app.setFont(font)
def getFileFolderSize(fileOrFolderPath):
"""get size for file or folder"""
totalSize = 0
try:
setting = json.loads(readtxt(get_home() + "/.config/deepin-wine-runner/WineSetting.json"))
if not os.path.exists(fileOrFolderPath):
return totalSize
if os.path.isfile(fileOrFolderPath):
totalSize = os.path.getsize(fileOrFolderPath) # 5041481
return totalSize
if os.path.islink(fileOrFolderPath):
return 0
if os.path.isdir(fileOrFolderPath):
with os.scandir(fileOrFolderPath) as dirEntryList:
for curSubEntry in dirEntryList:
curSubEntryFullPath = os.path.join(fileOrFolderPath, curSubEntry.name)
if curSubEntry.is_dir():
curSubFolderSize = getFileFolderSize(curSubEntryFullPath) # 5800007
totalSize += curSubFolderSize
elif curSubEntry.is_file():
curSubFileSize = os.path.getsize(curSubEntryFullPath) # 1891
totalSize += curSubFileSize
return totalSize
except:
setting = defultProgramList
return totalSize
def FileToBase64(filePath):
src = ""
with open(filePath, "rb") as f:
base64Byte = base64.b64encode(f.read())
src += base64Byte.decode("utf-8")
return src
def SaveLogWindow():
pass
class SaveLogReport():
userName = getpass.getuser()
time = datetime.datetime.now().strftime("%Y/%m/%d %H:%M:%S")
kernelVersion = subprocess.getoutput("uname -a")
wineRunnerVersion = information["Version"]
architecture = subprocess.getoutput("arch")
cpuInfo = subprocess.getoutput("lscpu")
lsmod = subprocess.getoutput("lsmod")
lshw = subprocess.getoutput("lshw")
cpu = subprocess.getoutput("cat /proc/cpuinfo | grep 'model name' | head -n 1 | awk -F: '{print $2}'")
gpu = subprocess.getoutput("lspci | grep -i 'VGA\|3D\|2D'")
def __init__(self, chooseWineName, chooseWineCommand, runCommand, binPath, logOut, description="", imgPath=[]) -> None:
self.chooseWineName = chooseWineName
self.chooseWineCommand = chooseWineCommand
self.runCommand = runCommand
self.binPath = binPath
self.logOut = logOut
self.description = description
self.imgPath = imgPath
# 读取可执行文件信息
if os.path.exists(binPath):
try:
self.binSize = f"{str(int(getFileFolderSize(binPath) / 1024 / 1024))}MB"
except:
self.binSize = "Error"
traceback.print_exc()
os.system(f"'{programPath}/wrestool' '{binPath}' -x -t 14 > '/tmp/wine-runner-log-icon.png'")
# 如果提取成功
if os.path.exists("/tmp/wine-runner-log-icon.png"):
# 转换成 base64 编码
self.binIcon = "data:image/jpg;base64," + FileToBase64("/tmp/wine-runner-log-icon.png")
self.binIconPath = "/tmp/wine-runner-log-icon.png"
else:
self.binIcon = "Not Found"
self.binIconPath = "Not Found"
else:
self.binSize = "Not Found"
self.binIcon = "Not Found"
self.binIconPath = "Not Found"
try:
self.memoryInfo = readtxt("/proc/meminfo")
except:
traceback.print_exc()
self.memoryInfo = traceback.format_exc()
# 读取系统信息
try:
with open("/etc/os-release", "r") as file:
text = "[Default]\n" + file.read()
conf = configparser.ConfigParser()
conf.read_string(text)
self.systemVersion = conf.get("Default", "PRETTY_NAME")
except:
traceback.print_exc()
self.systemVersion = subprocess.getoutput("lsb_release -a")
def SetWindow(self):
def AddImageToListClicked():
choose = QtWidgets.QFileDialog.getOpenFileNames(messagebox, "选择图像", get_home(), "图片文件(*.png *.jpg *.bmp *.gif *.svg);;所有文件(*.*)")
print(choose)
for i in choose[0]:
if i in imageList:
continue
imageList.append(i)
nmodel = QtGui.QStandardItemModel(messagebox)
for i in imageList:
item = QtGui.QStandardItem(i)
nmodel.appendRow(item)
imageListView.setModel(nmodel)
def DeleteImageToListClicked():
index = imageListView.currentIndex().row()
if index < 0:
QtWidgets.QMessageBox.information(messagebox, "提示", "您未选择任何项")
return
del imageList[index]
nmodel = QtGui.QStandardItemModel(messagebox)
for i in imageList:
item = QtGui.QStandardItem(i)
nmodel.appendRow(item)
imageListView.setModel(nmodel)
# 选择第一项
imageListView.setCurrentIndex(nmodel.index(0, 0))
def OkClicked():
self.description = description.toPlainText()
self.imgPath = imageList
path = QtWidgets.QFileDialog.getSaveFileName(messagebox, "保存日志报告", get_home(), "7z 文件(*.7z);;所有文件(*.*)")
print(path)
if path[0] != "":
try:
self.To7z(path[0])
except:
traceback.print_exc()
QtWidgets.QMessageBox.critical(messagebox, "错误", traceback.format_exc())
return
messagebox.close()
QtWidgets.QMessageBox.information(messagebox, "提示", "生成完成!\n建议将报告与可执行文件一并提交以便排除错误")
def CancelClicked():
messagebox.close()
# 权重
size = QtWidgets.QSizePolicy()
size.setHorizontalPolicy(0)
imageList = []
messagebox = QtWidgets.QDialog()
layout = QtWidgets.QGridLayout()
description = QtWidgets.QTextEdit()
imageListView = QtWidgets.QListView()
addImageToList = QtWidgets.QPushButton("+")
deleteImageToList = QtWidgets.QPushButton("-")
controlLayout = QtWidgets.QHBoxLayout()
ok = QtWidgets.QPushButton("保存")
cancel = QtWidgets.QPushButton("取消")
description.setPlaceholderText("可以填写故障的现象、复现步骤以及其他有关的信息,同时也可以填写联系方式")
addImageToList.clicked.connect(AddImageToListClicked)
deleteImageToList.clicked.connect(DeleteImageToListClicked)
ok.clicked.connect(OkClicked)
cancel.clicked.connect(CancelClicked)
addImageToList.setSizePolicy(size)
deleteImageToList.setSizePolicy(size)
ok.setSizePolicy(size)
cancel.setSizePolicy(size)
layout.addWidget(QtWidgets.QLabel("<h2>描述(建议填写)</h2>"), 0, 0)
layout.addWidget(description, 1, 0, 1, 3)
layout.addWidget(QtWidgets.QLabel("<hr>"), 2, 0, 1, 4)
layout.addWidget(QtWidgets.QLabel("<h2>截图(建议选择)</h2>"), 3, 0)
layout.addWidget(imageListView, 4, 0, 4, 3)
layout.addWidget(addImageToList, 5, 3)
layout.addWidget(deleteImageToList, 6, 3)
layout.addLayout(controlLayout, 8, 2, 1, 2)
controlLayout.addWidget(cancel)
controlLayout.addWidget(ok)
messagebox.setLayout(layout)
messagebox.exec_()
def To7z(self, savePath):
os.system("rm -rfv /tmp/wine-runner-log")
os.system("mkdir -v /tmp/wine-runner-log")
self.ToHtml("/tmp/wine-runner-log/index.html", toZip=True)
if os.path.exists(self.binIconPath):
shutil.copy(self.binIconPath, f"/tmp/wine-runner-log/{os.path.basename(self.binIconPath)}")
lists = ["wine-runner-log-icon.png", "index.html"]
for i in self.imgPath:
name = os.path.basename(i)
if os.path.basename(i) in lists:
while name in lists:
name = os.path.splitext(name)[0] + "-copy" + os.path.splitext(name)[1]
lists.append(name)
else:
lists.append(name)
shutil.copy(i, f"/tmp/wine-runner-log/{name}")
os.system(f"7z a '{savePath}' /tmp/wine-runner-log")
def ToHtml(self, savePath, toZip=False):
print(self.userName, self.time)
# 对文本进行处理
description = ""
logOut = ""
cpuInfo = ""
memoryInfo = ""
imgPath = ""
lsmod = ""
lshw = ""
charReplaceMap = {
"<": "&lt;",
">": "&gt;",
"&": "&amp;",
'"': "&quot;"
}
for i in self.description.splitlines():
for k in charReplaceMap:
i = i.replace(k, charReplaceMap[k])
description += f'<span class="line code">{i}</span>\n'
for i in self.logOut.splitlines():
for k in charReplaceMap:
i = i.replace(k, charReplaceMap[k])
logOut += f'<span class="line code">{i}</span>\n'
for i in self.cpuInfo.splitlines():
for k in charReplaceMap:
i = i.replace(k, charReplaceMap[k])
cpuInfo += f'<span class="line code">{i}</span>\n'
for i in self.memoryInfo.splitlines():
for k in charReplaceMap:
i = i.replace(k, charReplaceMap[k])
memoryInfo += f'<span class="line code">{i}</span>\n'
for i in self.lsmod.splitlines():
for k in charReplaceMap:
i = i.replace(k, charReplaceMap[k])
lsmod += f'<span class="line code">{i}</span>\n'
for i in self.lshw.splitlines():
for k in charReplaceMap:
i = i.replace(k, charReplaceMap[k])
lshw += f'<span class="line code">{i}</span>\n'
text = readtxt(f"{programPath}/Resources/LogTemplate/template.html")
if toZip:
binIcon = os.path.basename(self.binIconPath)
# 重名排除
lists = ["wine-runner-log-icon.png", "index.html"]
for i in self.imgPath:
name = os.path.basename(i)
if os.path.basename(i) in lists:
while name in lists:
name = os.path.splitext(name)[0] + "-copy" + os.path.splitext(name)[1]
lists.append(name)
else:
lists.append(name)
imgPath += f'<p align="center"><img src="{name}" class="imgShow"></p>\n'
else:
binIcon = self.binIcon
for i in self.imgPath:
try:
path = "data:image/jpg;base64," + FileToBase64(i)
except:
traceback.print_exc()
path = "Error"
imgPath += f' <p align="center"><img src="{path}" class="imgShow"></p>\n'
replaceMap = {
"%UserName%": self.userName,
"%Time%": self.time,
"%KernelVersion": self.kernelVersion,
"%ChooseWineName%": self.chooseWineName,
"%ChooseWineCommand%": self.chooseWineCommand,
"%RunCommand%": self.runCommand,
"%BinPath%": self.binPath,
"%WineRunnerVersion%": self.wineRunnerVersion,
"%BinSize%": self.binSize,
"%BinIcon%": binIcon,
"%CPUInfo%": cpuInfo,
"%Architecture%": self.architecture,
"%MemoryInfo%": memoryInfo,
"%LogOut%": logOut,
"%Description%": description,
"%ImgPath%": imgPath,
"%Lsmod%": lsmod,
"%Lshw%": lshw,
"%CPU%": self.cpu,
"%GPU%": self.gpu,
"%SystemVersion%": self.systemVersion
}
for i in replaceMap.keys():
text = text.replace(i, replaceMap[i])
with open(savePath, "w") as file:
file.write(text)

View File

Before

Width:  |  Height:  |  Size: 68 KiB

After

Width:  |  Height:  |  Size: 68 KiB

BIN
Icon/Program/AboutIcon1.png Executable file

Binary file not shown.

After

Width:  |  Height:  |  Size: 126 KiB

View File

@@ -69,7 +69,8 @@ m m "
for i in [
["原版 WineWine64", "wine"],
["deepin-wine5-stable", "deepin-wine5-stable"],
["deepin-wine6-stable", "deepin-wine6-stable"]
["deepin-wine6-stable", "deepin-wine6-stable"],
["deepin-wine8-stable", "deepin-wine8-stable"]
]:
if not os.system(f"which {i[1]} > /dev/null"):
continue

5
LANG/Makefile Normal file
View File

@@ -0,0 +1,5 @@
build:
lrelease deepin-wine-packager-en_US.ts -qm deepin-wine-packager-en_US.qm
lrelease deepin-wine-runner-en_US.ts -qm deepin-wine-runner-en_US.qm
lrelease installwine-en_US.ts -qm installwine-en_US.qm
lrelease virtualmachine-en_US.ts -qm virtualmachine-en_US.qm

Binary file not shown.

File diff suppressed because it is too large Load Diff

Binary file not shown.

View File

@@ -3,6 +3,7 @@ build:
clean:
python3 RemovePycacheFile.py
rm *.deb -fv
cd VM-source ; make clean
rm VM-source/VirtualMachine -rfv
rm -rfv VM-source/.qmake.stash
@@ -62,6 +63,7 @@ package:
cp -rv RegShot deb/opt/apps/deepin-wine-runner
cp -rv BeCyIconGrabber.exe deb/opt/apps/deepin-wine-runner
cp -rv AutoShell deb/opt/apps/deepin-wine-runner
cp -rv Resources deb/opt/apps/deepin-wine-runner
cp -rv deepin-wine-packager-with-script.py deb/opt/apps/deepin-wine-runner
cp -rv deepin-wine-packager.py deb/opt/apps/deepin-wine-runner
cp -rv deepin-wine-runner-update-bug deb/opt/apps/deepin-wine-runner

View File

@@ -1,5 +1,5 @@
<p width=100px align="center"><img src="https://storage.deepin.org/thread/202208031419283599_deepin-wine-runner.png"></p>
<h1 align="center">Wine 运行器 3.5.0</h1>
<h1 align="center">Wine 运行器 3.6.1</h1>
<hr>
<a href='https://gitee.com/gfdgd-xi/deep-wine-runner/stargazers'><img src='https://gitee.com/gfdgd-xi/deep-wine-runner/badge/star.svg?theme=dark' alt='star'></img></a>
<a href='https://gitee.com/gfdgd-xi/deep-wine-runner/members'><img src='https://gitee.com/gfdgd-xi/deep-wine-runner/badge/fork.svg?theme=dark' alt='fork'></img></a>
@@ -18,13 +18,15 @@ Wine运行器是一个能让Linux用户更加方便地运行Windows应用的程
打包器视频教程https://www.bilibili.com/video/BV1Bh4y1Q7nT/
Wine 运行器 QQ 交流群762985460
Wine运行器 QQ 频道https://pd.qq.com/s/edqkgeydx
Wine 运行器离线包下载地址https://www.123pan.com/s/pDSKVv-pAJWv.html
### 注
spark-deepin-wine-runner 是普通包spark-deepin-wine-runner-ace 是使用 ace 兼容环境运行的运行器
## 软件架构
理论上支持全架构,如果 Python 能运行的话
非 X86 架构会利用到 `box86``exagear``qemu` 等技术
非 X86 架构会利用到 `box86`/`box64``exagear``qemu` 等技术
## Wine 运行器自动构建Newest
此只供尝鲜不保证能用https://github.com/gfdgd-xi/deep-wine-runner/actions/workflows/auto-building.yml
@@ -118,6 +120,25 @@ desktop文件中StartupWMClass字段。用于让桌面组件将窗口类名与de
![image.png](https://storage.deepin.org/thread/202207190822204627_image.png)
## 更新日志
### 3.6.12023年12月25日
**※1、修复应用无法打开的问题**
### 3.6.02023年12月24日
**※1、修复高级打包器选择软件适配脚本后无法打包的问题 https://gitee.com/gfdgd-xi/deep-wine-runner/issues/I8I110**
**※2、支持调用 Deepin Wine8 Stable**
**※3、移除过时的 Wine 安装程序入口**
**※4、Wine 安装器支持根据地区自动选择国内源以及国际源**
**※5、Wine 安装器新增 Sourceforge 源**
**※6、新增 Wine 运行报告生成功能**
**※7、初步英语翻译**
**※8、新增离线安装包只支持 amd64**
**※9、支持识别 /opt 文件夹下的 Wine**
10、新增 Wine 运行器视频教程的 Youtube 入口
![图片.png](https://storage.deepin.org/thread/202312241003211288_图片.png)
### 3.5.02023年11月17日
**※1、虚拟机工具支持 kvm 检测**
**※2、修改虚拟机工具提示文本新增对 UOS 3a4000 用户无法正常使用 Qemu 的解决方案**

File diff suppressed because one or more lines are too long

After

Width:  |  Height:  |  Size: 14 KiB

File diff suppressed because one or more lines are too long

1
VM-source/.gitignore vendored Normal file
View File

@@ -0,0 +1 @@
*.user*

View File

@@ -59,7 +59,8 @@ SOURCES = main.cpp \
command.cpp \
infoutils.cpp \
qemu.cpp \
qemusetting.cpp qrc_图标.cpp \
qemusetting.cpp qrc_trans.cpp \
qrc_图标.cpp \
moc_mainwindow.cpp \
moc_infoutils.cpp \
moc_qemusetting.cpp
@@ -71,11 +72,14 @@ OBJECTS = main.o \
infoutils.o \
qemu.o \
qemusetting.o \
qrc_trans.o \
qrc_图标.o \
moc_mainwindow.o \
moc_infoutils.o \
moc_qemusetting.o
DIST = /usr/lib/x86_64-linux-gnu/qt5/mkspecs/features/spec_pre.prf \
DIST = en_US.qm \
en_US.ts \
/usr/lib/x86_64-linux-gnu/qt5/mkspecs/features/spec_pre.prf \
/usr/lib/x86_64-linux-gnu/qt5/mkspecs/common/unix.conf \
/usr/lib/x86_64-linux-gnu/qt5/mkspecs/common/linux.conf \
/usr/lib/x86_64-linux-gnu/qt5/mkspecs/common/sanitize.conf \
@@ -363,6 +367,7 @@ Makefile: VirtualMachine.pro /usr/lib/x86_64-linux-gnu/qt5/mkspecs/linux-g++/qma
/usr/lib/x86_64-linux-gnu/qt5/mkspecs/features/yacc.prf \
/usr/lib/x86_64-linux-gnu/qt5/mkspecs/features/lex.prf \
VirtualMachine.pro \
trans.qrc \
图标.qrc
$(QMAKE) -o Makefile VirtualMachine.pro
/usr/lib/x86_64-linux-gnu/qt5/mkspecs/features/spec_pre.prf:
@@ -497,6 +502,7 @@ Makefile: VirtualMachine.pro /usr/lib/x86_64-linux-gnu/qt5/mkspecs/linux-g++/qma
/usr/lib/x86_64-linux-gnu/qt5/mkspecs/features/yacc.prf:
/usr/lib/x86_64-linux-gnu/qt5/mkspecs/features/lex.prf:
VirtualMachine.pro:
trans.qrc:
图标.qrc:
qmake: FORCE
@$(QMAKE) -o Makefile VirtualMachine.pro
@@ -512,7 +518,7 @@ dist: distdir FORCE
distdir: FORCE
@test -d $(DISTDIR) || mkdir -p $(DISTDIR)
$(COPY_FILE) --parents $(DIST) $(DISTDIR)/
$(COPY_FILE) --parents 图标.qrc $(DISTDIR)/
$(COPY_FILE) --parents trans.qrc 图标.qrc $(DISTDIR)/
$(COPY_FILE) --parents /usr/lib/x86_64-linux-gnu/qt5/mkspecs/features/data/dummy.cpp $(DISTDIR)/
$(COPY_FILE) --parents mainwindow.h buildvbox.h vbox.h command.h infoutils.h qemu.h qemusetting.h $(DISTDIR)/
$(COPY_FILE) --parents main.cpp mainwindow.cpp buildvbox.cpp vbox.cpp command.cpp infoutils.cpp qemu.cpp qemusetting.cpp $(DISTDIR)/
@@ -541,9 +547,17 @@ check: first
benchmark: first
compiler_rcc_make_all: qrc_图标.cpp
compiler_rcc_make_all: qrc_trans.cpp qrc_图标.cpp
compiler_rcc_clean:
-$(DEL_FILE) qrc_图标.cpp
-$(DEL_FILE) qrc_trans.cpp qrc_图标.cpp
qrc_trans.cpp: trans.qrc \
/usr/lib/qt5/bin/rcc \
en_US.ts \
en_US.qm \
zh_CN.ts \
zh_CN.qm
/usr/lib/qt5/bin/rcc -name trans trans.qrc -o qrc_trans.cpp
qrc_图标.cpp: 图标.qrc \
/usr/lib/qt5/bin/rcc \
deepin-wine-runner.png \
@@ -623,7 +637,9 @@ mainwindow.o: mainwindow.cpp mainwindow.h \
ui_mainwindow.h \
buildvbox.h \
infoutils.h \
qemusetting.h
qemusetting.h \
vbox.h \
qemu.h
$(CXX) -c $(CXXFLAGS) $(INCPATH) -o mainwindow.o mainwindow.cpp
buildvbox.o: buildvbox.cpp buildvbox.h \
@@ -651,6 +667,9 @@ qemusetting.o: qemusetting.cpp qemusetting.h \
infoutils.h
$(CXX) -c $(CXXFLAGS) $(INCPATH) -o qemusetting.o qemusetting.cpp
qrc_trans.o: qrc_trans.cpp
$(CXX) -c $(CXXFLAGS) $(INCPATH) -o qrc_trans.o qrc_trans.cpp
qrc_图标.o: qrc_图标.cpp
$(CXX) -c $(CXXFLAGS) $(INCPATH) -o qrc_图标.o qrc_图标.cpp

View File

@@ -56,4 +56,9 @@ else: unix:!android: target.path = /opt/$${TARGET}/bin
!isEmpty(target.path): INSTALLS += target
RESOURCES += \
trans.qrc \
图标.qrc
DISTFILES += \
en_US.qm \
en_US.ts

View File

@@ -1,10 +1,10 @@
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE QtCreatorProject>
<!-- Written by QtCreator 6.0.2, 2023-11-11T19:43:38. -->
<!-- Written by QtCreator 7.0.1, 2023-11-25T17:10:08. -->
<qtcreator>
<data>
<variable>EnvironmentId</variable>
<value type="QByteArray">{a0cf9984-2e67-4681-b510-f5b353d70d1b}</value>
<value type="QByteArray">{4ffd6df9-1365-4837-81b1-582e0e2d1f21}</value>
</data>
<data>
<variable>ProjectExplorer.Project.ActiveTarget</variable>
@@ -77,7 +77,7 @@
<value type="bool" key="ClangTools.AnalyzeOpenFiles">true</value>
<value type="bool" key="ClangTools.BuildBeforeAnalysis">true</value>
<value type="QString" key="ClangTools.DiagnosticConfig">Builtin.DefaultTidyAndClazy</value>
<value type="int" key="ClangTools.ParallelJobs">4</value>
<value type="int" key="ClangTools.ParallelJobs">2</value>
<valuelist type="QVariantList" key="ClangTools.SelectedDirs"/>
<valuelist type="QVariantList" key="ClangTools.SelectedFiles"/>
<valuelist type="QVariantList" key="ClangTools.SuppressedDiagnostics"/>
@@ -89,15 +89,180 @@
<variable>ProjectExplorer.Project.Target.0</variable>
<valuemap type="QVariantMap">
<value type="QString" key="DeviceType">Desktop</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">Qt 5.15.3 in PATH (qt5)</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName">Qt 5.15.3 in PATH (qt5)</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">{37ac6aef-5dcd-46dc-8ca6-00e6a5a4377d}</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">桌面</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName">桌面</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">{b17c65ba-6912-41bf-b5c1-4c7446f6c967}</value>
<value type="int" key="ProjectExplorer.Target.ActiveBuildConfiguration">0</value>
<value type="int" key="ProjectExplorer.Target.ActiveDeployConfiguration">0</value>
<value type="int" key="ProjectExplorer.Target.ActiveRunConfiguration">0</value>
<valuemap type="QVariantMap" key="ProjectExplorer.Target.BuildConfiguration.0">
<value type="QString" key="ProjectExplorer.BuildConfiguration.BuildDirectory">/home/orangepi/Desktop/deep-wine-runner/../VM-source</value>
<value type="QString" key="ProjectExplorer.BuildConfiguration.BuildDirectory.shadowDir">/home/orangepi/Desktop/deep-wine-runner/../VM-source</value>
<value type="int" key="EnableQmlDebugging">0</value>
<value type="QString" key="ProjectExplorer.BuildConfiguration.BuildDirectory">/home/gfdgd_xi/Desktop/build-VirtualMachine-unknown-Debug</value>
<value type="QString" key="ProjectExplorer.BuildConfiguration.BuildDirectory.shadowDir">/home/gfdgd_xi/Desktop/build-VirtualMachine-unknown-Debug</value>
<valuemap type="QVariantMap" key="ProjectExplorer.BuildConfiguration.BuildStepList.0">
<valuemap type="QVariantMap" key="ProjectExplorer.BuildStepList.Step.0">
<value type="bool" key="ProjectExplorer.BuildStep.Enabled">true</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">QtProjectManager.QMakeBuildStep</value>
<value type="bool" key="QtProjectManager.QMakeBuildStep.QMakeForced">false</value>
<valuelist type="QVariantList" key="QtProjectManager.QMakeBuildStep.SelectedAbis"/>
</valuemap>
<valuemap type="QVariantMap" key="ProjectExplorer.BuildStepList.Step.1">
<value type="bool" key="ProjectExplorer.BuildStep.Enabled">true</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">Qt4ProjectManager.MakeStep</value>
</valuemap>
<value type="int" key="ProjectExplorer.BuildStepList.StepsCount">2</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">Build</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName">Build</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">ProjectExplorer.BuildSteps.Build</value>
</valuemap>
<valuemap type="QVariantMap" key="ProjectExplorer.BuildConfiguration.BuildStepList.1">
<valuemap type="QVariantMap" key="ProjectExplorer.BuildStepList.Step.0">
<value type="bool" key="ProjectExplorer.BuildStep.Enabled">true</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">Qt4ProjectManager.MakeStep</value>
<value type="QString" key="Qt4ProjectManager.MakeStep.MakeArguments">clean</value>
</valuemap>
<value type="int" key="ProjectExplorer.BuildStepList.StepsCount">1</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">Clean</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName">Clean</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">ProjectExplorer.BuildSteps.Clean</value>
</valuemap>
<value type="int" key="ProjectExplorer.BuildConfiguration.BuildStepListCount">2</value>
<value type="bool" key="ProjectExplorer.BuildConfiguration.ClearSystemEnvironment">false</value>
<valuelist type="QVariantList" key="ProjectExplorer.BuildConfiguration.CustomParsers"/>
<value type="bool" key="ProjectExplorer.BuildConfiguration.ParseStandardOutput">false</value>
<valuelist type="QVariantList" key="ProjectExplorer.BuildConfiguration.UserEnvironmentChanges"/>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName">Debug</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">Qt4ProjectManager.Qt4BuildConfiguration</value>
<value type="int" key="Qt4ProjectManager.Qt4BuildConfiguration.BuildConfiguration">2</value>
</valuemap>
<valuemap type="QVariantMap" key="ProjectExplorer.Target.BuildConfiguration.1">
<value type="QString" key="ProjectExplorer.BuildConfiguration.BuildDirectory">/home/gfdgd_xi/Desktop/deep-wine-runner/build-VirtualMachine-unknown-Release</value>
<value type="QString" key="ProjectExplorer.BuildConfiguration.BuildDirectory.shadowDir">/home/gfdgd_xi/Desktop/deep-wine-runner/build-VirtualMachine-unknown-Release</value>
<valuemap type="QVariantMap" key="ProjectExplorer.BuildConfiguration.BuildStepList.0">
<valuemap type="QVariantMap" key="ProjectExplorer.BuildStepList.Step.0">
<value type="bool" key="ProjectExplorer.BuildStep.Enabled">true</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">QtProjectManager.QMakeBuildStep</value>
<value type="bool" key="QtProjectManager.QMakeBuildStep.QMakeForced">false</value>
<valuelist type="QVariantList" key="QtProjectManager.QMakeBuildStep.SelectedAbis"/>
</valuemap>
<valuemap type="QVariantMap" key="ProjectExplorer.BuildStepList.Step.1">
<value type="bool" key="ProjectExplorer.BuildStep.Enabled">true</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">Qt4ProjectManager.MakeStep</value>
</valuemap>
<value type="int" key="ProjectExplorer.BuildStepList.StepsCount">2</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">Build</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName">Build</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">ProjectExplorer.BuildSteps.Build</value>
</valuemap>
<valuemap type="QVariantMap" key="ProjectExplorer.BuildConfiguration.BuildStepList.1">
<valuemap type="QVariantMap" key="ProjectExplorer.BuildStepList.Step.0">
<value type="bool" key="ProjectExplorer.BuildStep.Enabled">true</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">Qt4ProjectManager.MakeStep</value>
<value type="QString" key="Qt4ProjectManager.MakeStep.MakeArguments">clean</value>
</valuemap>
<value type="int" key="ProjectExplorer.BuildStepList.StepsCount">1</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">Clean</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName">Clean</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">ProjectExplorer.BuildSteps.Clean</value>
</valuemap>
<value type="int" key="ProjectExplorer.BuildConfiguration.BuildStepListCount">2</value>
<value type="bool" key="ProjectExplorer.BuildConfiguration.ClearSystemEnvironment">false</value>
<valuelist type="QVariantList" key="ProjectExplorer.BuildConfiguration.CustomParsers"/>
<value type="bool" key="ProjectExplorer.BuildConfiguration.ParseStandardOutput">false</value>
<valuelist type="QVariantList" key="ProjectExplorer.BuildConfiguration.UserEnvironmentChanges"/>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName">Release</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">Qt4ProjectManager.Qt4BuildConfiguration</value>
<value type="int" key="Qt4ProjectManager.Qt4BuildConfiguration.BuildConfiguration">0</value>
<value type="int" key="QtQuickCompiler">0</value>
</valuemap>
<valuemap type="QVariantMap" key="ProjectExplorer.Target.BuildConfiguration.2">
<value type="int" key="EnableQmlDebugging">0</value>
<value type="QString" key="ProjectExplorer.BuildConfiguration.BuildDirectory">/home/gfdgd_xi/Desktop/deep-wine-runner/build-VirtualMachine-unknown-Profile</value>
<value type="QString" key="ProjectExplorer.BuildConfiguration.BuildDirectory.shadowDir">/home/gfdgd_xi/Desktop/deep-wine-runner/build-VirtualMachine-unknown-Profile</value>
<valuemap type="QVariantMap" key="ProjectExplorer.BuildConfiguration.BuildStepList.0">
<valuemap type="QVariantMap" key="ProjectExplorer.BuildStepList.Step.0">
<value type="bool" key="ProjectExplorer.BuildStep.Enabled">true</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">QtProjectManager.QMakeBuildStep</value>
<value type="bool" key="QtProjectManager.QMakeBuildStep.QMakeForced">false</value>
<valuelist type="QVariantList" key="QtProjectManager.QMakeBuildStep.SelectedAbis"/>
</valuemap>
<valuemap type="QVariantMap" key="ProjectExplorer.BuildStepList.Step.1">
<value type="bool" key="ProjectExplorer.BuildStep.Enabled">true</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">Qt4ProjectManager.MakeStep</value>
</valuemap>
<value type="int" key="ProjectExplorer.BuildStepList.StepsCount">2</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">Build</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName">Build</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">ProjectExplorer.BuildSteps.Build</value>
</valuemap>
<valuemap type="QVariantMap" key="ProjectExplorer.BuildConfiguration.BuildStepList.1">
<valuemap type="QVariantMap" key="ProjectExplorer.BuildStepList.Step.0">
<value type="bool" key="ProjectExplorer.BuildStep.Enabled">true</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">Qt4ProjectManager.MakeStep</value>
<value type="QString" key="Qt4ProjectManager.MakeStep.MakeArguments">clean</value>
</valuemap>
<value type="int" key="ProjectExplorer.BuildStepList.StepsCount">1</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">Clean</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName">Clean</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">ProjectExplorer.BuildSteps.Clean</value>
</valuemap>
<value type="int" key="ProjectExplorer.BuildConfiguration.BuildStepListCount">2</value>
<value type="bool" key="ProjectExplorer.BuildConfiguration.ClearSystemEnvironment">false</value>
<valuelist type="QVariantList" key="ProjectExplorer.BuildConfiguration.CustomParsers"/>
<value type="bool" key="ProjectExplorer.BuildConfiguration.ParseStandardOutput">false</value>
<valuelist type="QVariantList" key="ProjectExplorer.BuildConfiguration.UserEnvironmentChanges"/>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName">Profile</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">Qt4ProjectManager.Qt4BuildConfiguration</value>
<value type="int" key="Qt4ProjectManager.Qt4BuildConfiguration.BuildConfiguration">0</value>
<value type="int" key="QtQuickCompiler">0</value>
<value type="int" key="SeparateDebugInfo">0</value>
</valuemap>
<value type="int" key="ProjectExplorer.Target.BuildConfigurationCount">3</value>
<valuemap type="QVariantMap" key="ProjectExplorer.Target.DeployConfiguration.0">
<valuemap type="QVariantMap" key="ProjectExplorer.BuildConfiguration.BuildStepList.0">
<value type="int" key="ProjectExplorer.BuildStepList.StepsCount">0</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">Deploy</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName">Deploy</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">ProjectExplorer.BuildSteps.Deploy</value>
</valuemap>
<value type="int" key="ProjectExplorer.BuildConfiguration.BuildStepListCount">1</value>
<valuemap type="QVariantMap" key="ProjectExplorer.DeployConfiguration.CustomData"/>
<value type="bool" key="ProjectExplorer.DeployConfiguration.CustomDataEnabled">false</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">ProjectExplorer.DefaultDeployConfiguration</value>
</valuemap>
<value type="int" key="ProjectExplorer.Target.DeployConfigurationCount">1</value>
<valuemap type="QVariantMap" key="ProjectExplorer.Target.RunConfiguration.0">
<value type="bool" key="Analyzer.Perf.Settings.UseGlobalSettings">true</value>
<value type="bool" key="Analyzer.QmlProfiler.Settings.UseGlobalSettings">true</value>
<value type="bool" key="Analyzer.Valgrind.Settings.UseGlobalSettings">true</value>
<valuelist type="QVariantList" key="CustomOutputParsers"/>
<value type="int" key="PE.EnvironmentAspect.Base">2</value>
<valuelist type="QVariantList" key="PE.EnvironmentAspect.Changes"/>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">Qt4ProjectManager.Qt4RunConfiguration:/home/gfdgd_xi/Desktop/deep-wine-runner/VM-source/VirtualMachine.pro</value>
<value type="QString" key="ProjectExplorer.RunConfiguration.BuildKey">/home/gfdgd_xi/Desktop/deep-wine-runner/VM-source/VirtualMachine.pro</value>
<value type="bool" key="RunConfiguration.UseCppDebugger">false</value>
<value type="bool" key="RunConfiguration.UseCppDebuggerAuto">true</value>
<value type="bool" key="RunConfiguration.UseLibrarySearchPath">true</value>
<value type="bool" key="RunConfiguration.UseQmlDebugger">false</value>
<value type="bool" key="RunConfiguration.UseQmlDebuggerAuto">true</value>
<value type="QString" key="RunConfiguration.WorkingDirectory.default">/home/gfdgd_xi/Desktop/build-VirtualMachine-unknown-Debug</value>
</valuemap>
<value type="int" key="ProjectExplorer.Target.RunConfigurationCount">1</value>
</valuemap>
</data>
<data>
<variable>ProjectExplorer.Project.Target.1</variable>
<valuemap type="QVariantMap">
<value type="QString" key="DeviceType">Desktop</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">Qt 5.15.6 in PATH (qt5)</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName">Qt 5.15.6 in PATH (qt5)</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">{ab20853c-9d79-473a-820e-8e95c145170e}</value>
<value type="int" key="ProjectExplorer.Target.ActiveBuildConfiguration">0</value>
<value type="int" key="ProjectExplorer.Target.ActiveDeployConfiguration">0</value>
<value type="int" key="ProjectExplorer.Target.ActiveRunConfiguration">0</value>
<valuemap type="QVariantMap" key="ProjectExplorer.Target.BuildConfiguration.0">
<value type="QString" key="ProjectExplorer.BuildConfiguration.BuildDirectory">/home/gfdgd_xi/Desktop/building/deep-wine-runner/VM-source</value>
<value type="QString" key="ProjectExplorer.BuildConfiguration.BuildDirectory.shadowDir">/home/gfdgd_xi/Desktop/building/deep-wine-runner/VM-source</value>
<valuemap type="QVariantMap" key="ProjectExplorer.BuildConfiguration.BuildStepList.0">
<valuemap type="QVariantMap" key="ProjectExplorer.BuildStepList.Step.0">
<value type="bool" key="ProjectExplorer.BuildStep.Enabled">true</value>
@@ -155,22 +320,20 @@
<valuelist type="QVariantList" key="CustomOutputParsers"/>
<value type="int" key="PE.EnvironmentAspect.Base">2</value>
<valuelist type="QVariantList" key="PE.EnvironmentAspect.Changes"/>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName">VirtualMachine2</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">Qt4ProjectManager.Qt4RunConfiguration:/home/orangepi/Desktop/windows-virtual-machine-installer-for-wine-runner/VirtualMachine.pro</value>
<value type="QString" key="ProjectExplorer.RunConfiguration.BuildKey">/home/orangepi/Desktop/windows-virtual-machine-installer-for-wine-runner/VirtualMachine.pro</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">Qt4ProjectManager.Qt4RunConfiguration:/home/gfdgd_xi/Desktop/deep-wine-runner/VM-source/VirtualMachine.pro</value>
<value type="QString" key="ProjectExplorer.RunConfiguration.BuildKey">/home/gfdgd_xi/Desktop/deep-wine-runner/VM-source/VirtualMachine.pro</value>
<value type="bool" key="RunConfiguration.UseCppDebugger">false</value>
<value type="bool" key="RunConfiguration.UseCppDebuggerAuto">true</value>
<value type="bool" key="RunConfiguration.UseLibrarySearchPath">true</value>
<value type="bool" key="RunConfiguration.UseQmlDebugger">false</value>
<value type="bool" key="RunConfiguration.UseQmlDebuggerAuto">true</value>
<value type="QString" key="RunConfiguration.WorkingDirectory.default">/home/orangepi/Desktop/VM-source</value>
</valuemap>
<value type="int" key="ProjectExplorer.Target.RunConfigurationCount">1</value>
</valuemap>
</data>
<data>
<variable>ProjectExplorer.Project.TargetCount</variable>
<value type="int">1</value>
<value type="int">2</value>
</data>
<data>
<variable>ProjectExplorer.Project.Updater.FileVersion</variable>

BIN
VM-source/en_US.qm Normal file

Binary file not shown.

602
VM-source/en_US.ts Normal file
View File

@@ -0,0 +1,602 @@
<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE TS>
<TS version="2.1" language="en" sourcelanguage="zh_CN">
<context>
<name>MainWindow</name>
<message>
<location filename="mainwindow.ui" line="14"/>
<source>Wine </source>
<translation>Wine Runner Virtual Machine Install Tools</translation>
</message>
<message>
<location filename="mainwindow.ui" line="32"/>
<location filename="mainwindow.ui" line="35"/>
<source></source>
<translation>Setting</translation>
</message>
<message>
<location filename="mainwindow.ui" line="43"/>
<source></source>
<translation>ISO FilePath:</translation>
</message>
<message>
<location filename="mainwindow.ui" line="50"/>
<source></source>
<translation>Please choose or input system image</translation>
</message>
<message>
<location filename="mainwindow.ui" line="57"/>
<source></source>
<translation>browser...</translation>
</message>
<message>
<location filename="mainwindow.ui" line="68"/>
<source></source>
<translation>System Version:</translation>
</message>
<message>
<location filename="mainwindow.ui" line="75"/>
<location filename="mainwindow.ui" line="79"/>
<source>Windows 7 32 </source>
<translation>Windows 7 32bit (support auto installing)</translation>
</message>
<message>
<location filename="mainwindow.ui" line="84"/>
<source>Windows 7 64 </source>
<translation>Windows 7 64bit (support auto installing)</translation>
</message>
<message>
<location filename="mainwindow.ui" line="89"/>
<source> Windows Windows 7 </source>
<translation>Other system (unsupport auto installing and using legacy boot)</translation>
</message>
<message>
<location filename="mainwindow.ui" line="94"/>
<source> Windows UEFI Windows 8 </source>
<translation>Other system (unsupport auto installing and using UEFI boot)</translation>
</message>
<message>
<location filename="mainwindow.ui" line="99"/>
<source> WIndows 11</source>
<translation>Install windows (unsupport auto installing)</translation>
</message>
<message>
<location filename="mainwindow.ui" line="104"/>
<source> Windows XP VirtualBox</source>
<translation>Install other Windows XP (support auto installing but only support VirtualBox)</translation>
</message>
<message>
<location filename="mainwindow.ui" line="109"/>
<source> Windows VirtualBox</source>
<translation>Install Other Windows (support auto installing and using legacy boot but only support VirtualBox)</translation>
</message>
<message>
<location filename="mainwindow.ui" line="114"/>
<source> WindowsUEFI VirtualBox</source>
<translation>Install Other Windows (support auto installing and using UEFI boot but only support VirtualBox)</translation>
</message>
<message>
<location filename="mainwindow.ui" line="119"/>
<source> arm32 Qemu</source>
<translation>Install arm32 system (only support Qemu/KVM)</translation>
</message>
<message>
<location filename="mainwindow.ui" line="124"/>
<source> arm64 Qemu</source>
<translation>Install arm64 system (only support Qemu/KVM)</translation>
</message>
<message>
<location filename="mainwindow.ui" line="136"/>
<source></source>
<translation>Virtual Machine:</translation>
</message>
<message>
<location filename="mainwindow.ui" line="143"/>
<location filename="mainwindow.ui" line="153"/>
<source>qemu/kvm</source>
<translation></translation>
</message>
<message>
<location filename="mainwindow.ui" line="158"/>
<source>VirtualBox</source>
<translation></translation>
</message>
<message>
<location filename="mainwindow.ui" line="183"/>
<source> Qemu</source>
<translation>Install Qemu</translation>
</message>
<message>
<location filename="mainwindow.ui" line="190"/>
<source>kvm </source>
<translation>kvm test</translation>
</message>
<message>
<location filename="mainwindow.ui" line="197"/>
<source>Qemu虚拟机设置</source>
<translation>Qemu Setting</translation>
</message>
<message>
<location filename="mainwindow.ui" line="204"/>
<source>/Qemu磁盘</source>
<translation>Add/Replace Qemu Disk</translation>
</message>
<message>
<location filename="mainwindow.ui" line="211"/>
<source>Qemu磁盘</source>
<translation>Export Qemu Disk</translation>
</message>
<message>
<location filename="mainwindow.ui" line="218"/>
<source>Qemu磁盘</source>
<translation>Delete Qemu Disk</translation>
</message>
<message>
<location filename="mainwindow.ui" line="225"/>
<source>VirtualBox</source>
<translation>Get VirtualBox</translation>
</message>
<message>
<location filename="mainwindow.ui" line="232"/>
<source></source>
<translation>Install</translation>
</message>
<message>
<location filename="mainwindow.ui" line="241"/>
<source>&lt;!DOCTYPE HTML PUBLIC &quot;-//W3C//DTD HTML 4.0//EN&quot; &quot;http://www.w3.org/TR/REC-html40/strict.dtd&quot;&gt;
&lt;html&gt;&lt;head&gt;&lt;meta name=&quot;qrichtext&quot; content=&quot;1&quot; /&gt;&lt;style type=&quot;text/css&quot;&gt;
p, li { white-space: pre-wrap; }
&lt;/style&gt;&lt;/head&gt;&lt;body style=&quot; font-family:&apos;Noto Sans CJK SC&apos;; font-size:10.5pt; font-weight:400; font-style:normal;&quot;&gt;
&lt;p style=&quot; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;&quot;&gt;&lt;span style=&quot; font-size:11pt;&quot;&gt;UOS 3a4000 使 Qemu /&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;&quot;&gt;&lt;span style=&quot; font-size:11pt;&quot;&gt;&lt;/span&gt;&lt;a href=&quot;https://gfdgdxi.lanzoue.com/b01rk9wza&quot;&gt;&lt;span style=&quot; font-size:11pt; text-decoration: underline; color:#0082fa;&quot;&gt;https://gfdgdxi.lanzoue.com/b01rk9wza&lt;/span&gt;&lt;/a&gt;&lt;span style=&quot; font-size:11pt;&quot;&gt; 密码:6wvf&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;&quot;&gt;&lt;span style=&quot; font-size:11pt;&quot;&gt;&lt;/span&gt;&lt;a href=&quot;http://ctfile.gfdgdxi.top/d/31540479-58662214-c46520?p=2061&quot;&gt;&lt;span style=&quot; font-size:11pt; text-decoration: underline; color:#0082fa;&quot;&gt;http://ctfile.gfdgdxi.top/d/31540479-58662214-c46520?p=2061&lt;/span&gt;&lt;/a&gt;&lt;span style=&quot; font-size:11pt;&quot;&gt; (访问密码: 2061)&lt;/span&gt;&lt;/p&gt;
&lt;hr /&gt;
&lt;p style=&quot; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;&quot;&gt;&lt;span style=&quot; font-size:11pt;&quot;&gt;Qemu / kvm Qemu&lt;/span&gt;&lt;/p&gt;
&lt;hr /&gt;
&lt;p style=&quot; margin-top:12px; margin-bottom:12px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;&quot;&gt;&lt;span style=&quot; font-size:10pt;&quot;&gt;使 ISO &lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot; margin-top:12px; margin-bottom:12px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;&quot;&gt;&lt;span style=&quot; font-size:10pt;&quot;&gt;123 &lt;/span&gt;&lt;a href=&quot;https://www.123pan.com/s/pDSKVv-oypWv&quot;&gt;&lt;span style=&quot; font-size:11pt; text-decoration: underline; color:#0082fa;&quot;&gt;https://www.123pan.com/s/pDSKVv-oypWv&lt;/span&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p style=&quot; margin-top:12px; margin-bottom:12px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;&quot;&gt;&lt;span style=&quot; font-size:10pt;&quot;&gt;&lt;/span&gt;&lt;a href=&quot;https://pan.xunlei.com/s/VNKMz3wgbYHg6JIh50ZKIc7pA1?pwd=35e5&quot;&gt;&lt;span style=&quot; font-size:11pt; text-decoration: underline; color:#0082fa;&quot;&gt;https://pan.xunlei.com/s/VNKMz3wgbYHg6JIh50ZKIc7pA1?pwd=35e5&lt;/span&gt;&lt;/a&gt;&lt;span style=&quot; font-size:10pt;&quot;&gt; 提取码35e5&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot; margin-top:12px; margin-bottom:12px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;&quot;&gt;&lt;span style=&quot; font-size:10pt;&quot;&gt;&lt;/span&gt;&lt;a href=&quot;https://pan.baidu.com/s/19WbvinITCQJFZpAdZutrjg?pwd=me4y&quot;&gt;&lt;span style=&quot; font-size:11pt; text-decoration: underline; color:#0082fa;&quot;&gt;https://pan.baidu.com/s/19WbvinITCQJFZpAdZutrjg?pwd=me4y&lt;/span&gt;&lt;/a&gt;&lt;span style=&quot; font-size:10pt;&quot;&gt; 提取码: me4y&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot; margin-top:12px; margin-bottom:12px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;&quot;&gt;&lt;span style=&quot; font-size:10pt;&quot;&gt;&lt;/span&gt;&lt;a href=&quot;http://ctfile.gfdgdxi.top/d/31540479-58662220-3590cf?p=2061&quot;&gt;&lt;span style=&quot; font-size:11pt; text-decoration: underline; color:#0082fa;&quot;&gt;http://ctfile.gfdgdxi.top/d/31540479-58662220-3590cf?p=2061&lt;/span&gt;&lt;/a&gt;&lt;span style=&quot; font-size:10pt;&quot;&gt; (访问密码: 2061)&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot; margin-top:12px; margin-bottom:12px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;&quot;&gt;&lt;span style=&quot; font-size:10pt;&quot;&gt;&lt;/span&gt;&lt;a href=&quot;ed2k://|file|cn_windows_7_ultimate_with_sp1_x86_dvd_u_677486.iso|2653276160|7503E4B9B8738DFCB95872445C72AEFB|/&quot;&gt;&lt;span style=&quot; font-size:11pt; text-decoration: underline; color:#0082fa;&quot;&gt;ed2k://|file|cn_windows_7_ultimate_with_sp1_x86_dvd_u_677486.iso|2653276160|7503E4B9B8738DFCB95872445C72AEFB|/&lt;/span&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p style=&quot; margin-top:12px; margin-bottom:12px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;&quot;&gt;&lt;span style=&quot; font-size:10pt;&quot;&gt;&lt;/span&gt;&lt;a href=&quot;ed2k://|file|cn_windows_7_ultimate_with_sp1_x64_dvd_u_677408.iso|3420557312|B58548681854236C7939003B583A8078|/&quot;&gt;&lt;span style=&quot; font-size:11pt; text-decoration: underline; color:#0082fa;&quot;&gt;ed2k://|file|cn_windows_7_ultimate_with_sp1_x64_dvd_u_677408.iso|3420557312|B58548681854236C7939003B583A8078|/&lt;/span&gt;&lt;/a&gt;&lt;/p&gt;
&lt;hr /&gt;
&lt;p style=&quot; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;&quot;&gt;&lt;span style=&quot; font-size:11pt; font-weight:600;&quot;&gt; Windows &lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;&quot;&gt;&lt;span style=&quot; font-size:11pt;&quot;&gt;: &lt;/span&gt;&lt;a href=&quot;https://pan.baidu.com/s/1D1NSy7k7XBnOZL_tNTnG6g?pwd=7s2p&quot;&gt;&lt;span style=&quot; font-size:11pt; text-decoration: underline; color:#0082fa;&quot;&gt;https://pan.baidu.com/s/1D1NSy7k7XBnOZL_tNTnG6g?pwd=7s2p&lt;/span&gt;&lt;/a&gt;&lt;span style=&quot; font-size:11pt;&quot;&gt; 提取码: 7s2p &lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;&quot;&gt;&lt;span style=&quot; font-size:11pt;&quot;&gt;&lt;/span&gt;&lt;a href=&quot;http://ctfile.gfdgdxi.top/d/31540479-58659214-0732a8?p=2061&quot;&gt;&lt;span style=&quot; font-size:11pt; text-decoration: underline; color:#0082fa;&quot;&gt;http://ctfile.gfdgdxi.top/d/31540479-58659214-0732a8?p=2061&lt;/span&gt;&lt;/a&gt;&lt;span style=&quot; font-size:11pt;&quot;&gt; (访问密码: 2061)&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;&quot;&gt;&lt;span style=&quot; font-size:11pt;&quot;&gt;123&lt;/span&gt;&lt;a href=&quot;https://www.123pan.com/s/pDSKVv-uCBWv.html&quot;&gt;&lt;span style=&quot; font-size:11pt; text-decoration: underline; color:#0082fa;&quot;&gt;https://www.123pan.com/s/pDSKVv-uCBWv.html&lt;/span&gt;&lt;/a&gt;&lt;/p&gt;
&lt;hr /&gt;&lt;/body&gt;&lt;/html&gt;</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="mainwindow.ui" line="274"/>
<source>/使</source>
<translation>Document</translation>
</message>
<message>
<location filename="mainwindow.ui" line="283"/>
<source>&lt;!DOCTYPE HTML PUBLIC &quot;-//W3C//DTD HTML 4.0//EN&quot; &quot;http://www.w3.org/TR/REC-html40/strict.dtd&quot;&gt;
&lt;html&gt;&lt;head&gt;&lt;meta name=&quot;qrichtext&quot; content=&quot;1&quot; /&gt;&lt;style type=&quot;text/css&quot;&gt;
p, li { white-space: pre-wrap; }
&lt;/style&gt;&lt;/head&gt;&lt;body style=&quot; font-family:&apos;Noto Sans CJK SC&apos;; font-size:10.5pt; font-weight:400; font-style:normal;&quot;&gt;
&lt;p style=&quot; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;&quot;&gt;&lt;span style=&quot; font-size:26pt; font-weight:600;&quot;&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;&quot;&gt;&lt;span style=&quot; font-weight:600; font-style:italic; text-decoration: underline;&quot;&gt;使 VirtualBox&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;&quot;&gt;&lt;span style=&quot; font-weight:600; font-style:italic; text-decoration: underline;&quot;&gt; X86 PC使 qemu kvm使 Windows XP Windows 7&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;&quot;&gt;&lt;/p&gt;
&lt;p style=&quot; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;&quot;&gt;&lt;span style=&quot; font-weight:600; text-decoration: underline;&quot;&gt;/https://gitee.com/gfdgd-xi/deep-wine-runner/wikis 或 https://gitee.com/gfdgd-xi/wine-runner-wiki&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;&quot;&gt;Ctrl&lt;span style=&quot; font-weight:600; font-style:italic; text-decoration: underline;&quot;&gt;qemu则是 Ctrl+Alt+G&lt;/span&gt; &lt;/p&gt;
&lt;p style=&quot; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;&quot;&gt;VirtualBox &lt;/p&gt;
&lt;p style=&quot; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;&quot;&gt;Qemu Virtio &lt;a href=&quot;https://fedorapeople.org/groups/virt/virtio-win/direct-downloads/archive-virtio/&quot;&gt;&lt;span style=&quot; font-size:11pt; text-decoration: underline; color:#0082fa;&quot;&gt;https://fedorapeople.org/groups/virt/virtio-win/direct-downloads/archive-virtio/&lt;/span&gt;&lt;/a&gt;&lt;/p&gt;
&lt;hr /&gt;
&lt;p style=&quot;-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;&quot;&gt;&lt;br /&gt;&lt;/p&gt;
&lt;p style=&quot;-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;&quot;&gt;&lt;br /&gt;&lt;/p&gt;
&lt;p style=&quot;-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;&quot;&gt;&lt;br /&gt;&lt;/p&gt;
&lt;p style=&quot;-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;&quot;&gt;&lt;br /&gt;&lt;/p&gt;
&lt;p style=&quot;-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;&quot;&gt;&lt;br /&gt;&lt;/p&gt;
&lt;p style=&quot;-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;&quot;&gt;&lt;br /&gt;&lt;/p&gt;
&lt;p style=&quot;-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;&quot;&gt;&lt;br /&gt;&lt;/p&gt;
&lt;p style=&quot;-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;&quot;&gt;&lt;br /&gt;&lt;/p&gt;
&lt;p style=&quot;-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;&quot;&gt;&lt;br /&gt;&lt;/p&gt;
&lt;p style=&quot;-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;&quot;&gt;&lt;br /&gt;&lt;/p&gt;
&lt;p style=&quot;-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;&quot;&gt;&lt;br /&gt;&lt;/p&gt;
&lt;p style=&quot;-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;&quot;&gt;&lt;br /&gt;&lt;/p&gt;
&lt;p style=&quot;-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;&quot;&gt;&lt;br /&gt;&lt;/p&gt;
&lt;p style=&quot; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;&quot;&gt;&lt;span style=&quot; font-size:26pt; font-weight:600;&quot;&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;&quot;&gt;&lt;/p&gt;
&lt;p style=&quot; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;&quot;&gt;&lt;img src=&quot;:/picture//_VirtualBox Machine_20220712191756.png&quot; /&gt;&lt;/p&gt;
&lt;p style=&quot; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;&quot;&gt;使&lt;/p&gt;
&lt;p style=&quot; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;&quot;&gt;&lt;img src=&quot;:/picture//_VirtualBox Machine_20220712192850.png&quot; /&gt;&lt;/p&gt;
&lt;p style=&quot; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;&quot;&gt;&lt;img src=&quot;:/picture//_VirtualBox Machine_20220712193527.png&quot; /&gt;&lt;/p&gt;
&lt;hr /&gt;
&lt;p style=&quot; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;&quot;&gt;&lt;span style=&quot; font-size:26pt; font-weight:600;&quot;&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;&quot;&gt; Windows 7 Windows 7 Windows XPWindows 10DeepinUbuntu &lt;/p&gt;
&lt;p style=&quot;-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;&quot;&gt;&lt;br /&gt;&lt;/p&gt;
&lt;hr /&gt;
&lt;p style=&quot; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;&quot;&gt;&lt;span style=&quot; font-size:26pt; font-weight:600;&quot;&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;&quot;&gt;&lt;span style=&quot; font-size:11pt;&quot;&gt;1 Oracle VM VirtualBox &lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;&quot;&gt;&lt;span style=&quot; font-size:11pt;&quot;&gt;2Windows&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;&quot;&gt;&lt;img src=&quot;:/picture//_VirtualBox Manager_20220712223602.png&quot; /&gt;&lt;/p&gt;
&lt;p style=&quot; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;&quot;&gt;&lt;span style=&quot; font-size:11pt;&quot;&gt;3&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;&quot;&gt;&lt;img src=&quot;:/picture//_VirtualBox_20220712223705.png&quot; /&gt;&lt;/p&gt;
&lt;hr /&gt;
&lt;p style=&quot; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;&quot;&gt;&lt;span style=&quot; font-size:26pt; font-weight:600;&quot;&gt;使 VirtualBox&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;&quot;&gt;1&lt;/p&gt;
&lt;p style=&quot; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;&quot;&gt;2&lt;/p&gt;
&lt;p style=&quot; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;&quot;&gt;3&lt;/p&gt;
&lt;p style=&quot; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;&quot;&gt;4&lt;/p&gt;
&lt;p style=&quot; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;&quot;&gt;&lt;img src=&quot;:/picture//__20220712224639.png&quot; /&gt;&lt;/p&gt;
&lt;hr /&gt;
&lt;p style=&quot; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;&quot;&gt;&lt;span style=&quot; font-size:26pt; font-weight:600;&quot;&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;&quot;&gt;1=&lt;/p&gt;
&lt;p style=&quot; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;&quot;&gt;&lt;img src=&quot;:/picture/_VirtualBox Machine_20220712142929.png&quot; /&gt;&lt;/p&gt;
&lt;p style=&quot; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;&quot;&gt;2VirtualBox Guest AdditionsVBoxWindowsAdditions&lt;/p&gt;
&lt;p style=&quot; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;&quot;&gt;&lt;img src=&quot;:/picture//_VirtualBox Machine_20220712143006.png&quot; /&gt;&lt;/p&gt;
&lt;p style=&quot; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;&quot;&gt;3&lt;/p&gt;
&lt;p style=&quot; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;&quot;&gt;&lt;img src=&quot;:/picture//_VirtualBox Machine_20220712143018.png&quot; /&gt;&lt;/p&gt;
&lt;p style=&quot; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;&quot;&gt;4Next&lt;/p&gt;
&lt;p style=&quot; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;&quot;&gt;&lt;img src=&quot;:/picture//_VirtualBox Machine_20220712143029.png&quot; /&gt;&lt;/p&gt;
&lt;p style=&quot; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;&quot;&gt;&lt;img src=&quot;:/picture//_VirtualBox Machine_20220712143037.png&quot; /&gt;&lt;/p&gt;
&lt;p style=&quot; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;&quot;&gt;&lt;span style=&quot; font-size:11pt;&quot;&gt;5Install&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;&quot;&gt;&lt;img src=&quot;:/picture//_VirtualBox Machine_20220712143044.png&quot; /&gt;&lt;/p&gt;
&lt;p style=&quot; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;&quot;&gt;&lt;span style=&quot; font-size:11pt;&quot;&gt;6Reboot nowFinishReboot nowFinish&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;&quot;&gt;&lt;img src=&quot;:/picture//_VirtualBox Machine_20220712143103.png&quot; /&gt;&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="mainwindow.ui" line="364"/>
<location filename="mainwindow.ui" line="482"/>
<source></source>
<translation>About</translation>
</message>
<message>
<location filename="mainwindow.ui" line="421"/>
<source>&lt;!DOCTYPE HTML PUBLIC &quot;-//W3C//DTD HTML 4.0//EN&quot; &quot;http://www.w3.org/TR/REC-html40/strict.dtd&quot;&gt;
&lt;html&gt;&lt;head&gt;&lt;meta name=&quot;qrichtext&quot; content=&quot;1&quot; /&gt;&lt;style type=&quot;text/css&quot;&gt;
p, li { white-space: pre-wrap; }
&lt;/style&gt;&lt;/head&gt;&lt;body style=&quot; font-family:&apos;Noto Sans CJK SC&apos;; font-size:10.5pt; font-weight:400; font-style:normal;&quot;&gt;
&lt;p style=&quot; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;&quot;&gt; wine Wine Is Not An Emulator&amp;lt;Wine &amp;gt; Windows &lt;/p&gt;
&lt;p style=&quot; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;&quot;&gt; C++ QtPython Virtualbox Windows Linux Windows exe &lt;/p&gt;
&lt;p style=&quot; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;&quot;&gt; GPL V3 &lt;/p&gt;
&lt;p style=&quot; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;&quot;&gt;&lt;/p&gt;
&lt;p style=&quot; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;&quot;&gt; Gitee&lt;a href=&quot;https://gitee.com/gfdgd-xi/deep-wine-runner&quot;&gt;&lt;span style=&quot; font-size:11pt; text-decoration: underline; color:#0082fa;&quot;&gt;https://gitee.com/gfdgd-xi/deep-wine-runner&lt;/span&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p style=&quot; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;&quot;&gt; Github&lt;a href=&quot;https://github.com/gfdgd-xi/deep-wine-runner&quot;&gt;&lt;span style=&quot; font-size:11pt; text-decoration: underline; color:#0082fa;&quot;&gt;https://github.com/gfdgd-xi/deep-wine-runner&lt;/span&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p style=&quot; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;&quot;&gt; Wine Wine Windows Windows exe &lt;/p&gt;
&lt;p style=&quot; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;&quot;&gt;gfdgd xi&lt;/p&gt;
&lt;hr /&gt;
&lt;p style=&quot;-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;&quot;&gt;&lt;br /&gt;&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="mainwindow.ui" line="463"/>
<source></source>
<translation>Virtual Machine</translation>
</message>
<message>
<location filename="mainwindow.ui" line="477"/>
<source>退</source>
<translation>Exit</translation>
</message>
<message>
<location filename="mainwindow.ui" line="487"/>
<source>/</source>
<translation>Add/Replace</translation>
</message>
<message>
<location filename="mainwindow.ui" line="492"/>
<source></source>
<translation>Export</translation>
</message>
<message>
<location filename="mainwindow.ui" line="497"/>
<location filename="mainwindow.cpp" line="442"/>
<source></source>
<translation>Virtual Machine log (Installing)</translation>
</message>
<message>
<location filename="mainwindow.ui" line="502"/>
<location filename="mainwindow.cpp" line="408"/>
<source></source>
<translation>Virtual Machine log (Running)</translation>
</message>
<message>
<location filename="mainwindow.ui" line="507"/>
<source>X86Qemu</source>
<translation>Qemu Test (x86, qemu)</translation>
</message>
<message>
<location filename="mainwindow.ui" line="512"/>
<source> VirtualBox</source>
<translation>Stop VirtualBox with forced</translation>
</message>
<message>
<location filename="mainwindow.ui" line="517"/>
<source> Qemu</source>
<translation>Stop Qemu with forced</translation>
</message>
<message>
<location filename="mainwindow.cpp" line="88"/>
<source>Wine </source>
<translation>Wine Runner Virtual Machine Install Tools </translation>
</message>
<message>
<location filename="mainwindow.cpp" line="90"/>
<source>&lt;p&gt;</source>
<translation>&lt;p&gt;Program Version:</translation>
</message>
<message>
<location filename="mainwindow.cpp" line="90"/>
<source>&lt;/p&gt;&lt;p&gt;</source>
<translation>&lt;/p&gt;&lt;p&gt;Package build time:</translation>
</message>
<message>
<location filename="mainwindow.cpp" line="90"/>
<source>&lt;/p&gt;&lt;p&gt;</source>
<translation>&lt;/p&gt;&lt;p&gt;Tools builded time:</translation>
</message>
<message>
<location filename="mainwindow.cpp" line="92"/>
<source>&lt;hr/&gt;&lt;h1&gt;&lt;/h1&gt;</source>
<translation>&lt;hr/&gt;&lt;h1&gt;Thank&lt;/h1&gt;</translation>
</message>
<message>
<location filename="mainwindow.cpp" line="179"/>
<location filename="mainwindow.cpp" line="186"/>
<location filename="mainwindow.cpp" line="193"/>
<location filename="mainwindow.cpp" line="200"/>
<location filename="mainwindow.cpp" line="215"/>
<location filename="mainwindow.cpp" line="222"/>
<location filename="mainwindow.cpp" line="229"/>
<location filename="mainwindow.cpp" line="248"/>
<location filename="mainwindow.cpp" line="254"/>
<location filename="mainwindow.cpp" line="263"/>
<location filename="mainwindow.cpp" line="307"/>
<location filename="mainwindow.cpp" line="322"/>
<location filename="mainwindow.cpp" line="328"/>
<location filename="mainwindow.cpp" line="332"/>
<location filename="mainwindow.cpp" line="338"/>
<location filename="mainwindow.cpp" line="357"/>
<location filename="mainwindow.cpp" line="360"/>
<location filename="mainwindow.cpp" line="364"/>
<location filename="mainwindow.cpp" line="367"/>
<location filename="mainwindow.cpp" line="392"/>
<location filename="mainwindow.cpp" line="404"/>
<location filename="mainwindow.cpp" line="438"/>
<source></source>
<translation>Tips</translation>
</message>
<message>
<location filename="mainwindow.cpp" line="179"/>
<source> Qemu</source>
<translation>Can&apos;t find qemu, do you want to countinue to create the virtual machine?</translation>
</message>
<message>
<location filename="mainwindow.cpp" line="186"/>
<source> VBox</source>
<translation>Can&apos;t find VirtualBox, do you want to countinue to create the virtual machine?</translation>
</message>
<message>
<location filename="mainwindow.cpp" line="193"/>
<source> qemu-system-arm</source>
<translation>Can&apos;t find the qemu-system-arm, do you want to countinue to create the virtual machine?</translation>
</message>
<message>
<location filename="mainwindow.cpp" line="200"/>
<source> qemu-system-aarch64</source>
<translation>Can&apos;t find the qemu-system-aarch64, do you want to countinue to create the virtual machine?</translation>
</message>
<message>
<location filename="mainwindow.cpp" line="215"/>
<source> Windows7X86Auto.iso
Wine </source>
<translation>Can&apos;t find the Windows7X86Auto.iso, do you want to countinue to create the virtual machine?</translation>
</message>
<message>
<location filename="mainwindow.cpp" line="222"/>
<source> Windows7X64Auto.iso
Wine </source>
<translation>Can&apos;t find the Windows7X64Auto.iso, do you want to countinue to create the virtual machine?</translation>
</message>
<message>
<location filename="mainwindow.cpp" line="229"/>
<source> UEFI
Qemu Qemu</source>
<translation>Can&apos;t find the UEFI boot, do you want to countinue to create the virtual machine?
You can get qemu efi from &quot;Install Qemu&quot; button</translation>
</message>
<message>
<location filename="mainwindow.cpp" line="248"/>
<source>Qemu </source>
<translation>Qemu unsupport it</translation>
</message>
<message>
<location filename="mainwindow.cpp" line="254"/>
<location filename="mainwindow.cpp" line="263"/>
<source>VirtualBox </source>
<translation>VirtualBox unsupport it</translation>
</message>
<message>
<location filename="mainwindow.cpp" line="278"/>
<source></source>
<translation>Tips: It trying to start virtualbox now, you should view the log in the tools menu if you can&apos;t see the virtual machine window a few time late</translation>
</message>
<message>
<location filename="mainwindow.cpp" line="307"/>
<source>
</source>
<translation>Qemu Disk is exist. Do you want to replace?
You will not recovery after you replacing!</translation>
</message>
<message>
<location filename="mainwindow.cpp" line="311"/>
<source> Qemu </source>
<translation>Choose Qemu Disk</translation>
</message>
<message>
<location filename="mainwindow.cpp" line="311"/>
<source>Qemu镜像(*.qcow2 *.img *.raw *.qcow *.qed *.vdi *.vhdx *.vmdk);;(*.*)</source>
<translation>Qemu Disk(*.qcow2 *.img *.raw *.qcow *.qed *.vdi *.vhdx *.vmdk);;All files(*.*)</translation>
</message>
<message>
<location filename="mainwindow.cpp" line="322"/>
<location filename="mainwindow.cpp" line="328"/>
<source></source>
<translation>Add error!</translation>
</message>
<message>
<location filename="mainwindow.cpp" line="332"/>
<source></source>
<translation>Add finishing!</translation>
</message>
<message>
<location filename="mainwindow.cpp" line="338"/>
<source></source>
<translation>Can&apos;t export because can&apos;t find the qemu disk</translation>
</message>
<message>
<location filename="mainwindow.cpp" line="357"/>
<source></source>
<translation>Can&apos;t delete because can&apos;t find the qemu disk</translation>
</message>
<message>
<location filename="mainwindow.cpp" line="360"/>
<source>
</source>
<translation>Do you want to delete?
It can&apos;t recovery after you deleting!</translation>
</message>
<message>
<location filename="mainwindow.cpp" line="364"/>
<source></source>
<translation>Delete error</translation>
</message>
<message>
<location filename="mainwindow.cpp" line="367"/>
<source></source>
<translation>Delete successfully</translation>
</message>
<message>
<location filename="mainwindow.cpp" line="373"/>
<location filename="mainwindow.cpp" line="389"/>
<source></source>
<translation>Error</translation>
</message>
<message>
<location filename="mainwindow.cpp" line="373"/>
<source> kvm-ok
使 sudo apt install cpu-checker </source>
<translation>Can&apos;t find the command &quot;kvm-ok&quot; and you can use command &quot;sudo apt install cpu-checker&quot; to install</translation>
</message>
<message>
<location filename="mainwindow.cpp" line="383"/>
<source>使</source>
<translation>Use</translation>
</message>
<message>
<location filename="mainwindow.cpp" line="389"/>
<source>使 kvm
</source>
<translation>Your system can&apos;t use kvm:
</translation>
</message>
<message>
<location filename="mainwindow.cpp" line="392"/>
<source>使 kvm
</source>
<translation>Your system can use kvm:
</translation>
</message>
<message>
<location filename="mainwindow.cpp" line="404"/>
<location filename="mainwindow.cpp" line="438"/>
<source></source>
<translation>Can&apos;t find the log file</translation>
</message>
<message>
<location filename="mainwindow.cpp" line="408"/>
<source></source>
<translation>Running file</translation>
</message>
<message>
<location filename="mainwindow.cpp" line="442"/>
<source></source>
<translation>Installed log</translation>
</message>
</context>
<context>
<name>QemuSetting</name>
<message>
<location filename="qemusetting.ui" line="14"/>
<source></source>
<translation>Setting</translation>
</message>
<message>
<location filename="qemusetting.ui" line="35"/>
<source>&lt;h3&gt;&lt;/h3&gt;</source>
<translation>&lt;h3&gt;Remote Service&lt;/h3&gt;</translation>
</message>
<message>
<location filename="qemusetting.ui" line="42"/>
<source>VNC服务端口</source>
<translation>VNC service port:</translation>
</message>
<message>
<location filename="qemusetting.ui" line="49"/>
<source> rdp </source>
<translation>Enable rdp port</translation>
</message>
<message>
<location filename="qemusetting.ui" line="56"/>
<source>MB</source>
<translation>Memory size (MB):</translation>
</message>
<message>
<location filename="qemusetting.ui" line="90"/>
<source>&lt;h3&gt;&lt;/h3&gt;</source>
<translation>&lt;h3&gt;Base setting&lt;/h3&gt;</translation>
</message>
<message>
<location filename="qemusetting.ui" line="97"/>
<source>VNC服务</source>
<translation>Enable VNC service</translation>
</message>
<message>
<location filename="qemusetting.ui" line="104"/>
<source> kvm </source>
<translation>Enable kvm</translation>
</message>
<message>
<location filename="qemusetting.ui" line="111"/>
<source>CPU核心数</source>
<translation>CPU cores:</translation>
</message>
<message>
<location filename="qemusetting.ui" line="125"/>
<source></source>
<translation>Enable sound</translation>
</message>
<message>
<location filename="qemusetting.ui" line="145"/>
<source></source>
<translation>Save</translation>
</message>
<message>
<location filename="qemusetting.ui" line="158"/>
<source></source>
<translation>Cancel</translation>
</message>
<message>
<location filename="qemusetting.ui" line="171"/>
<source>
</source>
<translation>Resetting</translation>
</message>
<message>
<location filename="qemusetting.ui" line="185"/>
<source>
Wine
</source>
<translation>Get Wine
Runner</translation>
</message>
</context>
</TS>

View File

@@ -24,9 +24,13 @@ int main(int argc, char *argv[])
QApplication a(argc, argv);
// 语言
QTranslator *trans = new QTranslator(&a);
trans->load("virtualmachine-en_US.qm");
if(!QProcessEnvironment::systemEnvironment().value("LANG").contains("zh_CN")){
trans->load(":/en_US.qm");
}
a.installTranslator(trans);
// 判断是否为 !amd64无需判断了
/*if(GetRunCommand("arch").replace(" ", "").replace("\n", "") != QString("x86_64")){
QMessageBox::critical(NULL, "错误", "此程序不支持非 X86 架构,立即退出");

View File

@@ -32,6 +32,7 @@ MainWindow::MainWindow(QWidget *parent) :
ui(new Ui::MainWindow)
{
ui->setupUi(this);
//QApplication a(argc, argv);
ui->tabWidget->setTabPosition(QTabWidget::West); // 标签靠左
// 选择最优虚拟机
if(!system("which qemu-system-x86_64")){
@@ -47,7 +48,7 @@ MainWindow::MainWindow(QWidget *parent) :
QLoggingCategory::defaultCategory()->setEnabled(QtDebugMsg, true);
// 判断是否安装 vbox无需判断
/*if(system("which VBoxManage")){
if(QMessageBox::question(this, "提示", "检测到您似乎没有安装 VirtualBox立即安装") == QMessageBox::Yes){
if(QMessageBox::question(this, tr("提示"), "检测到您似乎没有安装 VirtualBox立即安装") == QMessageBox::Yes){
system("xdg-open https://www.virtualbox.org/wiki/Linux_Downloads");
}
}*/
@@ -84,11 +85,11 @@ MainWindow::MainWindow(QWidget *parent) :
}
// 设置程序标题
this->setWindowTitle("Wine 运行器虚拟机安装工具 " + versionValue.toString());
this->setWindowTitle(tr("Wine 运行器虚拟机安装工具 ") + versionValue.toString());
// 读取谢明列表
ui->textBrowser_2->setHtml("<p>程序版本号:" + versionValue.toString() + ", " + GetRunCommand("arch") + "</p><p>安装包构建时间:" + buildTime.toString() + "</p><p>该组件构建时间:"
ui->textBrowser_2->setHtml(tr("<p>程序版本号:") + versionValue.toString() + ", " + GetRunCommand("arch") + tr("</p><p>安装包构建时间:") + buildTime.toString() + tr("</p><p>该组件构建时间:")
+ __DATE__ + " " + __TIME__ + "</p>" + ui->textBrowser_2->toHtml() +
"<hr/><h1>谢明列表</h1>" + thankText);
tr("<hr/><h1>谢明列表</h1>") + thankText);
connect(ui->textBrowser_2, &QTextBrowser::anchorClicked, this, [=](const QUrl &link){
QDesktopServices::openUrl(link);
});
@@ -102,6 +103,7 @@ MainWindow::MainWindow(QWidget *parent) :
ui->tabWidget->setTabIcon(1, QIcon::fromTheme(":/application-vnd.oasis.opendocument.text.svg"));
// 设置窗口图标
this->setWindowIcon(QIcon(":/deepin-wine-runner.svg"));
}
void MainWindow::ShowCPUMessage(){
@@ -141,6 +143,7 @@ void MainWindow::ShowCPUMessage(){
}
m_cpuAll = cpuAll;
m_cpuFree = cpuFree;
ui->retranslateUi(this);
}
QString MainWindow::GetRunCommand(QString command){
@@ -173,28 +176,28 @@ void MainWindow::on_install_clicked()
switch (ui->vmChooser->currentIndex()) {
case 0:
if(system("which qemu-system-x86_64")){
if(QMessageBox::question(this, "提示", "您似乎没有安装 Qemu是否继续创建虚拟机") == QMessageBox::No){
if(QMessageBox::question(this, tr("提示"), tr("您似乎没有安装 Qemu是否继续创建虚拟机")) == QMessageBox::No){
return;
}
}
break;
case 1:
if(system("which vboxmanage")){
if(QMessageBox::question(this, "提示", "您似乎没有安装 VBox是否继续创建虚拟机") == QMessageBox::No){
if(QMessageBox::question(this, tr("提示"), tr("您似乎没有安装 VBox是否继续创建虚拟机")) == QMessageBox::No){
return;
}
}
break;
case 8:
if(system("which qemu-system-arm")){
if(QMessageBox::question(this, "提示", "无法检测到 qemu-system-arm是否继续创建虚拟机") == QMessageBox::No){
if(QMessageBox::question(this, tr("提示"), tr("无法检测到 qemu-system-arm是否继续创建虚拟机")) == QMessageBox::No){
return;
}
}
break;
case 9:
if(system("which qemu-system-aarch64")){
if(QMessageBox::question(this, "提示", "无法检测到 qemu-system-aarch64是否继续创建虚拟机") == QMessageBox::No){
if(QMessageBox::question(this, tr("提示"), tr("无法检测到 qemu-system-aarch64是否继续创建虚拟机")) == QMessageBox::No){
return;
}
}
@@ -209,21 +212,21 @@ void MainWindow::on_install_clicked()
switch (ui->systemVersion->currentIndex()) {
case 0:
if(!QFile::exists(QCoreApplication::applicationDirPath() + "/Windows7X86Auto.iso")){
if(QMessageBox::question(this, "提示", "似乎无法找到 Windows7X86Auto.iso是否继续创建虚拟机\n缺少该文件可能会导致虚拟机无法正常启动,尝试重新安装 Wine 运行器再试试?") == QMessageBox::No){
if(QMessageBox::question(this, tr("提示"), tr("似乎无法找到 Windows7X86Auto.iso是否继续创建虚拟机\n缺少该文件可能会导致虚拟机无法正常启动,尝试重新安装 Wine 运行器再试试?")) == QMessageBox::No){
return;
}
}
break;
case 1:
if(!QFile::exists(QCoreApplication::applicationDirPath() + "/Windows7X64Auto.iso")){
if(QMessageBox::question(this, "提示", "似乎无法找到 Windows7X64Auto.iso是否继续创建虚拟机\n缺少该文件可能会导致虚拟机无法正常启动,尝试重新安装 Wine 运行器再试试?") == QMessageBox::No){
if(QMessageBox::question(this, tr("提示"), tr("似乎无法找到 Windows7X64Auto.iso是否继续创建虚拟机\n缺少该文件可能会导致虚拟机无法正常启动,尝试重新安装 Wine 运行器再试试?")) == QMessageBox::No){
return;
}
}
break;
case 3:
if(!QFile::exists("/usr/share/qemu/OVMF.fd") && !QFile::exists(QCoreApplication::applicationDirPath() + "/OVMF.fd") && ui->vmChooser->currentIndex() == 0){
if(QMessageBox::question(this, "提示", "似乎无法找到 UEFI 固件,是否继续创建虚拟机?\nQemu 固件可以在“安装 Qemu”处安装") == QMessageBox::No){
if(QMessageBox::question(this, tr("提示"), tr("似乎无法找到 UEFI 固件,是否继续创建虚拟机?\nQemu 固件可以在“安装 Qemu”处安装")) == QMessageBox::No){
return;
}
}
@@ -242,13 +245,13 @@ void MainWindow::on_install_clicked()
case 6:
case 7:
if(ui->vmChooser->currentIndex() == 0){
QMessageBox::warning(this, "提示", "Qemu 不支持该选项!");
QMessageBox::warning(this, tr("提示"), tr("Qemu 不支持该选项!"));
return;
}
break;
case 8:
if(ui->vmChooser->currentIndex() == 1){
QMessageBox::warning(this, "提示", "VirtualBox 不支持该选项!");
QMessageBox::warning(this, tr("提示"), tr("VirtualBox 不支持该选项!"));
return;
}
archFile.open(QIODevice::WriteOnly);
@@ -257,7 +260,7 @@ void MainWindow::on_install_clicked()
break;
case 9:
if(ui->vmChooser->currentIndex() == 1){
QMessageBox::warning(this, "提示", "VirtualBox 不支持该选项!");
QMessageBox::warning(this, tr("提示"), tr("VirtualBox 不支持该选项!"));
return;
}
archFile.open(QIODevice::WriteOnly);
@@ -272,7 +275,7 @@ void MainWindow::on_install_clicked()
buildvbox(ui->isoPath->text(), ui->systemVersion->currentIndex(), ui->vmChooser->currentIndex());
ui->tabWidget->setCurrentIndex(1);
stopShowTime = 1;
ui->CPUValue->showMessage("提示:目前已经尝试开启虚拟机,如果在一段时间后依旧还没看到虚拟机窗口开启,请在菜单栏查看虚拟机日志", 10000);
ui->CPUValue->showMessage(tr("提示:目前已经尝试开启虚拟机,如果在一段时间后依旧还没看到虚拟机窗口开启,请在菜单栏查看虚拟机日志"), 10000);
return;
}
@@ -301,11 +304,11 @@ void MainWindow::on_qemuSetting_clicked()
void MainWindow::on_addQemuDisk_triggered()
{
if(QFile::exists(QDir::homePath() + "/Qemu/Windows/Windows.qcow2")){
if(QMessageBox::question(this, "提示", "磁盘文件已存在,是否覆盖?\n覆盖后将无法恢复!") == QMessageBox::No){
if(QMessageBox::question(this, tr("提示"), tr("磁盘文件已存在,是否覆盖?\n覆盖后将无法恢复!")) == QMessageBox::No){
return;
}
}
QString path = QFileDialog::getOpenFileName(this, "选择 Qemu 镜像", QDir::homePath(), "Qemu镜像(*.qcow2 *.img *.raw *.qcow *.qed *.vdi *.vhdx *.vmdk);;所有文件(*.*)");
QString path = QFileDialog::getOpenFileName(this, tr("选择 Qemu 镜像"), QDir::homePath(), tr("Qemu镜像(*.qcow2 *.img *.raw *.qcow *.qed *.vdi *.vhdx *.vmdk);;所有文件(*.*)"));
qDebug() << path;
if(path == ""){
return;
@@ -316,23 +319,23 @@ void MainWindow::on_addQemuDisk_triggered()
}
if(QFile::exists(QDir::homePath() + "/Qemu/Windows/Windows.qcow2")){
if(!QFile::remove(QDir::homePath() + "/Qemu/Windows/Windows.qcow2") | !QFile::copy(path, QDir::homePath() + "/Qemu/Windows/Windows.qcow2")){
QMessageBox::critical(this, "提示", "添加错误!");
QMessageBox::critical(this, tr("提示"), tr("添加错误!"));
return;
}
}
else{
if(!QFile::copy(path, QDir::homePath() + "/Qemu/Windows/Windows.qcow2")){
QMessageBox::critical(this, "提示", "添加错误!");
QMessageBox::critical(this, tr("提示"), tr("添加错误!"));
return;
}
}
QMessageBox::information(this, "提示", "添加完成!");
QMessageBox::information(this, tr("提示"), tr("添加完成!"));
}
void MainWindow::on_delQemuDisk_triggered()
{
if(!QFile::exists(QDir::homePath() + "/Qemu/Windows/Windows.qcow2")){
QMessageBox::information(this, "提示", "不存在磁盘文件,无法导出");
QMessageBox::information(this, tr("提示"), tr("不存在磁盘文件,无法导出"));
return;
}
std::system(("xdg-open \"" + QDir::homePath() + "/Qemu/Windows/\"").toUtf8());
@@ -351,23 +354,23 @@ void MainWindow::on_saveQemuDiskButton_clicked()
void MainWindow::on_delQemuDiskButton_clicked()
{
if(!QFile::exists(QDir::homePath() + "/Qemu/Windows/Windows.qcow2")){
QMessageBox::information(this, "提示", "不存在磁盘文件,无法移除");
QMessageBox::information(this, tr("提示"), tr("不存在磁盘文件,无法移除"));
return;
}
if(QMessageBox::question(this, "提示", "是否删除?\n删除后将无法恢复!") == QMessageBox::No){
if(QMessageBox::question(this, tr("提示"), tr("是否删除?\n删除后将无法恢复!")) == QMessageBox::No){
return;
}
if(!QFile::remove(QDir::homePath() + "/Qemu/Windows/Windows.qcow2")){
QMessageBox::critical(this, "提示", "移除失败");
QMessageBox::critical(this, tr("提示"), tr("移除失败"));
return;
}
QMessageBox::information(this, "提示", "移除成功");
QMessageBox::information(this, tr("提示"), tr("移除成功"));
}
void MainWindow::on_kvmTest_clicked()
{
if(system("which kvm-ok")&& !QFile::exists(QCoreApplication::applicationDirPath() + "/kvm-ok")){
QMessageBox::critical(this, "错误", "未识别到命令 kvm-ok\n可以使用命令 sudo apt install cpu-checker 安装");
QMessageBox::critical(this, tr("错误"), tr("未识别到命令 kvm-ok\n可以使用命令 sudo apt install cpu-checker 安装"));
return;
}
QString kvm_ok_path = "kvm-ok";
@@ -377,16 +380,16 @@ void MainWindow::on_kvmTest_clicked()
else if(QFile::exists(QCoreApplication::applicationDirPath() + "/kvm-ok")){
kvm_ok_path = QCoreApplication::applicationDirPath() + "/kvm-ok";
}
qDebug() << "使用" << kvm_ok_path;
qDebug() << tr("使用") << kvm_ok_path;
QProcess process;
process.start(kvm_ok_path);
process.waitForStarted();
process.waitForFinished();
if(process.exitCode()){
QMessageBox::critical(this, "错误", "您的系统不支持使用 kvm\n" + process.readAll());
QMessageBox::critical(this, tr("错误"), tr("您的系统不支持使用 kvm\n") + process.readAll());
return;
}
QMessageBox::information(this, "提示", "您的系统支持使用 kvm\n" + process.readAll());
QMessageBox::information(this, tr("提示"), tr("您的系统支持使用 kvm\n") + process.readAll());
}
@@ -398,11 +401,11 @@ void MainWindow::on_actionVMRunlLog_triggered()
{
QFile file("/tmp/windows-virtual-machine-installer-for-wine-runner-run.log");
if(!file.exists()){
QMessageBox::information(this, "提示", "没有日志文件");
QMessageBox::information(this, tr("提示"), tr("没有日志文件"));
return;
}
file.open(QIODevice::ReadOnly);
QInputDialog::getMultiLineText(this, "运行日志", "虚拟机运行日志",file.readAll());
QInputDialog::getMultiLineText(this, tr("运行日志"), tr("虚拟机运行日志"), file.readAll());
file.close();
}
@@ -432,11 +435,11 @@ void MainWindow::on_actionVMInstallLog_triggered()
{
QFile file("/tmp/windows-virtual-machine-installer-for-wine-runner-install.log");
if(!file.exists()){
QMessageBox::information(this, "提示", "没有日志文件");
QMessageBox::information(this, tr("提示"), tr("没有日志文件"));
return;
}
file.open(QIODevice::ReadOnly);
QInputDialog::getMultiLineText(this, "安装日志", "虚拟机安装日志",file.readAll());
QInputDialog::getMultiLineText(this, tr("安装日志"), tr("虚拟机安装日志"),file.readAll());
file.close();
}

8
VM-source/trans.qrc Normal file
View File

@@ -0,0 +1,8 @@
<RCC>
<qresource prefix="/">
<file>zh_CN.qm</file>
<file>zh_CN.ts</file>
<file>en_US.qm</file>
<file>en_US.ts</file>
</qresource>
</RCC>

View File

@@ -5,7 +5,8 @@
<name>MainWindow</name>
<message>
<location filename="mainwindow.ui" line="14"/>
<source>Windows </source>
<source>Wine </source>
<oldsource>Windows </oldsource>
<translation type="unfinished"></translation>
</message>
<message>
@@ -35,57 +36,137 @@
<translation type="unfinished"></translation>
</message>
<message>
<location filename="mainwindow.ui" line="78"/>
<source></source>
<location filename="mainwindow.ui" line="89"/>
<source> Windows Windows 7 </source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="mainwindow.ui" line="82"/>
<source>Windows 7 32 </source>
<location filename="mainwindow.ui" line="94"/>
<source> Windows UEFI Windows 8 </source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="mainwindow.ui" line="87"/>
<source>Windows 7 64 </source>
<location filename="mainwindow.ui" line="99"/>
<source> WIndows 11</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="mainwindow.ui" line="92"/>
<source> Windows </source>
<location filename="mainwindow.ui" line="104"/>
<source> Windows XP VirtualBox</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="mainwindow.ui" line="117"/>
<source></source>
<location filename="mainwindow.ui" line="109"/>
<source> Windows VirtualBox</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="mainwindow.ui" line="126"/>
<location filename="mainwindow.ui" line="114"/>
<source> WindowsUEFI VirtualBox</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="mainwindow.ui" line="119"/>
<source> arm32 Qemu</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="mainwindow.ui" line="124"/>
<source> arm64 Qemu</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="mainwindow.ui" line="136"/>
<source></source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="mainwindow.ui" line="143"/>
<location filename="mainwindow.ui" line="153"/>
<source>qemu/kvm</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="mainwindow.ui" line="158"/>
<source>VirtualBox</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="mainwindow.ui" line="183"/>
<source> Qemu</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="mainwindow.ui" line="190"/>
<source>kvm </source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="mainwindow.ui" line="197"/>
<source>Qemu虚拟机设置</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="mainwindow.ui" line="204"/>
<source>/Qemu磁盘</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="mainwindow.ui" line="211"/>
<source>Qemu磁盘</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="mainwindow.ui" line="218"/>
<source>Qemu磁盘</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="mainwindow.ui" line="225"/>
<source>VirtualBox</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="mainwindow.ui" line="241"/>
<source>&lt;!DOCTYPE HTML PUBLIC &quot;-//W3C//DTD HTML 4.0//EN&quot; &quot;http://www.w3.org/TR/REC-html40/strict.dtd&quot;&gt;
&lt;html&gt;&lt;head&gt;&lt;meta name=&quot;qrichtext&quot; content=&quot;1&quot; /&gt;&lt;style type=&quot;text/css&quot;&gt;
p, li { white-space: pre-wrap; }
&lt;/style&gt;&lt;/head&gt;&lt;body style=&quot; font-family:&apos;Noto Sans CJK SC&apos;; font-size:10.5pt; font-weight:400; font-style:normal;&quot;&gt;
&lt;p style=&quot; margin-top:12px; margin-bottom:12px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;&quot;&gt;&lt;span style=&quot; font-size:10pt;&quot;&gt;使&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot; margin-top:12px; margin-bottom:12px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;&quot;&gt;&lt;span style=&quot; font-size:10pt;&quot;&gt;ed2k://|file|cn_windows_7_ultimate_with_sp1_x86_dvd_u_677486.iso|2653276160|7503E4B9B8738DFCB95872445C72AEFB|/&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot; margin-top:12px; margin-bottom:12px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;&quot;&gt;&lt;span style=&quot; font-size:10pt;&quot;&gt;ed2k://|file|cn_windows_7_ultimate_with_sp1_x64_dvd_u_677408.iso|3420557312|B58548681854236C7939003B583A8078|/&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;&quot;&gt;&lt;span style=&quot; font-size:11pt;&quot;&gt;UOS 3a4000 使 Qemu /&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;&quot;&gt;&lt;span style=&quot; font-size:11pt;&quot;&gt;&lt;/span&gt;&lt;a href=&quot;https://gfdgdxi.lanzoue.com/b01rk9wza&quot;&gt;&lt;span style=&quot; font-size:11pt; text-decoration: underline; color:#0082fa;&quot;&gt;https://gfdgdxi.lanzoue.com/b01rk9wza&lt;/span&gt;&lt;/a&gt;&lt;span style=&quot; font-size:11pt;&quot;&gt; 密码:6wvf&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;&quot;&gt;&lt;span style=&quot; font-size:11pt;&quot;&gt;&lt;/span&gt;&lt;a href=&quot;http://ctfile.gfdgdxi.top/d/31540479-58662214-c46520?p=2061&quot;&gt;&lt;span style=&quot; font-size:11pt; text-decoration: underline; color:#0082fa;&quot;&gt;http://ctfile.gfdgdxi.top/d/31540479-58662214-c46520?p=2061&lt;/span&gt;&lt;/a&gt;&lt;span style=&quot; font-size:11pt;&quot;&gt; (访问密码: 2061)&lt;/span&gt;&lt;/p&gt;
&lt;hr /&gt;
&lt;p style=&quot; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;&quot;&gt;&lt;span style=&quot; font-size:11pt;&quot;&gt;Qemu / kvm Qemu&lt;/span&gt;&lt;/p&gt;
&lt;hr /&gt;
&lt;p style=&quot; margin-top:12px; margin-bottom:12px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;&quot;&gt;&lt;span style=&quot; font-size:10pt;&quot;&gt;使 ISO &lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot; margin-top:12px; margin-bottom:12px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;&quot;&gt;&lt;span style=&quot; font-size:10pt;&quot;&gt;123 &lt;/span&gt;&lt;a href=&quot;https://www.123pan.com/s/pDSKVv-oypWv&quot;&gt;&lt;span style=&quot; font-size:11pt; text-decoration: underline; color:#0082fa;&quot;&gt;https://www.123pan.com/s/pDSKVv-oypWv&lt;/span&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p style=&quot; margin-top:12px; margin-bottom:12px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;&quot;&gt;&lt;span style=&quot; font-size:10pt;&quot;&gt;&lt;/span&gt;&lt;a href=&quot;https://pan.xunlei.com/s/VNKMz3wgbYHg6JIh50ZKIc7pA1?pwd=35e5&quot;&gt;&lt;span style=&quot; font-size:11pt; text-decoration: underline; color:#0082fa;&quot;&gt;https://pan.xunlei.com/s/VNKMz3wgbYHg6JIh50ZKIc7pA1?pwd=35e5&lt;/span&gt;&lt;/a&gt;&lt;span style=&quot; font-size:10pt;&quot;&gt; 提取码35e5&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot; margin-top:12px; margin-bottom:12px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;&quot;&gt;&lt;span style=&quot; font-size:10pt;&quot;&gt;&lt;/span&gt;&lt;a href=&quot;https://pan.baidu.com/s/19WbvinITCQJFZpAdZutrjg?pwd=me4y&quot;&gt;&lt;span style=&quot; font-size:11pt; text-decoration: underline; color:#0082fa;&quot;&gt;https://pan.baidu.com/s/19WbvinITCQJFZpAdZutrjg?pwd=me4y&lt;/span&gt;&lt;/a&gt;&lt;span style=&quot; font-size:10pt;&quot;&gt; 提取码: me4y&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot; margin-top:12px; margin-bottom:12px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;&quot;&gt;&lt;span style=&quot; font-size:10pt;&quot;&gt;&lt;/span&gt;&lt;a href=&quot;http://ctfile.gfdgdxi.top/d/31540479-58662220-3590cf?p=2061&quot;&gt;&lt;span style=&quot; font-size:11pt; text-decoration: underline; color:#0082fa;&quot;&gt;http://ctfile.gfdgdxi.top/d/31540479-58662220-3590cf?p=2061&lt;/span&gt;&lt;/a&gt;&lt;span style=&quot; font-size:10pt;&quot;&gt; (访问密码: 2061)&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot; margin-top:12px; margin-bottom:12px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;&quot;&gt;&lt;span style=&quot; font-size:10pt;&quot;&gt;&lt;/span&gt;&lt;a href=&quot;ed2k://|file|cn_windows_7_ultimate_with_sp1_x86_dvd_u_677486.iso|2653276160|7503E4B9B8738DFCB95872445C72AEFB|/&quot;&gt;&lt;span style=&quot; font-size:11pt; text-decoration: underline; color:#0082fa;&quot;&gt;ed2k://|file|cn_windows_7_ultimate_with_sp1_x86_dvd_u_677486.iso|2653276160|7503E4B9B8738DFCB95872445C72AEFB|/&lt;/span&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p style=&quot; margin-top:12px; margin-bottom:12px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;&quot;&gt;&lt;span style=&quot; font-size:10pt;&quot;&gt;&lt;/span&gt;&lt;a href=&quot;ed2k://|file|cn_windows_7_ultimate_with_sp1_x64_dvd_u_677408.iso|3420557312|B58548681854236C7939003B583A8078|/&quot;&gt;&lt;span style=&quot; font-size:11pt; text-decoration: underline; color:#0082fa;&quot;&gt;ed2k://|file|cn_windows_7_ultimate_with_sp1_x64_dvd_u_677408.iso|3420557312|B58548681854236C7939003B583A8078|/&lt;/span&gt;&lt;/a&gt;&lt;/p&gt;
&lt;hr /&gt;
&lt;p style=&quot; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;&quot;&gt;&lt;span style=&quot; font-size:11pt; font-weight:600;&quot;&gt; Windows &lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;&quot;&gt;&lt;span style=&quot; font-size:11pt;&quot;&gt;: &lt;/span&gt;&lt;a href=&quot;https://pan.baidu.com/s/1D1NSy7k7XBnOZL_tNTnG6g?pwd=7s2p&quot;&gt;&lt;span style=&quot; font-size:11pt; text-decoration: underline; color:#0082fa;&quot;&gt;https://pan.baidu.com/s/1D1NSy7k7XBnOZL_tNTnG6g?pwd=7s2p&lt;/span&gt;&lt;/a&gt;&lt;span style=&quot; font-size:11pt;&quot;&gt; 提取码: 7s2p &lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;&quot;&gt;&lt;span style=&quot; font-size:11pt;&quot;&gt;&lt;/span&gt;&lt;a href=&quot;http://ctfile.gfdgdxi.top/d/31540479-58659214-0732a8?p=2061&quot;&gt;&lt;span style=&quot; font-size:11pt; text-decoration: underline; color:#0082fa;&quot;&gt;http://ctfile.gfdgdxi.top/d/31540479-58659214-0732a8?p=2061&lt;/span&gt;&lt;/a&gt;&lt;span style=&quot; font-size:11pt;&quot;&gt; (访问密码: 2061)&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;&quot;&gt;&lt;span style=&quot; font-size:11pt;&quot;&gt;123&lt;/span&gt;&lt;a href=&quot;https://www.123pan.com/s/pDSKVv-uCBWv.html&quot;&gt;&lt;span style=&quot; font-size:11pt; text-decoration: underline; color:#0082fa;&quot;&gt;https://www.123pan.com/s/pDSKVv-uCBWv.html&lt;/span&gt;&lt;/a&gt;&lt;/p&gt;
&lt;hr /&gt;&lt;/body&gt;&lt;/html&gt;</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="mainwindow.ui" line="141"/>
<source>/使</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="mainwindow.ui" line="150"/>
<location filename="mainwindow.ui" line="283"/>
<source>&lt;!DOCTYPE HTML PUBLIC &quot;-//W3C//DTD HTML 4.0//EN&quot; &quot;http://www.w3.org/TR/REC-html40/strict.dtd&quot;&gt;
&lt;html&gt;&lt;head&gt;&lt;meta name=&quot;qrichtext&quot; content=&quot;1&quot; /&gt;&lt;style type=&quot;text/css&quot;&gt;
p, li { white-space: pre-wrap; }
&lt;/style&gt;&lt;/head&gt;&lt;body style=&quot; font-family:&apos;Noto Sans CJK SC&apos;; font-size:10.5pt; font-weight:400; font-style:normal;&quot;&gt;
&lt;p style=&quot; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;&quot;&gt;&lt;span style=&quot; font-size:26pt; font-weight:600;&quot;&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;&quot;&gt;&lt;/p&gt;
&lt;p style=&quot; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;&quot;&gt;&lt;span style=&quot; font-weight:600; font-style:italic; text-decoration: underline;&quot;&gt;使 VirtualBox&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;&quot;&gt;&lt;span style=&quot; font-weight:600; font-style:italic; text-decoration: underline;&quot;&gt; X86 PC使 qemu kvm使 Windows XP Windows 7&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;&quot;&gt;&lt;/p&gt;
&lt;p style=&quot; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;&quot;&gt;Ctrl&lt;/p&gt;
&lt;p style=&quot; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;&quot;&gt;&lt;span style=&quot; font-weight:600; text-decoration: underline;&quot;&gt;/https://gitee.com/gfdgd-xi/deep-wine-runner/wikis 或 https://gitee.com/gfdgd-xi/wine-runner-wiki&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;&quot;&gt;Ctrl&lt;span style=&quot; font-weight:600; font-style:italic; text-decoration: underline;&quot;&gt;qemu则是 Ctrl+Alt+G&lt;/span&gt; &lt;/p&gt;
&lt;p style=&quot; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;&quot;&gt;VirtualBox &lt;/p&gt;
&lt;p style=&quot; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;&quot;&gt;Qemu Virtio &lt;a href=&quot;https://fedorapeople.org/groups/virt/virtio-win/direct-downloads/archive-virtio/&quot;&gt;&lt;span style=&quot; font-size:11pt; text-decoration: underline; color:#0082fa;&quot;&gt;https://fedorapeople.org/groups/virt/virtio-win/direct-downloads/archive-virtio/&lt;/span&gt;&lt;/a&gt;&lt;/p&gt;
&lt;hr /&gt;
&lt;p style=&quot;-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;&quot;&gt;&lt;br /&gt;&lt;/p&gt;
&lt;p style=&quot;-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;&quot;&gt;&lt;br /&gt;&lt;/p&gt;
@@ -118,7 +199,7 @@ p, li { white-space: pre-wrap; }
&lt;p style=&quot; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;&quot;&gt;&lt;span style=&quot; font-size:11pt;&quot;&gt;3&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;&quot;&gt;&lt;img src=&quot;:/picture//_VirtualBox_20220712223705.png&quot; /&gt;&lt;/p&gt;
&lt;hr /&gt;
&lt;p style=&quot; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;&quot;&gt;&lt;span style=&quot; font-size:26pt; font-weight:600;&quot;&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;&quot;&gt;&lt;span style=&quot; font-size:26pt; font-weight:600;&quot;&gt;使 VirtualBox&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;&quot;&gt;1&lt;/p&gt;
&lt;p style=&quot; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;&quot;&gt;2&lt;/p&gt;
&lt;p style=&quot; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;&quot;&gt;3&lt;/p&gt;
@@ -142,13 +223,7 @@ p, li { white-space: pre-wrap; }
<translation type="unfinished"></translation>
</message>
<message>
<location filename="mainwindow.ui" line="224"/>
<location filename="mainwindow.ui" line="313"/>
<source></source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="mainwindow.ui" line="281"/>
<location filename="mainwindow.ui" line="421"/>
<source>&lt;!DOCTYPE HTML PUBLIC &quot;-//W3C//DTD HTML 4.0//EN&quot; &quot;http://www.w3.org/TR/REC-html40/strict.dtd&quot;&gt;
&lt;html&gt;&lt;head&gt;&lt;meta name=&quot;qrichtext&quot; content=&quot;1&quot; /&gt;&lt;style type=&quot;text/css&quot;&gt;
p, li { white-space: pre-wrap; }
@@ -159,18 +234,364 @@ p, li { white-space: pre-wrap; }
&lt;p style=&quot; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;&quot;&gt;&lt;/p&gt;
&lt;p style=&quot; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;&quot;&gt; Gitee&lt;a href=&quot;https://gitee.com/gfdgd-xi/deep-wine-runner&quot;&gt;&lt;span style=&quot; font-size:11pt; text-decoration: underline; color:#0082fa;&quot;&gt;https://gitee.com/gfdgd-xi/deep-wine-runner&lt;/span&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p style=&quot; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;&quot;&gt; Github&lt;a href=&quot;https://github.com/gfdgd-xi/deep-wine-runner&quot;&gt;&lt;span style=&quot; font-size:11pt; text-decoration: underline; color:#0082fa;&quot;&gt;https://github.com/gfdgd-xi/deep-wine-runner&lt;/span&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p style=&quot; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;&quot;&gt; Gitlink&lt;a href=&quot;https://gitlink.org.cn/gfdgd_xi/deep-wine-runner&quot;&gt;&lt;span style=&quot; font-size:11pt; text-decoration: underline; color:#0082fa;&quot;&gt;https://gitlink.org.cn/gfdgd_xi/deep-wine-runner&lt;/span&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p style=&quot; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;&quot;&gt; Wine Wine Windows Windows exe &lt;/p&gt;
&lt;p style=&quot; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;&quot;&gt;gfdgd xi&lt;/p&gt;
&lt;p style=&quot; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;&quot;&gt;gfdgd xi&lt;/p&gt;
&lt;hr /&gt;
&lt;p style=&quot; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;&quot;&gt;&lt;/p&gt;
&lt;p style=&quot; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;&quot;&gt;&lt;span style=&quot; font-family:&apos;Droid Sans Mono&apos;,&apos;monospace&apos;,&apos;monospace&apos;; font-size:11pt; color:#6a9955;&quot;&gt;https://juejin.cn/post/7080484519328874510&lt;/span&gt;&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</source>
&lt;p style=&quot;-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;&quot;&gt;&lt;br /&gt;&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="mainwindow.ui" line="308"/>
<location filename="mainwindow.ui" line="463"/>
<source></source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="mainwindow.ui" line="487"/>
<source>/</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="mainwindow.ui" line="492"/>
<source></source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="mainwindow.ui" line="497"/>
<location filename="mainwindow.cpp" line="442"/>
<source></source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="mainwindow.ui" line="502"/>
<location filename="mainwindow.cpp" line="408"/>
<source></source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="mainwindow.ui" line="507"/>
<source>X86Qemu</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="mainwindow.ui" line="512"/>
<source> VirtualBox</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="mainwindow.ui" line="517"/>
<source> Qemu</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="mainwindow.ui" line="75"/>
<location filename="mainwindow.ui" line="79"/>
<source>Windows 7 32 </source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="mainwindow.ui" line="84"/>
<source>Windows 7 64 </source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="mainwindow.ui" line="232"/>
<source></source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="mainwindow.ui" line="274"/>
<source>/使</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="mainwindow.ui" line="364"/>
<location filename="mainwindow.ui" line="482"/>
<source></source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="mainwindow.ui" line="477"/>
<source>退</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="mainwindow.cpp" line="88"/>
<source>Wine </source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="mainwindow.cpp" line="90"/>
<source>&lt;p&gt;</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="mainwindow.cpp" line="90"/>
<source>&lt;/p&gt;&lt;p&gt;</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="mainwindow.cpp" line="90"/>
<source>&lt;/p&gt;&lt;p&gt;</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="mainwindow.cpp" line="92"/>
<source>&lt;hr/&gt;&lt;h1&gt;&lt;/h1&gt;</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="mainwindow.cpp" line="179"/>
<location filename="mainwindow.cpp" line="186"/>
<location filename="mainwindow.cpp" line="193"/>
<location filename="mainwindow.cpp" line="200"/>
<location filename="mainwindow.cpp" line="215"/>
<location filename="mainwindow.cpp" line="222"/>
<location filename="mainwindow.cpp" line="229"/>
<location filename="mainwindow.cpp" line="248"/>
<location filename="mainwindow.cpp" line="254"/>
<location filename="mainwindow.cpp" line="263"/>
<location filename="mainwindow.cpp" line="307"/>
<location filename="mainwindow.cpp" line="322"/>
<location filename="mainwindow.cpp" line="328"/>
<location filename="mainwindow.cpp" line="332"/>
<location filename="mainwindow.cpp" line="338"/>
<location filename="mainwindow.cpp" line="357"/>
<location filename="mainwindow.cpp" line="360"/>
<location filename="mainwindow.cpp" line="364"/>
<location filename="mainwindow.cpp" line="367"/>
<location filename="mainwindow.cpp" line="392"/>
<location filename="mainwindow.cpp" line="404"/>
<location filename="mainwindow.cpp" line="438"/>
<source></source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="mainwindow.cpp" line="179"/>
<source> Qemu</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="mainwindow.cpp" line="186"/>
<source> VBox</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="mainwindow.cpp" line="193"/>
<source> qemu-system-arm</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="mainwindow.cpp" line="200"/>
<source> qemu-system-aarch64</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="mainwindow.cpp" line="215"/>
<source> Windows7X86Auto.iso
Wine </source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="mainwindow.cpp" line="222"/>
<source> Windows7X64Auto.iso
Wine </source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="mainwindow.cpp" line="229"/>
<source> UEFI
Qemu Qemu</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="mainwindow.cpp" line="248"/>
<source>Qemu </source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="mainwindow.cpp" line="254"/>
<location filename="mainwindow.cpp" line="263"/>
<source>VirtualBox </source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="mainwindow.cpp" line="278"/>
<source></source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="mainwindow.cpp" line="307"/>
<source>
</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="mainwindow.cpp" line="311"/>
<source> Qemu </source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="mainwindow.cpp" line="311"/>
<source>Qemu镜像(*.qcow2 *.img *.raw *.qcow *.qed *.vdi *.vhdx *.vmdk);;(*.*)</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="mainwindow.cpp" line="322"/>
<location filename="mainwindow.cpp" line="328"/>
<source></source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="mainwindow.cpp" line="332"/>
<source></source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="mainwindow.cpp" line="338"/>
<source></source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="mainwindow.cpp" line="357"/>
<source></source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="mainwindow.cpp" line="360"/>
<source>
</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="mainwindow.cpp" line="364"/>
<source></source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="mainwindow.cpp" line="367"/>
<source></source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="mainwindow.cpp" line="373"/>
<location filename="mainwindow.cpp" line="389"/>
<source></source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="mainwindow.cpp" line="373"/>
<source> kvm-ok
使 sudo apt install cpu-checker </source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="mainwindow.cpp" line="383"/>
<source>使</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="mainwindow.cpp" line="389"/>
<source>使 kvm
</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="mainwindow.cpp" line="392"/>
<source>使 kvm
</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="mainwindow.cpp" line="404"/>
<location filename="mainwindow.cpp" line="438"/>
<source></source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="mainwindow.cpp" line="408"/>
<source></source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="mainwindow.cpp" line="442"/>
<source></source>
<translation type="unfinished"></translation>
</message>
</context>
<context>
<name>QemuSetting</name>
<message>
<location filename="qemusetting.ui" line="14"/>
<source></source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="qemusetting.ui" line="35"/>
<source>&lt;h3&gt;&lt;/h3&gt;</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="qemusetting.ui" line="42"/>
<source>VNC服务端口</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="qemusetting.ui" line="49"/>
<source> rdp </source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="qemusetting.ui" line="56"/>
<source>MB</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="qemusetting.ui" line="90"/>
<source>&lt;h3&gt;&lt;/h3&gt;</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="qemusetting.ui" line="97"/>
<source>VNC服务</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="qemusetting.ui" line="104"/>
<source> kvm </source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="qemusetting.ui" line="111"/>
<source>CPU核心数</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="qemusetting.ui" line="125"/>
<source></source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="qemusetting.ui" line="145"/>
<source></source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="qemusetting.ui" line="158"/>
<source></source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="qemusetting.ui" line="171"/>
<source>
</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="qemusetting.ui" line="185"/>
<source>
Wine
</source>
<translation type="unfinished"></translation>
</message>
</context>
</TS>

View File

@@ -8,7 +8,7 @@ Certainty: possible
Check: binaries
Type: binary, udeb
Priority: optional
Depends: python3, python3-pil, libc6, python3-pil.imagetk, python3-pyquery, aria2, curl, unrar | unrar-free , unzip, python3-requests, python3-pyqt5, python3-psutil, deepin-terminal | mate-terminal | gnome-terminal | xfce4-terminal, python3-dbus, python3-pip, p7zip-full, sudo, python3-pyperclip, bubblewrap, zenity
Depends: python3, python3-pil, libc6, python3-pil.imagetk, python3-pyquery, aria2, curl, unrar | unrar-free , unzip, python3-requests, python3-pyqt5, python3-psutil, deepin-terminal | mate-terminal | gnome-terminal | xfce4-terminal, python3-dbus, python3-pip, p7zip-full, sudo, python3-pyperclip, bubblewrap, zenity, tree
Recommends: winbind, wimtools, python3-pyqt5.qtwebengine, binfmt-support, libc6:i386, libc6:armhf, libwine
Section: utils
Conflicts: spark.deepin-venturi-setter, spark-deepin-wine5-application-packer, spark-deepin-wine-runner-52

View File

@@ -642,6 +642,7 @@ if __name__ == "__main__":
color: white;
""")
wineChooserList = [
"使用 Deepin Wine8 Stable 打包应用",
"使用 Spark Wine8 打包应用",
"使用 Spark Wine7 Devel 打包应用",
"使用 Deepin Wine6 Stable 打包应用",
@@ -650,8 +651,7 @@ if __name__ == "__main__":
"使用 Deepin Wine2 打包应用"
]
wineChooserIndex = 2
wineList = ["spark-wine8", "spark-wine7-devel", "deepin-wine6-stable", "deepin-wine6-vannila", "spark-wine8-wow", "deepin-wine5-stable", "deepin-wine5", "deepin-wine"]
if os.system("which deepin-wine6-stable"):
wineList = ["deepin-wine8-stable", "spark-wine8", "spark-wine7-devel", "deepin-wine6-stable", "deepin-wine6-vannila", "spark-wine8-wow", "deepin-wine5-stable", "deepin-wine5", "deepin-wine"]
for i in range(len(wineList)):
if not os.system(f"which '{wineList[i]}'"):
wineChooserIndex = i

View File

@@ -1584,9 +1584,9 @@ StartupNotify=false
if helperConfigPath != None and helperConfigPath != "":
os.makedirs(f"{debPackagePath}/opt/deepinwine/tools/spark_run_v4_app_configs")
if e6_text.text()[-3: ] == ".7z":
shutil.copy(helperConfigPath, f"{debPackagePath}/opt/deepinwine/tools/spark_run_v4_app_configs/{os.path.splitext(e6_text.text())[0]}.sh")
shutil.copy(helperConfigPath, f"{debPackagePath}/opt/deepinwine/tools/spark_run_v4_app_configs/{os.path.splitext(os.path.basename(e6_text.text()))[0]}.sh")
else:
shutil.copy(helperConfigPath, f"{debPackagePath}/opt/deepinwine/tools/spark_run_v4_app_configs/{e6_text.text()}.sh")
shutil.copy(helperConfigPath, f"{debPackagePath}/opt/deepinwine/tools/spark_run_v4_app_configs/{os.path.basename(e6_text.text())}.sh")
################
# 修改文件权限
################
@@ -2183,8 +2183,8 @@ bottleNameLock = False
###############
programPath = os.path.split(os.path.realpath(__file__))[0] # 返回 string
# 如果要添加其他 wine请在字典添加其名称和执行路径
wine = {"deepin-wine": "deepin-wine", "deepin-wine5": "deepin-wine5", "wine": "wine", "wine64": "wine64", "deepin-wine5 stable": "deepin-wine5-stable", "deepin-wine6 stable": "deepin-wine6-stable", "spark-wine7-devel": "spark-wine7-devel", "ukylin-wine": "ukylin-wine", "spark-wine8": "spark-wine8", "spark-wine8-wow": "spark-wine8-wow", "deepin-wine6-vannila": "deepin-wine6-vannila"}
wineValue = {"deepin-wine": "deepin-wine", "deepin-wine5": "deepin-wine5", "wine": "wine", "wine64": "wine64", "deepin-wine5-stable": "deepin-wine5 stable", "deepin-wine6-stable": "deepin-wine6 stable", "spark-wine7-devel": "spark-wine7-devel", "ukylin-wine": "ukylin-wine", "spark-wine8": "spark-wine8", "spark-wine8-wow": "spark-wine8-wow", "deepin-wine6-vannila": "deepin-wine6-vannila"}
wine = {"deepin-wine": "deepin-wine", "deepin-wine5": "deepin-wine5", "wine": "wine", "wine64": "wine64", "deepin-wine5 stable": "deepin-wine5-stable", "deepin-wine6 stable": "deepin-wine6-stable", "spark-wine7-devel": "spark-wine7-devel", "ukylin-wine": "ukylin-wine", "okylin-wine": "okylin-wine", "spark-wine8": "spark-wine8", "spark-wine8-wow": "spark-wine8-wow", "deepin-wine6-vannila": "deepin-wine6-vannila", "deepin-wine8-stable": "deepin-wine8-stable"}
wineValue = {"deepin-wine": "deepin-wine", "deepin-wine5": "deepin-wine5", "wine": "wine", "wine64": "wine64", "deepin-wine5-stable": "deepin-wine5 stable", "deepin-wine6-stable": "deepin-wine6 stable", "spark-wine7-devel": "spark-wine7-devel", "ukylin-wine": "ukylin-wine", "okylin-wine": "okylin-wine", "spark-wine8": "spark-wine8", "spark-wine8-wow": "spark-wine8-wow", "deepin-wine6-vannila": "deepin-wine6-vannila", "deepin-wine8-stable": "deepin-wine8-stable"}
# 读取 wine 本地列表
for i in os.listdir("/opt"):
if os.path.exists(f"/opt/{i}/bin/wine"):
@@ -2243,7 +2243,7 @@ widgetLayout = QtWidgets.QGridLayout()
# 设置变量以修改和获取值项
wineVersion = QtWidgets.QComboBox()
wineVersion.addItems(wine.keys())
wineVersion.setCurrentText("deepin-wine6 stable")
wineVersion.setCurrentText("deepin-wine8-stable")
e1_text = QtWidgets.QLineEdit()
e2_text = QtWidgets.QLineEdit()
e3_text = QtWidgets.QLineEdit()

Binary file not shown.

After

Width:  |  Height:  |  Size: 34 KiB

View File

@@ -1,8 +1,8 @@
{
"Version": "3.5.0",
"Version": "3.6.1",
"Time": "未知",
"Thank": [
"感 @ёжезийлёзйз 进行 Loongarch 架构的测试(旧世界,远程)",
"感 @ёжезийлёзйз 进行 Loongarch 架构的测试(旧世界,远程)",
"感谢 @run@3a4k 提供 3a4000 测试机器(远程)",
"感谢 RacoonGX 的付出与贡献",
"感谢 @Amber 编写的《使用wine运行器打包无安装包的软件》https://bbs.deepin.org/post/247720",

File diff suppressed because it is too large Load Diff

View File

@@ -0,0 +1,4 @@
#!/usr/bin/env python3
import json
import requests
print(requests.get("http://update.gfdgdxi.top/update.json").json()["Url"][0])

BIN
off-line-shell/bwrap_amd64 Executable file

Binary file not shown.

View File

@@ -0,0 +1,37 @@
#!/bin/bash
zipPath=$1
tempPath=/tmp/wine-runner-$RANDOM
if [[ $1 == "--help" ]]; then
echo ©2020~`date +%Y` gfdgd xi
echo
echo ' --help' Show help
echo ' --no-clean' "Don't clean temp file after running"
exit
fi
echo
echo 'm m " mmmmm '
echo '# # # mmm m mm mmm # "# m m m mm m mm mmm m mm '
echo '" #"# # # #" # #" # #mmmm" # # #" # #" # #" # #" "'
echo ' ## ##" # # # #"""" # "m # # # # # # #"""" # '
echo ' # # mm#mm # # "#mm" # " "mm"# # # # # "#mm" # '
echo
echo
echo
echo 'mmmmm m"" # # " '
echo '# # m m mmmm mm#mm mmm# mmmm mmm# m m mmm '
echo '#mmmm" "m m" #" "# # #" "# #" "# #" "# #m# # '
echo '# # #m# # # # # # # # # # m#m # '
echo '#mmmm" "# "#m"# # "#m## "#m"# "#m## m" "m mm#mm'
echo ' m" m # m # '
echo ' "" "" "" '
echo
echo ©2020~`date +%Y` gfdgd xi
echo
echo Temp Path: $tempPath
mkdir -pv $tempPath
7z x "$1" -o$tempPath
bash $tempPath/run.sh
if [[ $1 != "--no-clean" ]]; then
rm -rfv $tempPath
fi
exit

44
off-line-shell/run.sh Executable file
View File

@@ -0,0 +1,44 @@
#!/bin/bash
SHELL_FOLDER=$(cd "$(dirname "$0")";pwd)
# /opt 目录识别
option=""
for path in `ls /opt`
do
echo /opt/$path
if [[ $path != wine-staging ]]; then
# 支持识别正确的 wine
mkdir -pv "$SHELL_FOLDER/opt/$path"
option="$option --dev-bind /opt/$path /opt/$path"
fi
done
wineName=(deepin-wine
deepin-wine8-stable
deepin-wine6-stable
deepin-wine5-stable
spark-wine
spark-wine8
deepin-wine6-vannila
spark-wine7-devel
spark-wine8-wow
deepin-wine5
ukylin-wine
okylin-wine
bookworm-run
)
for i in ${wineName[*]}; do
if [[ -e /usr/bin/$i ]]; then
option="$option --dev-bind /usr/bin/$i /usr/bin/$i"
if [[ ! -e "$SHELL_FOLDER/bin/$i" ]]; then
touch "$SHELL_FOLDER/bin/$i"
fi
fi
done
"$SHELL_FOLDER/bwrap" --dev-bind / / \
--dev-bind "$SHELL_FOLDER/opt" /opt \
--dev-bind "$SHELL_FOLDER/bin" /usr/bin \
--dev-bind "$SHELL_FOLDER/lib" /usr/lib \
--dev-bind "$SHELL_FOLDER/lib32" /usr/lib32 \
--dev-bind "$SHELL_FOLDER/lib64" /usr/lib64 \
--dev-bind /usr/lib/locale /usr/lib/locale \
$option \
$SHELL_FOLDER/runner/deepin-wine-runner

View File

@@ -1,8 +1,8 @@
{
"Version": "3.5.0",
"Version": "3.6.1",
"Time": "未知",
"Thank": [
"感 @ёжезийлёзйз 进行 Loongarch 架构的测试(旧世界,远程)",
"感 @ёжезийлёзйз 进行 Loongarch 架构的测试(旧世界,远程)",
"感谢 @run@3a4k 提供 3a4000 测试机器(远程)",
"感谢 RacoonGX 的付出与贡献",
"感谢 @Amber 编写的《使用wine运行器打包无安装包的软件》https://bbs.deepin.org/post/247720",

View File

@@ -1,7 +1,7 @@
#!/usr/bin/env python3
# 本来是用C++写的但在非deepin/UOS编译/运行就是下载不了https文件只能用python重写
#########################################################################
# 作者gfdgd xi、为什么您不喜欢熊出没和阿布
# 作者gfdgd xi
# 版本2.4.0
# 感谢:感谢 deepin-wine 团队,提供了 deepin-wine 给大家使用,让我能做这个程序
# 基于 Python3 的 PyQt5 构建
@@ -78,9 +78,9 @@ class Ui_MainWindow(object):
self.menu = MainWindow.menuBar()
self.changeSources = self.menu.addMenu(_translate("MainWindow", "更换源"))
self.gitlinkAction = QtWidgets.QAction(_translate("MainWindow", "Gitee 源(推荐)"))
self.kgithubAction = QtWidgets.QAction(_translate("MainWindow", "Github 镜像站源"))
self.ipv6Action = QtWidgets.QAction(_translate("MainWindow", "Github 源1国内访问不稳定"))
self.githubAction = QtWidgets.QAction(_translate("MainWindow", "Github 源2(国内访问不稳定)"))
self.kgithubAction = QtWidgets.QAction(_translate("MainWindow", "Sourceforge 源"))
self.ipv6Action = QtWidgets.QAction(_translate("MainWindow", "默认源"))
self.githubAction = QtWidgets.QAction(_translate("MainWindow", "Github 源(国内访问不稳定)"))
self.localAction = QtWidgets.QAction(_translate("MainWindow", "本地测试源127.0.0.1"))
self.changeSources.addAction(self.ipv6Action)
@@ -314,11 +314,14 @@ def on_addButton_clicked():
dialog.setWindowIcon(QtGui.QIcon(f"{programPath}/../deepin-wine-runner.svg"))
dialog.setCancelButton(cancel)
dialog.setWindowTitle(f"正在下载“{internetJsonList[choose][0]}”")
saveName = os.path.basename(internetJsonList[choose][1])
if os.path.split(os.path.basename(internetJsonList[choose][1]))[0] == "":
saveName = os.path.basename(internetJsonList[choose][0]) + ".7z"
QT.thread = DownloadThread(
dialog,
downloadUrl,
"",
os.path.basename(internetJsonList[choose][1]),
saveName,
ui.localWineList,
ui.deleteZip.isChecked(),
not ui.unzip.isChecked(),
@@ -361,12 +364,12 @@ if __name__ == "__main__":
internetJsonList = []
internetWineSourceList = [
"http://wine.wine-runner.gfdgdxi.top/",
"https://githubfast.com/gfdgd-xi/wine-mirrors-websize/raw/master/",
"http://wine.wine-runner.gfdgdxi.top/sourceforge",
"https://gitee.com/gfdgd-xi/wine-mirrors-websize/raw/master/",
"https://github.com/gfdgd-xi/wine-mirrors-websize/raw/master/",
"http://127.0.0.1/wine-mirrors/" # 本地测试源
]
internetWineSource = internetWineSourceList[0]
app = QtWidgets.QApplication(sys.argv)
# 读取翻译
if not get_now_lang() == "zh_CN.UTF-8":
@@ -379,6 +382,22 @@ if __name__ == "__main__":
window.setWindowIcon(QtGui.QIcon(f"{programPath}/../deepin-wine-runner.svg"))
ui.setupUi(window)
window.show()
# 判断机器所在国家并自动分配源
try:
isChina = requests.get("https://ip.useragentinfo.com/json").json()["country"] == "中国"
print("IsChina", isChina)
if isChina:
internetWineSource = internetWineSourceList[0]
ui.ipv6Action.setChecked(True)
else:
internetWineSource = internetWineSourceList[1]
ui.kgithubAction.setChecked(True)
except:
traceback.print_exc()
print("IsChina", False)
# 请求失败,默认使用国际源
internetWineSource = internetWineSourceList[1]
ui.kgithubAction.setChecked(True)
# 连接信号
ui.addButton.clicked.connect(on_addButton_clicked)
ui.delButton.clicked.connect(on_delButton_clicked)