Compare commits
	
		
			12 Commits
		
	
	
		
			6ca3cea617
			...
			86123c3358
		
	
	| Author | SHA1 | Date | |
|---|---|---|---|
| 86123c3358 | |||
| 29b3196b9a | |||
| 0f26bdd26b | |||
| e15ce0ceff | |||
| 6927b3749b | |||
| 8c8a471072 | |||
| b61da796c5 | |||
| fc08a3485e | |||
| ee0c213899 | |||
| d8d09128e6 | |||
| 673659abd7 | |||
| 56e93dbb72 | 
@ -58,7 +58,10 @@ jobs:
 | 
				
			|||||||
          sudo rm -rf package/runner/RegShot.exe
 | 
					          sudo rm -rf package/runner/RegShot.exe
 | 
				
			||||||
          sudo rm -rf package/runner/novnc
 | 
					          sudo rm -rf package/runner/novnc
 | 
				
			||||||
          sudo rm -rf package/bin/wine*
 | 
					          sudo rm -rf package/bin/wine*
 | 
				
			||||||
 | 
					          # 修复 which 命令的问题导致无法正常识别终端的问题
 | 
				
			||||||
 | 
					          sudo cp package/bin/which.debianutils package/bin/which -rv
 | 
				
			||||||
          cp deep-wine-runner/off-line-shell/run.sh package -rv
 | 
					          cp deep-wine-runner/off-line-shell/run.sh package -rv
 | 
				
			||||||
 | 
					          cp deep-wine-runner/off-line-shell/run-system-bwrap.sh package -rv
 | 
				
			||||||
          cp deep-wine-runner/off-line-shell/bwrap_arm64 package/bwrap -rv
 | 
					          cp deep-wine-runner/off-line-shell/bwrap_arm64 package/bwrap -rv
 | 
				
			||||||
          sudo chmod 777 -Rv package ; true
 | 
					          sudo chmod 777 -Rv package ; true
 | 
				
			||||||
          cd package
 | 
					          cd package
 | 
				
			||||||
 | 
				
			|||||||
@ -57,7 +57,10 @@ jobs:
 | 
				
			|||||||
          sudo rm -rf package/runner/RegShot.exe
 | 
					          sudo rm -rf package/runner/RegShot.exe
 | 
				
			||||||
          sudo rm -rf package/runner/novnc
 | 
					          sudo rm -rf package/runner/novnc
 | 
				
			||||||
          sudo rm -rf package/bin/wine*
 | 
					          sudo rm -rf package/bin/wine*
 | 
				
			||||||
 | 
					          # 修复 which 命令的问题导致无法正常识别终端的问题
 | 
				
			||||||
 | 
					          sudo cp package/bin/which.debianutils package/bin/which -rv
 | 
				
			||||||
          cp deep-wine-runner/off-line-shell/run.sh package -rv
 | 
					          cp deep-wine-runner/off-line-shell/run.sh package -rv
 | 
				
			||||||
 | 
					          cp deep-wine-runner/off-line-shell/run-system-bwrap.sh package -rv
 | 
				
			||||||
          cp deep-wine-runner/off-line-shell/bwrap_amd64 package/bwrap -rv
 | 
					          cp deep-wine-runner/off-line-shell/bwrap_amd64 package/bwrap -rv
 | 
				
			||||||
          sudo chmod 777 -Rv package ; true
 | 
					          sudo chmod 777 -Rv package ; true
 | 
				
			||||||
          cd package
 | 
					          cd package
 | 
				
			||||||
 | 
				
			|||||||
							
								
								
									
										11
									
								
								Makefile
									
									
									
									
									
								
							
							
						
						@ -11,9 +11,6 @@ clean:
 | 
				
			|||||||
	python3 RemovePycacheFile.py
 | 
						python3 RemovePycacheFile.py
 | 
				
			||||||
	rm *.deb -fv
 | 
						rm *.deb -fv
 | 
				
			||||||
	rm *.pkg.tar* -fv
 | 
						rm *.pkg.tar* -fv
 | 
				
			||||||
	cd VM-source ; qmake . ; make clean
 | 
					 | 
				
			||||||
	rm VM-source/VirtualMachine -rfv
 | 
					 | 
				
			||||||
	rm -rfv VM-source/.qmake.stash
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
#package-rpm:
 | 
					#package-rpm:
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@ -35,18 +32,10 @@ package-pkg:
 | 
				
			|||||||
	sudo debtap -Q spark-deepin-wine-runner-ace.deb
 | 
						sudo debtap -Q spark-deepin-wine-runner-ace.deb
 | 
				
			||||||
 | 
					
 | 
				
			||||||
copy-files:
 | 
					copy-files:
 | 
				
			||||||
	#cd VM-source && qmake
 | 
					 | 
				
			||||||
	#cd VM-source && make
 | 
					 | 
				
			||||||
	#cd wine && make
 | 
						#cd wine && make
 | 
				
			||||||
	make clean -j$(nproc)
 | 
						make clean -j$(nproc)
 | 
				
			||||||
	mkdir deb/opt/apps/deepin-wine-runner/LANG -pv
 | 
						mkdir deb/opt/apps/deepin-wine-runner/LANG -pv
 | 
				
			||||||
	cp -rv helperset deb/opt/apps/deepin-wine-runner/
 | 
						cp -rv helperset deb/opt/apps/deepin-wine-runner/
 | 
				
			||||||
	#cp -rv VM-source/VirtualMachine VM
 | 
					 | 
				
			||||||
	cp -rv VM-source/deepin-wine-runner.svg VM
 | 
					 | 
				
			||||||
	cp -rv VM-source/Windows7X64Auto.iso VM
 | 
					 | 
				
			||||||
	cp -rv VM-source/Windows7X86Auto.iso VM
 | 
					 | 
				
			||||||
	cp -rv VM-source/test.qcow2 VM
 | 
					 | 
				
			||||||
	cp -rv VM-source/*.fd VM
 | 
					 | 
				
			||||||
	cp -rv wine/ deb/opt/apps/deepin-wine-runner/
 | 
						cp -rv wine/ deb/opt/apps/deepin-wine-runner/
 | 
				
			||||||
	cp -rv Test/ deb/opt/apps/deepin-wine-runner/
 | 
						cp -rv Test/ deb/opt/apps/deepin-wine-runner/
 | 
				
			||||||
	cp -rv dxvk/ deb/opt/apps/deepin-wine-runner
 | 
						cp -rv dxvk/ deb/opt/apps/deepin-wine-runner
 | 
				
			||||||
 | 
				
			|||||||
							
								
								
									
										1
									
								
								VM-source/.gitignore
									
									
									
									
										vendored
									
									
								
							
							
						
						@ -1 +0,0 @@
 | 
				
			|||||||
*.user*
 | 
					 | 
				
			||||||
@ -1 +0,0 @@
 | 
				
			|||||||
windows-virtual-machine-installer-for-wine-runner.gfdgdxi.top
 | 
					 | 
				
			||||||
@ -1,88 +0,0 @@
 | 
				
			|||||||
<?xml version="1.0" encoding="utf-8"?>
 | 
					 | 
				
			||||||
<unattend xmlns="urn:schemas-microsoft-com:unattend">
 | 
					 | 
				
			||||||
    <settings pass="windowsPE">
 | 
					 | 
				
			||||||
        <component name="Microsoft-Windows-International-Core-WinPE" processorArchitecture="amd64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS" xmlns:wcm="http://schemas.microsoft.com/WMIConfig/2002/State" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
 | 
					 | 
				
			||||||
            <SetupUILanguage>
 | 
					 | 
				
			||||||
                <UILanguage>zh-CN</UILanguage>
 | 
					 | 
				
			||||||
            </SetupUILanguage>
 | 
					 | 
				
			||||||
            <InputLocale>zh-CN</InputLocale>
 | 
					 | 
				
			||||||
            <SystemLocale>zh-CN</SystemLocale>
 | 
					 | 
				
			||||||
            <UILanguage>zh-CN</UILanguage>
 | 
					 | 
				
			||||||
            <UserLocale>zh-CN</UserLocale>
 | 
					 | 
				
			||||||
        </component>
 | 
					 | 
				
			||||||
        <component name="Microsoft-Windows-Setup" processorArchitecture="amd64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS" xmlns:wcm="http://schemas.microsoft.com/WMIConfig/2002/State" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
 | 
					 | 
				
			||||||
            <UserData>
 | 
					 | 
				
			||||||
                <ProductKey>
 | 
					 | 
				
			||||||
                    <Key />
 | 
					 | 
				
			||||||
                </ProductKey>
 | 
					 | 
				
			||||||
                <AcceptEula>true</AcceptEula>
 | 
					 | 
				
			||||||
            </UserData>
 | 
					 | 
				
			||||||
            <ImageInstall>
 | 
					 | 
				
			||||||
                <OSImage>
 | 
					 | 
				
			||||||
                    <InstallFrom>
 | 
					 | 
				
			||||||
                        <MetaData wcm:action="add">
 | 
					 | 
				
			||||||
                            <Key>/image/index</Key>
 | 
					 | 
				
			||||||
                            <Value>4</Value>
 | 
					 | 
				
			||||||
                        </MetaData>
 | 
					 | 
				
			||||||
                    </InstallFrom>
 | 
					 | 
				
			||||||
                    <InstallTo>
 | 
					 | 
				
			||||||
                        <DiskID>0</DiskID>
 | 
					 | 
				
			||||||
                        <PartitionID>1</PartitionID>
 | 
					 | 
				
			||||||
                    </InstallTo>
 | 
					 | 
				
			||||||
                </OSImage>
 | 
					 | 
				
			||||||
            </ImageInstall>
 | 
					 | 
				
			||||||
            <DiskConfiguration>
 | 
					 | 
				
			||||||
                <Disk wcm:action="add">
 | 
					 | 
				
			||||||
                    <CreatePartitions>
 | 
					 | 
				
			||||||
                        <CreatePartition wcm:action="add">
 | 
					 | 
				
			||||||
                            <Order>1</Order>
 | 
					 | 
				
			||||||
                            <Size>130000</Size>
 | 
					 | 
				
			||||||
                            <Type>Primary</Type>
 | 
					 | 
				
			||||||
                        </CreatePartition>
 | 
					 | 
				
			||||||
                    </CreatePartitions>
 | 
					 | 
				
			||||||
                    <DiskID>0</DiskID>
 | 
					 | 
				
			||||||
                    <WillWipeDisk>true</WillWipeDisk>
 | 
					 | 
				
			||||||
                    <ModifyPartitions>
 | 
					 | 
				
			||||||
                        <ModifyPartition wcm:action="add">
 | 
					 | 
				
			||||||
                            <Active>true</Active>
 | 
					 | 
				
			||||||
                            <Extend>false</Extend>
 | 
					 | 
				
			||||||
                            <Format>NTFS</Format>
 | 
					 | 
				
			||||||
                            <Label>OS</Label>
 | 
					 | 
				
			||||||
                            <Letter>C</Letter>
 | 
					 | 
				
			||||||
                            <Order>1</Order>
 | 
					 | 
				
			||||||
                            <PartitionID>1</PartitionID>
 | 
					 | 
				
			||||||
                        </ModifyPartition>
 | 
					 | 
				
			||||||
                    </ModifyPartitions>
 | 
					 | 
				
			||||||
                </Disk>
 | 
					 | 
				
			||||||
            </DiskConfiguration>
 | 
					 | 
				
			||||||
        </component>
 | 
					 | 
				
			||||||
    </settings>
 | 
					 | 
				
			||||||
    <settings pass="oobeSystem">
 | 
					 | 
				
			||||||
        <component name="Microsoft-Windows-Shell-Setup" processorArchitecture="amd64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS" xmlns:wcm="http://schemas.microsoft.com/WMIConfig/2002/State" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
 | 
					 | 
				
			||||||
            <UserAccounts>
 | 
					 | 
				
			||||||
                <LocalAccounts>
 | 
					 | 
				
			||||||
                    <LocalAccount wcm:action="add">
 | 
					 | 
				
			||||||
                        <Password>
 | 
					 | 
				
			||||||
                            <Value>UABhAHMAcwB3AG8AcgBkAA==</Value>
 | 
					 | 
				
			||||||
                            <PlainText>false</PlainText>
 | 
					 | 
				
			||||||
                        </Password>
 | 
					 | 
				
			||||||
                        <DisplayName>Windows</DisplayName>
 | 
					 | 
				
			||||||
                        <Group>Administrators</Group>
 | 
					 | 
				
			||||||
                        <Name>Windows</Name>
 | 
					 | 
				
			||||||
                    </LocalAccount>
 | 
					 | 
				
			||||||
                </LocalAccounts>
 | 
					 | 
				
			||||||
            </UserAccounts>
 | 
					 | 
				
			||||||
            <OOBE>
 | 
					 | 
				
			||||||
                <NetworkLocation>Work</NetworkLocation>
 | 
					 | 
				
			||||||
                <ProtectYourPC>3</ProtectYourPC>
 | 
					 | 
				
			||||||
            </OOBE>
 | 
					 | 
				
			||||||
            <TimeZone>China Standard Time</TimeZone>
 | 
					 | 
				
			||||||
        </component>
 | 
					 | 
				
			||||||
    </settings>
 | 
					 | 
				
			||||||
    <settings pass="specialize">
 | 
					 | 
				
			||||||
        <component name="Microsoft-Windows-Shell-Setup" processorArchitecture="amd64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS" xmlns:wcm="http://schemas.microsoft.com/WMIConfig/2002/State" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
 | 
					 | 
				
			||||||
            <ComputerName>*</ComputerName>
 | 
					 | 
				
			||||||
        </component>
 | 
					 | 
				
			||||||
    </settings>
 | 
					 | 
				
			||||||
    <cpi:offlineImage cpi:source="wim:d:/sources/install.wim#Windows 7 ULTIMATE" xmlns:cpi="urn:schemas-microsoft-com:cpi" />
 | 
					 | 
				
			||||||
</unattend>
 | 
					 | 
				
			||||||
@ -1,85 +0,0 @@
 | 
				
			|||||||
<?xml version="1.0" encoding="utf-8"?>
 | 
					 | 
				
			||||||
<unattend xmlns="urn:schemas-microsoft-com:unattend">
 | 
					 | 
				
			||||||
    <settings pass="windowsPE">
 | 
					 | 
				
			||||||
        <component name="Microsoft-Windows-International-Core-WinPE" processorArchitecture="x86" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS" xmlns:wcm="http://schemas.microsoft.com/WMIConfig/2002/State" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
 | 
					 | 
				
			||||||
            <SetupUILanguage>
 | 
					 | 
				
			||||||
                <UILanguage>zh-CN</UILanguage>
 | 
					 | 
				
			||||||
            </SetupUILanguage>
 | 
					 | 
				
			||||||
            <InputLocale>zh-CN</InputLocale>
 | 
					 | 
				
			||||||
            <SystemLocale>zh-CN</SystemLocale>
 | 
					 | 
				
			||||||
            <UILanguage>zh-CN</UILanguage>
 | 
					 | 
				
			||||||
            <UserLocale>zh-CN</UserLocale>
 | 
					 | 
				
			||||||
        </component>
 | 
					 | 
				
			||||||
        <component name="Microsoft-Windows-Setup" processorArchitecture="x86" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS" xmlns:wcm="http://schemas.microsoft.com/WMIConfig/2002/State" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
 | 
					 | 
				
			||||||
            <UserData>
 | 
					 | 
				
			||||||
                <AcceptEula>true</AcceptEula>
 | 
					 | 
				
			||||||
            </UserData>
 | 
					 | 
				
			||||||
            <ImageInstall>
 | 
					 | 
				
			||||||
                <OSImage>
 | 
					 | 
				
			||||||
                    <InstallFrom>
 | 
					 | 
				
			||||||
                        <MetaData wcm:action="add">
 | 
					 | 
				
			||||||
                            <Value>5</Value>
 | 
					 | 
				
			||||||
                            <Key>/image/index</Key>
 | 
					 | 
				
			||||||
                        </MetaData>
 | 
					 | 
				
			||||||
                    </InstallFrom>
 | 
					 | 
				
			||||||
                    <InstallTo>
 | 
					 | 
				
			||||||
                        <DiskID>0</DiskID>
 | 
					 | 
				
			||||||
                        <PartitionID>1</PartitionID>
 | 
					 | 
				
			||||||
                    </InstallTo>
 | 
					 | 
				
			||||||
                </OSImage>
 | 
					 | 
				
			||||||
            </ImageInstall>
 | 
					 | 
				
			||||||
            <DiskConfiguration>
 | 
					 | 
				
			||||||
                <Disk wcm:action="add">
 | 
					 | 
				
			||||||
                    <CreatePartitions>
 | 
					 | 
				
			||||||
                        <CreatePartition wcm:action="add">
 | 
					 | 
				
			||||||
                            <Type>Primary</Type>
 | 
					 | 
				
			||||||
                            <Order>1</Order>
 | 
					 | 
				
			||||||
                            <Size>130000</Size>
 | 
					 | 
				
			||||||
                        </CreatePartition>
 | 
					 | 
				
			||||||
                    </CreatePartitions>
 | 
					 | 
				
			||||||
                    <WillWipeDisk>true</WillWipeDisk>
 | 
					 | 
				
			||||||
                    <DiskID>0</DiskID>
 | 
					 | 
				
			||||||
                    <ModifyPartitions>
 | 
					 | 
				
			||||||
                        <ModifyPartition wcm:action="add">
 | 
					 | 
				
			||||||
                            <Active>true</Active>
 | 
					 | 
				
			||||||
                            <Extend>false</Extend>
 | 
					 | 
				
			||||||
                            <Format>NTFS</Format>
 | 
					 | 
				
			||||||
                            <Label>OS</Label>
 | 
					 | 
				
			||||||
                            <Letter>C</Letter>
 | 
					 | 
				
			||||||
                            <Order>1</Order>
 | 
					 | 
				
			||||||
                            <PartitionID>1</PartitionID>
 | 
					 | 
				
			||||||
                        </ModifyPartition>
 | 
					 | 
				
			||||||
                    </ModifyPartitions>
 | 
					 | 
				
			||||||
                </Disk>
 | 
					 | 
				
			||||||
            </DiskConfiguration>
 | 
					 | 
				
			||||||
        </component>
 | 
					 | 
				
			||||||
    </settings>
 | 
					 | 
				
			||||||
    <settings pass="oobeSystem">
 | 
					 | 
				
			||||||
        <component name="Microsoft-Windows-Shell-Setup" processorArchitecture="x86" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS" xmlns:wcm="http://schemas.microsoft.com/WMIConfig/2002/State" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
 | 
					 | 
				
			||||||
            <UserAccounts>
 | 
					 | 
				
			||||||
                <LocalAccounts>
 | 
					 | 
				
			||||||
                    <LocalAccount wcm:action="add">
 | 
					 | 
				
			||||||
                        <Password>
 | 
					 | 
				
			||||||
                            <Value>UABhAHMAcwB3AG8AcgBkAA==</Value>
 | 
					 | 
				
			||||||
                            <PlainText>false</PlainText>
 | 
					 | 
				
			||||||
                        </Password>
 | 
					 | 
				
			||||||
                        <DisplayName>Windows</DisplayName>
 | 
					 | 
				
			||||||
                        <Group>Administrators</Group>
 | 
					 | 
				
			||||||
                        <Name>Windows</Name>
 | 
					 | 
				
			||||||
                    </LocalAccount>
 | 
					 | 
				
			||||||
                </LocalAccounts>
 | 
					 | 
				
			||||||
            </UserAccounts>
 | 
					 | 
				
			||||||
            <OOBE>
 | 
					 | 
				
			||||||
                <NetworkLocation>Work</NetworkLocation>
 | 
					 | 
				
			||||||
                <ProtectYourPC>3</ProtectYourPC>
 | 
					 | 
				
			||||||
            </OOBE>
 | 
					 | 
				
			||||||
            <TimeZone>China Standard Time</TimeZone>
 | 
					 | 
				
			||||||
        </component>
 | 
					 | 
				
			||||||
    </settings>
 | 
					 | 
				
			||||||
    <settings pass="specialize">
 | 
					 | 
				
			||||||
        <component name="Microsoft-Windows-Shell-Setup" processorArchitecture="x86" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS" xmlns:wcm="http://schemas.microsoft.com/WMIConfig/2002/State" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
 | 
					 | 
				
			||||||
            <ComputerName>*</ComputerName>
 | 
					 | 
				
			||||||
        </component>
 | 
					 | 
				
			||||||
    </settings>
 | 
					 | 
				
			||||||
    <cpi:offlineImage cpi:source="wim:l:/xiayuhao/system-iso/windows-iso/windows-7/windows-7-sp1-x86/sources/install.wim#Windows 7 ULTIMATE" xmlns:cpi="urn:schemas-microsoft-com:cpi" />
 | 
					 | 
				
			||||||
</unattend>
 | 
					 | 
				
			||||||
@ -1,3 +0,0 @@
 | 
				
			|||||||
[autorun]
 | 
					 | 
				
			||||||
ICON=icon.ico
 | 
					 | 
				
			||||||
LABEL=自动部署
 | 
					 | 
				
			||||||
| 
		 Before Width: | Height: | Size: 35 KiB  | 
@ -1,674 +0,0 @@
 | 
				
			|||||||
                    GNU GENERAL PUBLIC LICENSE
 | 
					 | 
				
			||||||
                       Version 3, 29 June 2007
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
 Copyright (C) 2007 Free Software Foundation, Inc. <http://fsf.org/>
 | 
					 | 
				
			||||||
 Everyone is permitted to copy and distribute verbatim copies
 | 
					 | 
				
			||||||
 of this license document, but changing it is not allowed.
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
                            Preamble
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
  The GNU General Public License is a free, copyleft license for
 | 
					 | 
				
			||||||
software and other kinds of works.
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
  The licenses for most software and other practical works are designed
 | 
					 | 
				
			||||||
to take away your freedom to share and change the works.  By contrast,
 | 
					 | 
				
			||||||
the GNU General Public License is intended to guarantee your freedom to
 | 
					 | 
				
			||||||
share and change all versions of a program--to make sure it remains free
 | 
					 | 
				
			||||||
software for all its users.  We, the Free Software Foundation, use the
 | 
					 | 
				
			||||||
GNU General Public License for most of our software; it applies also to
 | 
					 | 
				
			||||||
any other work released this way by its authors.  You can apply it to
 | 
					 | 
				
			||||||
your programs, too.
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
  When we speak of free software, we are referring to freedom, not
 | 
					 | 
				
			||||||
price.  Our General Public Licenses are designed to make sure that you
 | 
					 | 
				
			||||||
have the freedom to distribute copies of free software (and charge for
 | 
					 | 
				
			||||||
them if you wish), that you receive source code or can get it if you
 | 
					 | 
				
			||||||
want it, that you can change the software or use pieces of it in new
 | 
					 | 
				
			||||||
free programs, and that you know you can do these things.
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
  To protect your rights, we need to prevent others from denying you
 | 
					 | 
				
			||||||
these rights or asking you to surrender the rights.  Therefore, you have
 | 
					 | 
				
			||||||
certain responsibilities if you distribute copies of the software, or if
 | 
					 | 
				
			||||||
you modify it: responsibilities to respect the freedom of others.
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
  For example, if you distribute copies of such a program, whether
 | 
					 | 
				
			||||||
gratis or for a fee, you must pass on to the recipients the same
 | 
					 | 
				
			||||||
freedoms that you received.  You must make sure that they, too, receive
 | 
					 | 
				
			||||||
or can get the source code.  And you must show them these terms so they
 | 
					 | 
				
			||||||
know their rights.
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
  Developers that use the GNU GPL protect your rights with two steps:
 | 
					 | 
				
			||||||
(1) assert copyright on the software, and (2) offer you this License
 | 
					 | 
				
			||||||
giving you legal permission to copy, distribute and/or modify it.
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
  For the developers' and authors' protection, the GPL clearly explains
 | 
					 | 
				
			||||||
that there is no warranty for this free software.  For both users' and
 | 
					 | 
				
			||||||
authors' sake, the GPL requires that modified versions be marked as
 | 
					 | 
				
			||||||
changed, so that their problems will not be attributed erroneously to
 | 
					 | 
				
			||||||
authors of previous versions.
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
  Some devices are designed to deny users access to install or run
 | 
					 | 
				
			||||||
modified versions of the software inside them, although the manufacturer
 | 
					 | 
				
			||||||
can do so.  This is fundamentally incompatible with the aim of
 | 
					 | 
				
			||||||
protecting users' freedom to change the software.  The systematic
 | 
					 | 
				
			||||||
pattern of such abuse occurs in the area of products for individuals to
 | 
					 | 
				
			||||||
use, which is precisely where it is most unacceptable.  Therefore, we
 | 
					 | 
				
			||||||
have designed this version of the GPL to prohibit the practice for those
 | 
					 | 
				
			||||||
products.  If such problems arise substantially in other domains, we
 | 
					 | 
				
			||||||
stand ready to extend this provision to those domains in future versions
 | 
					 | 
				
			||||||
of the GPL, as needed to protect the freedom of users.
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
  Finally, every program is threatened constantly by software patents.
 | 
					 | 
				
			||||||
States should not allow patents to restrict development and use of
 | 
					 | 
				
			||||||
software on general-purpose computers, but in those that do, we wish to
 | 
					 | 
				
			||||||
avoid the special danger that patents applied to a free program could
 | 
					 | 
				
			||||||
make it effectively proprietary.  To prevent this, the GPL assures that
 | 
					 | 
				
			||||||
patents cannot be used to render the program non-free.
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
  The precise terms and conditions for copying, distribution and
 | 
					 | 
				
			||||||
modification follow.
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
                       TERMS AND CONDITIONS
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
  0. Definitions.
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
  "This License" refers to version 3 of the GNU General Public License.
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
  "Copyright" also means copyright-like laws that apply to other kinds of
 | 
					 | 
				
			||||||
works, such as semiconductor masks.
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
  "The Program" refers to any copyrightable work licensed under this
 | 
					 | 
				
			||||||
License.  Each licensee is addressed as "you".  "Licensees" and
 | 
					 | 
				
			||||||
"recipients" may be individuals or organizations.
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
  To "modify" a work means to copy from or adapt all or part of the work
 | 
					 | 
				
			||||||
in a fashion requiring copyright permission, other than the making of an
 | 
					 | 
				
			||||||
exact copy.  The resulting work is called a "modified version" of the
 | 
					 | 
				
			||||||
earlier work or a work "based on" the earlier work.
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
  A "covered work" means either the unmodified Program or a work based
 | 
					 | 
				
			||||||
on the Program.
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
  To "propagate" a work means to do anything with it that, without
 | 
					 | 
				
			||||||
permission, would make you directly or secondarily liable for
 | 
					 | 
				
			||||||
infringement under applicable copyright law, except executing it on a
 | 
					 | 
				
			||||||
computer or modifying a private copy.  Propagation includes copying,
 | 
					 | 
				
			||||||
distribution (with or without modification), making available to the
 | 
					 | 
				
			||||||
public, and in some countries other activities as well.
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
  To "convey" a work means any kind of propagation that enables other
 | 
					 | 
				
			||||||
parties to make or receive copies.  Mere interaction with a user through
 | 
					 | 
				
			||||||
a computer network, with no transfer of a copy, is not conveying.
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
  An interactive user interface displays "Appropriate Legal Notices"
 | 
					 | 
				
			||||||
to the extent that it includes a convenient and prominently visible
 | 
					 | 
				
			||||||
feature that (1) displays an appropriate copyright notice, and (2)
 | 
					 | 
				
			||||||
tells the user that there is no warranty for the work (except to the
 | 
					 | 
				
			||||||
extent that warranties are provided), that licensees may convey the
 | 
					 | 
				
			||||||
work under this License, and how to view a copy of this License.  If
 | 
					 | 
				
			||||||
the interface presents a list of user commands or options, such as a
 | 
					 | 
				
			||||||
menu, a prominent item in the list meets this criterion.
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
  1. Source Code.
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
  The "source code" for a work means the preferred form of the work
 | 
					 | 
				
			||||||
for making modifications to it.  "Object code" means any non-source
 | 
					 | 
				
			||||||
form of a work.
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
  A "Standard Interface" means an interface that either is an official
 | 
					 | 
				
			||||||
standard defined by a recognized standards body, or, in the case of
 | 
					 | 
				
			||||||
interfaces specified for a particular programming language, one that
 | 
					 | 
				
			||||||
is widely used among developers working in that language.
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
  The "System Libraries" of an executable work include anything, other
 | 
					 | 
				
			||||||
than the work as a whole, that (a) is included in the normal form of
 | 
					 | 
				
			||||||
packaging a Major Component, but which is not part of that Major
 | 
					 | 
				
			||||||
Component, and (b) serves only to enable use of the work with that
 | 
					 | 
				
			||||||
Major Component, or to implement a Standard Interface for which an
 | 
					 | 
				
			||||||
implementation is available to the public in source code form.  A
 | 
					 | 
				
			||||||
"Major Component", in this context, means a major essential component
 | 
					 | 
				
			||||||
(kernel, window system, and so on) of the specific operating system
 | 
					 | 
				
			||||||
(if any) on which the executable work runs, or a compiler used to
 | 
					 | 
				
			||||||
produce the work, or an object code interpreter used to run it.
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
  The "Corresponding Source" for a work in object code form means all
 | 
					 | 
				
			||||||
the source code needed to generate, install, and (for an executable
 | 
					 | 
				
			||||||
work) run the object code and to modify the work, including scripts to
 | 
					 | 
				
			||||||
control those activities.  However, it does not include the work's
 | 
					 | 
				
			||||||
System Libraries, or general-purpose tools or generally available free
 | 
					 | 
				
			||||||
programs which are used unmodified in performing those activities but
 | 
					 | 
				
			||||||
which are not part of the work.  For example, Corresponding Source
 | 
					 | 
				
			||||||
includes interface definition files associated with source files for
 | 
					 | 
				
			||||||
the work, and the source code for shared libraries and dynamically
 | 
					 | 
				
			||||||
linked subprograms that the work is specifically designed to require,
 | 
					 | 
				
			||||||
such as by intimate data communication or control flow between those
 | 
					 | 
				
			||||||
subprograms and other parts of the work.
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
  The Corresponding Source need not include anything that users
 | 
					 | 
				
			||||||
can regenerate automatically from other parts of the Corresponding
 | 
					 | 
				
			||||||
Source.
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
  The Corresponding Source for a work in source code form is that
 | 
					 | 
				
			||||||
same work.
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
  2. Basic Permissions.
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
  All rights granted under this License are granted for the term of
 | 
					 | 
				
			||||||
copyright on the Program, and are irrevocable provided the stated
 | 
					 | 
				
			||||||
conditions are met.  This License explicitly affirms your unlimited
 | 
					 | 
				
			||||||
permission to run the unmodified Program.  The output from running a
 | 
					 | 
				
			||||||
covered work is covered by this License only if the output, given its
 | 
					 | 
				
			||||||
content, constitutes a covered work.  This License acknowledges your
 | 
					 | 
				
			||||||
rights of fair use or other equivalent, as provided by copyright law.
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
  You may make, run and propagate covered works that you do not
 | 
					 | 
				
			||||||
convey, without conditions so long as your license otherwise remains
 | 
					 | 
				
			||||||
in force.  You may convey covered works to others for the sole purpose
 | 
					 | 
				
			||||||
of having them make modifications exclusively for you, or provide you
 | 
					 | 
				
			||||||
with facilities for running those works, provided that you comply with
 | 
					 | 
				
			||||||
the terms of this License in conveying all material for which you do
 | 
					 | 
				
			||||||
not control copyright.  Those thus making or running the covered works
 | 
					 | 
				
			||||||
for you must do so exclusively on your behalf, under your direction
 | 
					 | 
				
			||||||
and control, on terms that prohibit them from making any copies of
 | 
					 | 
				
			||||||
your copyrighted material outside their relationship with you.
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
  Conveying under any other circumstances is permitted solely under
 | 
					 | 
				
			||||||
the conditions stated below.  Sublicensing is not allowed; section 10
 | 
					 | 
				
			||||||
makes it unnecessary.
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
  3. Protecting Users' Legal Rights From Anti-Circumvention Law.
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
  No covered work shall be deemed part of an effective technological
 | 
					 | 
				
			||||||
measure under any applicable law fulfilling obligations under article
 | 
					 | 
				
			||||||
11 of the WIPO copyright treaty adopted on 20 December 1996, or
 | 
					 | 
				
			||||||
similar laws prohibiting or restricting circumvention of such
 | 
					 | 
				
			||||||
measures.
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
  When you convey a covered work, you waive any legal power to forbid
 | 
					 | 
				
			||||||
circumvention of technological measures to the extent such circumvention
 | 
					 | 
				
			||||||
is effected by exercising rights under this License with respect to
 | 
					 | 
				
			||||||
the covered work, and you disclaim any intention to limit operation or
 | 
					 | 
				
			||||||
modification of the work as a means of enforcing, against the work's
 | 
					 | 
				
			||||||
users, your or third parties' legal rights to forbid circumvention of
 | 
					 | 
				
			||||||
technological measures.
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
  4. Conveying Verbatim Copies.
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
  You may convey verbatim copies of the Program's source code as you
 | 
					 | 
				
			||||||
receive it, in any medium, provided that you conspicuously and
 | 
					 | 
				
			||||||
appropriately publish on each copy an appropriate copyright notice;
 | 
					 | 
				
			||||||
keep intact all notices stating that this License and any
 | 
					 | 
				
			||||||
non-permissive terms added in accord with section 7 apply to the code;
 | 
					 | 
				
			||||||
keep intact all notices of the absence of any warranty; and give all
 | 
					 | 
				
			||||||
recipients a copy of this License along with the Program.
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
  You may charge any price or no price for each copy that you convey,
 | 
					 | 
				
			||||||
and you may offer support or warranty protection for a fee.
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
  5. Conveying Modified Source Versions.
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
  You may convey a work based on the Program, or the modifications to
 | 
					 | 
				
			||||||
produce it from the Program, in the form of source code under the
 | 
					 | 
				
			||||||
terms of section 4, provided that you also meet all of these conditions:
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    a) The work must carry prominent notices stating that you modified
 | 
					 | 
				
			||||||
    it, and giving a relevant date.
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    b) The work must carry prominent notices stating that it is
 | 
					 | 
				
			||||||
    released under this License and any conditions added under section
 | 
					 | 
				
			||||||
    7.  This requirement modifies the requirement in section 4 to
 | 
					 | 
				
			||||||
    "keep intact all notices".
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    c) You must license the entire work, as a whole, under this
 | 
					 | 
				
			||||||
    License to anyone who comes into possession of a copy.  This
 | 
					 | 
				
			||||||
    License will therefore apply, along with any applicable section 7
 | 
					 | 
				
			||||||
    additional terms, to the whole of the work, and all its parts,
 | 
					 | 
				
			||||||
    regardless of how they are packaged.  This License gives no
 | 
					 | 
				
			||||||
    permission to license the work in any other way, but it does not
 | 
					 | 
				
			||||||
    invalidate such permission if you have separately received it.
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    d) If the work has interactive user interfaces, each must display
 | 
					 | 
				
			||||||
    Appropriate Legal Notices; however, if the Program has interactive
 | 
					 | 
				
			||||||
    interfaces that do not display Appropriate Legal Notices, your
 | 
					 | 
				
			||||||
    work need not make them do so.
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
  A compilation of a covered work with other separate and independent
 | 
					 | 
				
			||||||
works, which are not by their nature extensions of the covered work,
 | 
					 | 
				
			||||||
and which are not combined with it such as to form a larger program,
 | 
					 | 
				
			||||||
in or on a volume of a storage or distribution medium, is called an
 | 
					 | 
				
			||||||
"aggregate" if the compilation and its resulting copyright are not
 | 
					 | 
				
			||||||
used to limit the access or legal rights of the compilation's users
 | 
					 | 
				
			||||||
beyond what the individual works permit.  Inclusion of a covered work
 | 
					 | 
				
			||||||
in an aggregate does not cause this License to apply to the other
 | 
					 | 
				
			||||||
parts of the aggregate.
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
  6. Conveying Non-Source Forms.
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
  You may convey a covered work in object code form under the terms
 | 
					 | 
				
			||||||
of sections 4 and 5, provided that you also convey the
 | 
					 | 
				
			||||||
machine-readable Corresponding Source under the terms of this License,
 | 
					 | 
				
			||||||
in one of these ways:
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    a) Convey the object code in, or embodied in, a physical product
 | 
					 | 
				
			||||||
    (including a physical distribution medium), accompanied by the
 | 
					 | 
				
			||||||
    Corresponding Source fixed on a durable physical medium
 | 
					 | 
				
			||||||
    customarily used for software interchange.
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    b) Convey the object code in, or embodied in, a physical product
 | 
					 | 
				
			||||||
    (including a physical distribution medium), accompanied by a
 | 
					 | 
				
			||||||
    written offer, valid for at least three years and valid for as
 | 
					 | 
				
			||||||
    long as you offer spare parts or customer support for that product
 | 
					 | 
				
			||||||
    model, to give anyone who possesses the object code either (1) a
 | 
					 | 
				
			||||||
    copy of the Corresponding Source for all the software in the
 | 
					 | 
				
			||||||
    product that is covered by this License, on a durable physical
 | 
					 | 
				
			||||||
    medium customarily used for software interchange, for a price no
 | 
					 | 
				
			||||||
    more than your reasonable cost of physically performing this
 | 
					 | 
				
			||||||
    conveying of source, or (2) access to copy the
 | 
					 | 
				
			||||||
    Corresponding Source from a network server at no charge.
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    c) Convey individual copies of the object code with a copy of the
 | 
					 | 
				
			||||||
    written offer to provide the Corresponding Source.  This
 | 
					 | 
				
			||||||
    alternative is allowed only occasionally and noncommercially, and
 | 
					 | 
				
			||||||
    only if you received the object code with such an offer, in accord
 | 
					 | 
				
			||||||
    with subsection 6b.
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    d) Convey the object code by offering access from a designated
 | 
					 | 
				
			||||||
    place (gratis or for a charge), and offer equivalent access to the
 | 
					 | 
				
			||||||
    Corresponding Source in the same way through the same place at no
 | 
					 | 
				
			||||||
    further charge.  You need not require recipients to copy the
 | 
					 | 
				
			||||||
    Corresponding Source along with the object code.  If the place to
 | 
					 | 
				
			||||||
    copy the object code is a network server, the Corresponding Source
 | 
					 | 
				
			||||||
    may be on a different server (operated by you or a third party)
 | 
					 | 
				
			||||||
    that supports equivalent copying facilities, provided you maintain
 | 
					 | 
				
			||||||
    clear directions next to the object code saying where to find the
 | 
					 | 
				
			||||||
    Corresponding Source.  Regardless of what server hosts the
 | 
					 | 
				
			||||||
    Corresponding Source, you remain obligated to ensure that it is
 | 
					 | 
				
			||||||
    available for as long as needed to satisfy these requirements.
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    e) Convey the object code using peer-to-peer transmission, provided
 | 
					 | 
				
			||||||
    you inform other peers where the object code and Corresponding
 | 
					 | 
				
			||||||
    Source of the work are being offered to the general public at no
 | 
					 | 
				
			||||||
    charge under subsection 6d.
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
  A separable portion of the object code, whose source code is excluded
 | 
					 | 
				
			||||||
from the Corresponding Source as a System Library, need not be
 | 
					 | 
				
			||||||
included in conveying the object code work.
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
  A "User Product" is either (1) a "consumer product", which means any
 | 
					 | 
				
			||||||
tangible personal property which is normally used for personal, family,
 | 
					 | 
				
			||||||
or household purposes, or (2) anything designed or sold for incorporation
 | 
					 | 
				
			||||||
into a dwelling.  In determining whether a product is a consumer product,
 | 
					 | 
				
			||||||
doubtful cases shall be resolved in favor of coverage.  For a particular
 | 
					 | 
				
			||||||
product received by a particular user, "normally used" refers to a
 | 
					 | 
				
			||||||
typical or common use of that class of product, regardless of the status
 | 
					 | 
				
			||||||
of the particular user or of the way in which the particular user
 | 
					 | 
				
			||||||
actually uses, or expects or is expected to use, the product.  A product
 | 
					 | 
				
			||||||
is a consumer product regardless of whether the product has substantial
 | 
					 | 
				
			||||||
commercial, industrial or non-consumer uses, unless such uses represent
 | 
					 | 
				
			||||||
the only significant mode of use of the product.
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
  "Installation Information" for a User Product means any methods,
 | 
					 | 
				
			||||||
procedures, authorization keys, or other information required to install
 | 
					 | 
				
			||||||
and execute modified versions of a covered work in that User Product from
 | 
					 | 
				
			||||||
a modified version of its Corresponding Source.  The information must
 | 
					 | 
				
			||||||
suffice to ensure that the continued functioning of the modified object
 | 
					 | 
				
			||||||
code is in no case prevented or interfered with solely because
 | 
					 | 
				
			||||||
modification has been made.
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
  If you convey an object code work under this section in, or with, or
 | 
					 | 
				
			||||||
specifically for use in, a User Product, and the conveying occurs as
 | 
					 | 
				
			||||||
part of a transaction in which the right of possession and use of the
 | 
					 | 
				
			||||||
User Product is transferred to the recipient in perpetuity or for a
 | 
					 | 
				
			||||||
fixed term (regardless of how the transaction is characterized), the
 | 
					 | 
				
			||||||
Corresponding Source conveyed under this section must be accompanied
 | 
					 | 
				
			||||||
by the Installation Information.  But this requirement does not apply
 | 
					 | 
				
			||||||
if neither you nor any third party retains the ability to install
 | 
					 | 
				
			||||||
modified object code on the User Product (for example, the work has
 | 
					 | 
				
			||||||
been installed in ROM).
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
  The requirement to provide Installation Information does not include a
 | 
					 | 
				
			||||||
requirement to continue to provide support service, warranty, or updates
 | 
					 | 
				
			||||||
for a work that has been modified or installed by the recipient, or for
 | 
					 | 
				
			||||||
the User Product in which it has been modified or installed.  Access to a
 | 
					 | 
				
			||||||
network may be denied when the modification itself materially and
 | 
					 | 
				
			||||||
adversely affects the operation of the network or violates the rules and
 | 
					 | 
				
			||||||
protocols for communication across the network.
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
  Corresponding Source conveyed, and Installation Information provided,
 | 
					 | 
				
			||||||
in accord with this section must be in a format that is publicly
 | 
					 | 
				
			||||||
documented (and with an implementation available to the public in
 | 
					 | 
				
			||||||
source code form), and must require no special password or key for
 | 
					 | 
				
			||||||
unpacking, reading or copying.
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
  7. Additional Terms.
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
  "Additional permissions" are terms that supplement the terms of this
 | 
					 | 
				
			||||||
License by making exceptions from one or more of its conditions.
 | 
					 | 
				
			||||||
Additional permissions that are applicable to the entire Program shall
 | 
					 | 
				
			||||||
be treated as though they were included in this License, to the extent
 | 
					 | 
				
			||||||
that they are valid under applicable law.  If additional permissions
 | 
					 | 
				
			||||||
apply only to part of the Program, that part may be used separately
 | 
					 | 
				
			||||||
under those permissions, but the entire Program remains governed by
 | 
					 | 
				
			||||||
this License without regard to the additional permissions.
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
  When you convey a copy of a covered work, you may at your option
 | 
					 | 
				
			||||||
remove any additional permissions from that copy, or from any part of
 | 
					 | 
				
			||||||
it.  (Additional permissions may be written to require their own
 | 
					 | 
				
			||||||
removal in certain cases when you modify the work.)  You may place
 | 
					 | 
				
			||||||
additional permissions on material, added by you to a covered work,
 | 
					 | 
				
			||||||
for which you have or can give appropriate copyright permission.
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
  Notwithstanding any other provision of this License, for material you
 | 
					 | 
				
			||||||
add to a covered work, you may (if authorized by the copyright holders of
 | 
					 | 
				
			||||||
that material) supplement the terms of this License with terms:
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    a) Disclaiming warranty or limiting liability differently from the
 | 
					 | 
				
			||||||
    terms of sections 15 and 16 of this License; or
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    b) Requiring preservation of specified reasonable legal notices or
 | 
					 | 
				
			||||||
    author attributions in that material or in the Appropriate Legal
 | 
					 | 
				
			||||||
    Notices displayed by works containing it; or
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    c) Prohibiting misrepresentation of the origin of that material, or
 | 
					 | 
				
			||||||
    requiring that modified versions of such material be marked in
 | 
					 | 
				
			||||||
    reasonable ways as different from the original version; or
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    d) Limiting the use for publicity purposes of names of licensors or
 | 
					 | 
				
			||||||
    authors of the material; or
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    e) Declining to grant rights under trademark law for use of some
 | 
					 | 
				
			||||||
    trade names, trademarks, or service marks; or
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    f) Requiring indemnification of licensors and authors of that
 | 
					 | 
				
			||||||
    material by anyone who conveys the material (or modified versions of
 | 
					 | 
				
			||||||
    it) with contractual assumptions of liability to the recipient, for
 | 
					 | 
				
			||||||
    any liability that these contractual assumptions directly impose on
 | 
					 | 
				
			||||||
    those licensors and authors.
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
  All other non-permissive additional terms are considered "further
 | 
					 | 
				
			||||||
restrictions" within the meaning of section 10.  If the Program as you
 | 
					 | 
				
			||||||
received it, or any part of it, contains a notice stating that it is
 | 
					 | 
				
			||||||
governed by this License along with a term that is a further
 | 
					 | 
				
			||||||
restriction, you may remove that term.  If a license document contains
 | 
					 | 
				
			||||||
a further restriction but permits relicensing or conveying under this
 | 
					 | 
				
			||||||
License, you may add to a covered work material governed by the terms
 | 
					 | 
				
			||||||
of that license document, provided that the further restriction does
 | 
					 | 
				
			||||||
not survive such relicensing or conveying.
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
  If you add terms to a covered work in accord with this section, you
 | 
					 | 
				
			||||||
must place, in the relevant source files, a statement of the
 | 
					 | 
				
			||||||
additional terms that apply to those files, or a notice indicating
 | 
					 | 
				
			||||||
where to find the applicable terms.
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
  Additional terms, permissive or non-permissive, may be stated in the
 | 
					 | 
				
			||||||
form of a separately written license, or stated as exceptions;
 | 
					 | 
				
			||||||
the above requirements apply either way.
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
  8. Termination.
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
  You may not propagate or modify a covered work except as expressly
 | 
					 | 
				
			||||||
provided under this License.  Any attempt otherwise to propagate or
 | 
					 | 
				
			||||||
modify it is void, and will automatically terminate your rights under
 | 
					 | 
				
			||||||
this License (including any patent licenses granted under the third
 | 
					 | 
				
			||||||
paragraph of section 11).
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
  However, if you cease all violation of this License, then your
 | 
					 | 
				
			||||||
license from a particular copyright holder is reinstated (a)
 | 
					 | 
				
			||||||
provisionally, unless and until the copyright holder explicitly and
 | 
					 | 
				
			||||||
finally terminates your license, and (b) permanently, if the copyright
 | 
					 | 
				
			||||||
holder fails to notify you of the violation by some reasonable means
 | 
					 | 
				
			||||||
prior to 60 days after the cessation.
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
  Moreover, your license from a particular copyright holder is
 | 
					 | 
				
			||||||
reinstated permanently if the copyright holder notifies you of the
 | 
					 | 
				
			||||||
violation by some reasonable means, this is the first time you have
 | 
					 | 
				
			||||||
received notice of violation of this License (for any work) from that
 | 
					 | 
				
			||||||
copyright holder, and you cure the violation prior to 30 days after
 | 
					 | 
				
			||||||
your receipt of the notice.
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
  Termination of your rights under this section does not terminate the
 | 
					 | 
				
			||||||
licenses of parties who have received copies or rights from you under
 | 
					 | 
				
			||||||
this License.  If your rights have been terminated and not permanently
 | 
					 | 
				
			||||||
reinstated, you do not qualify to receive new licenses for the same
 | 
					 | 
				
			||||||
material under section 10.
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
  9. Acceptance Not Required for Having Copies.
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
  You are not required to accept this License in order to receive or
 | 
					 | 
				
			||||||
run a copy of the Program.  Ancillary propagation of a covered work
 | 
					 | 
				
			||||||
occurring solely as a consequence of using peer-to-peer transmission
 | 
					 | 
				
			||||||
to receive a copy likewise does not require acceptance.  However,
 | 
					 | 
				
			||||||
nothing other than this License grants you permission to propagate or
 | 
					 | 
				
			||||||
modify any covered work.  These actions infringe copyright if you do
 | 
					 | 
				
			||||||
not accept this License.  Therefore, by modifying or propagating a
 | 
					 | 
				
			||||||
covered work, you indicate your acceptance of this License to do so.
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
  10. Automatic Licensing of Downstream Recipients.
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
  Each time you convey a covered work, the recipient automatically
 | 
					 | 
				
			||||||
receives a license from the original licensors, to run, modify and
 | 
					 | 
				
			||||||
propagate that work, subject to this License.  You are not responsible
 | 
					 | 
				
			||||||
for enforcing compliance by third parties with this License.
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
  An "entity transaction" is a transaction transferring control of an
 | 
					 | 
				
			||||||
organization, or substantially all assets of one, or subdividing an
 | 
					 | 
				
			||||||
organization, or merging organizations.  If propagation of a covered
 | 
					 | 
				
			||||||
work results from an entity transaction, each party to that
 | 
					 | 
				
			||||||
transaction who receives a copy of the work also receives whatever
 | 
					 | 
				
			||||||
licenses to the work the party's predecessor in interest had or could
 | 
					 | 
				
			||||||
give under the previous paragraph, plus a right to possession of the
 | 
					 | 
				
			||||||
Corresponding Source of the work from the predecessor in interest, if
 | 
					 | 
				
			||||||
the predecessor has it or can get it with reasonable efforts.
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
  You may not impose any further restrictions on the exercise of the
 | 
					 | 
				
			||||||
rights granted or affirmed under this License.  For example, you may
 | 
					 | 
				
			||||||
not impose a license fee, royalty, or other charge for exercise of
 | 
					 | 
				
			||||||
rights granted under this License, and you may not initiate litigation
 | 
					 | 
				
			||||||
(including a cross-claim or counterclaim in a lawsuit) alleging that
 | 
					 | 
				
			||||||
any patent claim is infringed by making, using, selling, offering for
 | 
					 | 
				
			||||||
sale, or importing the Program or any portion of it.
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
  11. Patents.
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
  A "contributor" is a copyright holder who authorizes use under this
 | 
					 | 
				
			||||||
License of the Program or a work on which the Program is based.  The
 | 
					 | 
				
			||||||
work thus licensed is called the contributor's "contributor version".
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
  A contributor's "essential patent claims" are all patent claims
 | 
					 | 
				
			||||||
owned or controlled by the contributor, whether already acquired or
 | 
					 | 
				
			||||||
hereafter acquired, that would be infringed by some manner, permitted
 | 
					 | 
				
			||||||
by this License, of making, using, or selling its contributor version,
 | 
					 | 
				
			||||||
but do not include claims that would be infringed only as a
 | 
					 | 
				
			||||||
consequence of further modification of the contributor version.  For
 | 
					 | 
				
			||||||
purposes of this definition, "control" includes the right to grant
 | 
					 | 
				
			||||||
patent sublicenses in a manner consistent with the requirements of
 | 
					 | 
				
			||||||
this License.
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
  Each contributor grants you a non-exclusive, worldwide, royalty-free
 | 
					 | 
				
			||||||
patent license under the contributor's essential patent claims, to
 | 
					 | 
				
			||||||
make, use, sell, offer for sale, import and otherwise run, modify and
 | 
					 | 
				
			||||||
propagate the contents of its contributor version.
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
  In the following three paragraphs, a "patent license" is any express
 | 
					 | 
				
			||||||
agreement or commitment, however denominated, not to enforce a patent
 | 
					 | 
				
			||||||
(such as an express permission to practice a patent or covenant not to
 | 
					 | 
				
			||||||
sue for patent infringement).  To "grant" such a patent license to a
 | 
					 | 
				
			||||||
party means to make such an agreement or commitment not to enforce a
 | 
					 | 
				
			||||||
patent against the party.
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
  If you convey a covered work, knowingly relying on a patent license,
 | 
					 | 
				
			||||||
and the Corresponding Source of the work is not available for anyone
 | 
					 | 
				
			||||||
to copy, free of charge and under the terms of this License, through a
 | 
					 | 
				
			||||||
publicly available network server or other readily accessible means,
 | 
					 | 
				
			||||||
then you must either (1) cause the Corresponding Source to be so
 | 
					 | 
				
			||||||
available, or (2) arrange to deprive yourself of the benefit of the
 | 
					 | 
				
			||||||
patent license for this particular work, or (3) arrange, in a manner
 | 
					 | 
				
			||||||
consistent with the requirements of this License, to extend the patent
 | 
					 | 
				
			||||||
license to downstream recipients.  "Knowingly relying" means you have
 | 
					 | 
				
			||||||
actual knowledge that, but for the patent license, your conveying the
 | 
					 | 
				
			||||||
covered work in a country, or your recipient's use of the covered work
 | 
					 | 
				
			||||||
in a country, would infringe one or more identifiable patents in that
 | 
					 | 
				
			||||||
country that you have reason to believe are valid.
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
  If, pursuant to or in connection with a single transaction or
 | 
					 | 
				
			||||||
arrangement, you convey, or propagate by procuring conveyance of, a
 | 
					 | 
				
			||||||
covered work, and grant a patent license to some of the parties
 | 
					 | 
				
			||||||
receiving the covered work authorizing them to use, propagate, modify
 | 
					 | 
				
			||||||
or convey a specific copy of the covered work, then the patent license
 | 
					 | 
				
			||||||
you grant is automatically extended to all recipients of the covered
 | 
					 | 
				
			||||||
work and works based on it.
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
  A patent license is "discriminatory" if it does not include within
 | 
					 | 
				
			||||||
the scope of its coverage, prohibits the exercise of, or is
 | 
					 | 
				
			||||||
conditioned on the non-exercise of one or more of the rights that are
 | 
					 | 
				
			||||||
specifically granted under this License.  You may not convey a covered
 | 
					 | 
				
			||||||
work if you are a party to an arrangement with a third party that is
 | 
					 | 
				
			||||||
in the business of distributing software, under which you make payment
 | 
					 | 
				
			||||||
to the third party based on the extent of your activity of conveying
 | 
					 | 
				
			||||||
the work, and under which the third party grants, to any of the
 | 
					 | 
				
			||||||
parties who would receive the covered work from you, a discriminatory
 | 
					 | 
				
			||||||
patent license (a) in connection with copies of the covered work
 | 
					 | 
				
			||||||
conveyed by you (or copies made from those copies), or (b) primarily
 | 
					 | 
				
			||||||
for and in connection with specific products or compilations that
 | 
					 | 
				
			||||||
contain the covered work, unless you entered into that arrangement,
 | 
					 | 
				
			||||||
or that patent license was granted, prior to 28 March 2007.
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
  Nothing in this License shall be construed as excluding or limiting
 | 
					 | 
				
			||||||
any implied license or other defenses to infringement that may
 | 
					 | 
				
			||||||
otherwise be available to you under applicable patent law.
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
  12. No Surrender of Others' Freedom.
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
  If conditions are imposed on you (whether by court order, agreement or
 | 
					 | 
				
			||||||
otherwise) that contradict the conditions of this License, they do not
 | 
					 | 
				
			||||||
excuse you from the conditions of this License.  If you cannot convey a
 | 
					 | 
				
			||||||
covered work so as to satisfy simultaneously your obligations under this
 | 
					 | 
				
			||||||
License and any other pertinent obligations, then as a consequence you may
 | 
					 | 
				
			||||||
not convey it at all.  For example, if you agree to terms that obligate you
 | 
					 | 
				
			||||||
to collect a royalty for further conveying from those to whom you convey
 | 
					 | 
				
			||||||
the Program, the only way you could satisfy both those terms and this
 | 
					 | 
				
			||||||
License would be to refrain entirely from conveying the Program.
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
  13. Use with the GNU Affero General Public License.
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
  Notwithstanding any other provision of this License, you have
 | 
					 | 
				
			||||||
permission to link or combine any covered work with a work licensed
 | 
					 | 
				
			||||||
under version 3 of the GNU Affero General Public License into a single
 | 
					 | 
				
			||||||
combined work, and to convey the resulting work.  The terms of this
 | 
					 | 
				
			||||||
License will continue to apply to the part which is the covered work,
 | 
					 | 
				
			||||||
but the special requirements of the GNU Affero General Public License,
 | 
					 | 
				
			||||||
section 13, concerning interaction through a network will apply to the
 | 
					 | 
				
			||||||
combination as such.
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
  14. Revised Versions of this License.
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
  The Free Software Foundation may publish revised and/or new versions of
 | 
					 | 
				
			||||||
the GNU General Public License from time to time.  Such new versions will
 | 
					 | 
				
			||||||
be similar in spirit to the present version, but may differ in detail to
 | 
					 | 
				
			||||||
address new problems or concerns.
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
  Each version is given a distinguishing version number.  If the
 | 
					 | 
				
			||||||
Program specifies that a certain numbered version of the GNU General
 | 
					 | 
				
			||||||
Public License "or any later version" applies to it, you have the
 | 
					 | 
				
			||||||
option of following the terms and conditions either of that numbered
 | 
					 | 
				
			||||||
version or of any later version published by the Free Software
 | 
					 | 
				
			||||||
Foundation.  If the Program does not specify a version number of the
 | 
					 | 
				
			||||||
GNU General Public License, you may choose any version ever published
 | 
					 | 
				
			||||||
by the Free Software Foundation.
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
  If the Program specifies that a proxy can decide which future
 | 
					 | 
				
			||||||
versions of the GNU General Public License can be used, that proxy's
 | 
					 | 
				
			||||||
public statement of acceptance of a version permanently authorizes you
 | 
					 | 
				
			||||||
to choose that version for the Program.
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
  Later license versions may give you additional or different
 | 
					 | 
				
			||||||
permissions.  However, no additional obligations are imposed on any
 | 
					 | 
				
			||||||
author or copyright holder as a result of your choosing to follow a
 | 
					 | 
				
			||||||
later version.
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
  15. Disclaimer of Warranty.
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
  THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY
 | 
					 | 
				
			||||||
APPLICABLE LAW.  EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT
 | 
					 | 
				
			||||||
HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY
 | 
					 | 
				
			||||||
OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO,
 | 
					 | 
				
			||||||
THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
 | 
					 | 
				
			||||||
PURPOSE.  THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM
 | 
					 | 
				
			||||||
IS WITH YOU.  SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF
 | 
					 | 
				
			||||||
ALL NECESSARY SERVICING, REPAIR OR CORRECTION.
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
  16. Limitation of Liability.
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
  IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING
 | 
					 | 
				
			||||||
WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES AND/OR CONVEYS
 | 
					 | 
				
			||||||
THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY
 | 
					 | 
				
			||||||
GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE
 | 
					 | 
				
			||||||
USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF
 | 
					 | 
				
			||||||
DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD
 | 
					 | 
				
			||||||
PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS),
 | 
					 | 
				
			||||||
EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF
 | 
					 | 
				
			||||||
SUCH DAMAGES.
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
  17. Interpretation of Sections 15 and 16.
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
  If the disclaimer of warranty and limitation of liability provided
 | 
					 | 
				
			||||||
above cannot be given local legal effect according to their terms,
 | 
					 | 
				
			||||||
reviewing courts shall apply local law that most closely approximates
 | 
					 | 
				
			||||||
an absolute waiver of all civil liability in connection with the
 | 
					 | 
				
			||||||
Program, unless a warranty or assumption of liability accompanies a
 | 
					 | 
				
			||||||
copy of the Program in return for a fee.
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
                     END OF TERMS AND CONDITIONS
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
            How to Apply These Terms to Your New Programs
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
  If you develop a new program, and you want it to be of the greatest
 | 
					 | 
				
			||||||
possible use to the public, the best way to achieve this is to make it
 | 
					 | 
				
			||||||
free software which everyone can redistribute and change under these terms.
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
  To do so, attach the following notices to the program.  It is safest
 | 
					 | 
				
			||||||
to attach them to the start of each source file to most effectively
 | 
					 | 
				
			||||||
state the exclusion of warranty; and each file should have at least
 | 
					 | 
				
			||||||
the "copyright" line and a pointer to where the full notice is found.
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    <one line to give the program's name and a brief idea of what it does.>
 | 
					 | 
				
			||||||
    Copyright (C) <year>  <name of author>
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    This program is free software: you can redistribute it and/or modify
 | 
					 | 
				
			||||||
    it under the terms of the GNU General Public License as published by
 | 
					 | 
				
			||||||
    the Free Software Foundation, either version 3 of the License, or
 | 
					 | 
				
			||||||
    (at your option) any later version.
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    This program is distributed in the hope that it will be useful,
 | 
					 | 
				
			||||||
    but WITHOUT ANY WARRANTY; without even the implied warranty of
 | 
					 | 
				
			||||||
    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 | 
					 | 
				
			||||||
    GNU General Public License for more details.
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    You should have received a copy of the GNU General Public License
 | 
					 | 
				
			||||||
    along with this program.  If not, see <http://www.gnu.org/licenses/>.
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
Also add information on how to contact you by electronic and paper mail.
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
  If the program does terminal interaction, make it output a short
 | 
					 | 
				
			||||||
notice like this when it starts in an interactive mode:
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    <program>  Copyright (C) <year>  <name of author>
 | 
					 | 
				
			||||||
    This program comes with ABSOLUTELY NO WARRANTY; for details type `show w'.
 | 
					 | 
				
			||||||
    This is free software, and you are welcome to redistribute it
 | 
					 | 
				
			||||||
    under certain conditions; type `show c' for details.
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
The hypothetical commands `show w' and `show c' should show the appropriate
 | 
					 | 
				
			||||||
parts of the General Public License.  Of course, your program's commands
 | 
					 | 
				
			||||||
might be different; for a GUI interface, you would use an "about box".
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
  You should also get your employer (if you work as a programmer) or school,
 | 
					 | 
				
			||||||
if any, to sign a "copyright disclaimer" for the program, if necessary.
 | 
					 | 
				
			||||||
For more information on this, and how to apply and follow the GNU GPL, see
 | 
					 | 
				
			||||||
<http://www.gnu.org/licenses/>.
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
  The GNU General Public License does not permit incorporating your program
 | 
					 | 
				
			||||||
into proprietary programs.  If your program is a subroutine library, you
 | 
					 | 
				
			||||||
may consider it more useful to permit linking proprietary applications with
 | 
					 | 
				
			||||||
the library.  If this is what you want to do, use the GNU Lesser General
 | 
					 | 
				
			||||||
Public License instead of this License.  But first, please read
 | 
					 | 
				
			||||||
<http://www.gnu.org/philosophy/why-not-lgpl.html>.
 | 
					 | 
				
			||||||
@ -1,6 +0,0 @@
 | 
				
			|||||||
#!/bin/bash
 | 
					 | 
				
			||||||
sudo apt update
 | 
					 | 
				
			||||||
sudo apt install qemu-system qemu-user qemu-efi qemu-efi-aarch64 qemu-efi-arm -y
 | 
					 | 
				
			||||||
sudo apt install qemu-user-static binfmt-support qemu-system-gui -y
 | 
					 | 
				
			||||||
echo 安装完成!按回车键退出
 | 
					 | 
				
			||||||
read
 | 
					 | 
				
			||||||
@ -1,26 +0,0 @@
 | 
				
			|||||||
# Windows虚拟机安装工具 
 | 
					 | 
				
			||||||
## 介绍
 | 
					 | 
				
			||||||
基于VirtualBox/Qemu制作的小白Windows虚拟机安装工具,可以做到只需要用户下载系统镜像并点击安装即可,无需顾及虚拟机安装、创建、虚拟机的分区等等  
 | 
					 | 
				
			||||||
此为 Wine 运行器子项目:https://gitee.com/gfdgd-xi/deep-wine-runner  
 | 
					 | 
				
			||||||
依照 GPLV3 协议开源  
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||

 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||

 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||

 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
## 如何使用
 | 
					 | 
				
			||||||
安装最新版本的 Wine 运行器即可,最新版本的 Wine 运行器自带此安装工具  
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
## 编译指南
 | 
					 | 
				
			||||||
```bash
 | 
					 | 
				
			||||||
git clone https://gitee.com/gfdgd-xi/windows-virtual-machine-installer-for-wine-runner.git
 | 
					 | 
				
			||||||
cd windows-virtual-machine-installer-for-wine-runner
 | 
					 | 
				
			||||||
qmake .
 | 
					 | 
				
			||||||
make -j4
 | 
					 | 
				
			||||||
```
 | 
					 | 
				
			||||||
## 预编译版本
 | 
					 | 
				
			||||||
https://gitee.com/gfdgd-xi/deep-wine-runner/tree/main/VM
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
# ©2020~2023 gfdgd xi
 | 
					 | 
				
			||||||
@ -1,109 +0,0 @@
 | 
				
			|||||||
#!/bin/bash
 | 
					 | 
				
			||||||
# 使用系统默认的 bash 运行
 | 
					 | 
				
			||||||
###########################################################################################
 | 
					 | 
				
			||||||
# 作者:gfdgd xi
 | 
					 | 
				
			||||||
# 版本:1.7.0
 | 
					 | 
				
			||||||
# 更新时间:2022年07月15日
 | 
					 | 
				
			||||||
# 感谢:感谢 wine 以及 deepin-wine 团队,提供了 wine 和 deepin-wine 给大家使用,让我能做这个程序
 | 
					 | 
				
			||||||
# 基于 Python3 的 tkinter 构建
 | 
					 | 
				
			||||||
###########################################################################################
 | 
					 | 
				
			||||||
cd `dirname $0`
 | 
					 | 
				
			||||||
VBoxManage showvminfo Windows
 | 
					 | 
				
			||||||
if [[ 0 == $? ]]; then
 | 
					 | 
				
			||||||
    # 检测到虚拟机存在,启动虚拟机
 | 
					 | 
				
			||||||
    VBoxManage startvm Windows > /tmp/windows-virtual-machine-installer-for-wine-runner-run.log 2>&1
 | 
					 | 
				
			||||||
    exit
 | 
					 | 
				
			||||||
fi
 | 
					 | 
				
			||||||
# 检查是否有 QEMU
 | 
					 | 
				
			||||||
which qemu-system-x86_64
 | 
					 | 
				
			||||||
if [[ $? == 0 ]] && [[ -f "$HOME/Qemu/Windows/Windows.qcow2" ]]; then
 | 
					 | 
				
			||||||
    if [[ -f "$HOME/.config/deepin-wine-runner/QemuSetting.json" ]]; then
 | 
					 | 
				
			||||||
        echo 有设置文件,读设置文件
 | 
					 | 
				
			||||||
        cd `dirname $0`
 | 
					 | 
				
			||||||
        python3 ./VM/StartQemu.py
 | 
					 | 
				
			||||||
        exit
 | 
					 | 
				
			||||||
    fi
 | 
					 | 
				
			||||||
    # 查看CPU个数
 | 
					 | 
				
			||||||
    CpuSocketNum=`cat /proc/cpuinfo | grep "cpu cores" | uniq | wc -l`
 | 
					 | 
				
			||||||
    # 查看CPU核心数
 | 
					 | 
				
			||||||
    CpuCoreNum=`grep 'core id' /proc/cpuinfo | sort -u | wc -l`
 | 
					 | 
				
			||||||
    # 查看逻辑CPU的个数
 | 
					 | 
				
			||||||
    CpuCount=`cat /proc/cpuinfo| grep "processor"| wc -l`
 | 
					 | 
				
			||||||
 
 | 
					 | 
				
			||||||
    # 总内存大小GB
 | 
					 | 
				
			||||||
    MemTotal=`awk '($1 == "MemTotal:"){printf "%.2f\n",$2/1024/1024}' /proc/meminfo`
 | 
					 | 
				
			||||||
    use=$(echo "scale=4; $MemTotal / 3" | bc)
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    cat ~/.config/deepin-wine-runner/QEMU-ARCH | grep amd64
 | 
					 | 
				
			||||||
    if [[ $? == 0 ]] || [[ ! -e ~/.config/deepin-wine-runner/QEMU-ARCH ]]; then
 | 
					 | 
				
			||||||
        # amd64 架构
 | 
					 | 
				
			||||||
        if [[ -f $HOME/.config/deepin-wine-runner/QEMU-EFI ]]; then
 | 
					 | 
				
			||||||
            echo 使用 UEFI 启动
 | 
					 | 
				
			||||||
            if [[ -f /usr/share/qemu/OVMF.fd ]]; then
 | 
					 | 
				
			||||||
                qemuUEFI="--bios /usr/share/qemu/OVMF.fd"
 | 
					 | 
				
			||||||
            else
 | 
					 | 
				
			||||||
                if [[ -f `dirname $0`/VM/OVMF.fd ]]; then   
 | 
					 | 
				
			||||||
                    qemuUEFI="--bios `dirname $0`/VM/OVMF.fd"
 | 
					 | 
				
			||||||
                fi
 | 
					 | 
				
			||||||
            fi
 | 
					 | 
				
			||||||
            echo $qemuUEFI
 | 
					 | 
				
			||||||
        fi
 | 
					 | 
				
			||||||
        ./VM/kvm-ok
 | 
					 | 
				
			||||||
        if [[ $? == 0 ]] && [[ `arch` == "x86_64" ]]; then
 | 
					 | 
				
			||||||
            echo X86 架构,使用 kvm 加速
 | 
					 | 
				
			||||||
            qemu-system-x86_64 --enable-kvm -cpu host --hda "$HOME/Qemu/Windows/Windows.qcow2" -soundhw all -smp $CpuCount,sockets=$CpuSocketNum,cores=$(($CpuCoreNum / $CpuSocketNum)),threads=$(($CpuCount / $CpuCoreNum / $CpuSocketNum)) -m ${use}G -net user,hostfwd=tcp::3389-:3389 -display vnc=:5 -display gtk -usb -nic model=rtl8139 $qemuUEFI  > /tmp/windows-virtual-machine-installer-for-wine-runner-run.log 2>&1
 | 
					 | 
				
			||||||
            exit
 | 
					 | 
				
			||||||
        fi
 | 
					 | 
				
			||||||
        echo 不使用 kvm 加速
 | 
					 | 
				
			||||||
        qemu-system-x86_64 --hda "$HOME/Qemu/Windows/Windows.qcow2" -soundhw all -smp $CpuCount,sockets=$CpuSocketNum,cores=$(($CpuCoreNum / $CpuSocketNum)),threads=$(($CpuCount / $CpuCoreNum / $CpuSocketNum)) -m ${use}G -net user,hostfwd=tcp::3389-:3389 -display vnc=:5 -display gtk -usb -nic model=rtl8139 $qemuUEFI  > /tmp/windows-virtual-machine-installer-for-wine-runner-run.log 2>&1
 | 
					 | 
				
			||||||
        exit
 | 
					 | 
				
			||||||
    fi
 | 
					 | 
				
			||||||
    cat ~/.config/deepin-wine-runner/QEMU-ARCH | grep armhf
 | 
					 | 
				
			||||||
    if [[ $? == 0 ]]; then
 | 
					 | 
				
			||||||
        # armhf 架构
 | 
					 | 
				
			||||||
        # 寻找 UEFI 固件
 | 
					 | 
				
			||||||
        if [[ -f /usr/share/AAVMF/AAVMF32_CODE.fd ]]; then
 | 
					 | 
				
			||||||
            qemuUEFI="--bios /usr/share/AAVMF/AAVMF32_CODE.fd"
 | 
					 | 
				
			||||||
        else
 | 
					 | 
				
			||||||
            if [[ -f ./VM/AAVMF32_CODE.fd ]]; then
 | 
					 | 
				
			||||||
                qemuUEFI="--bios ./VM/AAVMF32_CODE.fd"
 | 
					 | 
				
			||||||
            fi
 | 
					 | 
				
			||||||
        fi
 | 
					 | 
				
			||||||
        echo $qemuUEFI
 | 
					 | 
				
			||||||
        ./VM/kvm-ok
 | 
					 | 
				
			||||||
        if [[ $? == 0 ]] && [[ `arch` == "aarch64" ]]; then
 | 
					 | 
				
			||||||
            qemu-system-arm --enable-kvm --hda "$HOME/Qemu/Windows/Windows.qcow2" -soundhw all -smp $CpuCount,sockets=$CpuSocketNum,cores=$(($CpuCoreNum / $CpuSocketNum)),threads=$(($CpuCount / $CpuCoreNum / $CpuSocketNum)) -m ${use}G -net user,hostfwd=tcp::3389-:3389 -display vnc=:5 -display gtk -usb -nic model=rtl8139 $qemuUEFI -cpu max -M virt -device virtio-gpu-pci -device nec-usb-xhci,id=xhci,addr=0x1b -device usb-tablet,id=tablet,bus=xhci.0,port=1 -device usb-kbd,id=keyboard,bus=xhci.0,port=2 > /tmp/windows-virtual-machine-installer-for-wine-runner-install.log 2>&1 
 | 
					 | 
				
			||||||
            exit
 | 
					 | 
				
			||||||
        fi
 | 
					 | 
				
			||||||
        qemu-system-arm --hda "$HOME/Qemu/Windows/Windows.qcow2" -soundhw all -smp $CpuCount,sockets=$CpuSocketNum,cores=$(($CpuCoreNum / $CpuSocketNum)),threads=$(($CpuCount / $CpuCoreNum / $CpuSocketNum)) -m ${use}G -net user,hostfwd=tcp::3389-:3389 -display vnc=:5 -display gtk -usb -nic model=rtl8139 $qemuUEFI -cpu max -M virt -device virtio-gpu-pci -device nec-usb-xhci,id=xhci,addr=0x1b -device usb-tablet,id=tablet,bus=xhci.0,port=1 -device usb-kbd,id=keyboard,bus=xhci.0,port=2 > /tmp/windows-virtual-machine-installer-for-wine-runner-install.log 2>&1 
 | 
					 | 
				
			||||||
        exit
 | 
					 | 
				
			||||||
    fi
 | 
					 | 
				
			||||||
    cat ~/.config/deepin-wine-runner/QEMU-ARCH | grep aarch64
 | 
					 | 
				
			||||||
    if [[ $? == 0 ]]; then
 | 
					 | 
				
			||||||
        # aarch64 架构
 | 
					 | 
				
			||||||
        # 寻找 UEFI 固件
 | 
					 | 
				
			||||||
        if [[ -f /usr/share/qemu-efi-aarch64/QEMU_EFI.fd ]]; then
 | 
					 | 
				
			||||||
            qemuUEFI="--bios /usr/share/qemu-efi-aarch64/QEMU_EFI.fd"
 | 
					 | 
				
			||||||
        else
 | 
					 | 
				
			||||||
            if [[ -f ./VM/QEMU_AARCH64_EFI.fd ]]; then
 | 
					 | 
				
			||||||
                qemuUEFI="--bios ./VM/QEMU_AARCH64_EFI.fd"
 | 
					 | 
				
			||||||
            fi
 | 
					 | 
				
			||||||
        fi
 | 
					 | 
				
			||||||
        echo $qemuUEFI
 | 
					 | 
				
			||||||
        ./VM/kvm-ok
 | 
					 | 
				
			||||||
        if [[ $? == 0 ]] && [[ `arch` == "aarch64" ]]; then
 | 
					 | 
				
			||||||
            qemu-system-aarch64 --enable-kvm --hda "$HOME/Qemu/Windows/Windows.qcow2" -soundhw all -smp $CpuCount,sockets=$CpuSocketNum,cores=$(($CpuCoreNum / $CpuSocketNum)),threads=$(($CpuCount / $CpuCoreNum / $CpuSocketNum)) -m ${use}G -net user,hostfwd=tcp::3389-:3389 -display vnc=:5 -display gtk -usb -nic model=rtl8139 $qemuUEFI -cpu max -M virt -device virtio-gpu-pci -device nec-usb-xhci,id=xhci,addr=0x1b -device usb-tablet,id=tablet,bus=xhci.0,port=1 -device usb-kbd,id=keyboard,bus=xhci.0,port=2 > /tmp/windows-virtual-machine-installer-for-wine-runner-install.log 2>&1 
 | 
					 | 
				
			||||||
            exit
 | 
					 | 
				
			||||||
        fi
 | 
					 | 
				
			||||||
        qemu-system-aarch64 --hda "$HOME/Qemu/Windows/Windows.qcow2" -soundhw all -smp $CpuCount,sockets=$CpuSocketNum,cores=$(($CpuCoreNum / $CpuSocketNum)),threads=$(($CpuCount / $CpuCoreNum / $CpuSocketNum)) -m ${use}G -net user,hostfwd=tcp::3389-:3389 -display vnc=:5 -display gtk -usb -nic model=rtl8139 $qemuUEFI -cpu max -M virt -device virtio-gpu-pci -device nec-usb-xhci,id=xhci,addr=0x1b -device usb-tablet,id=tablet,bus=xhci.0,port=1 -device usb-kbd,id=keyboard,bus=xhci.0,port=2 > /tmp/windows-virtual-machine-installer-for-wine-runner-install.log 2>&1 
 | 
					 | 
				
			||||||
        exit
 | 
					 | 
				
			||||||
    fi
 | 
					 | 
				
			||||||
    
 | 
					 | 
				
			||||||
fi
 | 
					 | 
				
			||||||
zenity --question --no-wrap --text="检查到您未创建所指定的虚拟机,是否创建虚拟机并继续?\n如果不创建将无法使用"
 | 
					 | 
				
			||||||
if [[ 1 == $? ]]; then
 | 
					 | 
				
			||||||
    # 用户不想创建虚拟机,结束
 | 
					 | 
				
			||||||
    exit
 | 
					 | 
				
			||||||
fi
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
./VM/VirtualMachine
 | 
					 | 
				
			||||||
@ -1,78 +0,0 @@
 | 
				
			|||||||
#-------------------------------------------------
 | 
					 | 
				
			||||||
#
 | 
					 | 
				
			||||||
# Project created by QtCreator 2022-07-12T13:39:19
 | 
					 | 
				
			||||||
#
 | 
					 | 
				
			||||||
#-------------------------------------------------
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
QT       += core gui
 | 
					 | 
				
			||||||
TRANSLATIONS += zh_CN.ts\
 | 
					 | 
				
			||||||
                en_US.ts
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
greaterThan(QT_MAJOR_VERSION, 4): QT += widgets
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
TARGET = VirtualMachine
 | 
					 | 
				
			||||||
TEMPLATE = app
 | 
					 | 
				
			||||||
QT += network
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
# The following define makes your compiler emit warnings if you use
 | 
					 | 
				
			||||||
# any feature of Qt which has been marked as deprecated (the exact warnings
 | 
					 | 
				
			||||||
# depend on your compiler). Please consult the documentation of the
 | 
					 | 
				
			||||||
# deprecated API in order to know how to port your code away from it.
 | 
					 | 
				
			||||||
DEFINES += QT_DEPRECATED_WARNINGS
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
# You can also make your code fail to compile if you use deprecated APIs.
 | 
					 | 
				
			||||||
# In order to do so, uncomment the following line.
 | 
					 | 
				
			||||||
# You can also select to disable deprecated APIs only up to a certain version of Qt.
 | 
					 | 
				
			||||||
#DEFINES += QT_DISABLE_DEPRECATED_BEFORE=0x060000    # disables all the APIs deprecated before Qt 6.0.0
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
CONFIG += c++11
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
SOURCES += \
 | 
					 | 
				
			||||||
        main.cpp \
 | 
					 | 
				
			||||||
        mainwindow.cpp \
 | 
					 | 
				
			||||||
    buildvbox.cpp \
 | 
					 | 
				
			||||||
    vbox.cpp \
 | 
					 | 
				
			||||||
    command.cpp \
 | 
					 | 
				
			||||||
    infoutils.cpp \
 | 
					 | 
				
			||||||
    qemu.cpp \
 | 
					 | 
				
			||||||
    qemusetting.cpp
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
HEADERS += \
 | 
					 | 
				
			||||||
        mainwindow.h \
 | 
					 | 
				
			||||||
    buildvbox.h \
 | 
					 | 
				
			||||||
    vbox.h \
 | 
					 | 
				
			||||||
    command.h \
 | 
					 | 
				
			||||||
    infoutils.h \
 | 
					 | 
				
			||||||
    qemu.h \
 | 
					 | 
				
			||||||
    qemusetting.h
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
FORMS += \
 | 
					 | 
				
			||||||
        mainwindow.ui \
 | 
					 | 
				
			||||||
    qemusetting.ui
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
# Default rules for deployment.
 | 
					 | 
				
			||||||
qnx: target.path = /tmp/$${TARGET}/bin
 | 
					 | 
				
			||||||
else: unix:!android: target.path = /opt/$${TARGET}/bin
 | 
					 | 
				
			||||||
!isEmpty(target.path): INSTALLS += target
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
RESOURCES += \
 | 
					 | 
				
			||||||
    trans.qrc \
 | 
					 | 
				
			||||||
    图标.qrc
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
DISTFILES += \
 | 
					 | 
				
			||||||
    en_US.qm \
 | 
					 | 
				
			||||||
    en_US.ts
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
# 编译时拷贝所需文件
 | 
					 | 
				
			||||||
file_need.files += Windows7X64Auto.iso \
 | 
					 | 
				
			||||||
    Windows7X86Auto.iso \
 | 
					 | 
				
			||||||
    kvm-ok \
 | 
					 | 
				
			||||||
    AAVMF32_CODE.fd \
 | 
					 | 
				
			||||||
    deepin-wine-runner.svg \
 | 
					 | 
				
			||||||
    OVMF.fd \
 | 
					 | 
				
			||||||
    QEMU_AARCH64_EFI.fd \
 | 
					 | 
				
			||||||
    QEMU_EFI_LOONG64_7.1.fd \
 | 
					 | 
				
			||||||
    test.qcow2
 | 
					 | 
				
			||||||
file_need.path += $$OUT_PWD
 | 
					 | 
				
			||||||
COPIES += file_need
 | 
					 | 
				
			||||||
system(chmod 777 $$OUT_PWD/kvm-ok)
 | 
					 | 
				
			||||||
@ -1,347 +0,0 @@
 | 
				
			|||||||
<?xml version="1.0" encoding="UTF-8"?>
 | 
					 | 
				
			||||||
<!DOCTYPE QtCreatorProject>
 | 
					 | 
				
			||||||
<!-- Written by QtCreator 9.0.2, 2024-06-01T15:39:37. -->
 | 
					 | 
				
			||||||
<qtcreator>
 | 
					 | 
				
			||||||
 <data>
 | 
					 | 
				
			||||||
  <variable>EnvironmentId</variable>
 | 
					 | 
				
			||||||
  <value type="QByteArray">{4ffd6df9-1365-4837-81b1-582e0e2d1f21}</value>
 | 
					 | 
				
			||||||
 </data>
 | 
					 | 
				
			||||||
 <data>
 | 
					 | 
				
			||||||
  <variable>ProjectExplorer.Project.ActiveTarget</variable>
 | 
					 | 
				
			||||||
  <value type="qlonglong">0</value>
 | 
					 | 
				
			||||||
 </data>
 | 
					 | 
				
			||||||
 <data>
 | 
					 | 
				
			||||||
  <variable>ProjectExplorer.Project.EditorSettings</variable>
 | 
					 | 
				
			||||||
  <valuemap type="QVariantMap">
 | 
					 | 
				
			||||||
   <value type="bool" key="EditorConfiguration.AutoIndent">true</value>
 | 
					 | 
				
			||||||
   <value type="bool" key="EditorConfiguration.AutoSpacesForTabs">false</value>
 | 
					 | 
				
			||||||
   <value type="bool" key="EditorConfiguration.CamelCaseNavigation">true</value>
 | 
					 | 
				
			||||||
   <valuemap type="QVariantMap" key="EditorConfiguration.CodeStyle.0">
 | 
					 | 
				
			||||||
    <value type="QString" key="language">Cpp</value>
 | 
					 | 
				
			||||||
    <valuemap type="QVariantMap" key="value">
 | 
					 | 
				
			||||||
     <value type="QByteArray" key="CurrentPreferences">CppGlobal</value>
 | 
					 | 
				
			||||||
    </valuemap>
 | 
					 | 
				
			||||||
   </valuemap>
 | 
					 | 
				
			||||||
   <valuemap type="QVariantMap" key="EditorConfiguration.CodeStyle.1">
 | 
					 | 
				
			||||||
    <value type="QString" key="language">QmlJS</value>
 | 
					 | 
				
			||||||
    <valuemap type="QVariantMap" key="value">
 | 
					 | 
				
			||||||
     <value type="QByteArray" key="CurrentPreferences">QmlJSGlobal</value>
 | 
					 | 
				
			||||||
    </valuemap>
 | 
					 | 
				
			||||||
   </valuemap>
 | 
					 | 
				
			||||||
   <value type="qlonglong" key="EditorConfiguration.CodeStyle.Count">2</value>
 | 
					 | 
				
			||||||
   <value type="QByteArray" key="EditorConfiguration.Codec">UTF-8</value>
 | 
					 | 
				
			||||||
   <value type="bool" key="EditorConfiguration.ConstrainTooltips">false</value>
 | 
					 | 
				
			||||||
   <value type="int" key="EditorConfiguration.IndentSize">4</value>
 | 
					 | 
				
			||||||
   <value type="bool" key="EditorConfiguration.KeyboardTooltips">false</value>
 | 
					 | 
				
			||||||
   <value type="int" key="EditorConfiguration.MarginColumn">80</value>
 | 
					 | 
				
			||||||
   <value type="bool" key="EditorConfiguration.MouseHiding">true</value>
 | 
					 | 
				
			||||||
   <value type="bool" key="EditorConfiguration.MouseNavigation">true</value>
 | 
					 | 
				
			||||||
   <value type="int" key="EditorConfiguration.PaddingMode">1</value>
 | 
					 | 
				
			||||||
   <value type="bool" key="EditorConfiguration.PreferSingleLineComments">false</value>
 | 
					 | 
				
			||||||
   <value type="bool" key="EditorConfiguration.ScrollWheelZooming">true</value>
 | 
					 | 
				
			||||||
   <value type="bool" key="EditorConfiguration.ShowMargin">false</value>
 | 
					 | 
				
			||||||
   <value type="int" key="EditorConfiguration.SmartBackspaceBehavior">0</value>
 | 
					 | 
				
			||||||
   <value type="bool" key="EditorConfiguration.SmartSelectionChanging">true</value>
 | 
					 | 
				
			||||||
   <value type="bool" key="EditorConfiguration.SpacesForTabs">true</value>
 | 
					 | 
				
			||||||
   <value type="int" key="EditorConfiguration.TabKeyBehavior">0</value>
 | 
					 | 
				
			||||||
   <value type="int" key="EditorConfiguration.TabSize">8</value>
 | 
					 | 
				
			||||||
   <value type="bool" key="EditorConfiguration.UseGlobal">true</value>
 | 
					 | 
				
			||||||
   <value type="bool" key="EditorConfiguration.UseIndenter">false</value>
 | 
					 | 
				
			||||||
   <value type="int" key="EditorConfiguration.Utf8BomBehavior">1</value>
 | 
					 | 
				
			||||||
   <value type="bool" key="EditorConfiguration.addFinalNewLine">true</value>
 | 
					 | 
				
			||||||
   <value type="bool" key="EditorConfiguration.cleanIndentation">true</value>
 | 
					 | 
				
			||||||
   <value type="bool" key="EditorConfiguration.cleanWhitespace">true</value>
 | 
					 | 
				
			||||||
   <value type="QString" key="EditorConfiguration.ignoreFileTypes">*.md, *.MD, Makefile</value>
 | 
					 | 
				
			||||||
   <value type="bool" key="EditorConfiguration.inEntireDocument">false</value>
 | 
					 | 
				
			||||||
   <value type="bool" key="EditorConfiguration.skipTrailingWhitespace">true</value>
 | 
					 | 
				
			||||||
   <value type="bool" key="EditorConfiguration.tintMarginArea">true</value>
 | 
					 | 
				
			||||||
  </valuemap>
 | 
					 | 
				
			||||||
 </data>
 | 
					 | 
				
			||||||
 <data>
 | 
					 | 
				
			||||||
  <variable>ProjectExplorer.Project.PluginSettings</variable>
 | 
					 | 
				
			||||||
  <valuemap type="QVariantMap">
 | 
					 | 
				
			||||||
   <valuemap type="QVariantMap" key="AutoTest.ActiveFrameworks">
 | 
					 | 
				
			||||||
    <value type="bool" key="AutoTest.Framework.Boost">true</value>
 | 
					 | 
				
			||||||
    <value type="bool" key="AutoTest.Framework.CTest">false</value>
 | 
					 | 
				
			||||||
    <value type="bool" key="AutoTest.Framework.Catch">true</value>
 | 
					 | 
				
			||||||
    <value type="bool" key="AutoTest.Framework.GTest">true</value>
 | 
					 | 
				
			||||||
    <value type="bool" key="AutoTest.Framework.QtQuickTest">true</value>
 | 
					 | 
				
			||||||
    <value type="bool" key="AutoTest.Framework.QtTest">true</value>
 | 
					 | 
				
			||||||
   </valuemap>
 | 
					 | 
				
			||||||
   <valuemap type="QVariantMap" key="AutoTest.CheckStates"/>
 | 
					 | 
				
			||||||
   <value type="int" key="AutoTest.RunAfterBuild">0</value>
 | 
					 | 
				
			||||||
   <value type="bool" key="AutoTest.UseGlobal">true</value>
 | 
					 | 
				
			||||||
   <valuelist type="QVariantList" key="ClangCodeModel.CustomCommandLineKey"/>
 | 
					 | 
				
			||||||
   <value type="bool" key="ClangCodeModel.UseGlobalConfig">true</value>
 | 
					 | 
				
			||||||
   <value type="QString" key="ClangCodeModel.WarningConfigId">Builtin.BuildSystem</value>
 | 
					 | 
				
			||||||
   <valuemap type="QVariantMap" key="ClangTools">
 | 
					 | 
				
			||||||
    <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">2</value>
 | 
					 | 
				
			||||||
    <valuelist type="QVariantList" key="ClangTools.SelectedDirs"/>
 | 
					 | 
				
			||||||
    <valuelist type="QVariantList" key="ClangTools.SelectedFiles"/>
 | 
					 | 
				
			||||||
    <valuelist type="QVariantList" key="ClangTools.SuppressedDiagnostics"/>
 | 
					 | 
				
			||||||
    <value type="bool" key="ClangTools.UseGlobalSettings">true</value>
 | 
					 | 
				
			||||||
   </valuemap>
 | 
					 | 
				
			||||||
  </valuemap>
 | 
					 | 
				
			||||||
 </data>
 | 
					 | 
				
			||||||
 <data>
 | 
					 | 
				
			||||||
  <variable>ProjectExplorer.Project.Target.0</variable>
 | 
					 | 
				
			||||||
  <valuemap type="QVariantMap">
 | 
					 | 
				
			||||||
   <value type="QString" key="DeviceType">Desktop</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="qlonglong" key="ProjectExplorer.Target.ActiveBuildConfiguration">0</value>
 | 
					 | 
				
			||||||
   <value type="qlonglong" key="ProjectExplorer.Target.ActiveDeployConfiguration">0</value>
 | 
					 | 
				
			||||||
   <value type="qlonglong" key="ProjectExplorer.Target.ActiveRunConfiguration">0</value>
 | 
					 | 
				
			||||||
   <valuemap type="QVariantMap" key="ProjectExplorer.Target.BuildConfiguration.0">
 | 
					 | 
				
			||||||
    <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="qlonglong" key="ProjectExplorer.BuildStepList.StepsCount">2</value>
 | 
					 | 
				
			||||||
     <value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">构建</value>
 | 
					 | 
				
			||||||
     <value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName">构建</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="qlonglong" 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="qlonglong" key="ProjectExplorer.BuildStepList.StepsCount">2</value>
 | 
					 | 
				
			||||||
     <value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">构建</value>
 | 
					 | 
				
			||||||
     <value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName">构建</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="qlonglong" 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="qlonglong" key="ProjectExplorer.BuildStepList.StepsCount">2</value>
 | 
					 | 
				
			||||||
     <value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">构建</value>
 | 
					 | 
				
			||||||
     <value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName">构建</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="qlonglong" 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="qlonglong" key="ProjectExplorer.Target.BuildConfigurationCount">3</value>
 | 
					 | 
				
			||||||
   <valuemap type="QVariantMap" key="ProjectExplorer.Target.DeployConfiguration.0">
 | 
					 | 
				
			||||||
    <valuemap type="QVariantMap" key="ProjectExplorer.BuildConfiguration.BuildStepList.0">
 | 
					 | 
				
			||||||
     <value type="qlonglong" key="ProjectExplorer.BuildStepList.StepsCount">0</value>
 | 
					 | 
				
			||||||
     <value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">部署</value>
 | 
					 | 
				
			||||||
     <value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName">部署</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="qlonglong" 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="qlonglong" 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="qlonglong" key="ProjectExplorer.Target.ActiveBuildConfiguration">0</value>
 | 
					 | 
				
			||||||
   <value type="qlonglong" key="ProjectExplorer.Target.ActiveDeployConfiguration">0</value>
 | 
					 | 
				
			||||||
   <value type="qlonglong" 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>
 | 
					 | 
				
			||||||
      <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="qlonglong" key="ProjectExplorer.BuildStepList.StepsCount">2</value>
 | 
					 | 
				
			||||||
     <value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">构建</value>
 | 
					 | 
				
			||||||
     <value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName">构建</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="qlonglong" 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>
 | 
					 | 
				
			||||||
   </valuemap>
 | 
					 | 
				
			||||||
   <value type="qlonglong" key="ProjectExplorer.Target.BuildConfigurationCount">1</value>
 | 
					 | 
				
			||||||
   <valuemap type="QVariantMap" key="ProjectExplorer.Target.DeployConfiguration.0">
 | 
					 | 
				
			||||||
    <valuemap type="QVariantMap" key="ProjectExplorer.BuildConfiguration.BuildStepList.0">
 | 
					 | 
				
			||||||
     <value type="qlonglong" key="ProjectExplorer.BuildStepList.StepsCount">0</value>
 | 
					 | 
				
			||||||
     <value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">部署</value>
 | 
					 | 
				
			||||||
     <value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName">部署</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="qlonglong" 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>
 | 
					 | 
				
			||||||
   </valuemap>
 | 
					 | 
				
			||||||
   <value type="qlonglong" key="ProjectExplorer.Target.RunConfigurationCount">1</value>
 | 
					 | 
				
			||||||
  </valuemap>
 | 
					 | 
				
			||||||
 </data>
 | 
					 | 
				
			||||||
 <data>
 | 
					 | 
				
			||||||
  <variable>ProjectExplorer.Project.TargetCount</variable>
 | 
					 | 
				
			||||||
  <value type="qlonglong">2</value>
 | 
					 | 
				
			||||||
 </data>
 | 
					 | 
				
			||||||
 <data>
 | 
					 | 
				
			||||||
  <variable>ProjectExplorer.Project.Updater.FileVersion</variable>
 | 
					 | 
				
			||||||
  <value type="int">22</value>
 | 
					 | 
				
			||||||
 </data>
 | 
					 | 
				
			||||||
 <data>
 | 
					 | 
				
			||||||
  <variable>Version</variable>
 | 
					 | 
				
			||||||
  <value type="int">22</value>
 | 
					 | 
				
			||||||
 </data>
 | 
					 | 
				
			||||||
</qtcreator>
 | 
					 | 
				
			||||||
@ -1,214 +0,0 @@
 | 
				
			|||||||
<?xml version="1.0" encoding="UTF-8"?>
 | 
					 | 
				
			||||||
<!DOCTYPE QtCreatorProject>
 | 
					 | 
				
			||||||
<!-- Written by QtCreator 4.8.2, 2023-07-12T19:05:39. -->
 | 
					 | 
				
			||||||
<qtcreator>
 | 
					 | 
				
			||||||
 <data>
 | 
					 | 
				
			||||||
  <variable>EnvironmentId</variable>
 | 
					 | 
				
			||||||
  <value type="QByteArray">{4ffd6df9-1365-4837-81b1-582e0e2d1f21}</value>
 | 
					 | 
				
			||||||
 </data>
 | 
					 | 
				
			||||||
 <data>
 | 
					 | 
				
			||||||
  <variable>ProjectExplorer.Project.ActiveTarget</variable>
 | 
					 | 
				
			||||||
  <value type="int">0</value>
 | 
					 | 
				
			||||||
 </data>
 | 
					 | 
				
			||||||
 <data>
 | 
					 | 
				
			||||||
  <variable>ProjectExplorer.Project.EditorSettings</variable>
 | 
					 | 
				
			||||||
  <valuemap type="QVariantMap">
 | 
					 | 
				
			||||||
   <value type="bool" key="EditorConfiguration.AutoIndent">true</value>
 | 
					 | 
				
			||||||
   <value type="bool" key="EditorConfiguration.AutoSpacesForTabs">false</value>
 | 
					 | 
				
			||||||
   <value type="bool" key="EditorConfiguration.CamelCaseNavigation">true</value>
 | 
					 | 
				
			||||||
   <valuemap type="QVariantMap" key="EditorConfiguration.CodeStyle.0">
 | 
					 | 
				
			||||||
    <value type="QString" key="language">Cpp</value>
 | 
					 | 
				
			||||||
    <valuemap type="QVariantMap" key="value">
 | 
					 | 
				
			||||||
     <value type="QByteArray" key="CurrentPreferences">CppGlobal</value>
 | 
					 | 
				
			||||||
    </valuemap>
 | 
					 | 
				
			||||||
   </valuemap>
 | 
					 | 
				
			||||||
   <valuemap type="QVariantMap" key="EditorConfiguration.CodeStyle.1">
 | 
					 | 
				
			||||||
    <value type="QString" key="language">QmlJS</value>
 | 
					 | 
				
			||||||
    <valuemap type="QVariantMap" key="value">
 | 
					 | 
				
			||||||
     <value type="QByteArray" key="CurrentPreferences">QmlJSGlobal</value>
 | 
					 | 
				
			||||||
    </valuemap>
 | 
					 | 
				
			||||||
   </valuemap>
 | 
					 | 
				
			||||||
   <value type="int" key="EditorConfiguration.CodeStyle.Count">2</value>
 | 
					 | 
				
			||||||
   <value type="QByteArray" key="EditorConfiguration.Codec">UTF-8</value>
 | 
					 | 
				
			||||||
   <value type="bool" key="EditorConfiguration.ConstrainTooltips">false</value>
 | 
					 | 
				
			||||||
   <value type="int" key="EditorConfiguration.IndentSize">4</value>
 | 
					 | 
				
			||||||
   <value type="bool" key="EditorConfiguration.KeyboardTooltips">false</value>
 | 
					 | 
				
			||||||
   <value type="int" key="EditorConfiguration.MarginColumn">80</value>
 | 
					 | 
				
			||||||
   <value type="bool" key="EditorConfiguration.MouseHiding">true</value>
 | 
					 | 
				
			||||||
   <value type="bool" key="EditorConfiguration.MouseNavigation">true</value>
 | 
					 | 
				
			||||||
   <value type="int" key="EditorConfiguration.PaddingMode">1</value>
 | 
					 | 
				
			||||||
   <value type="bool" key="EditorConfiguration.ScrollWheelZooming">true</value>
 | 
					 | 
				
			||||||
   <value type="bool" key="EditorConfiguration.ShowMargin">false</value>
 | 
					 | 
				
			||||||
   <value type="int" key="EditorConfiguration.SmartBackspaceBehavior">0</value>
 | 
					 | 
				
			||||||
   <value type="bool" key="EditorConfiguration.SmartSelectionChanging">true</value>
 | 
					 | 
				
			||||||
   <value type="bool" key="EditorConfiguration.SpacesForTabs">true</value>
 | 
					 | 
				
			||||||
   <value type="int" key="EditorConfiguration.TabKeyBehavior">0</value>
 | 
					 | 
				
			||||||
   <value type="int" key="EditorConfiguration.TabSize">8</value>
 | 
					 | 
				
			||||||
   <value type="bool" key="EditorConfiguration.UseGlobal">true</value>
 | 
					 | 
				
			||||||
   <value type="int" key="EditorConfiguration.Utf8BomBehavior">1</value>
 | 
					 | 
				
			||||||
   <value type="bool" key="EditorConfiguration.addFinalNewLine">true</value>
 | 
					 | 
				
			||||||
   <value type="bool" key="EditorConfiguration.cleanIndentation">true</value>
 | 
					 | 
				
			||||||
   <value type="bool" key="EditorConfiguration.cleanWhitespace">true</value>
 | 
					 | 
				
			||||||
   <value type="bool" key="EditorConfiguration.inEntireDocument">false</value>
 | 
					 | 
				
			||||||
  </valuemap>
 | 
					 | 
				
			||||||
 </data>
 | 
					 | 
				
			||||||
 <data>
 | 
					 | 
				
			||||||
  <variable>ProjectExplorer.Project.PluginSettings</variable>
 | 
					 | 
				
			||||||
  <valuemap type="QVariantMap">
 | 
					 | 
				
			||||||
   <valuelist type="QVariantList" key="ClangCodeModel.CustomCommandLineKey"/>
 | 
					 | 
				
			||||||
   <value type="bool" key="ClangCodeModel.UseGlobalConfig">true</value>
 | 
					 | 
				
			||||||
  </valuemap>
 | 
					 | 
				
			||||||
 </data>
 | 
					 | 
				
			||||||
 <data>
 | 
					 | 
				
			||||||
  <variable>ProjectExplorer.Project.Target.0</variable>
 | 
					 | 
				
			||||||
  <valuemap type="QVariantMap">
 | 
					 | 
				
			||||||
   <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/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>
 | 
					 | 
				
			||||||
      <value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">qmake</value>
 | 
					 | 
				
			||||||
      <value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName"></value>
 | 
					 | 
				
			||||||
      <value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">QtProjectManager.QMakeBuildStep</value>
 | 
					 | 
				
			||||||
      <value type="bool" key="QtProjectManager.QMakeBuildStep.LinkQmlDebuggingLibrary">false</value>
 | 
					 | 
				
			||||||
      <value type="QString" key="QtProjectManager.QMakeBuildStep.QMakeArguments"></value>
 | 
					 | 
				
			||||||
      <value type="bool" key="QtProjectManager.QMakeBuildStep.QMakeForced">false</value>
 | 
					 | 
				
			||||||
      <value type="bool" key="QtProjectManager.QMakeBuildStep.SeparateDebugInfo">false</value>
 | 
					 | 
				
			||||||
      <value type="bool" key="QtProjectManager.QMakeBuildStep.UseQtQuickCompiler">false</value>
 | 
					 | 
				
			||||||
     </valuemap>
 | 
					 | 
				
			||||||
     <valuemap type="QVariantMap" key="ProjectExplorer.BuildStepList.Step.1">
 | 
					 | 
				
			||||||
      <value type="bool" key="ProjectExplorer.BuildStep.Enabled">true</value>
 | 
					 | 
				
			||||||
      <value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">Make</value>
 | 
					 | 
				
			||||||
      <value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName"></value>
 | 
					 | 
				
			||||||
      <value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">Qt4ProjectManager.MakeStep</value>
 | 
					 | 
				
			||||||
      <valuelist type="QVariantList" key="Qt4ProjectManager.MakeStep.BuildTargets"/>
 | 
					 | 
				
			||||||
      <value type="bool" key="Qt4ProjectManager.MakeStep.Clean">false</value>
 | 
					 | 
				
			||||||
      <value type="QString" key="Qt4ProjectManager.MakeStep.MakeArguments"></value>
 | 
					 | 
				
			||||||
      <value type="QString" key="Qt4ProjectManager.MakeStep.MakeCommand"></value>
 | 
					 | 
				
			||||||
      <value type="bool" key="Qt4ProjectManager.MakeStep.OverrideMakeflags">false</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"></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.DefaultDisplayName">Make</value>
 | 
					 | 
				
			||||||
      <value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName"></value>
 | 
					 | 
				
			||||||
      <value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">Qt4ProjectManager.MakeStep</value>
 | 
					 | 
				
			||||||
      <valuelist type="QVariantList" key="Qt4ProjectManager.MakeStep.BuildTargets"/>
 | 
					 | 
				
			||||||
      <value type="bool" key="Qt4ProjectManager.MakeStep.Clean">true</value>
 | 
					 | 
				
			||||||
      <value type="QString" key="Qt4ProjectManager.MakeStep.MakeArguments">clean</value>
 | 
					 | 
				
			||||||
      <value type="QString" key="Qt4ProjectManager.MakeStep.MakeCommand"></value>
 | 
					 | 
				
			||||||
      <value type="bool" key="Qt4ProjectManager.MakeStep.OverrideMakeflags">false</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"></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.UserEnvironmentChanges"/>
 | 
					 | 
				
			||||||
    <value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">Release</value>
 | 
					 | 
				
			||||||
    <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="bool" key="Qt4ProjectManager.Qt4BuildConfiguration.UseShadowBuild">true</value>
 | 
					 | 
				
			||||||
   </valuemap>
 | 
					 | 
				
			||||||
   <value type="int" key="ProjectExplorer.Target.BuildConfigurationCount">1</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"></value>
 | 
					 | 
				
			||||||
     <value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">ProjectExplorer.BuildSteps.Deploy</value>
 | 
					 | 
				
			||||||
    </valuemap>
 | 
					 | 
				
			||||||
    <value type="int" key="ProjectExplorer.BuildConfiguration.BuildStepListCount">1</value>
 | 
					 | 
				
			||||||
    <value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">Deploy Configuration</value>
 | 
					 | 
				
			||||||
    <value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName"></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.PluginSettings"/>
 | 
					 | 
				
			||||||
   <valuemap type="QVariantMap" key="ProjectExplorer.Target.RunConfiguration.0">
 | 
					 | 
				
			||||||
    <value type="bool" key="Analyzer.QmlProfiler.AggregateTraces">false</value>
 | 
					 | 
				
			||||||
    <value type="bool" key="Analyzer.QmlProfiler.FlushEnabled">false</value>
 | 
					 | 
				
			||||||
    <value type="uint" key="Analyzer.QmlProfiler.FlushInterval">1000</value>
 | 
					 | 
				
			||||||
    <value type="QString" key="Analyzer.QmlProfiler.LastTraceFile"></value>
 | 
					 | 
				
			||||||
    <value type="bool" key="Analyzer.QmlProfiler.Settings.UseGlobalSettings">true</value>
 | 
					 | 
				
			||||||
    <valuelist type="QVariantList" key="Analyzer.Valgrind.AddedSuppressionFiles"/>
 | 
					 | 
				
			||||||
    <value type="bool" key="Analyzer.Valgrind.Callgrind.CollectBusEvents">false</value>
 | 
					 | 
				
			||||||
    <value type="bool" key="Analyzer.Valgrind.Callgrind.CollectSystime">false</value>
 | 
					 | 
				
			||||||
    <value type="bool" key="Analyzer.Valgrind.Callgrind.EnableBranchSim">false</value>
 | 
					 | 
				
			||||||
    <value type="bool" key="Analyzer.Valgrind.Callgrind.EnableCacheSim">false</value>
 | 
					 | 
				
			||||||
    <value type="bool" key="Analyzer.Valgrind.Callgrind.EnableEventToolTips">true</value>
 | 
					 | 
				
			||||||
    <value type="double" key="Analyzer.Valgrind.Callgrind.MinimumCostRatio">0.01</value>
 | 
					 | 
				
			||||||
    <value type="double" key="Analyzer.Valgrind.Callgrind.VisualisationMinimumCostRatio">10</value>
 | 
					 | 
				
			||||||
    <value type="bool" key="Analyzer.Valgrind.FilterExternalIssues">true</value>
 | 
					 | 
				
			||||||
    <value type="int" key="Analyzer.Valgrind.LeakCheckOnFinish">1</value>
 | 
					 | 
				
			||||||
    <value type="int" key="Analyzer.Valgrind.NumCallers">25</value>
 | 
					 | 
				
			||||||
    <valuelist type="QVariantList" key="Analyzer.Valgrind.RemovedSuppressionFiles"/>
 | 
					 | 
				
			||||||
    <value type="int" key="Analyzer.Valgrind.SelfModifyingCodeDetection">1</value>
 | 
					 | 
				
			||||||
    <value type="bool" key="Analyzer.Valgrind.Settings.UseGlobalSettings">true</value>
 | 
					 | 
				
			||||||
    <value type="bool" key="Analyzer.Valgrind.ShowReachable">false</value>
 | 
					 | 
				
			||||||
    <value type="bool" key="Analyzer.Valgrind.TrackOrigins">true</value>
 | 
					 | 
				
			||||||
    <value type="QString" key="Analyzer.Valgrind.ValgrindExecutable">valgrind</value>
 | 
					 | 
				
			||||||
    <valuelist type="QVariantList" key="Analyzer.Valgrind.VisibleErrorKinds">
 | 
					 | 
				
			||||||
     <value type="int">0</value>
 | 
					 | 
				
			||||||
     <value type="int">1</value>
 | 
					 | 
				
			||||||
     <value type="int">2</value>
 | 
					 | 
				
			||||||
     <value type="int">3</value>
 | 
					 | 
				
			||||||
     <value type="int">4</value>
 | 
					 | 
				
			||||||
     <value type="int">5</value>
 | 
					 | 
				
			||||||
     <value type="int">6</value>
 | 
					 | 
				
			||||||
     <value type="int">7</value>
 | 
					 | 
				
			||||||
     <value type="int">8</value>
 | 
					 | 
				
			||||||
     <value type="int">9</value>
 | 
					 | 
				
			||||||
     <value type="int">10</value>
 | 
					 | 
				
			||||||
     <value type="int">11</value>
 | 
					 | 
				
			||||||
     <value type="int">12</value>
 | 
					 | 
				
			||||||
     <value type="int">13</value>
 | 
					 | 
				
			||||||
     <value type="int">14</value>
 | 
					 | 
				
			||||||
    </valuelist>
 | 
					 | 
				
			||||||
    <value type="int" key="PE.EnvironmentAspect.Base">2</value>
 | 
					 | 
				
			||||||
    <valuelist type="QVariantList" key="PE.EnvironmentAspect.Changes"/>
 | 
					 | 
				
			||||||
    <value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">VirtualMachine</value>
 | 
					 | 
				
			||||||
    <value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName"></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="Qt4ProjectManager.Qt4RunConfiguration.ProFile">VirtualMachine.pro</value>
 | 
					 | 
				
			||||||
    <value type="QString" key="RunConfiguration.Arguments"></value>
 | 
					 | 
				
			||||||
    <value type="uint" key="RunConfiguration.QmlDebugServerPort">3768</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.UseMultiProcess">false</value>
 | 
					 | 
				
			||||||
    <value type="bool" key="RunConfiguration.UseQmlDebugger">false</value>
 | 
					 | 
				
			||||||
    <value type="bool" key="RunConfiguration.UseQmlDebuggerAuto">true</value>
 | 
					 | 
				
			||||||
    <value type="QString" key="RunConfiguration.WorkingDirectory"></value>
 | 
					 | 
				
			||||||
    <value type="QString" key="RunConfiguration.WorkingDirectory.default">/home/gfdgd_xi/Desktop/deep-wine-runner/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>
 | 
					 | 
				
			||||||
 </data>
 | 
					 | 
				
			||||||
 <data>
 | 
					 | 
				
			||||||
  <variable>ProjectExplorer.Project.Updater.FileVersion</variable>
 | 
					 | 
				
			||||||
  <value type="int">20</value>
 | 
					 | 
				
			||||||
 </data>
 | 
					 | 
				
			||||||
 <data>
 | 
					 | 
				
			||||||
  <variable>Version</variable>
 | 
					 | 
				
			||||||
  <value type="int">20</value>
 | 
					 | 
				
			||||||
 </data>
 | 
					 | 
				
			||||||
</qtcreator>
 | 
					 | 
				
			||||||
@ -1,347 +0,0 @@
 | 
				
			|||||||
<?xml version="1.0" encoding="UTF-8"?>
 | 
					 | 
				
			||||||
<!DOCTYPE QtCreatorProject>
 | 
					 | 
				
			||||||
<!-- Written by QtCreator 7.0.1, 2023-11-07T19:30:53. -->
 | 
					 | 
				
			||||||
<qtcreator>
 | 
					 | 
				
			||||||
 <data>
 | 
					 | 
				
			||||||
  <variable>EnvironmentId</variable>
 | 
					 | 
				
			||||||
  <value type="QByteArray">{4ffd6df9-1365-4837-81b1-582e0e2d1f21}</value>
 | 
					 | 
				
			||||||
 </data>
 | 
					 | 
				
			||||||
 <data>
 | 
					 | 
				
			||||||
  <variable>ProjectExplorer.Project.ActiveTarget</variable>
 | 
					 | 
				
			||||||
  <value type="int">1</value>
 | 
					 | 
				
			||||||
 </data>
 | 
					 | 
				
			||||||
 <data>
 | 
					 | 
				
			||||||
  <variable>ProjectExplorer.Project.EditorSettings</variable>
 | 
					 | 
				
			||||||
  <valuemap type="QVariantMap">
 | 
					 | 
				
			||||||
   <value type="bool" key="EditorConfiguration.AutoIndent">true</value>
 | 
					 | 
				
			||||||
   <value type="bool" key="EditorConfiguration.AutoSpacesForTabs">false</value>
 | 
					 | 
				
			||||||
   <value type="bool" key="EditorConfiguration.CamelCaseNavigation">true</value>
 | 
					 | 
				
			||||||
   <valuemap type="QVariantMap" key="EditorConfiguration.CodeStyle.0">
 | 
					 | 
				
			||||||
    <value type="QString" key="language">Cpp</value>
 | 
					 | 
				
			||||||
    <valuemap type="QVariantMap" key="value">
 | 
					 | 
				
			||||||
     <value type="QByteArray" key="CurrentPreferences">CppGlobal</value>
 | 
					 | 
				
			||||||
    </valuemap>
 | 
					 | 
				
			||||||
   </valuemap>
 | 
					 | 
				
			||||||
   <valuemap type="QVariantMap" key="EditorConfiguration.CodeStyle.1">
 | 
					 | 
				
			||||||
    <value type="QString" key="language">QmlJS</value>
 | 
					 | 
				
			||||||
    <valuemap type="QVariantMap" key="value">
 | 
					 | 
				
			||||||
     <value type="QByteArray" key="CurrentPreferences">QmlJSGlobal</value>
 | 
					 | 
				
			||||||
    </valuemap>
 | 
					 | 
				
			||||||
   </valuemap>
 | 
					 | 
				
			||||||
   <value type="int" key="EditorConfiguration.CodeStyle.Count">2</value>
 | 
					 | 
				
			||||||
   <value type="QByteArray" key="EditorConfiguration.Codec">UTF-8</value>
 | 
					 | 
				
			||||||
   <value type="bool" key="EditorConfiguration.ConstrainTooltips">false</value>
 | 
					 | 
				
			||||||
   <value type="int" key="EditorConfiguration.IndentSize">4</value>
 | 
					 | 
				
			||||||
   <value type="bool" key="EditorConfiguration.KeyboardTooltips">false</value>
 | 
					 | 
				
			||||||
   <value type="int" key="EditorConfiguration.MarginColumn">80</value>
 | 
					 | 
				
			||||||
   <value type="bool" key="EditorConfiguration.MouseHiding">true</value>
 | 
					 | 
				
			||||||
   <value type="bool" key="EditorConfiguration.MouseNavigation">true</value>
 | 
					 | 
				
			||||||
   <value type="int" key="EditorConfiguration.PaddingMode">1</value>
 | 
					 | 
				
			||||||
   <value type="bool" key="EditorConfiguration.PreferSingleLineComments">false</value>
 | 
					 | 
				
			||||||
   <value type="bool" key="EditorConfiguration.ScrollWheelZooming">true</value>
 | 
					 | 
				
			||||||
   <value type="bool" key="EditorConfiguration.ShowMargin">false</value>
 | 
					 | 
				
			||||||
   <value type="int" key="EditorConfiguration.SmartBackspaceBehavior">0</value>
 | 
					 | 
				
			||||||
   <value type="bool" key="EditorConfiguration.SmartSelectionChanging">true</value>
 | 
					 | 
				
			||||||
   <value type="bool" key="EditorConfiguration.SpacesForTabs">true</value>
 | 
					 | 
				
			||||||
   <value type="int" key="EditorConfiguration.TabKeyBehavior">0</value>
 | 
					 | 
				
			||||||
   <value type="int" key="EditorConfiguration.TabSize">8</value>
 | 
					 | 
				
			||||||
   <value type="bool" key="EditorConfiguration.UseGlobal">true</value>
 | 
					 | 
				
			||||||
   <value type="bool" key="EditorConfiguration.UseIndenter">false</value>
 | 
					 | 
				
			||||||
   <value type="int" key="EditorConfiguration.Utf8BomBehavior">1</value>
 | 
					 | 
				
			||||||
   <value type="bool" key="EditorConfiguration.addFinalNewLine">true</value>
 | 
					 | 
				
			||||||
   <value type="bool" key="EditorConfiguration.cleanIndentation">true</value>
 | 
					 | 
				
			||||||
   <value type="bool" key="EditorConfiguration.cleanWhitespace">true</value>
 | 
					 | 
				
			||||||
   <value type="QString" key="EditorConfiguration.ignoreFileTypes">*.md, *.MD, Makefile</value>
 | 
					 | 
				
			||||||
   <value type="bool" key="EditorConfiguration.inEntireDocument">false</value>
 | 
					 | 
				
			||||||
   <value type="bool" key="EditorConfiguration.skipTrailingWhitespace">true</value>
 | 
					 | 
				
			||||||
  </valuemap>
 | 
					 | 
				
			||||||
 </data>
 | 
					 | 
				
			||||||
 <data>
 | 
					 | 
				
			||||||
  <variable>ProjectExplorer.Project.PluginSettings</variable>
 | 
					 | 
				
			||||||
  <valuemap type="QVariantMap">
 | 
					 | 
				
			||||||
   <valuemap type="QVariantMap" key="AutoTest.ActiveFrameworks">
 | 
					 | 
				
			||||||
    <value type="bool" key="AutoTest.Framework.Boost">true</value>
 | 
					 | 
				
			||||||
    <value type="bool" key="AutoTest.Framework.CTest">false</value>
 | 
					 | 
				
			||||||
    <value type="bool" key="AutoTest.Framework.Catch">true</value>
 | 
					 | 
				
			||||||
    <value type="bool" key="AutoTest.Framework.GTest">true</value>
 | 
					 | 
				
			||||||
    <value type="bool" key="AutoTest.Framework.QtQuickTest">true</value>
 | 
					 | 
				
			||||||
    <value type="bool" key="AutoTest.Framework.QtTest">true</value>
 | 
					 | 
				
			||||||
   </valuemap>
 | 
					 | 
				
			||||||
   <valuemap type="QVariantMap" key="AutoTest.CheckStates"/>
 | 
					 | 
				
			||||||
   <value type="int" key="AutoTest.RunAfterBuild">0</value>
 | 
					 | 
				
			||||||
   <value type="bool" key="AutoTest.UseGlobal">true</value>
 | 
					 | 
				
			||||||
   <valuelist type="QVariantList" key="ClangCodeModel.CustomCommandLineKey"/>
 | 
					 | 
				
			||||||
   <value type="bool" key="ClangCodeModel.UseGlobalConfig">true</value>
 | 
					 | 
				
			||||||
   <value type="QString" key="ClangCodeModel.WarningConfigId">Builtin.BuildSystem</value>
 | 
					 | 
				
			||||||
   <valuemap type="QVariantMap" key="ClangTools">
 | 
					 | 
				
			||||||
    <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">2</value>
 | 
					 | 
				
			||||||
    <valuelist type="QVariantList" key="ClangTools.SelectedDirs"/>
 | 
					 | 
				
			||||||
    <valuelist type="QVariantList" key="ClangTools.SelectedFiles"/>
 | 
					 | 
				
			||||||
    <valuelist type="QVariantList" key="ClangTools.SuppressedDiagnostics"/>
 | 
					 | 
				
			||||||
    <value type="bool" key="ClangTools.UseGlobalSettings">true</value>
 | 
					 | 
				
			||||||
   </valuemap>
 | 
					 | 
				
			||||||
  </valuemap>
 | 
					 | 
				
			||||||
 </data>
 | 
					 | 
				
			||||||
 <data>
 | 
					 | 
				
			||||||
  <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.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>
 | 
					 | 
				
			||||||
      <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>
 | 
					 | 
				
			||||||
   </valuemap>
 | 
					 | 
				
			||||||
   <value type="int" key="ProjectExplorer.Target.BuildConfigurationCount">1</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/building/deep-wine-runner/VM-source</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">桌面</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="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.TargetCount</variable>
 | 
					 | 
				
			||||||
  <value type="int">2</value>
 | 
					 | 
				
			||||||
 </data>
 | 
					 | 
				
			||||||
 <data>
 | 
					 | 
				
			||||||
  <variable>ProjectExplorer.Project.Updater.FileVersion</variable>
 | 
					 | 
				
			||||||
  <value type="int">22</value>
 | 
					 | 
				
			||||||
 </data>
 | 
					 | 
				
			||||||
 <data>
 | 
					 | 
				
			||||||
  <variable>Version</variable>
 | 
					 | 
				
			||||||
  <value type="int">22</value>
 | 
					 | 
				
			||||||
 </data>
 | 
					 | 
				
			||||||
</qtcreator>
 | 
					 | 
				
			||||||
@ -1,125 +0,0 @@
 | 
				
			|||||||
################################################
 | 
					 | 
				
			||||||
# 作者:gfdgd xi
 | 
					 | 
				
			||||||
# 版本:1.0
 | 
					 | 
				
			||||||
# 依照 GPL V3 协议开源
 | 
					 | 
				
			||||||
################################################
 | 
					 | 
				
			||||||
# 参考文献:
 | 
					 | 
				
			||||||
#     https://juejin.cn/post/7080484519328874510
 | 
					 | 
				
			||||||
################################################
 | 
					 | 
				
			||||||
import os
 | 
					 | 
				
			||||||
import subprocess
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
homePath = os.path.expanduser('~')
 | 
					 | 
				
			||||||
programPath = os.path.split(os.path.realpath(__file__))[0]
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
class File:
 | 
					 | 
				
			||||||
    def __init__(self, path) -> None:
 | 
					 | 
				
			||||||
        self.path = path
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    def getFileFolderSize(self):
 | 
					 | 
				
			||||||
        """get size for file or folder"""
 | 
					 | 
				
			||||||
        totalSize = 0
 | 
					 | 
				
			||||||
        if not os.path.exists(self.path):
 | 
					 | 
				
			||||||
            return totalSize
 | 
					 | 
				
			||||||
        if os.path.isfile(self.path):
 | 
					 | 
				
			||||||
            totalSize = os.path.getsize(self.path)  # 5041481
 | 
					 | 
				
			||||||
            return totalSize
 | 
					 | 
				
			||||||
        if os.path.isdir(self.path):
 | 
					 | 
				
			||||||
            with os.scandir(self.path) as dirEntryList:
 | 
					 | 
				
			||||||
                for curSubEntry in dirEntryList:
 | 
					 | 
				
			||||||
                    curSubEntryFullPath = os.path.join(self.path, curSubEntry.name)
 | 
					 | 
				
			||||||
                    if curSubEntry.is_dir():
 | 
					 | 
				
			||||||
                        curSubFolderSize = self.path(curSubEntryFullPath)  # 5800007
 | 
					 | 
				
			||||||
                        totalSize += curSubFolderSize
 | 
					 | 
				
			||||||
                    elif curSubEntry.is_file():
 | 
					 | 
				
			||||||
                        curSubFileSize = os.path.getsize(curSubEntryFullPath)  # 1891
 | 
					 | 
				
			||||||
                        totalSize += curSubFileSize
 | 
					 | 
				
			||||||
                return totalSize
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
class Manager:
 | 
					 | 
				
			||||||
    def __init__(self, name: str, managerPath: str="VBoxManage") -> None:
 | 
					 | 
				
			||||||
        self.name = name
 | 
					 | 
				
			||||||
        self.managerPath = managerPath
 | 
					 | 
				
			||||||
        self.vboxVersion = subprocess.getoutput(f"\"{self.managerPath}\" -v")
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    def Create(self, type: str="Windows7") -> None:
 | 
					 | 
				
			||||||
        os.system(f"\"{self.managerPath}\" createvm --name \"{self.name}\" --ostype \"{type}\" --register")
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    def CreateDisk(self, path: str, size: int) -> None:
 | 
					 | 
				
			||||||
        os.system(f"\"{self.managerPath}\" createvdi --filename \"{path}\" --size \"{size}\"")
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    def CreateDiskControl(self, controlName: str="storage_controller_1") -> None:
 | 
					 | 
				
			||||||
        os.system(f"\"{self.managerPath}\" storagectl \"{self.name}\" --name \"{controlName}\" --add ide")
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    def MountDisk(self, diskPath: str, controlName: str="storage_controller_1", port: int=0, device: int=0) -> None:
 | 
					 | 
				
			||||||
        os.system(f"\"{self.managerPath}\" storageattach \"{self.name}\" --storagectl \"{controlName}\" --type hdd --port {port} --device {device} --medium \"{diskPath}\"")
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    def MountISO(self, isoPath: str, controlName: str="storage_controller_1", port: int=1, device: int=0) -> None:
 | 
					 | 
				
			||||||
        os.system(f"\"{self.managerPath}\" storageattach \"{self.name}\" --storagectl \"{controlName}\" --type dvddrive --port {port} --device {device} --medium \"{isoPath}\"")
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    def BootFirst(self, bootDrive: str) -> None:
 | 
					 | 
				
			||||||
        os.system(f"\"{self.managerPath}\" modifyvm \"{self.name}\" --boot1 {bootDrive}")
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    def SetNetBridge(self, netDriver: str) -> None:
 | 
					 | 
				
			||||||
        os.system(f"\"{self.managerPath}\" modifyvm \"{self.name}\" --nic1 bridged --cableconnected1 on --nictype1 82540EM --bridgeadapter1 \"{netDriver}\" --intnet1 brigh1 --macaddress1 auto")
 | 
					 | 
				
			||||||
        #os.system(f"\"{self.managerPath}\" modifyvm \"{self.name}\" --nic1 hostif")
 | 
					 | 
				
			||||||
        pass
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    def SetCPU(self, number: int) -> None:
 | 
					 | 
				
			||||||
        os.system(f"\"{self.managerPath}\" modifyvm \"{self.name}\" --cpus {number}")
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    def SetMemory(self, memory: int) -> None:
 | 
					 | 
				
			||||||
        os.system(f"\"{self.managerPath}\" modifyvm \"{self.name}\" --memory {memory}")
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    def SetRemote(self, setting: bool) -> None:
 | 
					 | 
				
			||||||
        if setting:
 | 
					 | 
				
			||||||
            os.system(f"\"{self.managerPath}\" modifyvm \"{self.name}\" --vrde on")
 | 
					 | 
				
			||||||
            return
 | 
					 | 
				
			||||||
        os.system(f"\"{self.managerPath}\" modifyvm \"{self.name}\" --vrde off")
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    def SetRemoteConnectSetting(self, port: int=5540) -> None:
 | 
					 | 
				
			||||||
        os.system(f"\"{self.managerPath}\" modifyvm \"{self.name}\" --vrdeport {port} --vrdeaddress """)
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    def Start(self, unShown: bool = False) -> None:
 | 
					 | 
				
			||||||
        if unShown:
 | 
					 | 
				
			||||||
            os.system(f"\"{self.managerPath}\" startvm \"{self.name}\" -type headless")
 | 
					 | 
				
			||||||
            return
 | 
					 | 
				
			||||||
        os.system(f"\"{self.managerPath}\" startvm \"{self.name}\"")
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    def Stop(self) -> None:
 | 
					 | 
				
			||||||
        os.system(f"\"{self.managerPath}\" controlvm \"{self.name}\" poweroff")
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    def Delete(self) -> None:
 | 
					 | 
				
			||||||
        os.system(f"\"{self.managerPath}\" unregistervm --delete \"{self.name}\"")
 | 
					 | 
				
			||||||
    
 | 
					 | 
				
			||||||
    def SetDisplayMemory(self, memory: int) -> None:
 | 
					 | 
				
			||||||
        os.system(f"\"{self.managerPath}\" modifyvm \"{self.name}\" --vram {memory}")
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    def InstallGuessAdditions(self, controlName: str="storage_controller_1", port: int=1, device: int=0) -> None:
 | 
					 | 
				
			||||||
        self.MountISO("/usr/share/virtualbox/VBoxGuestAdditions.iso", controlName, port, device)
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    def EnabledAudio(self) -> None:
 | 
					 | 
				
			||||||
        os.system(f"\"{self.managerPath}\" modifyvm \"{self.name}\" --audio pulse --audiocontroller hda --audioin on --audioout on")
 | 
					 | 
				
			||||||
        #os.system("")
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    def EnabledClipboardMode(self):
 | 
					 | 
				
			||||||
        os.system(f"\"{self.managerPath}\" modifyvm \"{self.name}\" --clipboard-mode bidirectional")
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    def EnabledDraganddrop(self):
 | 
					 | 
				
			||||||
        os.system(f"\"{self.managerPath}\" modifyvm \"{self.name}\" --draganddrop bidirectional")
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    def ShareFile(self, name, path):
 | 
					 | 
				
			||||||
        os.system(f"\"{self.managerPath}\" sharedfolder add \"{self.name}\" -name \"{name}\" -hostpath \"{path}\"")
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    def SetVBoxSVGA(self):
 | 
					 | 
				
			||||||
        os.system(f"\"{self.managerPath}\" modifyvm \"{self.name}\" --graphicscontroller vboxsvga")
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    def SetMousePS2(self):
 | 
					 | 
				
			||||||
        os.system(f"\"{self.managerPath}\" modifyvm \"{self.name}\" --mouse usb")
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    def SetKeyboardPS2(self):
 | 
					 | 
				
			||||||
        os.system(f"\"{self.managerPath}\" modifyvm \"{self.name}\" --keyboard usb")
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    def OpenUSB(self):
 | 
					 | 
				
			||||||
        os.system(f"\"{self.managerPath}\" modifyvm \"{self.name}\" --usbohci on")
 | 
					 | 
				
			||||||
        pass
 | 
					 | 
				
			||||||
| 
		 Before Width: | Height: | Size: 44 KiB  | 
@ -1,12 +0,0 @@
 | 
				
			|||||||
#!/bin/bash
 | 
					 | 
				
			||||||
#cd `dirname $0`
 | 
					 | 
				
			||||||
bin=$1
 | 
					 | 
				
			||||||
nasm -f bin $1 -o `basename $1`.bin
 | 
					 | 
				
			||||||
if [[ $? != 0 ]];then
 | 
					 | 
				
			||||||
	exit
 | 
					 | 
				
			||||||
fi
 | 
					 | 
				
			||||||
sudo modprobe nbd 8
 | 
					 | 
				
			||||||
sudo qemu-nbd `dirname $0`/test.qcow2 --connect /dev/nbd0
 | 
					 | 
				
			||||||
sudo dd if=`basename $1`.bin of=/dev/nbd0
 | 
					 | 
				
			||||||
sudo qemu-nbd -d /dev/nbd0
 | 
					 | 
				
			||||||
kvm --hda `dirname $0`/test.qcow2 -rtc base=localtime
 | 
					 | 
				
			||||||
@ -1,316 +0,0 @@
 | 
				
			|||||||
/*
 | 
					 | 
				
			||||||
 * gfdgd xi
 | 
					 | 
				
			||||||
 * 依照 GPLV3 开源
 | 
					 | 
				
			||||||
 */
 | 
					 | 
				
			||||||
#include <sys/sysinfo.h>
 | 
					 | 
				
			||||||
#include "buildvbox.h"
 | 
					 | 
				
			||||||
#include "vbox.h"
 | 
					 | 
				
			||||||
#include <QFile>
 | 
					 | 
				
			||||||
#include <QDir>
 | 
					 | 
				
			||||||
#include <QNetworkInterface>
 | 
					 | 
				
			||||||
#include <QMessageBox>
 | 
					 | 
				
			||||||
#include <QCoreApplication>
 | 
					 | 
				
			||||||
#include <infoutils.h>
 | 
					 | 
				
			||||||
#include "qemu.h"
 | 
					 | 
				
			||||||
#include <QProcess>
 | 
					 | 
				
			||||||
// 懒得用 QThread 了(要继承)
 | 
					 | 
				
			||||||
#include <thread>
 | 
					 | 
				
			||||||
using namespace std;
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
// 清屏
 | 
					 | 
				
			||||||
void buildvbox::CleanScreen(){
 | 
					 | 
				
			||||||
    if(QFile::exists("/etc/os-version")){
 | 
					 | 
				
			||||||
        // Unix
 | 
					 | 
				
			||||||
        system("clear");
 | 
					 | 
				
			||||||
        return;
 | 
					 | 
				
			||||||
    }
 | 
					 | 
				
			||||||
    // Windows
 | 
					 | 
				
			||||||
    system("cls");
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
// 获取 CPU 个数
 | 
					 | 
				
			||||||
int buildvbox::GetCPUSocket(){
 | 
					 | 
				
			||||||
    // 获取命令返回值
 | 
					 | 
				
			||||||
    QProcess process;
 | 
					 | 
				
			||||||
    process.start("bash", QStringList() << "-c" << "cat /proc/cpuinfo | grep \"cpu cores\" | uniq | wc -l");
 | 
					 | 
				
			||||||
    process.waitForStarted();
 | 
					 | 
				
			||||||
    process.waitForFinished();
 | 
					 | 
				
			||||||
    int value = process.readAllStandardOutput().toInt();
 | 
					 | 
				
			||||||
    process.close();
 | 
					 | 
				
			||||||
    // 判断异常值,例如没挂载 /proc
 | 
					 | 
				
			||||||
    if(value <= 0){
 | 
					 | 
				
			||||||
        value = 1;
 | 
					 | 
				
			||||||
    }
 | 
					 | 
				
			||||||
    return value;
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
// 获取 CPU 核心数
 | 
					 | 
				
			||||||
int buildvbox::GetCPUCore(){
 | 
					 | 
				
			||||||
    QProcess process;
 | 
					 | 
				
			||||||
    process.start("bash", QStringList() << "-c" << "grep 'core id' /proc/cpuinfo | sort -u | wc -l");
 | 
					 | 
				
			||||||
    process.waitForStarted();
 | 
					 | 
				
			||||||
    process.waitForFinished();
 | 
					 | 
				
			||||||
    int value = process.readAllStandardOutput().toInt();
 | 
					 | 
				
			||||||
    process.close();
 | 
					 | 
				
			||||||
    // 判断异常值,例如没挂载 /proc
 | 
					 | 
				
			||||||
    if(value <= 0){
 | 
					 | 
				
			||||||
        value = 1;
 | 
					 | 
				
			||||||
    }
 | 
					 | 
				
			||||||
    return value;
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
QString buildvbox::GetNet(){
 | 
					 | 
				
			||||||
    QList<QNetworkInterface> netList = QNetworkInterface::allInterfaces();
 | 
					 | 
				
			||||||
    foreach(QNetworkInterface net, netList){
 | 
					 | 
				
			||||||
        qDebug() << "Device:" << net.name();
 | 
					 | 
				
			||||||
        QList<QNetworkAddressEntry> entryList = net.addressEntries();
 | 
					 | 
				
			||||||
        foreach(QNetworkAddressEntry entry, entryList){
 | 
					 | 
				
			||||||
            QString ip = entry.ip().toString();
 | 
					 | 
				
			||||||
            qDebug() << "IP Address: " << ip;
 | 
					 | 
				
			||||||
            if(ip != "127.0.0.1" && ip != "192.168.250.1" && ip != "::1" && net.name() != "lo"){
 | 
					 | 
				
			||||||
                // 返回网卡名称
 | 
					 | 
				
			||||||
                return net.name();
 | 
					 | 
				
			||||||
            }
 | 
					 | 
				
			||||||
        }
 | 
					 | 
				
			||||||
    }
 | 
					 | 
				
			||||||
    return "";
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
int buildvbox::Download(QString url, QString path, QString fileName){
 | 
					 | 
				
			||||||
    return system(("aria2c -x 16 -s 16 -c " + url + " -d " + path + " -o " + fileName).toUtf8());
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
buildvbox::buildvbox(QString isoPath, int id, int vm){
 | 
					 | 
				
			||||||
    QString programPath = QCoreApplication::applicationDirPath();
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    QString net = GetNet();
 | 
					 | 
				
			||||||
    qDebug() << "使用网卡:" << net << endl;
 | 
					 | 
				
			||||||
    if(vm == 0){
 | 
					 | 
				
			||||||
        // Qemu
 | 
					 | 
				
			||||||
        qemu vm("Windows");
 | 
					 | 
				
			||||||
        bool setISOAlready = 0;
 | 
					 | 
				
			||||||
        switch (id) {
 | 
					 | 
				
			||||||
            case 0:
 | 
					 | 
				
			||||||
                vm.Create("Windows7");
 | 
					 | 
				
			||||||
                vm.SetDisplayMemory(32);
 | 
					 | 
				
			||||||
                break;
 | 
					 | 
				
			||||||
            case 1:
 | 
					 | 
				
			||||||
                vm.Create("Windows7_64");
 | 
					 | 
				
			||||||
                vm.SetDisplayMemory(32);
 | 
					 | 
				
			||||||
                break;
 | 
					 | 
				
			||||||
            case 2:
 | 
					 | 
				
			||||||
                vm.Create("WindowsNT_64");
 | 
					 | 
				
			||||||
                vm.SetDisplayMemory(32);
 | 
					 | 
				
			||||||
                break;
 | 
					 | 
				
			||||||
            case 3:
 | 
					 | 
				
			||||||
                vm.Create("WindowsNT_64");
 | 
					 | 
				
			||||||
                vm.SetDisplayMemory(32);
 | 
					 | 
				
			||||||
                vm.EnabledUEFI(true);
 | 
					 | 
				
			||||||
                break;
 | 
					 | 
				
			||||||
            case 4:
 | 
					 | 
				
			||||||
                vm.Create("Windows11_64");
 | 
					 | 
				
			||||||
                vm.SetDisplayMemory(128);
 | 
					 | 
				
			||||||
                vm.EnabledUEFI(true);
 | 
					 | 
				
			||||||
                setISOAlready = 1;
 | 
					 | 
				
			||||||
                break;
 | 
					 | 
				
			||||||
            case 5:
 | 
					 | 
				
			||||||
                vm.Create("WindowsXP_32");
 | 
					 | 
				
			||||||
                vm.SetDisplayMemory(32);
 | 
					 | 
				
			||||||
                setISOAlready = 1;
 | 
					 | 
				
			||||||
                break;
 | 
					 | 
				
			||||||
            case 6:
 | 
					 | 
				
			||||||
                vm.Create("WindowsNT_64");
 | 
					 | 
				
			||||||
                vm.SetDisplayMemory(32);
 | 
					 | 
				
			||||||
                setISOAlready = 1;
 | 
					 | 
				
			||||||
                break;
 | 
					 | 
				
			||||||
            case 7:
 | 
					 | 
				
			||||||
                vm.Create("WindowsNT_64");
 | 
					 | 
				
			||||||
                vm.SetDisplayMemory(32);
 | 
					 | 
				
			||||||
                vm.EnabledUEFI(true);
 | 
					 | 
				
			||||||
                setISOAlready = 1;
 | 
					 | 
				
			||||||
                break;
 | 
					 | 
				
			||||||
            case 8:
 | 
					 | 
				
			||||||
                vm.Create("WindowsNT_64");
 | 
					 | 
				
			||||||
                vm.SetDisplayMemory(32);
 | 
					 | 
				
			||||||
                vm.UseArmhfEFI();
 | 
					 | 
				
			||||||
                setISOAlready = 1;
 | 
					 | 
				
			||||||
                break;
 | 
					 | 
				
			||||||
            case 9:
 | 
					 | 
				
			||||||
                vm.Create("WindowsNT_64");
 | 
					 | 
				
			||||||
                vm.SetDisplayMemory(32);
 | 
					 | 
				
			||||||
                vm.UseAarch64EFI();
 | 
					 | 
				
			||||||
                setISOAlready = 1;
 | 
					 | 
				
			||||||
                break;
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
        }
 | 
					 | 
				
			||||||
        vm.CreateDiskControl();
 | 
					 | 
				
			||||||
        //vm.CreateDiskControl("storage_controller_2");
 | 
					 | 
				
			||||||
        if(id == 0 || id == 1) {
 | 
					 | 
				
			||||||
            vm.CreateDisk(QDir::homePath() + "/Qemu/Windows/Windows.qcow2", 131072);
 | 
					 | 
				
			||||||
        }
 | 
					 | 
				
			||||||
        else {
 | 
					 | 
				
			||||||
            vm.CreateDisk(QDir::homePath() + "/Qemu/Windows/Windows.qcow2", 131072 * 5);
 | 
					 | 
				
			||||||
        }
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
        //vm.MountDisk(QDir::homePath() + "/Qemu/Windows/Windows.qcow2");
 | 
					 | 
				
			||||||
        vm.MountMainDisk(QDir::homePath() + "/Qemu/Windows/Windows.qcow2");
 | 
					 | 
				
			||||||
        if(QFile::exists("/opt/apps/deepin-wine-runner-qemu-system-extra/files/resources/virtio-win.iso")) {
 | 
					 | 
				
			||||||
            vm.MountISO("/opt/apps/deepin-wine-runner-qemu-system-extra/files/resources/virtio-win.iso", "storage_controller_2", 1, 3);
 | 
					 | 
				
			||||||
        }
 | 
					 | 
				
			||||||
        if(!setISOAlready){
 | 
					 | 
				
			||||||
            vm.MountISO(isoPath, "storage_controller_1", 0, 1);
 | 
					 | 
				
			||||||
            switch (id) {
 | 
					 | 
				
			||||||
                case 0:
 | 
					 | 
				
			||||||
                    if(QFile::exists(programPath + "/Windows7X86Auto.iso")) {
 | 
					 | 
				
			||||||
                        vm.MountISO(programPath + "/Windows7X86Auto.iso", "storage_controller_1", 1, 2);
 | 
					 | 
				
			||||||
                    }
 | 
					 | 
				
			||||||
                    break;
 | 
					 | 
				
			||||||
                case 1:
 | 
					 | 
				
			||||||
                    if(QFile::exists(programPath + "/Windows7X64Auto.iso")) {
 | 
					 | 
				
			||||||
                        vm.MountISO(programPath + "/Windows7X64Auto.iso", "storage_controller_1", 1, 2);
 | 
					 | 
				
			||||||
                    }
 | 
					 | 
				
			||||||
                    break;
 | 
					 | 
				
			||||||
            }
 | 
					 | 
				
			||||||
        }
 | 
					 | 
				
			||||||
        else{
 | 
					 | 
				
			||||||
            //vm.AutoInstall(isoPath);
 | 
					 | 
				
			||||||
            if(isoPath != ""){
 | 
					 | 
				
			||||||
                vm.MountMainISO(isoPath);
 | 
					 | 
				
			||||||
            }
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
        }
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
        vm.SetCPU(get_nprocs(), GetCPUSocket(), GetCPUCore());
 | 
					 | 
				
			||||||
        long memory = 0;
 | 
					 | 
				
			||||||
        long memoryAll = 0;
 | 
					 | 
				
			||||||
        long swap = 0;
 | 
					 | 
				
			||||||
        long swapAll = 0;
 | 
					 | 
				
			||||||
        infoUtils::memoryRate(memory, memoryAll, swap, swapAll);
 | 
					 | 
				
			||||||
        vm.SetMemory(memoryAll / 3 / 1024);
 | 
					 | 
				
			||||||
        vm.SetNetBridge(net);
 | 
					 | 
				
			||||||
        vm.EnabledAudio();
 | 
					 | 
				
			||||||
        vm.EnabledClipboardMode();
 | 
					 | 
				
			||||||
        vm.EnabledDraganddrop();
 | 
					 | 
				
			||||||
        vm.SetVBoxSVGA();
 | 
					 | 
				
			||||||
        vm.SetMousePS2();
 | 
					 | 
				
			||||||
        vm.SetKeyboardPS2();
 | 
					 | 
				
			||||||
        vm.OpenUSB();
 | 
					 | 
				
			||||||
        vm.ShareFile("ROOT", "/");
 | 
					 | 
				
			||||||
        vm.ShareFile("HOME", QDir::homePath());
 | 
					 | 
				
			||||||
        switch(id){
 | 
					 | 
				
			||||||
            case 8:
 | 
					 | 
				
			||||||
                vm.StartArmhf();
 | 
					 | 
				
			||||||
                break;
 | 
					 | 
				
			||||||
            case 9:
 | 
					 | 
				
			||||||
                vm.StartAarch64();
 | 
					 | 
				
			||||||
                break;
 | 
					 | 
				
			||||||
            default:
 | 
					 | 
				
			||||||
                vm.Start();
 | 
					 | 
				
			||||||
                break;
 | 
					 | 
				
			||||||
        }
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    }
 | 
					 | 
				
			||||||
    else if(vm == 1){
 | 
					 | 
				
			||||||
        // VirtualBox
 | 
					 | 
				
			||||||
        vbox vm("Windows");
 | 
					 | 
				
			||||||
        bool setISOAlready = 1;
 | 
					 | 
				
			||||||
        switch (id) {
 | 
					 | 
				
			||||||
            case 0:
 | 
					 | 
				
			||||||
                vm.Create("Windows7");
 | 
					 | 
				
			||||||
                vm.SetDisplayMemory(32);
 | 
					 | 
				
			||||||
                break;
 | 
					 | 
				
			||||||
            case 1:
 | 
					 | 
				
			||||||
                vm.Create("Windows7_64");
 | 
					 | 
				
			||||||
                vm.SetDisplayMemory(32);
 | 
					 | 
				
			||||||
                break;
 | 
					 | 
				
			||||||
            case 2:
 | 
					 | 
				
			||||||
                vm.Create("WindowsNT_64");
 | 
					 | 
				
			||||||
                vm.SetDisplayMemory(32);
 | 
					 | 
				
			||||||
                break;
 | 
					 | 
				
			||||||
            case 3:
 | 
					 | 
				
			||||||
                vm.Create("WindowsNT_64");
 | 
					 | 
				
			||||||
                vm.EnabledUEFI(true);
 | 
					 | 
				
			||||||
                vm.SetDisplayMemory(32);
 | 
					 | 
				
			||||||
                break;
 | 
					 | 
				
			||||||
            case 4:
 | 
					 | 
				
			||||||
                vm.Create("Windows11_64");
 | 
					 | 
				
			||||||
                vm.SetDisplayMemory(128);
 | 
					 | 
				
			||||||
                vm.EnabledUEFI(true);
 | 
					 | 
				
			||||||
                setISOAlready = 1;
 | 
					 | 
				
			||||||
                break;
 | 
					 | 
				
			||||||
            case 5:
 | 
					 | 
				
			||||||
                vm.Create("WindowsXP_32");
 | 
					 | 
				
			||||||
                vm.SetDisplayMemory(32);
 | 
					 | 
				
			||||||
                setISOAlready = 1;
 | 
					 | 
				
			||||||
                break;
 | 
					 | 
				
			||||||
            case 6:
 | 
					 | 
				
			||||||
                vm.Create("WindowsNT_64");
 | 
					 | 
				
			||||||
                vm.SetDisplayMemory(32);
 | 
					 | 
				
			||||||
                setISOAlready = 1;
 | 
					 | 
				
			||||||
                break;
 | 
					 | 
				
			||||||
            case 7:
 | 
					 | 
				
			||||||
                vm.Create("WindowsNT_64");
 | 
					 | 
				
			||||||
                vm.SetDisplayMemory(32);
 | 
					 | 
				
			||||||
                vm.EnabledUEFI(true);
 | 
					 | 
				
			||||||
                setISOAlready = 1;
 | 
					 | 
				
			||||||
                break;
 | 
					 | 
				
			||||||
            }
 | 
					 | 
				
			||||||
        QDir dir("/home/gfdgd_xi/Qemu/Windows/");
 | 
					 | 
				
			||||||
        dir.mkpath("/home/gfdgd_xi/Qemu/Windows/");
 | 
					 | 
				
			||||||
        vm.CreateDiskControl();
 | 
					 | 
				
			||||||
        //vm.CreateDiskControl("storage_controller_2");
 | 
					 | 
				
			||||||
        if(id == 0 || id == 1) {
 | 
					 | 
				
			||||||
            vm.CreateDisk(QDir::homePath() + "/Qemu/Windows/Windows.qcow2", 131072);
 | 
					 | 
				
			||||||
        }
 | 
					 | 
				
			||||||
        else {
 | 
					 | 
				
			||||||
            vm.CreateDisk(QDir::homePath() + "/Qemu/Windows/Windows.qcow2", 131072 * 5);
 | 
					 | 
				
			||||||
        }
 | 
					 | 
				
			||||||
        vm.MountDisk(QDir::homePath() + "/VirtualBox VMs/Windows/Windows.vdi");
 | 
					 | 
				
			||||||
        if(!setISOAlready){
 | 
					 | 
				
			||||||
            vm.MountISO(isoPath, "storage_controller_1", 0, 1);
 | 
					 | 
				
			||||||
            switch (id) {
 | 
					 | 
				
			||||||
                case 0:
 | 
					 | 
				
			||||||
                    if(QFile::exists(programPath + "/Windows7X86Auto.iso")) {
 | 
					 | 
				
			||||||
                        vm.MountISO(programPath + "/Windows7X86Auto.iso", "storage_controller_1", 1, 0);
 | 
					 | 
				
			||||||
                    }
 | 
					 | 
				
			||||||
                    break;
 | 
					 | 
				
			||||||
                case 1:
 | 
					 | 
				
			||||||
                    if(QFile::exists(programPath + "/Windows7X64Auto.iso")) {
 | 
					 | 
				
			||||||
                        vm.MountISO(programPath + "/Windows7X64Auto.iso", "storage_controller_1", 1, 0);
 | 
					 | 
				
			||||||
                    }
 | 
					 | 
				
			||||||
                    break;
 | 
					 | 
				
			||||||
            }
 | 
					 | 
				
			||||||
        }
 | 
					 | 
				
			||||||
        else{
 | 
					 | 
				
			||||||
            vm.AutoInstall(isoPath);
 | 
					 | 
				
			||||||
        }
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
        // 判断 VirtualBox Guest ISO 是否存在
 | 
					 | 
				
			||||||
        // 在的话直接挂载
 | 
					 | 
				
			||||||
        if(QFile::exists("/usr/share/virtualbox/VBoxGuestAdditions.iso")){
 | 
					 | 
				
			||||||
            vm.MountISO("/usr/share/virtualbox/VBoxGuestAdditions.iso", "storage_controller_1", 1, 1);
 | 
					 | 
				
			||||||
        }
 | 
					 | 
				
			||||||
        // VirtualBox 的 CPU 数量设置方法和 Qemu 不一样
 | 
					 | 
				
			||||||
        vm.SetCPU(GetCPUCore(), GetCPUSocket(), GetCPUCore());
 | 
					 | 
				
			||||||
        long memory = 0;
 | 
					 | 
				
			||||||
        long memoryAll = 0;
 | 
					 | 
				
			||||||
        long swap = 0;
 | 
					 | 
				
			||||||
        long swapAll = 0;
 | 
					 | 
				
			||||||
        infoUtils::memoryRate(memory, memoryAll, swap, swapAll);
 | 
					 | 
				
			||||||
        //memoryRate(memory, memoryAll, swap, swapAll);
 | 
					 | 
				
			||||||
        vm.SetMemory(memoryAll / 3 / 1024);
 | 
					 | 
				
			||||||
        vm.SetNetBridge(net);
 | 
					 | 
				
			||||||
        vm.EnabledAudio();
 | 
					 | 
				
			||||||
        vm.EnabledClipboardMode();
 | 
					 | 
				
			||||||
        vm.EnabledDraganddrop();
 | 
					 | 
				
			||||||
        vm.SetVBoxSVGA();
 | 
					 | 
				
			||||||
        vm.SetMousePS2();
 | 
					 | 
				
			||||||
        vm.SetKeyboardPS2();
 | 
					 | 
				
			||||||
        vm.OpenUSB();
 | 
					 | 
				
			||||||
        vm.ShareFile("ROOT", "/");
 | 
					 | 
				
			||||||
        vm.ShareFile("HOME", QDir::homePath());
 | 
					 | 
				
			||||||
        vm.Start();
 | 
					 | 
				
			||||||
    }
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
@ -1,21 +0,0 @@
 | 
				
			|||||||
/*
 | 
					 | 
				
			||||||
 * gfdgd xi
 | 
					 | 
				
			||||||
 * 依照 GPLV3 开源
 | 
					 | 
				
			||||||
 */
 | 
					 | 
				
			||||||
#ifndef BUILDVBOX_H
 | 
					 | 
				
			||||||
#define BUILDVBOX_H
 | 
					 | 
				
			||||||
#include <QString>
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
class buildvbox
 | 
					 | 
				
			||||||
{
 | 
					 | 
				
			||||||
//    Q_OBJECT
 | 
					 | 
				
			||||||
public:
 | 
					 | 
				
			||||||
    buildvbox(QString isoPath, int id=0, int vm=0);
 | 
					 | 
				
			||||||
    void CleanScreen();
 | 
					 | 
				
			||||||
    QString GetNet();
 | 
					 | 
				
			||||||
    int Download(QString url, QString path, QString fileName);
 | 
					 | 
				
			||||||
    int GetCPUSocket();
 | 
					 | 
				
			||||||
    int GetCPUCore();
 | 
					 | 
				
			||||||
};
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
#endif // BUILDVBOX_H
 | 
					 | 
				
			||||||
@ -1,18 +0,0 @@
 | 
				
			|||||||
/*
 | 
					 | 
				
			||||||
 * gfdgd xi
 | 
					 | 
				
			||||||
 * 依照 GPLV3 开源
 | 
					 | 
				
			||||||
 */
 | 
					 | 
				
			||||||
#include "command.h"
 | 
					 | 
				
			||||||
#include <QProcess>
 | 
					 | 
				
			||||||
Command::Command()
 | 
					 | 
				
			||||||
{
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
QString Command::GetCommand(QString command){
 | 
					 | 
				
			||||||
    QProcess process;
 | 
					 | 
				
			||||||
    process.start(command);
 | 
					 | 
				
			||||||
    process.waitForStarted();
 | 
					 | 
				
			||||||
    process.waitForFinished();
 | 
					 | 
				
			||||||
    return QString::fromLocal8Bit(process.readAllStandardOutput());
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
@ -1,16 +0,0 @@
 | 
				
			|||||||
/*
 | 
					 | 
				
			||||||
 * gfdgd xi
 | 
					 | 
				
			||||||
 * 依照 GPLV3 开源
 | 
					 | 
				
			||||||
 */
 | 
					 | 
				
			||||||
#ifndef COMMAND_H
 | 
					 | 
				
			||||||
#define COMMAND_H
 | 
					 | 
				
			||||||
#include <QString>
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
class Command
 | 
					 | 
				
			||||||
{
 | 
					 | 
				
			||||||
public:
 | 
					 | 
				
			||||||
    Command();
 | 
					 | 
				
			||||||
    QString GetCommand(QString command);
 | 
					 | 
				
			||||||
};
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
#endif // COMMAND_H
 | 
					 | 
				
			||||||
| 
		 Before Width: | Height: | Size: 11 KiB  | 
@ -1,602 +0,0 @@
 | 
				
			|||||||
<?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>安装其他 Windows(支持自动安装,UEFI 启动,只支持 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><!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd">
 | 
					 | 
				
			||||||
<html><head><meta name="qrichtext" content="1" /><style type="text/css">
 | 
					 | 
				
			||||||
p, li { white-space: pre-wrap; }
 | 
					 | 
				
			||||||
</style></head><body style=" font-family:'Noto Sans CJK SC'; font-size:10.5pt; font-weight:400; font-style:normal;">
 | 
					 | 
				
			||||||
<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-size:11pt;">UOS 3a4000 用户在使用 Qemu 时可能会出现虚拟机无法正常开机的问题,需要安装/降级到以下链接的版本:</span></p>
 | 
					 | 
				
			||||||
<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-size:11pt;">蓝奏云:</span><a href="https://gfdgdxi.lanzoue.com/b01rk9wza"><span style=" font-size:11pt; text-decoration: underline; color:#0082fa;">https://gfdgdxi.lanzoue.com/b01rk9wza</span></a><span style=" font-size:11pt;"> 密码:6wvf</span></p>
 | 
					 | 
				
			||||||
<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-size:11pt;">诚通网盘:</span><a href="http://ctfile.gfdgdxi.top/d/31540479-58662214-c46520?p=2061"><span style=" font-size:11pt; text-decoration: underline; color:#0082fa;">http://ctfile.gfdgdxi.top/d/31540479-58662214-c46520?p=2061</span></a><span style=" font-size:11pt;"> (访问密码: 2061)</span></p>
 | 
					 | 
				
			||||||
<hr />
 | 
					 | 
				
			||||||
<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-size:11pt;">注:Qemu 跨架构效率较低,如无特殊情况不建议跨架构/不开硬件加速(如 kvm)运行 Qemu</span></p>
 | 
					 | 
				
			||||||
<hr />
 | 
					 | 
				
			||||||
<p style=" margin-top:12px; margin-bottom:12px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-size:10pt;">如何安装系统?使用迅雷或者网盘下载以下任意一个链接的 ISO 镜像然后在上面选择即可:</span></p>
 | 
					 | 
				
			||||||
<p style=" margin-top:12px; margin-bottom:12px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-size:10pt;">123 网盘链接:</span><a href="https://www.123pan.com/s/pDSKVv-oypWv"><span style=" font-size:11pt; text-decoration: underline; color:#0082fa;">https://www.123pan.com/s/pDSKVv-oypWv</span></a></p>
 | 
					 | 
				
			||||||
<p style=" margin-top:12px; margin-bottom:12px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-size:10pt;">迅雷网盘:</span><a href="https://pan.xunlei.com/s/VNKMz3wgbYHg6JIh50ZKIc7pA1?pwd=35e5"><span style=" font-size:11pt; text-decoration: underline; color:#0082fa;">https://pan.xunlei.com/s/VNKMz3wgbYHg6JIh50ZKIc7pA1?pwd=35e5</span></a><span style=" font-size:10pt;">  提取码:35e5</span></p>
 | 
					 | 
				
			||||||
<p style=" margin-top:12px; margin-bottom:12px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-size:10pt;">百度网盘:</span><a href="https://pan.baidu.com/s/19WbvinITCQJFZpAdZutrjg?pwd=me4y"><span style=" font-size:11pt; text-decoration: underline; color:#0082fa;">https://pan.baidu.com/s/19WbvinITCQJFZpAdZutrjg?pwd=me4y</span></a><span style=" font-size:10pt;"> 提取码: me4y</span></p>
 | 
					 | 
				
			||||||
<p style=" margin-top:12px; margin-bottom:12px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-size:10pt;">诚通网盘:</span><a href="http://ctfile.gfdgdxi.top/d/31540479-58662220-3590cf?p=2061"><span style=" font-size:11pt; text-decoration: underline; color:#0082fa;">http://ctfile.gfdgdxi.top/d/31540479-58662220-3590cf?p=2061</span></a><span style=" font-size:10pt;"> (访问密码: 2061)</span></p>
 | 
					 | 
				
			||||||
<p style=" margin-top:12px; margin-bottom:12px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-size:10pt;">(如果下载这个,系统版本选第一项,一般推荐这个)</span><a href="ed2k://|file|cn_windows_7_ultimate_with_sp1_x86_dvd_u_677486.iso|2653276160|7503E4B9B8738DFCB95872445C72AEFB|/"><span style=" font-size:11pt; text-decoration: underline; color:#0082fa;">ed2k://|file|cn_windows_7_ultimate_with_sp1_x86_dvd_u_677486.iso|2653276160|7503E4B9B8738DFCB95872445C72AEFB|/</span></a></p>
 | 
					 | 
				
			||||||
<p style=" margin-top:12px; margin-bottom:12px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-size:10pt;">(如果下载这个,系统版本选第二项)</span><a href="ed2k://|file|cn_windows_7_ultimate_with_sp1_x64_dvd_u_677408.iso|3420557312|B58548681854236C7939003B583A8078|/"><span style=" font-size:11pt; text-decoration: underline; color:#0082fa;">ed2k://|file|cn_windows_7_ultimate_with_sp1_x64_dvd_u_677408.iso|3420557312|B58548681854236C7939003B583A8078|/</span></a></p>
 | 
					 | 
				
			||||||
<hr />
 | 
					 | 
				
			||||||
<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-size:11pt; font-weight:600;">常用 Windows 软件:</span></p>
 | 
					 | 
				
			||||||
<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-size:11pt;">百度网盘:链接: </span><a href="https://pan.baidu.com/s/1D1NSy7k7XBnOZL_tNTnG6g?pwd=7s2p"><span style=" font-size:11pt; text-decoration: underline; color:#0082fa;">https://pan.baidu.com/s/1D1NSy7k7XBnOZL_tNTnG6g?pwd=7s2p</span></a><span style=" font-size:11pt;"> 提取码: 7s2p </span></p>
 | 
					 | 
				
			||||||
<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-size:11pt;">诚通网盘:</span><a href="http://ctfile.gfdgdxi.top/d/31540479-58659214-0732a8?p=2061"><span style=" font-size:11pt; text-decoration: underline; color:#0082fa;">http://ctfile.gfdgdxi.top/d/31540479-58659214-0732a8?p=2061</span></a><span style=" font-size:11pt;"> (访问密码: 2061)</span></p>
 | 
					 | 
				
			||||||
<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-size:11pt;">123网盘:</span><a href="https://www.123pan.com/s/pDSKVv-uCBWv.html"><span style=" font-size:11pt; text-decoration: underline; color:#0082fa;">https://www.123pan.com/s/pDSKVv-uCBWv.html</span></a></p>
 | 
					 | 
				
			||||||
<hr /></body></html></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><!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd">
 | 
					 | 
				
			||||||
<html><head><meta name="qrichtext" content="1" /><style type="text/css">
 | 
					 | 
				
			||||||
p, li { white-space: pre-wrap; }
 | 
					 | 
				
			||||||
</style></head><body style=" font-family:'Noto Sans CJK SC'; font-size:10.5pt; font-weight:400; font-style:normal;">
 | 
					 | 
				
			||||||
<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-size:26pt; font-weight:600;">给小白的一段话</span></p>
 | 
					 | 
				
			||||||
<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">其实本质上跑完安装程序就没有然后了,顶多如果想要运行舒服一点点,可以安装加强功能,直接拉到最底下看就可以了,<span style=" font-weight:600; font-style:italic; text-decoration: underline;">只限使用 VirtualBox</span></p>
 | 
					 | 
				
			||||||
<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-weight:600; font-style:italic; text-decoration: underline;">如果你是用非 X86 PC,那暂时只能使用 qemu(没 kvm),且跨架构的性能损失很大,推荐使用 Windows XP 而非 Windows 7</span></p>
 | 
					 | 
				
			||||||
<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">如果爱折腾的话,下面的都看看也无所谓的,想看往下翻就可以了</p>
 | 
					 | 
				
			||||||
<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-weight:600; text-decoration: underline;">(这里的帮助更新可能不会那么及时,更详细/新的帮助可以看:https://gitee.com/gfdgd-xi/deep-wine-runner/wikis 或 https://gitee.com/gfdgd-xi/wine-runner-wiki)</span></p>
 | 
					 | 
				
			||||||
<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">(如果鼠标被锁定到里面了按下键盘右边的“Ctrl”键就可以了,<span style=" font-weight:600; font-style:italic; text-decoration: underline;">qemu则是 Ctrl+Alt+G</span> )</p>
 | 
					 | 
				
			||||||
<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">VirtualBox 可以安装增强功能以优化体验,安装方法往下翻即可查询</p>
 | 
					 | 
				
			||||||
<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">Qemu 可以安装 Virtio 以优化体验,下载链接:<a href="https://fedorapeople.org/groups/virt/virtio-win/direct-downloads/archive-virtio/"><span style=" font-size:11pt; text-decoration: underline; color:#0082fa;">https://fedorapeople.org/groups/virt/virtio-win/direct-downloads/archive-virtio/</span></a></p>
 | 
					 | 
				
			||||||
<hr />
 | 
					 | 
				
			||||||
<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><br /></p>
 | 
					 | 
				
			||||||
<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:26pt; font-weight:600;"><br /></p>
 | 
					 | 
				
			||||||
<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:26pt; font-weight:600;"><br /></p>
 | 
					 | 
				
			||||||
<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:26pt; font-weight:600;"><br /></p>
 | 
					 | 
				
			||||||
<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:26pt; font-weight:600;"><br /></p>
 | 
					 | 
				
			||||||
<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:26pt; font-weight:600;"><br /></p>
 | 
					 | 
				
			||||||
<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:26pt; font-weight:600;"><br /></p>
 | 
					 | 
				
			||||||
<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:26pt; font-weight:600;"><br /></p>
 | 
					 | 
				
			||||||
<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:26pt; font-weight:600;"><br /></p>
 | 
					 | 
				
			||||||
<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:26pt; font-weight:600;"><br /></p>
 | 
					 | 
				
			||||||
<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:26pt; font-weight:600;"><br /></p>
 | 
					 | 
				
			||||||
<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:26pt; font-weight:600;"><br /></p>
 | 
					 | 
				
			||||||
<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:26pt; font-weight:600;"><br /></p>
 | 
					 | 
				
			||||||
<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-size:26pt; font-weight:600;">安装是否需要人工进行操作?</span></p>
 | 
					 | 
				
			||||||
<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">如果您下载的镜像本程序支持,则大部分不用,已经尽量省去了让新手头疼的虚拟机程序安装,创建、设置虚拟机,虚拟磁盘分区,寻找原版镜像文件等内容</p>
 | 
					 | 
				
			||||||
<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><img src=":/picture/截图/截图_VirtualBox Machine_20220712191756.png" /></p>
 | 
					 | 
				
			||||||
<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">但有些设置依旧需要人工自行设置,例如安装界面密钥的输入、系统的激活(涉及版权问题,不会考虑省略)、增强功能的安装、需要使用的软件等等</p>
 | 
					 | 
				
			||||||
<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><img src=":/picture/截图/截图_VirtualBox Machine_20220712192850.png" /></p>
 | 
					 | 
				
			||||||
<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><img src=":/picture/截图/截图_VirtualBox Machine_20220712193527.png" /></p>
 | 
					 | 
				
			||||||
<hr />
 | 
					 | 
				
			||||||
<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-size:26pt; font-weight:600;">什么样的镜像本程序(可能)不支持自动安装?</span></p>
 | 
					 | 
				
			||||||
<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">非 Windows 7 镜像可能不支持自动安装(纯的 Windows 7 企业版镜像可能不支持自动安装),不保证系统能自动安装成功,例如 Windows XP、Windows 10、Deepin、Ubuntu 等等</p>
 | 
					 | 
				
			||||||
<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><br /></p>
 | 
					 | 
				
			||||||
<hr />
 | 
					 | 
				
			||||||
<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-size:26pt; font-weight:600;">默认的虚拟机设置不习惯怎么改?</span></p>
 | 
					 | 
				
			||||||
<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-size:11pt;">1、打开启动器,打开 Oracle VM VirtualBox 程序</span></p>
 | 
					 | 
				
			||||||
<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-size:11pt;">2、选择名字为“Windows”的虚拟机,然后在右边点击设置</span></p>
 | 
					 | 
				
			||||||
<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><img src=":/picture/截图/截图_VirtualBox Manager_20220712223602.png" /></p>
 | 
					 | 
				
			||||||
<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-size:11pt;">3、在这里修改即可</span></p>
 | 
					 | 
				
			||||||
<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><img src=":/picture/截图/截图_VirtualBox_20220712223705.png" /></p>
 | 
					 | 
				
			||||||
<hr />
 | 
					 | 
				
			||||||
<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-size:26pt; font-weight:600;">安装加强功能有什么好处?(只限使用 VirtualBox)</span></p>
 | 
					 | 
				
			||||||
<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">1、支持鼠标自由从虚拟机和实体机切换</p>
 | 
					 | 
				
			||||||
<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">2、支持虚拟机根据窗口大小自动设置分辨率</p>
 | 
					 | 
				
			||||||
<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">3、支持文件共享、剪切板共享、文件拖放</p>
 | 
					 | 
				
			||||||
<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">4、支持无缝模式</p>
 | 
					 | 
				
			||||||
<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><img src=":/picture/截图/截图_选择区域_20220712224639.png" /></p>
 | 
					 | 
				
			||||||
<hr />
 | 
					 | 
				
			||||||
<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-size:26pt; font-weight:600;">如何安装加强功能?</span></p>
 | 
					 | 
				
			||||||
<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">1、点击“设备”=》“加强功能”</p>
 | 
					 | 
				
			||||||
<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><img src=":/picture/截图_VirtualBox Machine_20220712142929.png" /></p>
 | 
					 | 
				
			||||||
<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">2、打开“计算机”,找到名为“VirtualBox Guest Additions”的光盘,双击进入,然后双击打开名为“VBoxWindowsAdditions”的程序</p>
 | 
					 | 
				
			||||||
<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><img src=":/picture/截图/截图_VirtualBox Machine_20220712143006.png" /></p>
 | 
					 | 
				
			||||||
<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">3、在弹出的界面点击“是”</p>
 | 
					 | 
				
			||||||
<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><img src=":/picture/截图/截图_VirtualBox Machine_20220712143018.png" /></p>
 | 
					 | 
				
			||||||
<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">4、一直点“Next”</p>
 | 
					 | 
				
			||||||
<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><img src=":/picture/截图/截图_VirtualBox Machine_20220712143029.png" /></p>
 | 
					 | 
				
			||||||
<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><img src=":/picture/截图/截图_VirtualBox Machine_20220712143037.png" /></p>
 | 
					 | 
				
			||||||
<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-size:11pt;">5、全部选择,然后点击“Install”进行安装</span></p>
 | 
					 | 
				
			||||||
<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><img src=":/picture/截图/截图_VirtualBox Machine_20220712143044.png" /></p>
 | 
					 | 
				
			||||||
<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-size:11pt;">6、等待安装完毕后,选择“Reboot now”然后点击“Finish”重启此虚拟机即可安装成功(选择“Reboot now”并点“Finish”会自动重新启动)</span></p>
 | 
					 | 
				
			||||||
<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><img src=":/picture/截图/截图_VirtualBox Machine_20220712143103.png" /></p></body></html></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><!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd">
 | 
					 | 
				
			||||||
<html><head><meta name="qrichtext" content="1" /><style type="text/css">
 | 
					 | 
				
			||||||
p, li { white-space: pre-wrap; }
 | 
					 | 
				
			||||||
</style></head><body style=" font-family:'Noto Sans CJK SC'; font-size:10.5pt; font-weight:400; font-style:normal;">
 | 
					 | 
				
			||||||
<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">此为 wine 运行器附属组件(虽然违背了“Wine Is Not An Emulator”&lt;Wine 不是一个模拟器&gt;的原意),旨在能更加完美、简单的运行 Windows 应用</p>
 | 
					 | 
				
			||||||
<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">本程序基于 C++ Qt、Python 和 Virtualbox 制作,通过运行安装 Windows 操作系统的虚拟机实现在 Linux 运行 Windows exe 程序的功能。</p>
 | 
					 | 
				
			||||||
<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">基于 GPL V3 协议开源</p>
 | 
					 | 
				
			||||||
<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">项目地址:</p>
 | 
					 | 
				
			||||||
<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">    Gitee:<a href="https://gitee.com/gfdgd-xi/deep-wine-runner"><span style=" font-size:11pt; text-decoration: underline; color:#0082fa;">https://gitee.com/gfdgd-xi/deep-wine-runner</span></a></p>
 | 
					 | 
				
			||||||
<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">    Github:<a href="https://github.com/gfdgd-xi/deep-wine-runner"><span style=" font-size:11pt; text-decoration: underline; color:#0082fa;">https://github.com/gfdgd-xi/deep-wine-runner</span></a></p>
 | 
					 | 
				
			||||||
<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">此组件也有非常大的缺点,就是相比于 Wine,会需要占用大量的空间、安装需要大量的时间、某些情况下需要相比于 Wine 需要消耗更多的系统资源,但可以更加完美、流畅的运行 Windows 应用,会尽量减少因为缺少或未实现导致的 Windows exe 程序运行异常</p>
 | 
					 | 
				
			||||||
<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">该组件制作者:gfdgd xi</p>
 | 
					 | 
				
			||||||
<hr />
 | 
					 | 
				
			||||||
<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><br /></p></body></html></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>虚拟机测试(X86、Qemu)</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><p>程序版本号:</source>
 | 
					 | 
				
			||||||
        <translation><p>Program Version:</translation>
 | 
					 | 
				
			||||||
    </message>
 | 
					 | 
				
			||||||
    <message>
 | 
					 | 
				
			||||||
        <location filename="mainwindow.cpp" line="90"/>
 | 
					 | 
				
			||||||
        <source></p><p>安装包构建时间:</source>
 | 
					 | 
				
			||||||
        <translation></p><p>Package build time:</translation>
 | 
					 | 
				
			||||||
    </message>
 | 
					 | 
				
			||||||
    <message>
 | 
					 | 
				
			||||||
        <location filename="mainwindow.cpp" line="90"/>
 | 
					 | 
				
			||||||
        <source></p><p>该组件构建时间:</source>
 | 
					 | 
				
			||||||
        <translation></p><p>Tools builded time:</translation>
 | 
					 | 
				
			||||||
    </message>
 | 
					 | 
				
			||||||
    <message>
 | 
					 | 
				
			||||||
        <location filename="mainwindow.cpp" line="92"/>
 | 
					 | 
				
			||||||
        <source><hr/><h1>谢明列表</h1></source>
 | 
					 | 
				
			||||||
        <translation><hr/><h1>Thank</h1></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'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'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'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'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'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'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't find the UEFI boot, do you want to countinue to create the virtual machine?
 | 
					 | 
				
			||||||
You can get qemu efi from "Install Qemu" 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'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't export because can't find the qemu disk</translation>
 | 
					 | 
				
			||||||
    </message>
 | 
					 | 
				
			||||||
    <message>
 | 
					 | 
				
			||||||
        <location filename="mainwindow.cpp" line="357"/>
 | 
					 | 
				
			||||||
        <source>不存在磁盘文件,无法移除</source>
 | 
					 | 
				
			||||||
        <translation>Can't delete because can't find the qemu disk</translation>
 | 
					 | 
				
			||||||
    </message>
 | 
					 | 
				
			||||||
    <message>
 | 
					 | 
				
			||||||
        <location filename="mainwindow.cpp" line="360"/>
 | 
					 | 
				
			||||||
        <source>是否删除?
 | 
					 | 
				
			||||||
删除后将无法恢复!</source>
 | 
					 | 
				
			||||||
        <translation>Do you want to delete?
 | 
					 | 
				
			||||||
It can'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't find the command "kvm-ok" and you can use command "sudo apt install cpu-checker" 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'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'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><h3>远程服务</h3></source>
 | 
					 | 
				
			||||||
        <translation><h3>Remote Service</h3></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><h3>基础设置</h3></source>
 | 
					 | 
				
			||||||
        <translation><h3>Base setting</h3></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>
 | 
					 | 
				
			||||||
@ -1,218 +0,0 @@
 | 
				
			|||||||
/*
 | 
					 | 
				
			||||||
    来自:https://gitee.com/zinface/z-tools/tree/speedwidget-dev/src/SpeedWidget/infoUtils
 | 
					 | 
				
			||||||
    依据 GPLV3 开源
 | 
					 | 
				
			||||||
*/
 | 
					 | 
				
			||||||
#include "infoutils.h"
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
#include <QFile>
 | 
					 | 
				
			||||||
#include <QTextStream>
 | 
					 | 
				
			||||||
#include <QtMath>
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
infoUtils::infoUtils(QObject *parent) : QObject(parent)
 | 
					 | 
				
			||||||
{
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
QString infoUtils::setRateUnitSensitive(infoUtils::RateUnit unit, infoUtils::Sensitive sensitive)
 | 
					 | 
				
			||||||
{
 | 
					 | 
				
			||||||
    switch (sensitive) {
 | 
					 | 
				
			||||||
    case Sensitive::Default: {
 | 
					 | 
				
			||||||
        switch (unit) {
 | 
					 | 
				
			||||||
        case RateUnit::RateBit:
 | 
					 | 
				
			||||||
            return QString("b/s");
 | 
					 | 
				
			||||||
        case RateUnit::RateByte:
 | 
					 | 
				
			||||||
            return QString("B/s");
 | 
					 | 
				
			||||||
        case RateUnit::RateKb:
 | 
					 | 
				
			||||||
            return QString("Kb/s");
 | 
					 | 
				
			||||||
        case RateUnit::RateMb:
 | 
					 | 
				
			||||||
            return QString("Mb/s");
 | 
					 | 
				
			||||||
        case RateUnit::RateGb:
 | 
					 | 
				
			||||||
            return QString("Gb/s");
 | 
					 | 
				
			||||||
        case RateUnit::RateTb:
 | 
					 | 
				
			||||||
            return QString("Tb/s");
 | 
					 | 
				
			||||||
        default:
 | 
					 | 
				
			||||||
//            qDebug()<<QString("Sensitive::Default,  RateUnit is RateUnknow.");
 | 
					 | 
				
			||||||
            return QString("");
 | 
					 | 
				
			||||||
        }
 | 
					 | 
				
			||||||
    }
 | 
					 | 
				
			||||||
    case Sensitive::Upper: {
 | 
					 | 
				
			||||||
        switch (unit) {
 | 
					 | 
				
			||||||
        case RateUnit::RateBit:
 | 
					 | 
				
			||||||
            return QString("BIT/S");
 | 
					 | 
				
			||||||
        case RateUnit::RateByte:
 | 
					 | 
				
			||||||
            return QString("B/S");
 | 
					 | 
				
			||||||
        case RateUnit::RateKb:
 | 
					 | 
				
			||||||
            return QString("KB/S");
 | 
					 | 
				
			||||||
        case RateUnit::RateMb:
 | 
					 | 
				
			||||||
            return QString("MB/S");
 | 
					 | 
				
			||||||
        case RateUnit::RateGb:
 | 
					 | 
				
			||||||
            return QString("GB/S");
 | 
					 | 
				
			||||||
        case RateUnit::RateTb:
 | 
					 | 
				
			||||||
            return QString("TB/S");
 | 
					 | 
				
			||||||
        default:
 | 
					 | 
				
			||||||
//            qDebug()<<QString("Sensitive::Upper,  RateUnit is RateUnknow.");
 | 
					 | 
				
			||||||
            return QString("");
 | 
					 | 
				
			||||||
        }
 | 
					 | 
				
			||||||
    }
 | 
					 | 
				
			||||||
    case Sensitive::Lower: {
 | 
					 | 
				
			||||||
        switch (unit) {
 | 
					 | 
				
			||||||
        case RateUnit::RateBit:
 | 
					 | 
				
			||||||
            return QString("bit/s");
 | 
					 | 
				
			||||||
        case RateUnit::RateByte:
 | 
					 | 
				
			||||||
            return QString("b/s");
 | 
					 | 
				
			||||||
        case RateUnit::RateKb:
 | 
					 | 
				
			||||||
            return QString("kb/s");
 | 
					 | 
				
			||||||
        case RateUnit::RateMb:
 | 
					 | 
				
			||||||
            return QString("mb/s");
 | 
					 | 
				
			||||||
        case RateUnit::RateGb:
 | 
					 | 
				
			||||||
            return QString("gb/s");
 | 
					 | 
				
			||||||
        case RateUnit::RateTb:
 | 
					 | 
				
			||||||
            return QString("tb/s");
 | 
					 | 
				
			||||||
        default:
 | 
					 | 
				
			||||||
//            qDebug()<<QString("Sensitive::Lower,  RateUnit is RateUnknow.");
 | 
					 | 
				
			||||||
            return QString("");
 | 
					 | 
				
			||||||
        }
 | 
					 | 
				
			||||||
    }
 | 
					 | 
				
			||||||
    default: {
 | 
					 | 
				
			||||||
//        qDebug()<<QString("Sensitive is RateUnknow.");
 | 
					 | 
				
			||||||
        return QString("");
 | 
					 | 
				
			||||||
    }
 | 
					 | 
				
			||||||
    }
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
double infoUtils::autoRateUnits(long speed, infoUtils::RateUnit &unit)
 | 
					 | 
				
			||||||
{
 | 
					 | 
				
			||||||
    /* 自动判断合适的速率单位,默认传进来的是 Byte
 | 
					 | 
				
			||||||
     * bit    0 ~ 7 位 (不到 1 字节)
 | 
					 | 
				
			||||||
     * Byte   1    ~ 2^10  Byte
 | 
					 | 
				
			||||||
     * KB     2^10 ~ 2^20  Byte
 | 
					 | 
				
			||||||
     * MB     2^20 ~ 2^30  Byte
 | 
					 | 
				
			||||||
     * GB     2^30 ~ 2^40  Byte
 | 
					 | 
				
			||||||
     * TB     2^40 ~ 2^50  Byte
 | 
					 | 
				
			||||||
     */
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    if (unit != infoUtils::RateByte) {
 | 
					 | 
				
			||||||
//        qDebug()<<"请先将单位转为字节(byte)后再传参";
 | 
					 | 
				
			||||||
        return -1;
 | 
					 | 
				
			||||||
    }
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    double sp = 0;
 | 
					 | 
				
			||||||
    if (0 <= speed && speed < qPow(2, 10)) {
 | 
					 | 
				
			||||||
        unit = infoUtils::RateByte;
 | 
					 | 
				
			||||||
        sp = speed;
 | 
					 | 
				
			||||||
    } else if (qPow(2, 10) <= speed && speed < qPow(2, 20)) {
 | 
					 | 
				
			||||||
        unit = infoUtils::RateKb;
 | 
					 | 
				
			||||||
        sp = static_cast<double>(speed / qPow(2, 10) * 1.0);
 | 
					 | 
				
			||||||
    } else if (qPow(2, 20) <= speed && speed < qPow(2, 30)) {
 | 
					 | 
				
			||||||
        unit = infoUtils::RateMb;
 | 
					 | 
				
			||||||
        sp = static_cast<double>(speed / qPow(2, 20) * 1.0);
 | 
					 | 
				
			||||||
    } else if (qPow(2, 30) <= speed && speed < qPow(2, 40)) {
 | 
					 | 
				
			||||||
        unit = infoUtils::RateGb;
 | 
					 | 
				
			||||||
        sp = static_cast<double>(speed / qPow(2, 30) * 1.0);
 | 
					 | 
				
			||||||
    } else if (qPow(2, 40) <= speed && speed < qPow(2, 50)) {
 | 
					 | 
				
			||||||
        unit = infoUtils::RateTb;
 | 
					 | 
				
			||||||
        sp = static_cast<double>(speed / qPow(2, 40) * 1.0);
 | 
					 | 
				
			||||||
    } else {
 | 
					 | 
				
			||||||
        unit = infoUtils::RateUnknow;
 | 
					 | 
				
			||||||
//        qDebug()<<"本设备网络速率单位传输超过 TB, 或者低于 0 Byte.";
 | 
					 | 
				
			||||||
        sp = -1;
 | 
					 | 
				
			||||||
    }
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    return sp;
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
void infoUtils::uptime(double &run, double &idle)
 | 
					 | 
				
			||||||
{
 | 
					 | 
				
			||||||
    QFile file(PROC_UPTIME); // /proc/uptime
 | 
					 | 
				
			||||||
    if(!file.open(QIODevice::ReadOnly | QIODevice::Text)) {
 | 
					 | 
				
			||||||
        return;
 | 
					 | 
				
			||||||
    }
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    QTextStream stream(&file);
 | 
					 | 
				
			||||||
    QString line = stream.readLine();
 | 
					 | 
				
			||||||
    QStringList list = line.split(QRegExp("\\s{1,}"));
 | 
					 | 
				
			||||||
    if(!list.isEmpty()) {
 | 
					 | 
				
			||||||
        run = list.at(0).toDouble();
 | 
					 | 
				
			||||||
        idle = list.at(1).toDouble();
 | 
					 | 
				
			||||||
    }
 | 
					 | 
				
			||||||
    file.close();
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
void infoUtils::netRate(long &netDown, long &netUpload)
 | 
					 | 
				
			||||||
{
 | 
					 | 
				
			||||||
    QFile file(PROC_NET); //  /proc/net/dev
 | 
					 | 
				
			||||||
    if (!file.open(QIODevice::ReadOnly | QIODevice::Text)) {  // 在读取时,把行尾结束符修改为 '\n'; 在写入时,把行尾结束符修改为本地系统换行风格,比如Windows文本换行是 "\r\n"
 | 
					 | 
				
			||||||
        return;
 | 
					 | 
				
			||||||
    }
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    long down = 0;
 | 
					 | 
				
			||||||
    long upload = 0;
 | 
					 | 
				
			||||||
    QTextStream stream(&file);
 | 
					 | 
				
			||||||
    QString line = stream.readLine();
 | 
					 | 
				
			||||||
    line  = stream.readLine();
 | 
					 | 
				
			||||||
    line  = stream.readLine();
 | 
					 | 
				
			||||||
    while (!line.isNull()) {
 | 
					 | 
				
			||||||
        line = line.trimmed();
 | 
					 | 
				
			||||||
        QStringList list = line.split(QRegExp("\\s{1,}"));   // 匹配任意 大于等于1个的 空白字符
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
        if (!list.isEmpty()) {
 | 
					 | 
				
			||||||
            down = list.at(1).toLong();
 | 
					 | 
				
			||||||
            upload = list.at(9).toLong();
 | 
					 | 
				
			||||||
        }
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
        netDown += down;
 | 
					 | 
				
			||||||
        netUpload += upload;
 | 
					 | 
				
			||||||
        line  = stream.readLine();
 | 
					 | 
				
			||||||
    }
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    file.close();
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
void infoUtils::cpuRate(long &cpuAll, long &cpuFree)
 | 
					 | 
				
			||||||
{
 | 
					 | 
				
			||||||
    cpuAll = cpuFree = 0;
 | 
					 | 
				
			||||||
    bool ok = false;
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    QFile file(PROC_CPU); // /proc/stat
 | 
					 | 
				
			||||||
    if(!file.open(QIODevice::ReadOnly | QIODevice::Text)) {
 | 
					 | 
				
			||||||
        return;
 | 
					 | 
				
			||||||
    }
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    QTextStream stream(&file);
 | 
					 | 
				
			||||||
    QString line = stream.readLine();
 | 
					 | 
				
			||||||
    if (!line.isNull()) {
 | 
					 | 
				
			||||||
        QStringList list = line.split(QRegExp("\\s{1,}"));
 | 
					 | 
				
			||||||
        for (auto v = list.begin() + 1; v != list.end(); ++v)
 | 
					 | 
				
			||||||
            cpuAll += (*v).toLong(&ok);
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
        cpuFree = list.at(4).toLong(&ok);
 | 
					 | 
				
			||||||
    }
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    file.close();
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
void infoUtils::memoryRate(long &memory, long &memoryAll, long &swap, long &swapAll)
 | 
					 | 
				
			||||||
{
 | 
					 | 
				
			||||||
    memory = memoryAll = 0;
 | 
					 | 
				
			||||||
    swap = swapAll = 0;
 | 
					 | 
				
			||||||
    bool ok = false;
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    QFile file(PROC_MEM); // /proc/meminfo
 | 
					 | 
				
			||||||
    if (!file.open(QIODevice::ReadOnly | QIODevice::Text))
 | 
					 | 
				
			||||||
        return;
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    QTextStream stream(&file);
 | 
					 | 
				
			||||||
    long buff[16] = {0};
 | 
					 | 
				
			||||||
    for (int i = 0; i <= 15; ++i) {
 | 
					 | 
				
			||||||
        QString line = stream.readLine();
 | 
					 | 
				
			||||||
        QStringList list = line.split(QRegExp("\\s{1,}"));
 | 
					 | 
				
			||||||
        buff[i] = list.at(1).toLong(&ok);
 | 
					 | 
				
			||||||
    }
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    memoryAll = buff[0];
 | 
					 | 
				
			||||||
    memory = buff[0] - buff[2];
 | 
					 | 
				
			||||||
    swapAll = buff[14];
 | 
					 | 
				
			||||||
    swap = buff[14] - buff[15];
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    file.close();
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
@ -1,48 +0,0 @@
 | 
				
			|||||||
#ifndef INFOUTILS_H
 | 
					 | 
				
			||||||
#define INFOUTILS_H
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
#include <QObject>
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
#define PROC_UPTIME  "/proc/uptime"
 | 
					 | 
				
			||||||
#define PROC_CPU     "/proc/stat"
 | 
					 | 
				
			||||||
#define PROC_MEM     "/proc/meminfo"
 | 
					 | 
				
			||||||
#define PROC_NET     "/proc/net/dev"
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
class infoUtils : public QObject
 | 
					 | 
				
			||||||
{
 | 
					 | 
				
			||||||
    Q_OBJECT
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
public:
 | 
					 | 
				
			||||||
    enum RateUnit {
 | 
					 | 
				
			||||||
        RateBit,
 | 
					 | 
				
			||||||
        RateByte,
 | 
					 | 
				
			||||||
        RateKb,
 | 
					 | 
				
			||||||
        RateMb,
 | 
					 | 
				
			||||||
        RateGb,
 | 
					 | 
				
			||||||
        RateTb,
 | 
					 | 
				
			||||||
        RateUnknow
 | 
					 | 
				
			||||||
    };
 | 
					 | 
				
			||||||
    Q_ENUM(RateUnit)
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    enum Sensitive {
 | 
					 | 
				
			||||||
        Default,  // 大小写混合
 | 
					 | 
				
			||||||
        Upper,    // 全部大写
 | 
					 | 
				
			||||||
        Lower     // 全部小写
 | 
					 | 
				
			||||||
    };
 | 
					 | 
				
			||||||
public:
 | 
					 | 
				
			||||||
    explicit infoUtils(QObject *parent = nullptr);
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    static QString setRateUnitSensitive(RateUnit unit, Sensitive sensitive);
 | 
					 | 
				
			||||||
    static double autoRateUnits(long speed, RateUnit &unit);
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    static void uptime(double &run, double &idle);
 | 
					 | 
				
			||||||
    static void netRate(long &netDown, long &netUpload);
 | 
					 | 
				
			||||||
    static void cpuRate(long &cpuAll, long &cpuFree);
 | 
					 | 
				
			||||||
    static void memoryRate(long &memory, long &memoryAll, long &swap, long &swapAll);
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
signals:
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
public slots:
 | 
					 | 
				
			||||||
};
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
#endif // INFOUTILS_H
 | 
					 | 
				
			||||||
							
								
								
									
										132
									
								
								VM-source/kvm-ok
									
									
									
									
									
								
							
							
						
						@ -1,132 +0,0 @@
 | 
				
			|||||||
#!/bin/sh
 | 
					 | 
				
			||||||
#
 | 
					 | 
				
			||||||
# kvm-ok - check whether the CPU we're running on supports KVM acceleration
 | 
					 | 
				
			||||||
# Copyright (C) 2008-2010 Canonical Ltd.
 | 
					 | 
				
			||||||
#
 | 
					 | 
				
			||||||
# Authors:
 | 
					 | 
				
			||||||
#  Dustin Kirkland <kirkland@canonical.com>
 | 
					 | 
				
			||||||
#  Kees Cook <kees.cook@canonical.com>
 | 
					 | 
				
			||||||
#
 | 
					 | 
				
			||||||
# This program is free software: you can redistribute it and/or modify
 | 
					 | 
				
			||||||
# it under the terms of the GNU General Public License version 3,
 | 
					 | 
				
			||||||
# as published by the Free Software Foundation.
 | 
					 | 
				
			||||||
#
 | 
					 | 
				
			||||||
# This program is distributed in the hope that it will be useful,
 | 
					 | 
				
			||||||
# but WITHOUT ANY WARRANTY; without even the implied warranty of
 | 
					 | 
				
			||||||
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 | 
					 | 
				
			||||||
# GNU General Public License for more details.
 | 
					 | 
				
			||||||
#
 | 
					 | 
				
			||||||
# You should have received a copy of the GNU General Public License
 | 
					 | 
				
			||||||
# along with this program.  If not, see <http://www.gnu.org/licenses/>.
 | 
					 | 
				
			||||||
set -e
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
assert_root() {
 | 
					 | 
				
			||||||
        if [ "$(id -u)" != "0" ]; then
 | 
					 | 
				
			||||||
                echo "INFO: For more detailed results, you should run this as root"
 | 
					 | 
				
			||||||
                echo "HINT:   sudo $0"
 | 
					 | 
				
			||||||
                exit 1
 | 
					 | 
				
			||||||
        fi
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
verdict() {
 | 
					 | 
				
			||||||
        # Print verdict
 | 
					 | 
				
			||||||
        if [ "$1" = "0" ]; then
 | 
					 | 
				
			||||||
                echo "KVM acceleration can be used"
 | 
					 | 
				
			||||||
                exit 0
 | 
					 | 
				
			||||||
        else
 | 
					 | 
				
			||||||
                echo "KVM acceleration can NOT be used"
 | 
					 | 
				
			||||||
                exit 1
 | 
					 | 
				
			||||||
        fi
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
ARM_CPU_PART_CORTEX_A15="0xc0f" # <asm/cputype.h>
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
# check cpu flags for capability
 | 
					 | 
				
			||||||
case "$(uname -m)" in
 | 
					 | 
				
			||||||
    armv7l)
 | 
					 | 
				
			||||||
        if egrep -m1 -w '^CPU part[[:blank:]]*:' /proc/cpuinfo | \
 | 
					 | 
				
			||||||
                egrep -wq "$ARM_CPU_PART_CORTEX_A15"; then
 | 
					 | 
				
			||||||
            virt="ARM"
 | 
					 | 
				
			||||||
            kvm_mod="kvm"
 | 
					 | 
				
			||||||
        fi
 | 
					 | 
				
			||||||
        ;;
 | 
					 | 
				
			||||||
    aarch64)
 | 
					 | 
				
			||||||
        virt="ARM"
 | 
					 | 
				
			||||||
        kvm_mod="kvm"
 | 
					 | 
				
			||||||
        ;;
 | 
					 | 
				
			||||||
    ppc64le|ppc64|s390x)
 | 
					 | 
				
			||||||
        # FIXME: Assume that all POWER and z/Systems are KVM capable
 | 
					 | 
				
			||||||
        virt="generic"
 | 
					 | 
				
			||||||
        kvm_mod="kvm"
 | 
					 | 
				
			||||||
        ;;
 | 
					 | 
				
			||||||
    *)
 | 
					 | 
				
			||||||
      virt=$(egrep -m1 -w '^flags[[:blank:]]*:' /proc/cpuinfo | egrep -wo '(vmx|svm)') || true
 | 
					 | 
				
			||||||
      [ "$virt" = "vmx" ] && kvm_mod="kvm_intel"
 | 
					 | 
				
			||||||
      [ "$virt" = "svm" ] && kvm_mod="kvm_amd"
 | 
					 | 
				
			||||||
      ;;
 | 
					 | 
				
			||||||
esac
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
if [ -z "$virt" ]; then
 | 
					 | 
				
			||||||
        echo "INFO: Your CPU does not support KVM extensions"
 | 
					 | 
				
			||||||
        assert_root
 | 
					 | 
				
			||||||
        verdict 1
 | 
					 | 
				
			||||||
fi
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
# Now, check that the device exists
 | 
					 | 
				
			||||||
if [ -e /dev/kvm ]; then
 | 
					 | 
				
			||||||
        echo "INFO: /dev/kvm exists"
 | 
					 | 
				
			||||||
        verdict 0
 | 
					 | 
				
			||||||
else
 | 
					 | 
				
			||||||
        echo "INFO: /dev/kvm does not exist"
 | 
					 | 
				
			||||||
        echo "HINT:   sudo modprobe $kvm_mod"
 | 
					 | 
				
			||||||
fi
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
assert_root
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
# Prepare MSR access
 | 
					 | 
				
			||||||
msr="/dev/cpu/0/msr"
 | 
					 | 
				
			||||||
if [ ! -r "$msr" ]; then
 | 
					 | 
				
			||||||
        modprobe msr
 | 
					 | 
				
			||||||
fi
 | 
					 | 
				
			||||||
if [ -e "$msr" -a ! -r "$msr" ]; then
 | 
					 | 
				
			||||||
        echo "You must be root to run this check." >&2
 | 
					 | 
				
			||||||
        exit 2
 | 
					 | 
				
			||||||
fi
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
echo "INFO: Your CPU supports KVM extensions"
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
disabled=0
 | 
					 | 
				
			||||||
# check brand-specific registers
 | 
					 | 
				
			||||||
if [ "$virt" = "vmx" ]; then
 | 
					 | 
				
			||||||
        BIT=$(rdmsr --bitfield 0:0 0x3a 2>/dev/null || true)
 | 
					 | 
				
			||||||
        if [ "$BIT" = "1" ]; then
 | 
					 | 
				
			||||||
                # and FEATURE_CONTROL_VMXON_ENABLED_OUTSIDE_SMX clear (no tboot)
 | 
					 | 
				
			||||||
                BIT=$(rdmsr --bitfield 2:2 0x3a 2>/dev/null || true)
 | 
					 | 
				
			||||||
                if [ "$BIT" = "0" ]; then
 | 
					 | 
				
			||||||
                        disabled=1
 | 
					 | 
				
			||||||
                fi
 | 
					 | 
				
			||||||
        fi
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
elif [ "$virt" = "svm" ]; then
 | 
					 | 
				
			||||||
        BIT=$(rdmsr --bitfield 4:4 0xc0010114 2>/dev/null || true)
 | 
					 | 
				
			||||||
        if [ "$BIT" = "1" ]; then
 | 
					 | 
				
			||||||
                disabled=1
 | 
					 | 
				
			||||||
        fi
 | 
					 | 
				
			||||||
elif [ "$virt" = "ARM" ]; then
 | 
					 | 
				
			||||||
    # Should also test that we booted in HYP mode, if detectable
 | 
					 | 
				
			||||||
    :
 | 
					 | 
				
			||||||
elif [ "$virt" = "generic" ]; then
 | 
					 | 
				
			||||||
    :
 | 
					 | 
				
			||||||
else
 | 
					 | 
				
			||||||
        echo "FAIL: Unknown virtualization extension: $virt"
 | 
					 | 
				
			||||||
        verdict 1
 | 
					 | 
				
			||||||
fi
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
if [ "$disabled" -eq 1 ]; then
 | 
					 | 
				
			||||||
        echo "INFO: KVM ($virt) is disabled by your BIOS"
 | 
					 | 
				
			||||||
        echo "HINT: Enter your BIOS setup and enable Virtualization Technology (VT),"
 | 
					 | 
				
			||||||
        echo "      and then hard poweroff/poweron your system"
 | 
					 | 
				
			||||||
        verdict 1
 | 
					 | 
				
			||||||
fi
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
verdict 0
 | 
					 | 
				
			||||||
@ -1,44 +0,0 @@
 | 
				
			|||||||
/*
 | 
					 | 
				
			||||||
 * gfdgd xi
 | 
					 | 
				
			||||||
 * 依照 GPLV3 开源
 | 
					 | 
				
			||||||
 */
 | 
					 | 
				
			||||||
#include "mainwindow.h"
 | 
					 | 
				
			||||||
#include <QApplication>
 | 
					 | 
				
			||||||
#include <QTranslator>
 | 
					 | 
				
			||||||
#include <QCoreApplication>
 | 
					 | 
				
			||||||
#include <QProcess>
 | 
					 | 
				
			||||||
#include <QMessageBox>
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
QString GetRunCommand(QString command){
 | 
					 | 
				
			||||||
    QProcess process;
 | 
					 | 
				
			||||||
    process.start(command);
 | 
					 | 
				
			||||||
    process.waitForStarted();
 | 
					 | 
				
			||||||
    process.waitForFinished();
 | 
					 | 
				
			||||||
    QString re = process.readAllStandardOutput();
 | 
					 | 
				
			||||||
    process.close();
 | 
					 | 
				
			||||||
    return re;
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
int main(int argc, char *argv[])
 | 
					 | 
				
			||||||
{
 | 
					 | 
				
			||||||
    QApplication a(argc, argv);
 | 
					 | 
				
			||||||
    // 语言
 | 
					 | 
				
			||||||
    QTranslator *trans = new QTranslator(&a);
 | 
					 | 
				
			||||||
    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 架构,立即退出");
 | 
					 | 
				
			||||||
        return 0;
 | 
					 | 
				
			||||||
    }*/
 | 
					 | 
				
			||||||
    MainWindow w;
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    w.show();
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    return a.exec();
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
@ -1,484 +0,0 @@
 | 
				
			|||||||
/*
 | 
					 | 
				
			||||||
 * gfdgd xi
 | 
					 | 
				
			||||||
 * 依照 GPLV3 开源
 | 
					 | 
				
			||||||
 */
 | 
					 | 
				
			||||||
#include "mainwindow.h"
 | 
					 | 
				
			||||||
#include "ui_mainwindow.h"
 | 
					 | 
				
			||||||
#include "buildvbox.h"
 | 
					 | 
				
			||||||
#include <QFileDialog>
 | 
					 | 
				
			||||||
#include <QDebug>
 | 
					 | 
				
			||||||
#include <QNetworkInterface>
 | 
					 | 
				
			||||||
#include <QProcess>
 | 
					 | 
				
			||||||
#include <QLoggingCategory>
 | 
					 | 
				
			||||||
#include <infoutils.h>
 | 
					 | 
				
			||||||
#include <QMessageBox>
 | 
					 | 
				
			||||||
#include <QTimer>
 | 
					 | 
				
			||||||
#include <QJsonParseError>
 | 
					 | 
				
			||||||
#include <QJsonValue>
 | 
					 | 
				
			||||||
#include <QJsonObject>
 | 
					 | 
				
			||||||
#include <QtMath>
 | 
					 | 
				
			||||||
#include <QJsonArray>
 | 
					 | 
				
			||||||
#include <QDesktopServices>
 | 
					 | 
				
			||||||
#include <QMessageBox>
 | 
					 | 
				
			||||||
#include <iostream>
 | 
					 | 
				
			||||||
#include <QIODevice>
 | 
					 | 
				
			||||||
#include <QInputDialog>
 | 
					 | 
				
			||||||
#include "qemusetting.h"
 | 
					 | 
				
			||||||
#include "vbox.h"
 | 
					 | 
				
			||||||
#include "qemu.h"
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
#include <QInputDialog>
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
MainWindow::MainWindow(QWidget *parent) :
 | 
					 | 
				
			||||||
    QMainWindow(parent),
 | 
					 | 
				
			||||||
    ui(new Ui::MainWindow)
 | 
					 | 
				
			||||||
{
 | 
					 | 
				
			||||||
    ui->setupUi(this);
 | 
					 | 
				
			||||||
    //QApplication a(argc, argv);
 | 
					 | 
				
			||||||
    ui->tabWidget->setTabPosition(QTabWidget::West);  // 标签靠左
 | 
					 | 
				
			||||||
    // 选择最优虚拟机
 | 
					 | 
				
			||||||
    if(!system("which qemu-system-x86_64")){
 | 
					 | 
				
			||||||
        ui->vmChooser->setCurrentIndex(0);
 | 
					 | 
				
			||||||
    }
 | 
					 | 
				
			||||||
    if(!system("which vboxmanage")){
 | 
					 | 
				
			||||||
        ui->vmChooser->setCurrentIndex(1);
 | 
					 | 
				
			||||||
    }
 | 
					 | 
				
			||||||
    if(!QFile::exists(QCoreApplication::applicationDirPath() + "/../RunCommandWithTerminal.py")){
 | 
					 | 
				
			||||||
        ui->getQemu->setDisabled(true);
 | 
					 | 
				
			||||||
    }
 | 
					 | 
				
			||||||
    // 允许输出 qDebug 信息
 | 
					 | 
				
			||||||
    QLoggingCategory::defaultCategory()->setEnabled(QtDebugMsg, true);
 | 
					 | 
				
			||||||
    // 判断是否安装 vbox(无需判断)
 | 
					 | 
				
			||||||
    /*if(system("which VBoxManage")){
 | 
					 | 
				
			||||||
        if(QMessageBox::question(this, tr("提示"), "检测到您似乎没有安装 VirtualBox,立即安装?") == QMessageBox::Yes){
 | 
					 | 
				
			||||||
            system("xdg-open https://www.virtualbox.org/wiki/Linux_Downloads");
 | 
					 | 
				
			||||||
        }
 | 
					 | 
				
			||||||
    }*/
 | 
					 | 
				
			||||||
    // QTimer
 | 
					 | 
				
			||||||
    QTimer *cpuGet = new QTimer(this);
 | 
					 | 
				
			||||||
    connect(cpuGet, &QTimer::timeout, this, &MainWindow::ShowCPUMessage);
 | 
					 | 
				
			||||||
    cpuGet->setInterval(1000);
 | 
					 | 
				
			||||||
    cpuGet->start();
 | 
					 | 
				
			||||||
    MainWindow::ShowCPUMessage();
 | 
					 | 
				
			||||||
    // 读取程序版本号
 | 
					 | 
				
			||||||
    // / 版本号文件是否存在
 | 
					 | 
				
			||||||
    QFile fileinfo(QCoreApplication::applicationDirPath() + "/../information.json");
 | 
					 | 
				
			||||||
    if(!fileinfo.exists()){
 | 
					 | 
				
			||||||
        fileinfo.close();
 | 
					 | 
				
			||||||
        return;
 | 
					 | 
				
			||||||
    }
 | 
					 | 
				
			||||||
    fileinfo.open(QIODevice::ReadOnly);
 | 
					 | 
				
			||||||
    QJsonParseError error;
 | 
					 | 
				
			||||||
    QJsonDocument doc = QJsonDocument::fromJson(fileinfo.readAll(), &error);
 | 
					 | 
				
			||||||
    if(error.error != QJsonParseError::NoError){
 | 
					 | 
				
			||||||
        QMessageBox::critical(this, "错误", "无法读取版本号!");
 | 
					 | 
				
			||||||
        qDebug() << error.errorString();
 | 
					 | 
				
			||||||
        fileinfo.close();
 | 
					 | 
				
			||||||
        return;
 | 
					 | 
				
			||||||
    }
 | 
					 | 
				
			||||||
    QJsonObject versionObject = doc.object();
 | 
					 | 
				
			||||||
    QJsonValue buildTime = versionObject.value("Time");
 | 
					 | 
				
			||||||
    QJsonValue versionValue = versionObject.value("Version");
 | 
					 | 
				
			||||||
    QJsonArray thank = versionObject.value("Thank").toArray();
 | 
					 | 
				
			||||||
    QString thankText = "";
 | 
					 | 
				
			||||||
    for (int i = 0; thank.count() > i; i++) {
 | 
					 | 
				
			||||||
        thankText += "<p>" + thank.at(i).toString() + "</p>\n";
 | 
					 | 
				
			||||||
        qDebug() << thank.at(i).toString();
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    }
 | 
					 | 
				
			||||||
    // 设置程序标题
 | 
					 | 
				
			||||||
    this->setWindowTitle(tr("Wine 运行器虚拟机安装工具 ") + versionValue.toString());
 | 
					 | 
				
			||||||
    // 读取谢明列表
 | 
					 | 
				
			||||||
    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() +
 | 
					 | 
				
			||||||
                               tr("<hr/><h1>谢明列表</h1>") + thankText);
 | 
					 | 
				
			||||||
    connect(ui->textBrowser_2, &QTextBrowser::anchorClicked, this, [=](const QUrl &link){
 | 
					 | 
				
			||||||
        QDesktopServices::openUrl(link);
 | 
					 | 
				
			||||||
    });
 | 
					 | 
				
			||||||
    connect(ui->textBrowser, &QTextBrowser::anchorClicked, this, [=](const QUrl &link){
 | 
					 | 
				
			||||||
        QDesktopServices::openUrl(link);
 | 
					 | 
				
			||||||
    });
 | 
					 | 
				
			||||||
    connect(ui->textBrowser_3, &QTextBrowser::anchorClicked, this, [=](const QUrl &link){
 | 
					 | 
				
			||||||
        QDesktopServices::openUrl(link);
 | 
					 | 
				
			||||||
    });
 | 
					 | 
				
			||||||
    // 设置标签栏图标
 | 
					 | 
				
			||||||
    ui->tabWidget->setTabIcon(1, QIcon::fromTheme(":/application-vnd.oasis.opendocument.text.svg"));
 | 
					 | 
				
			||||||
    // 设置窗口图标
 | 
					 | 
				
			||||||
    this->setWindowIcon(QIcon(":/deepin-wine-runner.svg"));
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
void MainWindow::ShowCPUMessage(){
 | 
					 | 
				
			||||||
    // 获取 CPU 占用率
 | 
					 | 
				
			||||||
    long cpuAll = 0;
 | 
					 | 
				
			||||||
    long cpuFree = 0;
 | 
					 | 
				
			||||||
    infoUtils::cpuRate(cpuAll, cpuFree);
 | 
					 | 
				
			||||||
    long cpu = ((cpuAll - m_cpuAll) - (cpuFree - m_cpuFree)) * 100 / (cpuAll - m_cpuAll);
 | 
					 | 
				
			||||||
    if(cpu > 100){
 | 
					 | 
				
			||||||
        // 处理异常值
 | 
					 | 
				
			||||||
        cpu = 100;
 | 
					 | 
				
			||||||
    }
 | 
					 | 
				
			||||||
    // 获取内存占用率
 | 
					 | 
				
			||||||
    long memory = 0;
 | 
					 | 
				
			||||||
    long memoryAll = 0;
 | 
					 | 
				
			||||||
    long swap = 0;
 | 
					 | 
				
			||||||
    long swapAll = 0;
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    infoUtils::memoryRate(memory, memoryAll, swap, swapAll);
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    // 获取开机时间
 | 
					 | 
				
			||||||
    double run,idle;
 | 
					 | 
				
			||||||
    infoUtils::uptime(run,idle);
 | 
					 | 
				
			||||||
    int time = qFloor(run);
 | 
					 | 
				
			||||||
    int ss = time % 60;
 | 
					 | 
				
			||||||
    int MM = (time % 3600) / 60;
 | 
					 | 
				
			||||||
    int hh = (time % 86400) / 3600;
 | 
					 | 
				
			||||||
    int dd = time / 86400;
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    QString info = "CPU: " + QString::number(cpu) + "%  内存: " +
 | 
					 | 
				
			||||||
            QString::number(memory * 100 / memoryAll) + "% " + QString::number(memory / 1024) + "MB/" + QString::number(memoryAll / 1024) + "MB" +
 | 
					 | 
				
			||||||
            " 开机时间: " + QString::number(dd) + "天 " + QString::number(hh) + ":" + QString::number(MM) + ":" + QString::number(ss);
 | 
					 | 
				
			||||||
    //qDebug() << cpuAll << "  " << cpuFree;
 | 
					 | 
				
			||||||
    if(!stopShowTime){
 | 
					 | 
				
			||||||
        ui->CPUValue->showMessage(info, 5000);
 | 
					 | 
				
			||||||
    }
 | 
					 | 
				
			||||||
    m_cpuAll = cpuAll;
 | 
					 | 
				
			||||||
    m_cpuFree = cpuFree;
 | 
					 | 
				
			||||||
    //ui->retranslateUi(this);
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
QString MainWindow::GetRunCommand(QString command){
 | 
					 | 
				
			||||||
    QProcess process;
 | 
					 | 
				
			||||||
    process.start(command);
 | 
					 | 
				
			||||||
    process.waitForStarted();
 | 
					 | 
				
			||||||
    process.waitForFinished();
 | 
					 | 
				
			||||||
    QString re = process.readAllStandardOutput();
 | 
					 | 
				
			||||||
    process.close();
 | 
					 | 
				
			||||||
    return re;
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
MainWindow::~MainWindow()
 | 
					 | 
				
			||||||
{
 | 
					 | 
				
			||||||
    delete ui;
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
void MainWindow::on_browser_clicked()
 | 
					 | 
				
			||||||
{
 | 
					 | 
				
			||||||
    // 浏览镜像文件
 | 
					 | 
				
			||||||
    QString filePath = QFileDialog::getOpenFileName(this, "选择 ISO 文件", QDir::homePath(), "ISO 镜像文件(*.iso);;所有文件(*.*)");
 | 
					 | 
				
			||||||
    if(filePath != ""){
 | 
					 | 
				
			||||||
        ui->isoPath->setText(filePath);
 | 
					 | 
				
			||||||
    }
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
void MainWindow::on_install_clicked()
 | 
					 | 
				
			||||||
{
 | 
					 | 
				
			||||||
    switch (ui->vmChooser->currentIndex()) {
 | 
					 | 
				
			||||||
    case 0:
 | 
					 | 
				
			||||||
        if(system("which qemu-system-x86_64")){
 | 
					 | 
				
			||||||
            if(QMessageBox::question(this, tr("提示"), tr("您似乎没有安装 Qemu,是否继续创建虚拟机?")) == QMessageBox::No){
 | 
					 | 
				
			||||||
                return;
 | 
					 | 
				
			||||||
            }
 | 
					 | 
				
			||||||
        }
 | 
					 | 
				
			||||||
        break;
 | 
					 | 
				
			||||||
    case 1:
 | 
					 | 
				
			||||||
        if(system("which vboxmanage")){
 | 
					 | 
				
			||||||
            if(QMessageBox::question(this, tr("提示"), tr("您似乎没有安装 VBox,是否继续创建虚拟机?")) == QMessageBox::No){
 | 
					 | 
				
			||||||
                return;
 | 
					 | 
				
			||||||
            }
 | 
					 | 
				
			||||||
        }
 | 
					 | 
				
			||||||
        break;
 | 
					 | 
				
			||||||
     case 8:
 | 
					 | 
				
			||||||
        if(system("which qemu-system-arm")){
 | 
					 | 
				
			||||||
            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, tr("提示"), tr("无法检测到 qemu-system-aarch64,是否继续创建虚拟机?")) == QMessageBox::No){
 | 
					 | 
				
			||||||
               return;
 | 
					 | 
				
			||||||
           }
 | 
					 | 
				
			||||||
       }
 | 
					 | 
				
			||||||
       break;
 | 
					 | 
				
			||||||
    }
 | 
					 | 
				
			||||||
    QFile file(QDir::homePath() + "/.config/deepin-wine-runner/QEMU-EFI");
 | 
					 | 
				
			||||||
    QFile archFile(QDir::homePath() + "/.config/deepin-wine-runner/QEMU-ARCH");
 | 
					 | 
				
			||||||
    QDir dir(QDir::homePath() + "/.config/deepin-wine-runner");
 | 
					 | 
				
			||||||
    archFile.open(QIODevice::WriteOnly);
 | 
					 | 
				
			||||||
    archFile.write("amd64");
 | 
					 | 
				
			||||||
    archFile.close();
 | 
					 | 
				
			||||||
    switch (ui->systemVersion->currentIndex()) {
 | 
					 | 
				
			||||||
        case 0:
 | 
					 | 
				
			||||||
            if(!QFile::exists(QCoreApplication::applicationDirPath() + "/Windows7X86Auto.iso")){
 | 
					 | 
				
			||||||
                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, 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, tr("提示"), tr("似乎无法找到 UEFI 固件,是否继续创建虚拟机?\nQemu 固件可以在“安装 Qemu”处安装")) == QMessageBox::No){
 | 
					 | 
				
			||||||
                    return;
 | 
					 | 
				
			||||||
                }
 | 
					 | 
				
			||||||
            }
 | 
					 | 
				
			||||||
            if(!dir.exists()){
 | 
					 | 
				
			||||||
                dir.mkpath(QDir::homePath() + "/.config/deepin-wine-runner");
 | 
					 | 
				
			||||||
            }
 | 
					 | 
				
			||||||
            if(!QFile::exists(QDir::homePath() + "/.config/deepin-wine-runner/QEMU-EFI")){
 | 
					 | 
				
			||||||
                // 写入用于识别的空文件
 | 
					 | 
				
			||||||
                file.open(QIODevice::WriteOnly);
 | 
					 | 
				
			||||||
                file.write("1");
 | 
					 | 
				
			||||||
                file.close();
 | 
					 | 
				
			||||||
            }
 | 
					 | 
				
			||||||
            break;
 | 
					 | 
				
			||||||
        case 4:
 | 
					 | 
				
			||||||
        case 5:
 | 
					 | 
				
			||||||
        case 6:
 | 
					 | 
				
			||||||
        case 7:
 | 
					 | 
				
			||||||
            if(ui->vmChooser->currentIndex() == 0){
 | 
					 | 
				
			||||||
                QMessageBox::warning(this, tr("提示"), tr("Qemu 不支持该选项!"));
 | 
					 | 
				
			||||||
                return;
 | 
					 | 
				
			||||||
            }
 | 
					 | 
				
			||||||
            break;
 | 
					 | 
				
			||||||
        case 8:
 | 
					 | 
				
			||||||
            if(ui->vmChooser->currentIndex() == 1){
 | 
					 | 
				
			||||||
                QMessageBox::warning(this, tr("提示"), tr("VirtualBox 不支持该选项!"));
 | 
					 | 
				
			||||||
                return;
 | 
					 | 
				
			||||||
            }
 | 
					 | 
				
			||||||
            archFile.open(QIODevice::WriteOnly);
 | 
					 | 
				
			||||||
            archFile.write("armhf");
 | 
					 | 
				
			||||||
            archFile.close();
 | 
					 | 
				
			||||||
            break;
 | 
					 | 
				
			||||||
        case 9:
 | 
					 | 
				
			||||||
            if(ui->vmChooser->currentIndex() == 1){
 | 
					 | 
				
			||||||
                QMessageBox::warning(this, tr("提示"), tr("VirtualBox 不支持该选项!"));
 | 
					 | 
				
			||||||
                return;
 | 
					 | 
				
			||||||
            }
 | 
					 | 
				
			||||||
            archFile.open(QIODevice::WriteOnly);
 | 
					 | 
				
			||||||
            archFile.write("aarch64");
 | 
					 | 
				
			||||||
            archFile.close();
 | 
					 | 
				
			||||||
            break;
 | 
					 | 
				
			||||||
        default:
 | 
					 | 
				
			||||||
            if(ui->vmChooser->currentIndex() == 0 && QFile::exists(QDir::homePath() + "/.config/deepin-wine-runner/QEMU-EFI")){
 | 
					 | 
				
			||||||
                QFile::remove(QDir::homePath() + "/.config/deepin-wine-runner/QEMU-EFI");
 | 
					 | 
				
			||||||
            }
 | 
					 | 
				
			||||||
    }
 | 
					 | 
				
			||||||
    buildvbox(ui->isoPath->text(), ui->systemVersion->currentIndex(), ui->vmChooser->currentIndex());
 | 
					 | 
				
			||||||
    ui->tabWidget->setCurrentIndex(1);
 | 
					 | 
				
			||||||
    stopShowTime = 1;
 | 
					 | 
				
			||||||
    ui->CPUValue->showMessage(tr("提示:目前已经尝试开启虚拟机,如果在一段时间后依旧还没看到虚拟机窗口开启,请在菜单栏查看虚拟机日志"), 10000);
 | 
					 | 
				
			||||||
    return;
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
void MainWindow::on_getvbox_clicked()
 | 
					 | 
				
			||||||
{
 | 
					 | 
				
			||||||
    QDesktopServices::openUrl(QUrl("https://www.virtualbox.org/wiki/Linux_Downloads"));
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
void MainWindow::on_getQemu_clicked()
 | 
					 | 
				
			||||||
{
 | 
					 | 
				
			||||||
    system(("python3 '" + QCoreApplication::applicationDirPath() + "/../RunCommandWithTerminal.py' pkexec '" + QCoreApplication::applicationDirPath() + "/../QemuSystemInstall.sh'").toLatin1());
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
void MainWindow::on_vmChooser_currentIndexChanged(int index)
 | 
					 | 
				
			||||||
{
 | 
					 | 
				
			||||||
    ui->qemuSetting->setDisabled(index);
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
void MainWindow::on_qemuSetting_clicked()
 | 
					 | 
				
			||||||
{
 | 
					 | 
				
			||||||
    QemuSetting *show = new QemuSetting();
 | 
					 | 
				
			||||||
    show->show();
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
void MainWindow::on_addQemuDisk_triggered()
 | 
					 | 
				
			||||||
{
 | 
					 | 
				
			||||||
    if(QFile::exists(QDir::homePath() + "/Qemu/Windows/Windows.qcow2")){
 | 
					 | 
				
			||||||
        if(QMessageBox::question(this, tr("提示"), tr("磁盘文件已存在,是否覆盖?\n覆盖后将无法恢复!")) == QMessageBox::No){
 | 
					 | 
				
			||||||
            return;
 | 
					 | 
				
			||||||
        }
 | 
					 | 
				
			||||||
    }
 | 
					 | 
				
			||||||
    QString path = QFileDialog::getOpenFileName(this, tr("选择 Qemu 镜像"), QDir::homePath(), tr("Qemu镜像(*.qcow2 *.img *.raw *.qcow *.qed *.vdi *.vhdx *.vmdk);;所有文件(*.*)"));
 | 
					 | 
				
			||||||
    qDebug() << path;
 | 
					 | 
				
			||||||
    if(path == ""){
 | 
					 | 
				
			||||||
        return;
 | 
					 | 
				
			||||||
    }
 | 
					 | 
				
			||||||
    QDir dir(QDir::homePath() + "/Qemu/Windows");
 | 
					 | 
				
			||||||
    if(!dir.exists()){
 | 
					 | 
				
			||||||
        dir.mkpath(QDir::homePath() + "/Qemu/Windows");
 | 
					 | 
				
			||||||
    }
 | 
					 | 
				
			||||||
    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, tr("提示"), tr("添加错误!"));
 | 
					 | 
				
			||||||
            return;
 | 
					 | 
				
			||||||
        }
 | 
					 | 
				
			||||||
    }
 | 
					 | 
				
			||||||
    else{
 | 
					 | 
				
			||||||
        if(!QFile::copy(path, QDir::homePath() + "/Qemu/Windows/Windows.qcow2")){
 | 
					 | 
				
			||||||
            QMessageBox::critical(this, tr("提示"), tr("添加错误!"));
 | 
					 | 
				
			||||||
            return;
 | 
					 | 
				
			||||||
        }
 | 
					 | 
				
			||||||
    }
 | 
					 | 
				
			||||||
    QMessageBox::information(this, tr("提示"), tr("添加完成!"));
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
void MainWindow::on_delQemuDisk_triggered()
 | 
					 | 
				
			||||||
{
 | 
					 | 
				
			||||||
    if(!QFile::exists(QDir::homePath() + "/Qemu/Windows/Windows.qcow2")){
 | 
					 | 
				
			||||||
        QMessageBox::information(this, tr("提示"), tr("不存在磁盘文件,无法导出"));
 | 
					 | 
				
			||||||
        return;
 | 
					 | 
				
			||||||
    }
 | 
					 | 
				
			||||||
    std::system(("xdg-open \"" + QDir::homePath() + "/Qemu/Windows/\"").toUtf8());
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
void MainWindow::on_addQemuDiskButton_clicked()
 | 
					 | 
				
			||||||
{
 | 
					 | 
				
			||||||
    MainWindow::on_addQemuDisk_triggered();
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
void MainWindow::on_saveQemuDiskButton_clicked()
 | 
					 | 
				
			||||||
{
 | 
					 | 
				
			||||||
    MainWindow::on_delQemuDisk_triggered();
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
void MainWindow::on_delQemuDiskButton_clicked()
 | 
					 | 
				
			||||||
{
 | 
					 | 
				
			||||||
    if(!QFile::exists(QDir::homePath() + "/Qemu/Windows/Windows.qcow2")){
 | 
					 | 
				
			||||||
        QMessageBox::information(this, tr("提示"), tr("不存在磁盘文件,无法移除"));
 | 
					 | 
				
			||||||
        return;
 | 
					 | 
				
			||||||
    }
 | 
					 | 
				
			||||||
    if(QMessageBox::question(this, tr("提示"), tr("是否删除?\n删除后将无法恢复!")) == QMessageBox::No){
 | 
					 | 
				
			||||||
        return;
 | 
					 | 
				
			||||||
    }
 | 
					 | 
				
			||||||
    if(!QFile::remove(QDir::homePath() + "/Qemu/Windows/Windows.qcow2")){
 | 
					 | 
				
			||||||
        QMessageBox::critical(this, tr("提示"), tr("移除失败"));
 | 
					 | 
				
			||||||
        return;
 | 
					 | 
				
			||||||
    }
 | 
					 | 
				
			||||||
    QMessageBox::information(this, tr("提示"), tr("移除成功"));
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
void MainWindow::on_kvmTest_clicked()
 | 
					 | 
				
			||||||
{
 | 
					 | 
				
			||||||
    if(system("which kvm-ok")&& !QFile::exists(QCoreApplication::applicationDirPath() + "/kvm-ok")){
 | 
					 | 
				
			||||||
        QMessageBox::critical(this, tr("错误"), tr("未识别到命令 kvm-ok\n可以使用命令 sudo apt install cpu-checker 安装"));
 | 
					 | 
				
			||||||
        return;
 | 
					 | 
				
			||||||
    }
 | 
					 | 
				
			||||||
    QString kvm_ok_path = "kvm-ok";
 | 
					 | 
				
			||||||
    if(!system("which kvm-ok")){
 | 
					 | 
				
			||||||
        kvm_ok_path = "kvm-ok";
 | 
					 | 
				
			||||||
    }
 | 
					 | 
				
			||||||
    else if(QFile::exists(QCoreApplication::applicationDirPath() + "/kvm-ok")){
 | 
					 | 
				
			||||||
        kvm_ok_path = QCoreApplication::applicationDirPath() + "/kvm-ok";
 | 
					 | 
				
			||||||
    }
 | 
					 | 
				
			||||||
    qDebug() << tr("使用") << kvm_ok_path;
 | 
					 | 
				
			||||||
    QProcess process;
 | 
					 | 
				
			||||||
    process.start(kvm_ok_path);
 | 
					 | 
				
			||||||
    process.waitForStarted();
 | 
					 | 
				
			||||||
    process.waitForFinished();
 | 
					 | 
				
			||||||
    if(process.exitCode()){
 | 
					 | 
				
			||||||
        QMessageBox::critical(this, tr("错误"), tr("您的系统不支持使用 kvm:\n") + process.readAll());
 | 
					 | 
				
			||||||
        return;
 | 
					 | 
				
			||||||
    }
 | 
					 | 
				
			||||||
    QMessageBox::information(this, tr("提示"), tr("您的系统支持使用 kvm:\n") + process.readAll());
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
void MainWindow::on_actionVMLog_triggered(){}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
void MainWindow::on_actionVMRunlLog_triggered()
 | 
					 | 
				
			||||||
{
 | 
					 | 
				
			||||||
    QFile file("/tmp/windows-virtual-machine-installer-for-wine-runner-run.log");
 | 
					 | 
				
			||||||
    if(!file.exists()){
 | 
					 | 
				
			||||||
        QMessageBox::information(this, tr("提示"), tr("没有日志文件"));
 | 
					 | 
				
			||||||
        return;
 | 
					 | 
				
			||||||
    }
 | 
					 | 
				
			||||||
    file.open(QIODevice::ReadOnly);
 | 
					 | 
				
			||||||
    QInputDialog::getMultiLineText(this, tr("运行日志"), tr("虚拟机运行日志"), file.readAll());
 | 
					 | 
				
			||||||
    file.close();
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
void MainWindow::on_actionVMTest_triggered()
 | 
					 | 
				
			||||||
{
 | 
					 | 
				
			||||||
    // 运行 Demo
 | 
					 | 
				
			||||||
    if(QFile::exists(QCoreApplication::applicationDirPath() + "/test.qcow2")){
 | 
					 | 
				
			||||||
        // 优先使用本地的磁盘
 | 
					 | 
				
			||||||
        system(("qemu-system-i386 --hda '" + QCoreApplication::applicationDirPath() + "/test.qcow2' -rtc base=localtime > /tmp/windows-virtual-machine-installer-for-wine-runner-run.log 2>&1").toUtf8());
 | 
					 | 
				
			||||||
        return;
 | 
					 | 
				
			||||||
    }
 | 
					 | 
				
			||||||
    // 写入 disk 文件
 | 
					 | 
				
			||||||
    QFile file(":/TestDisk/test.qcow2");
 | 
					 | 
				
			||||||
    // 计算随机数
 | 
					 | 
				
			||||||
    QFile writeFile("/tmp/indows-virtual-machine-installer-for-wine-runner-test-disk.qcow2");
 | 
					 | 
				
			||||||
    file.open(QIODevice::ReadOnly);
 | 
					 | 
				
			||||||
    writeFile.open(QIODevice::WriteOnly);
 | 
					 | 
				
			||||||
    writeFile.write(file.readAll());
 | 
					 | 
				
			||||||
    file.close();
 | 
					 | 
				
			||||||
    writeFile.close();
 | 
					 | 
				
			||||||
    system("qemu-system-i386 --hda /tmp/indows-virtual-machine-installer-for-wine-runner-test-disk.qcow2 -rtc base=localtime > /tmp/windows-virtual-machine-installer-for-wine-runner-run.log 2>&1");
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
void MainWindow::on_actionVMInstallLog_triggered()
 | 
					 | 
				
			||||||
{
 | 
					 | 
				
			||||||
    QFile file("/tmp/windows-virtual-machine-installer-for-wine-runner-install.log");
 | 
					 | 
				
			||||||
    if(!file.exists()){
 | 
					 | 
				
			||||||
        QMessageBox::information(this, tr("提示"), tr("没有日志文件"));
 | 
					 | 
				
			||||||
        return;
 | 
					 | 
				
			||||||
    }
 | 
					 | 
				
			||||||
    file.open(QIODevice::ReadOnly);
 | 
					 | 
				
			||||||
    QInputDialog::getMultiLineText(this, tr("安装日志"), tr("虚拟机安装日志"),file.readAll());
 | 
					 | 
				
			||||||
    file.close();
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
void MainWindow::on_action_StopVirtualBox_triggered()
 | 
					 | 
				
			||||||
{
 | 
					 | 
				
			||||||
    vbox vmControl("");
 | 
					 | 
				
			||||||
    vmControl.Stop();
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
void MainWindow::on_action_StopQemu_triggered()
 | 
					 | 
				
			||||||
{
 | 
					 | 
				
			||||||
    qemu vmControl("");
 | 
					 | 
				
			||||||
    vmControl.Stop();
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
void MainWindow::on_actionQemuDiskAddSpace_triggered()
 | 
					 | 
				
			||||||
{
 | 
					 | 
				
			||||||
    double data = QInputDialog::getDouble(this, tr("磁盘扩容"), "输入扩容多少GB\n注:1、扩容所需要的时间较长,程序可能会出现假死的情况,请不要关闭否则会导致虚拟磁盘损坏\n2、扩展后需要自行在虚拟机使用 Deepin Community Live CD、Live CD、Windows PE\n等工具调整系统分区大小才能使用");
 | 
					 | 
				
			||||||
    if(data <= 0) {
 | 
					 | 
				
			||||||
        return;
 | 
					 | 
				
			||||||
    }
 | 
					 | 
				
			||||||
    // 开始扩容
 | 
					 | 
				
			||||||
    int result = qemu("").AddDiskSpace(QDir::homePath() + "/Qemu/Windows/Windows.qcow2", data);
 | 
					 | 
				
			||||||
    qDebug() << "Exit Code: " << result;
 | 
					 | 
				
			||||||
    if(result) {
 | 
					 | 
				
			||||||
        QMessageBox::critical(this, tr("错误"), tr("扩容失败!"));
 | 
					 | 
				
			||||||
        return;
 | 
					 | 
				
			||||||
    }
 | 
					 | 
				
			||||||
    QMessageBox::information(this, tr("提示"), tr("扩容完成!"));
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
void MainWindow::on_getDCLC_triggered()
 | 
					 | 
				
			||||||
{
 | 
					 | 
				
			||||||
    QDesktopServices::openUrl(QUrl("https://github.com/gfdgd-xi/deepin-community-live-cd/"));
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
@ -1,72 +0,0 @@
 | 
				
			|||||||
/*
 | 
					 | 
				
			||||||
 * gfdgd xi
 | 
					 | 
				
			||||||
 * 依照 GPLV3 开源
 | 
					 | 
				
			||||||
 */
 | 
					 | 
				
			||||||
#ifndef MAINWINDOW_H
 | 
					 | 
				
			||||||
#define MAINWINDOW_H
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
#include <QMainWindow>
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
namespace Ui {
 | 
					 | 
				
			||||||
class MainWindow;
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
class MainWindow : public QMainWindow
 | 
					 | 
				
			||||||
{
 | 
					 | 
				
			||||||
    Q_OBJECT
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
public:
 | 
					 | 
				
			||||||
    explicit MainWindow(QWidget *parent = nullptr);
 | 
					 | 
				
			||||||
    ~MainWindow();
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
private slots:
 | 
					 | 
				
			||||||
    void ShowCPUMessage();
 | 
					 | 
				
			||||||
    void on_browser_clicked();
 | 
					 | 
				
			||||||
    QString GetRunCommand(QString command);
 | 
					 | 
				
			||||||
    void on_install_clicked();
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    void on_getvbox_clicked();
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    void on_getQemu_clicked();
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    void on_vmChooser_currentIndexChanged(int index);
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    void on_qemuSetting_clicked();
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    void on_addQemuDisk_triggered();
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    void on_delQemuDisk_triggered();
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    void on_addQemuDiskButton_clicked();
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    void on_saveQemuDiskButton_clicked();
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    void on_delQemuDiskButton_clicked();
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    void on_kvmTest_clicked();
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    void on_actionVMLog_triggered();
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    void on_actionVMRunlLog_triggered();
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    void on_actionVMTest_triggered();
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    void on_actionVMInstallLog_triggered();
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    void on_action_StopVirtualBox_triggered();
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    void on_action_StopQemu_triggered();
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    void on_actionQemuDiskAddSpace_triggered();
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    void on_getDCLC_triggered();
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
private:
 | 
					 | 
				
			||||||
    bool stopShowTime = 0;
 | 
					 | 
				
			||||||
    Ui::MainWindow *ui;
 | 
					 | 
				
			||||||
    long m_cpuAll;
 | 
					 | 
				
			||||||
    long m_cpuFree;
 | 
					 | 
				
			||||||
};
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
#endif // MAINWINDOW_H
 | 
					 | 
				
			||||||
@ -1,355 +0,0 @@
 | 
				
			|||||||
/*
 | 
					 | 
				
			||||||
 * gfdgd xi
 | 
					 | 
				
			||||||
 */
 | 
					 | 
				
			||||||
#include "qemu.h"
 | 
					 | 
				
			||||||
#include <QDir>
 | 
					 | 
				
			||||||
#include <QFile>
 | 
					 | 
				
			||||||
#include <QCoreApplication>
 | 
					 | 
				
			||||||
#include "command.h"
 | 
					 | 
				
			||||||
#include <QMessageBox>
 | 
					 | 
				
			||||||
#include <QProcess>
 | 
					 | 
				
			||||||
#include <QDebug>
 | 
					 | 
				
			||||||
#include <iostream>
 | 
					 | 
				
			||||||
using namespace std;
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
qemu::qemu(QString name, QString managerPath)
 | 
					 | 
				
			||||||
{
 | 
					 | 
				
			||||||
    if(!QFile::exists(name)){
 | 
					 | 
				
			||||||
        this->name = QDir::homePath() + "/Qemu/" + name;
 | 
					 | 
				
			||||||
    }
 | 
					 | 
				
			||||||
    else{
 | 
					 | 
				
			||||||
        this->name = name;
 | 
					 | 
				
			||||||
    }
 | 
					 | 
				
			||||||
    this->managerPath = managerPath;
 | 
					 | 
				
			||||||
    //Command command = Command();
 | 
					 | 
				
			||||||
    QString qemuPath = "qemu-system-i386";
 | 
					 | 
				
			||||||
    if(QFile::exists("/opt/apps/deepin-wine-runner-qemu-system-extra/files/run.sh")) {
 | 
					 | 
				
			||||||
        // 如果存在拓展 Qemu,则调用此
 | 
					 | 
				
			||||||
        qemuPath = "/opt/apps/deepin-wine-runner-qemu-system-extra/files/run.sh qemu-system-i386";
 | 
					 | 
				
			||||||
    }
 | 
					 | 
				
			||||||
    this->vboxVersion = Command().GetCommand(qemuPath + " --version");
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
int qemu::Create(QString type)
 | 
					 | 
				
			||||||
{
 | 
					 | 
				
			||||||
    if(!QFile::exists(this->name)){
 | 
					 | 
				
			||||||
        QDir dir(this->name);
 | 
					 | 
				
			||||||
        dir.mkpath(this->name);
 | 
					 | 
				
			||||||
    }
 | 
					 | 
				
			||||||
    return 0;
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
int qemu::CreateDisk(QString path, int size)
 | 
					 | 
				
			||||||
{
 | 
					 | 
				
			||||||
    if(QFile::exists(path)){
 | 
					 | 
				
			||||||
        return 0;
 | 
					 | 
				
			||||||
    }
 | 
					 | 
				
			||||||
    return system(("qemu-img create -f qcow2 '" + path + "' " + QString::number(size) + "M").toLatin1());
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
int qemu::CreateDiskControl(QString controlName)
 | 
					 | 
				
			||||||
{
 | 
					 | 
				
			||||||
    return 0;
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
int qemu::MountDisk(QString diskPath, QString controlName, int port, int device)
 | 
					 | 
				
			||||||
{
 | 
					 | 
				
			||||||
    commandOption += "-drive 'file=" + diskPath + ",if=ide,index=" + QString::number(device) + "' ";
 | 
					 | 
				
			||||||
    return 0;
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
int qemu::MountISO(QString isoPath, QString controlName, int port, int device)
 | 
					 | 
				
			||||||
{
 | 
					 | 
				
			||||||
    commandOption += "-drive 'media=cdrom,file=" + isoPath + ",if=ide,index=" + QString::number(device) + "' ";
 | 
					 | 
				
			||||||
    return 0;
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
int qemu::BootFirst(QString bootDrive)
 | 
					 | 
				
			||||||
{
 | 
					 | 
				
			||||||
    commandOption += "-boot '" + bootDrive + "' ";
 | 
					 | 
				
			||||||
    return 0;
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
int qemu::SetNetBridge(QString netDriver)
 | 
					 | 
				
			||||||
{
 | 
					 | 
				
			||||||
    return 0;
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
int qemu::SetCPU(int number, int cpuNum, int coreNum)
 | 
					 | 
				
			||||||
{
 | 
					 | 
				
			||||||
    // commandOption += "-smp " + QString::number(number) + " ";
 | 
					 | 
				
			||||||
    // 调整调用方法
 | 
					 | 
				
			||||||
    //qDebug() << number << " " << cpuNum << " " << coreNum;
 | 
					 | 
				
			||||||
    qDebug() << "Socket: " << cpuNum;
 | 
					 | 
				
			||||||
    qDebug() << "Core: " << coreNum;
 | 
					 | 
				
			||||||
    qDebug() << "Threads: " << number;
 | 
					 | 
				
			||||||
    commandOption += "-smp " + QString::number(number) + ",sockets=" + QString::number(cpuNum) + ",cores=" + QString::number(coreNum / cpuNum) + ",threads=" + QString::number(number / cpuNum / coreNum) + " ";
 | 
					 | 
				
			||||||
    return 0;
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
int qemu::SetMemory(int memory)
 | 
					 | 
				
			||||||
{
 | 
					 | 
				
			||||||
    commandOption += "-m " + QString::number(memory) + "M ";
 | 
					 | 
				
			||||||
    return 0;
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
int qemu::SetRemote(bool setting)
 | 
					 | 
				
			||||||
{
 | 
					 | 
				
			||||||
    return 0;
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
int qemu::SetRemoteConnectSetting(int port)
 | 
					 | 
				
			||||||
{
 | 
					 | 
				
			||||||
    return 0;
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
int qemu::MountMainDisk(QString diskPath)
 | 
					 | 
				
			||||||
{
 | 
					 | 
				
			||||||
    commandOption += " --hda '" + diskPath + "' ";
 | 
					 | 
				
			||||||
    return 0;
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
int qemu::StartArmhf()
 | 
					 | 
				
			||||||
{
 | 
					 | 
				
			||||||
    qDebug() << commandOption;
 | 
					 | 
				
			||||||
    QString qemuPath = "qemu-system-arm";
 | 
					 | 
				
			||||||
    if(QFile::exists("/opt/apps/deepin-wine-runner-qemu-system-extra/files/run.sh")) {
 | 
					 | 
				
			||||||
        // 如果存在拓展 Qemu,则调用此
 | 
					 | 
				
			||||||
        qemuPath = "/opt/apps/deepin-wine-runner-qemu-system-extra/files/run.sh qemu-system-arm";
 | 
					 | 
				
			||||||
    }
 | 
					 | 
				
			||||||
    if(Command().GetCommand("arch").replace("\n", "").replace(" ", "") == "aarch64" && !system((QCoreApplication::applicationDirPath() + "/kvm-ok").toUtf8())){
 | 
					 | 
				
			||||||
        return system((qemuPath + " --boot 'splash=" + GetBootLogoPath() + ",order=d,menu=on,splash-time=2000' -display vnc=:5 -display gtk --enable-kvm -cpu host -M virt " + commandOption + " -device virtio-gpu-pci -device nec-usb-xhci,id=xhci,addr=0x1b -device usb-tablet,id=tablet,bus=xhci.0,port=1 -device usb-kbd,id=keyboard,bus=xhci.0,port=2 > /tmp/windows-virtual-machine-installer-for-wine-runner-install.log 2>&1 &").toLatin1());
 | 
					 | 
				
			||||||
    }
 | 
					 | 
				
			||||||
    return system((qemuPath + " --boot 'splash=" + GetBootLogoPath() + ",order=d,menu=on,splash-time=2000'  -display vnc=:5 -display gtk -cpu max -M virt " + commandOption + " -device virtio-gpu-pci -device nec-usb-xhci,id=xhci,addr=0x1b -device usb-tablet,id=tablet,bus=xhci.0,port=1 -device usb-kbd,id=keyboard,bus=xhci.0,port=2 > /tmp/windows-virtual-machine-installer-for-wine-runner-install.log 2>&1 &").toLatin1());
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
int qemu::StartAarch64()
 | 
					 | 
				
			||||||
{
 | 
					 | 
				
			||||||
    QString bootScreenLogo = "";
 | 
					 | 
				
			||||||
    QString qemuPath = "qemu-system-aarch64";
 | 
					 | 
				
			||||||
    // 判断 boot 文件是否存在
 | 
					 | 
				
			||||||
    if(QFile::exists(QCoreApplication::applicationDirPath() + "/boot.jpg")) {
 | 
					 | 
				
			||||||
        bootScreenLogo = QCoreApplication::applicationDirPath() + "/boot.jpg";
 | 
					 | 
				
			||||||
    }
 | 
					 | 
				
			||||||
    else {
 | 
					 | 
				
			||||||
        // 写入 logo
 | 
					 | 
				
			||||||
        QFile::copy(":/boot.jpg", "/tmp/deep-wine-runner-boot.jpg");
 | 
					 | 
				
			||||||
        bootScreenLogo = "/tmp/deep-wine-runner-boot.jpg";
 | 
					 | 
				
			||||||
    }
 | 
					 | 
				
			||||||
    if(QFile::exists("/opt/apps/deepin-wine-runner-qemu-system-extra/files/run.sh")) {
 | 
					 | 
				
			||||||
        // 如果存在拓展 Qemu,则调用此
 | 
					 | 
				
			||||||
        qemuPath = "/opt/apps/deepin-wine-runner-qemu-system-extra/files/run.sh qemu-system-aarch64";
 | 
					 | 
				
			||||||
    }
 | 
					 | 
				
			||||||
    qDebug() << commandOption;
 | 
					 | 
				
			||||||
    if(Command().GetCommand("arch").replace("\n", "").replace(" ", "") == "aarch64" && !system((QCoreApplication::applicationDirPath() + "/kvm-ok").toUtf8())){
 | 
					 | 
				
			||||||
        return system((qemuPath + " --boot 'splash=" + GetBootLogoPath() + ",order=d,menu=on,splash-time=2000' -display vnc=:5 -display gtk --enable-kvm -cpu host -M virt " + commandOption + " -device virtio-gpu-pci -device nec-usb-xhci,id=xhci,addr=0x1b -device usb-tablet,id=tablet,bus=xhci.0,port=1 -device usb-kbd,id=keyboard,bus=xhci.0,port=2 > /tmp/windows-virtual-machine-installer-for-wine-runner-install.log 2>&1 &").toLatin1());
 | 
					 | 
				
			||||||
    }
 | 
					 | 
				
			||||||
    return system((qemuPath + " --boot 'splash=" + GetBootLogoPath() + ",order=d,menu=on,splash-time=2000'  -display vnc=:5 -display gtk -cpu max -M virt " + commandOption + " -device virtio-gpu-pci -device nec-usb-xhci,id=xhci,addr=0x1b -device usb-tablet,id=tablet,bus=xhci.0,port=1 -device usb-kbd,id=keyboard,bus=xhci.0,port=2 > /tmp/windows-virtual-machine-installer-for-wine-runner-install.log 2>&1 &").toLatin1());
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
int qemu::StartLoong64()
 | 
					 | 
				
			||||||
{
 | 
					 | 
				
			||||||
    return 1;
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
int qemu::Start(bool unShown)
 | 
					 | 
				
			||||||
{
 | 
					 | 
				
			||||||
    QString newCommandOption = commandOption;
 | 
					 | 
				
			||||||
    QString qemuPath = "qemu-system-x86_64";
 | 
					 | 
				
			||||||
    qDebug() << GetBootLogoPath();
 | 
					 | 
				
			||||||
    if(isUEFI) {
 | 
					 | 
				
			||||||
        newCommandOption += " -vga none -device virtio-gpu-pci -device nec-usb-xhci,id=xhci,addr=0x1b -device usb-tablet,id=tablet,bus=xhci.0,port=1 -device usb-kbd,id=keyboard,bus=xhci.0,port=2 ";
 | 
					 | 
				
			||||||
    }
 | 
					 | 
				
			||||||
    else {
 | 
					 | 
				
			||||||
        newCommandOption += " -vga virtio -device nec-usb-xhci,id=xhci,addr=0x1b -device usb-tablet,id=tablet,bus=xhci.0,port=1 ";
 | 
					 | 
				
			||||||
    }
 | 
					 | 
				
			||||||
    // UOS 3a4000 使用程序自带的 qemu
 | 
					 | 
				
			||||||
    QString info = SystemInfo().toLower();
 | 
					 | 
				
			||||||
    if(info.contains("uos") || info.contains("unio")) {
 | 
					 | 
				
			||||||
        // 判断架构
 | 
					 | 
				
			||||||
        QString arch = GetArch();
 | 
					 | 
				
			||||||
        if(arch == "mips64" || arch == "mipsel64") {
 | 
					 | 
				
			||||||
            qemuPath = "bwrap --dev-bind / / --bind '" + QCoreApplication::applicationDirPath() + "/MipsQemu/usr/lib/mips64el-linux-gnuabi64/qemu/ui-gtk.so' /usr/lib/mips64el-linux-gnuabi64/qemu/ui-gtk.so '" + QCoreApplication::applicationDirPath() + "/MipsQemu/usr/bin/qemu-system-x86_64' ";
 | 
					 | 
				
			||||||
        }
 | 
					 | 
				
			||||||
    }
 | 
					 | 
				
			||||||
    if(QFile::exists("/opt/apps/deepin-wine-runner-qemu-system-extra/files/run.sh")) {
 | 
					 | 
				
			||||||
        // 如果存在拓展 Qemu,则调用此
 | 
					 | 
				
			||||||
        qemuPath = "/opt/apps/deepin-wine-runner-qemu-system-extra/files/run.sh qemu-system-x86_64";
 | 
					 | 
				
			||||||
    }
 | 
					 | 
				
			||||||
    qDebug() << commandOption;
 | 
					 | 
				
			||||||
    if(Command().GetCommand("arch").replace("\n", "").replace(" ", "") == "x86_64" && !system((QCoreApplication::applicationDirPath() + "/kvm-ok").toUtf8())){
 | 
					 | 
				
			||||||
        return system((qemuPath + " --boot 'splash=" + GetBootLogoPath() + ",order=d,menu=on,splash-time=2000' -display vnc=:5 -display gtk --enable-kvm -cpu host " + newCommandOption + " > /tmp/windows-virtual-machine-installer-for-wine-runner-install.log 2>&1 &").toLatin1());
 | 
					 | 
				
			||||||
    }
 | 
					 | 
				
			||||||
    return system((qemuPath + " --boot 'splash=" + GetBootLogoPath() + ",order=d,menu=on,splash-time=2000' -display vnc=:5 -display gtk -nic model=rtl8139 " + newCommandOption + " > /tmp/windows-virtual-machine-installer-for-wine-runner-install.log 2>&1 &").toLatin1());
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
int qemu::Stop()
 | 
					 | 
				
			||||||
{
 | 
					 | 
				
			||||||
    system("killall qemu-system-x86_64 -9");
 | 
					 | 
				
			||||||
    system("killall qemu-system-aarch64 -9");
 | 
					 | 
				
			||||||
    system("killall qemu-system-arm -9");
 | 
					 | 
				
			||||||
    system("killall kvm -9");
 | 
					 | 
				
			||||||
    return 0;
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
int qemu::Delete()
 | 
					 | 
				
			||||||
{
 | 
					 | 
				
			||||||
    return system(("rm -rfv '" + name + "'").toLatin1());
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
int qemu::SetDisplayMemory(int memory)
 | 
					 | 
				
			||||||
{
 | 
					 | 
				
			||||||
    return 0;
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
int qemu::InstallGuessAdditions(QString controlName, int port, int device)
 | 
					 | 
				
			||||||
{
 | 
					 | 
				
			||||||
    return 0;
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
int qemu::EnabledAudio()
 | 
					 | 
				
			||||||
{
 | 
					 | 
				
			||||||
    commandOption += "-device AC97 -device ES1370 -device intel-hda -device hda-duplex ";
 | 
					 | 
				
			||||||
    return 0;
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
int qemu::EnabledClipboardMode()
 | 
					 | 
				
			||||||
{
 | 
					 | 
				
			||||||
    return 0;
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
int qemu::EnabledDraganddrop()
 | 
					 | 
				
			||||||
{
 | 
					 | 
				
			||||||
    return 0;
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
int qemu::ShareFile(QString name, QString path)
 | 
					 | 
				
			||||||
{
 | 
					 | 
				
			||||||
    return 0;
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
int qemu::SetVBoxSVGA()
 | 
					 | 
				
			||||||
{
 | 
					 | 
				
			||||||
    return 0;
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
int qemu::SetMousePS2()
 | 
					 | 
				
			||||||
{
 | 
					 | 
				
			||||||
    return 0;
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
int qemu::SetKeyboardPS2()
 | 
					 | 
				
			||||||
{
 | 
					 | 
				
			||||||
    return 0;
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
int qemu::OpenUSB()
 | 
					 | 
				
			||||||
{
 | 
					 | 
				
			||||||
    return 0;
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
int qemu::UseAarch64EFI()
 | 
					 | 
				
			||||||
{
 | 
					 | 
				
			||||||
    if(QFile::exists("/usr/share/qemu-efi-aarch64/QEMU_EFI.fd")){
 | 
					 | 
				
			||||||
        commandOption += "--bios /usr/share/qemu-efi-aarch64/QEMU_EFI.fd ";
 | 
					 | 
				
			||||||
        return 0;
 | 
					 | 
				
			||||||
    }
 | 
					 | 
				
			||||||
    if(QFile::exists(QCoreApplication::applicationDirPath() + "/QEMU_AARCH64_EFI.fd")){
 | 
					 | 
				
			||||||
            commandOption += "--bios '" + QCoreApplication::applicationDirPath() + "/QEMU_AARCH64_EFI.fd' ";
 | 
					 | 
				
			||||||
            return 0;
 | 
					 | 
				
			||||||
    }
 | 
					 | 
				
			||||||
    return 1;
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
int qemu::UseArmhfEFI()
 | 
					 | 
				
			||||||
{
 | 
					 | 
				
			||||||
    if(QFile::exists("/usr/share/AAVMF/AAVMF32_CODE.fd")){
 | 
					 | 
				
			||||||
        commandOption += "--bios /usr/share/AAVMF/AAVMF32_CODE.fd ";
 | 
					 | 
				
			||||||
        return 0;
 | 
					 | 
				
			||||||
    }
 | 
					 | 
				
			||||||
    if(QFile::exists(QCoreApplication::applicationDirPath() + "/AAVMF32_CODE.fd")){
 | 
					 | 
				
			||||||
            commandOption += "--bios '" + QCoreApplication::applicationDirPath() + "/AAVMF32_CODE.fd' ";
 | 
					 | 
				
			||||||
            return 0;
 | 
					 | 
				
			||||||
    }
 | 
					 | 
				
			||||||
    return 1;
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
int qemu::UseLoongarch64EFI()
 | 
					 | 
				
			||||||
{
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
int qemu::UseOtherEFI(QString fdFilePath)
 | 
					 | 
				
			||||||
{
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
int qemu::EnabledUEFI(bool status)
 | 
					 | 
				
			||||||
{
 | 
					 | 
				
			||||||
    isUEFI = status;
 | 
					 | 
				
			||||||
    if(!status){
 | 
					 | 
				
			||||||
        return 0;
 | 
					 | 
				
			||||||
    }
 | 
					 | 
				
			||||||
    if(QFile::exists("/usr/share/qemu/OVMF.fd")){
 | 
					 | 
				
			||||||
        commandOption += "--bios /usr/share/qemu/OVMF.fd ";
 | 
					 | 
				
			||||||
        return 0;
 | 
					 | 
				
			||||||
    }
 | 
					 | 
				
			||||||
    if(QFile::exists(QCoreApplication::applicationDirPath() + "/OVMF.fd")){
 | 
					 | 
				
			||||||
        commandOption += "--bios '" + QCoreApplication::applicationDirPath() + "/OVMF.fd' ";
 | 
					 | 
				
			||||||
        return 0;
 | 
					 | 
				
			||||||
    }
 | 
					 | 
				
			||||||
    return 1;
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
int qemu::MountMainISO(QString isoPath)
 | 
					 | 
				
			||||||
{
 | 
					 | 
				
			||||||
    commandOption += "--cdrom '" + isoPath + "' ";
 | 
					 | 
				
			||||||
    return 0;
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
int qemu::AutoInstall(QString iso)
 | 
					 | 
				
			||||||
{
 | 
					 | 
				
			||||||
    return 0;
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
int qemu::AddDiskSpace(QString path, double data)
 | 
					 | 
				
			||||||
{
 | 
					 | 
				
			||||||
    return system(("qemu-img resize '" + path + "' +" + QString::number(data) + "G").toUtf8());
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
QString qemu::GetBootLogoPath()
 | 
					 | 
				
			||||||
{
 | 
					 | 
				
			||||||
    QString bootScreenLogo = "";
 | 
					 | 
				
			||||||
    // 判断 boot 文件是否存在
 | 
					 | 
				
			||||||
    if(QFile::exists(QCoreApplication::applicationDirPath() + "/boot.jpg")) {
 | 
					 | 
				
			||||||
        bootScreenLogo = QCoreApplication::applicationDirPath() + "/boot.jpg";
 | 
					 | 
				
			||||||
    }
 | 
					 | 
				
			||||||
    else {
 | 
					 | 
				
			||||||
        // 写入 logo
 | 
					 | 
				
			||||||
        if(QFile::exists("/tmp/deep-wine-runner-boot.jpg")) {
 | 
					 | 
				
			||||||
            QFile::remove("/tmp/deep-wine-runner-boot.jpg");
 | 
					 | 
				
			||||||
        }
 | 
					 | 
				
			||||||
        QFile::copy(":/boot.jpg", "/tmp/deep-wine-runner-boot.jpg");
 | 
					 | 
				
			||||||
        bootScreenLogo = "/tmp/deep-wine-runner-boot.jpg";
 | 
					 | 
				
			||||||
    }
 | 
					 | 
				
			||||||
    return bootScreenLogo;
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
QString qemu::SystemInfo()
 | 
					 | 
				
			||||||
{
 | 
					 | 
				
			||||||
    QFile file("/etc/os-version");
 | 
					 | 
				
			||||||
    file.open(QFile::ReadOnly);
 | 
					 | 
				
			||||||
    QString data = file.readAll();
 | 
					 | 
				
			||||||
    file.close();
 | 
					 | 
				
			||||||
    return data;
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
QString qemu::GetArch()
 | 
					 | 
				
			||||||
{
 | 
					 | 
				
			||||||
    QProcess process;
 | 
					 | 
				
			||||||
    process.start("uname", QStringList() << "-m");
 | 
					 | 
				
			||||||
    process.waitForStarted();
 | 
					 | 
				
			||||||
    process.waitForFinished();
 | 
					 | 
				
			||||||
    QString data = process.readAllStandardOutput();
 | 
					 | 
				
			||||||
    process.close();
 | 
					 | 
				
			||||||
    return data.replace("\n", "").replace(" ", "");
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
@ -1,62 +0,0 @@
 | 
				
			|||||||
/*
 | 
					 | 
				
			||||||
 * gfdgd xi
 | 
					 | 
				
			||||||
 * 依照 GPLV3 开源
 | 
					 | 
				
			||||||
 */
 | 
					 | 
				
			||||||
#ifndef QEMU_H
 | 
					 | 
				
			||||||
#define QEMU_H
 | 
					 | 
				
			||||||
#include <QString>
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
class qemu
 | 
					 | 
				
			||||||
{
 | 
					 | 
				
			||||||
public:
 | 
					 | 
				
			||||||
    // 虚拟机信息
 | 
					 | 
				
			||||||
    QString name;
 | 
					 | 
				
			||||||
    QString managerPath;
 | 
					 | 
				
			||||||
    QString vboxVersion;
 | 
					 | 
				
			||||||
    qemu(QString name, QString managerPath="/usr/bin");
 | 
					 | 
				
			||||||
    int Create(QString type="Windows7");
 | 
					 | 
				
			||||||
    int CreateDisk(QString path, int size);
 | 
					 | 
				
			||||||
    int CreateDiskControl(QString controlName="storage_controller_1");
 | 
					 | 
				
			||||||
    int MountDisk(QString diskPath, QString controlName="storage_controller_1", int port=0, int device=0);
 | 
					 | 
				
			||||||
    int MountISO(QString isoPath, QString controlName="storage_controller_1", int port=1, int device=0);
 | 
					 | 
				
			||||||
    int BootFirst(QString bootDrive);
 | 
					 | 
				
			||||||
    int SetNetBridge(QString netDriver);
 | 
					 | 
				
			||||||
    int SetCPU(int number, int cpuNum, int coreNum);
 | 
					 | 
				
			||||||
    int SetMemory(int memory);
 | 
					 | 
				
			||||||
    int SetRemote(bool setting);
 | 
					 | 
				
			||||||
    int SetRemoteConnectSetting(int port=5540);
 | 
					 | 
				
			||||||
    int Start(bool unShown=false);
 | 
					 | 
				
			||||||
    int StartArmhf();
 | 
					 | 
				
			||||||
    int StartAarch64();
 | 
					 | 
				
			||||||
    int StartLoong64();
 | 
					 | 
				
			||||||
    int MountMainDisk(QString diskPath);
 | 
					 | 
				
			||||||
    int Stop();
 | 
					 | 
				
			||||||
    int Delete();
 | 
					 | 
				
			||||||
    int SetDisplayMemory(int memory);
 | 
					 | 
				
			||||||
    int InstallGuessAdditions(QString controlName="storage_controller_1", int port=1, int device=0);
 | 
					 | 
				
			||||||
    int EnabledAudio();
 | 
					 | 
				
			||||||
    int EnabledClipboardMode();
 | 
					 | 
				
			||||||
    int EnabledDraganddrop();
 | 
					 | 
				
			||||||
    int ShareFile(QString name, QString path);
 | 
					 | 
				
			||||||
    int SetVBoxSVGA();
 | 
					 | 
				
			||||||
    int SetMousePS2();
 | 
					 | 
				
			||||||
    int SetKeyboardPS2();
 | 
					 | 
				
			||||||
    int OpenUSB();
 | 
					 | 
				
			||||||
    int EnabledUEFI(bool status);
 | 
					 | 
				
			||||||
    int AutoInstall(QString iso);
 | 
					 | 
				
			||||||
    int MountMainISO(QString isoPath);
 | 
					 | 
				
			||||||
    int UseAarch64EFI();
 | 
					 | 
				
			||||||
    int UseArmhfEFI();
 | 
					 | 
				
			||||||
    int UseLoongarch64EFI();
 | 
					 | 
				
			||||||
    int UseOtherEFI(QString fdFilePath);
 | 
					 | 
				
			||||||
    int AddDiskSpace(QString path, double data);
 | 
					 | 
				
			||||||
private:
 | 
					 | 
				
			||||||
    QString commandOption = "";
 | 
					 | 
				
			||||||
    bool isUEFI = false;
 | 
					 | 
				
			||||||
    QString GetBootLogoPath();
 | 
					 | 
				
			||||||
    QString SystemInfo();
 | 
					 | 
				
			||||||
    QString GetArch();
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
};
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
#endif // QEMU_H
 | 
					 | 
				
			||||||
@ -1,130 +0,0 @@
 | 
				
			|||||||
#include "qemusetting.h"
 | 
					 | 
				
			||||||
#include "ui_qemusetting.h"
 | 
					 | 
				
			||||||
#include <QMessageBox>
 | 
					 | 
				
			||||||
#include <QDesktopServices>
 | 
					 | 
				
			||||||
#include <QUrl>
 | 
					 | 
				
			||||||
#include <QJsonObject>
 | 
					 | 
				
			||||||
#include <QJsonDocument>
 | 
					 | 
				
			||||||
#include <QFile>
 | 
					 | 
				
			||||||
#include "infoutils.h"
 | 
					 | 
				
			||||||
#include <QDir>
 | 
					 | 
				
			||||||
#include <sys/sysinfo.h>
 | 
					 | 
				
			||||||
#include <QDebug>
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
QemuSetting::QemuSetting(QWidget *parent) :
 | 
					 | 
				
			||||||
    QWidget(parent),
 | 
					 | 
				
			||||||
    ui(new Ui::QemuSetting)
 | 
					 | 
				
			||||||
{
 | 
					 | 
				
			||||||
    ui->setupUi(this);
 | 
					 | 
				
			||||||
    // 判断是否安装了 Wine 运行器
 | 
					 | 
				
			||||||
    ui->getrunner->setHidden(QFile::exists(QCoreApplication::applicationDirPath() + "/../mainwindow.py"));
 | 
					 | 
				
			||||||
    // 设置变量
 | 
					 | 
				
			||||||
    if(QFile::exists(QDir::homePath() + "/.config/deepin-wine-runner/QemuSetting.json")){
 | 
					 | 
				
			||||||
        // 读取配置文件
 | 
					 | 
				
			||||||
        QFile file(QDir::homePath() + "/.config/deepin-wine-runner/QemuSetting.json");
 | 
					 | 
				
			||||||
        file.open(QIODevice::ReadOnly);
 | 
					 | 
				
			||||||
        QJsonParseError error;
 | 
					 | 
				
			||||||
        QJsonDocument document = QJsonDocument::fromJson(file.readAll(), &error);
 | 
					 | 
				
			||||||
        file.close();
 | 
					 | 
				
			||||||
        if(error.error != QJsonParseError::NoError){
 | 
					 | 
				
			||||||
            QMessageBox::critical(this, "错误", error.errorString());
 | 
					 | 
				
			||||||
        }
 | 
					 | 
				
			||||||
        else {
 | 
					 | 
				
			||||||
            QJsonObject object = document.object();
 | 
					 | 
				
			||||||
            qDebug() << QJsonDocument(object).toJson();
 | 
					 | 
				
			||||||
            ui->enableKvm->setChecked(object.value("EnableKVM").toBool());
 | 
					 | 
				
			||||||
            ui->enableRdp->setChecked(object.value("EnableRDP").toBool());
 | 
					 | 
				
			||||||
            ui->enableVnc->setChecked(object.value("EnableVNC").toBool());
 | 
					 | 
				
			||||||
            ui->enableSound->setChecked(object.value("EnableSound").toBool());
 | 
					 | 
				
			||||||
            ui->memoryNumber->setValue(object.value("Memory").toInt());
 | 
					 | 
				
			||||||
            ui->vncNumber->setValue(object.value("VNC").toInt());
 | 
					 | 
				
			||||||
            ui->cpuNumber->setValue(object.value("CPU").toInt());
 | 
					 | 
				
			||||||
        }
 | 
					 | 
				
			||||||
    }
 | 
					 | 
				
			||||||
    else {
 | 
					 | 
				
			||||||
        // 默认
 | 
					 | 
				
			||||||
        this->SetDefaultValue();
 | 
					 | 
				
			||||||
    }
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
void QemuSetting::SetDefaultValue(){
 | 
					 | 
				
			||||||
    long memory = 0;
 | 
					 | 
				
			||||||
    long memoryAll = 0;
 | 
					 | 
				
			||||||
    long swap = 0;
 | 
					 | 
				
			||||||
    long swapAll = 0;
 | 
					 | 
				
			||||||
    infoUtils::memoryRate(memory, memoryAll, swap, swapAll);
 | 
					 | 
				
			||||||
    ui->memoryNumber->setValue(memoryAll / 3 / 1024);
 | 
					 | 
				
			||||||
    ui->vncNumber->setValue(5);
 | 
					 | 
				
			||||||
    ui->cpuNumber->setValue(get_nprocs());
 | 
					 | 
				
			||||||
    ui->enableKvm->setChecked(true);
 | 
					 | 
				
			||||||
    ui->enableRdp->setChecked(true);
 | 
					 | 
				
			||||||
    ui->enableVnc->setChecked(true);
 | 
					 | 
				
			||||||
    ui->enableSound->setChecked(true);
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
QemuSetting::~QemuSetting()
 | 
					 | 
				
			||||||
{
 | 
					 | 
				
			||||||
    delete ui;
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
void QemuSetting::on_buttonBox_accepted()
 | 
					 | 
				
			||||||
{
 | 
					 | 
				
			||||||
    QMessageBox::information(NULL, "", "");
 | 
					 | 
				
			||||||
    acceptDrops();
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
void QemuSetting::on_save_clicked()
 | 
					 | 
				
			||||||
{
 | 
					 | 
				
			||||||
    QJsonParseError error;
 | 
					 | 
				
			||||||
    QJsonDocument document = QJsonDocument::fromJson("{}", &error);
 | 
					 | 
				
			||||||
    if(error.error != QJsonParseError::NoError){
 | 
					 | 
				
			||||||
        QMessageBox::critical(this, "错误", error.errorString());
 | 
					 | 
				
			||||||
        return;
 | 
					 | 
				
			||||||
    }
 | 
					 | 
				
			||||||
    QJsonObject object = document.object();
 | 
					 | 
				
			||||||
    //object.insert("1", QJsonValue("aa"));
 | 
					 | 
				
			||||||
    object.insert("EnableKVM", ui->enableKvm->isChecked());
 | 
					 | 
				
			||||||
    object.insert("EnableRDP", ui->enableRdp->isChecked());
 | 
					 | 
				
			||||||
    object.insert("EnableVNC", ui->enableVnc->isChecked());
 | 
					 | 
				
			||||||
    object.insert("EnableSound", ui->enableSound->isChecked());
 | 
					 | 
				
			||||||
    object.insert("Memory", ui->memoryNumber->value());
 | 
					 | 
				
			||||||
    object.insert("VNC", ui->vncNumber->value());
 | 
					 | 
				
			||||||
    object.insert("CPU", ui->cpuNumber->value());
 | 
					 | 
				
			||||||
    qDebug() << QJsonDocument(object).toJson();
 | 
					 | 
				
			||||||
    // 读取配置文件
 | 
					 | 
				
			||||||
    QDir dir(QDir::homePath() + "/.config/deepin-wine-runner/");
 | 
					 | 
				
			||||||
    if(!dir.exists()){
 | 
					 | 
				
			||||||
        dir.mkpath(QDir::homePath() + "/.config/deepin-wine-runner/");
 | 
					 | 
				
			||||||
    }
 | 
					 | 
				
			||||||
    QFile file(QDir::homePath() + "/.config/deepin-wine-runner/QemuSetting.json");
 | 
					 | 
				
			||||||
    file.open(QIODevice::WriteOnly);
 | 
					 | 
				
			||||||
    file.write(QJsonDocument(object).toJson());
 | 
					 | 
				
			||||||
    file.close();
 | 
					 | 
				
			||||||
    QMessageBox::information(this, "提示", "保存完成!");
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
void QemuSetting::on_cancel_clicked()
 | 
					 | 
				
			||||||
{
 | 
					 | 
				
			||||||
    delete this;
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
void QemuSetting::on_getrunner_clicked()
 | 
					 | 
				
			||||||
{
 | 
					 | 
				
			||||||
    QDesktopServices::openUrl(QUrl("https://gitee.com/gfdgd-xi/deep-wine-runner/"));
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
void QemuSetting::on_enableVnc_stateChanged(int arg1)
 | 
					 | 
				
			||||||
{
 | 
					 | 
				
			||||||
    // 控件的开启/关闭
 | 
					 | 
				
			||||||
    ui->vncNumber->setEnabled(ui->enableVnc->isChecked());
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
void QemuSetting::on_setDefault_clicked()
 | 
					 | 
				
			||||||
{
 | 
					 | 
				
			||||||
    if(QMessageBox::question(this, "提示", "你确定要重置为默认?重置后将无法恢复") == QMessageBox::No){
 | 
					 | 
				
			||||||
        return;
 | 
					 | 
				
			||||||
    }
 | 
					 | 
				
			||||||
    QFile::remove(QDir::homePath() + "/.config/deepin-wine-runner/QemuSetting.json");
 | 
					 | 
				
			||||||
    this->SetDefaultValue();
 | 
					 | 
				
			||||||
    QMessageBox::information(this, "提示", "设置完成!");
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
@ -1,39 +0,0 @@
 | 
				
			|||||||
#ifndef QEMUSETTING_H
 | 
					 | 
				
			||||||
#define QEMUSETTING_H
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
#include <QWidget>
 | 
					 | 
				
			||||||
#include <QCheckBox>
 | 
					 | 
				
			||||||
#include <QSpinBox>
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
namespace Ui {
 | 
					 | 
				
			||||||
class QemuSetting;
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
class QemuSetting : public QWidget
 | 
					 | 
				
			||||||
{
 | 
					 | 
				
			||||||
    Q_OBJECT
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
public:
 | 
					 | 
				
			||||||
    explicit QemuSetting(QWidget *parent = nullptr);
 | 
					 | 
				
			||||||
    ~QemuSetting();
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
private slots:
 | 
					 | 
				
			||||||
    void on_buttonBox_accepted();
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    void on_save_clicked();
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    void on_cancel_clicked();
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    void on_getrunner_clicked();
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    void on_enableVnc_stateChanged(int arg1);
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    void on_setDefault_clicked();
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
private:
 | 
					 | 
				
			||||||
    void SetDefaultValue();
 | 
					 | 
				
			||||||
    Ui::QemuSetting *ui;
 | 
					 | 
				
			||||||
};
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
#endif // QEMUSETTING_H
 | 
					 | 
				
			||||||
@ -1,210 +0,0 @@
 | 
				
			|||||||
<?xml version="1.0" encoding="UTF-8"?>
 | 
					 | 
				
			||||||
<ui version="4.0">
 | 
					 | 
				
			||||||
 <class>QemuSetting</class>
 | 
					 | 
				
			||||||
 <widget class="QWidget" name="QemuSetting">
 | 
					 | 
				
			||||||
  <property name="geometry">
 | 
					 | 
				
			||||||
   <rect>
 | 
					 | 
				
			||||||
    <x>0</x>
 | 
					 | 
				
			||||||
    <y>0</y>
 | 
					 | 
				
			||||||
    <width>496</width>
 | 
					 | 
				
			||||||
    <height>300</height>
 | 
					 | 
				
			||||||
   </rect>
 | 
					 | 
				
			||||||
  </property>
 | 
					 | 
				
			||||||
  <property name="windowTitle">
 | 
					 | 
				
			||||||
   <string>设置</string>
 | 
					 | 
				
			||||||
  </property>
 | 
					 | 
				
			||||||
  <layout class="QHBoxLayout" name="horizontalLayout">
 | 
					 | 
				
			||||||
   <item>
 | 
					 | 
				
			||||||
    <layout class="QGridLayout" name="gridLayout">
 | 
					 | 
				
			||||||
     <item row="9" column="1">
 | 
					 | 
				
			||||||
      <spacer name="horizontalSpacer">
 | 
					 | 
				
			||||||
       <property name="orientation">
 | 
					 | 
				
			||||||
        <enum>Qt::Horizontal</enum>
 | 
					 | 
				
			||||||
       </property>
 | 
					 | 
				
			||||||
       <property name="sizeHint" stdset="0">
 | 
					 | 
				
			||||||
        <size>
 | 
					 | 
				
			||||||
         <width>40</width>
 | 
					 | 
				
			||||||
         <height>20</height>
 | 
					 | 
				
			||||||
        </size>
 | 
					 | 
				
			||||||
       </property>
 | 
					 | 
				
			||||||
      </spacer>
 | 
					 | 
				
			||||||
     </item>
 | 
					 | 
				
			||||||
     <item row="4" column="0">
 | 
					 | 
				
			||||||
      <widget class="QLabel" name="label_2">
 | 
					 | 
				
			||||||
       <property name="text">
 | 
					 | 
				
			||||||
        <string><h3>远程服务</h3></string>
 | 
					 | 
				
			||||||
       </property>
 | 
					 | 
				
			||||||
      </widget>
 | 
					 | 
				
			||||||
     </item>
 | 
					 | 
				
			||||||
     <item row="6" column="0">
 | 
					 | 
				
			||||||
      <widget class="QLabel" name="label_4">
 | 
					 | 
				
			||||||
       <property name="text">
 | 
					 | 
				
			||||||
        <string>VNC服务端口:</string>
 | 
					 | 
				
			||||||
       </property>
 | 
					 | 
				
			||||||
      </widget>
 | 
					 | 
				
			||||||
     </item>
 | 
					 | 
				
			||||||
     <item row="5" column="1">
 | 
					 | 
				
			||||||
      <widget class="QCheckBox" name="enableRdp">
 | 
					 | 
				
			||||||
       <property name="text">
 | 
					 | 
				
			||||||
        <string>开启 rdp 服务映射</string>
 | 
					 | 
				
			||||||
       </property>
 | 
					 | 
				
			||||||
      </widget>
 | 
					 | 
				
			||||||
     </item>
 | 
					 | 
				
			||||||
     <item row="1" column="0">
 | 
					 | 
				
			||||||
      <widget class="QLabel" name="label">
 | 
					 | 
				
			||||||
       <property name="text">
 | 
					 | 
				
			||||||
        <string>内存大小(MB):</string>
 | 
					 | 
				
			||||||
       </property>
 | 
					 | 
				
			||||||
      </widget>
 | 
					 | 
				
			||||||
     </item>
 | 
					 | 
				
			||||||
     <item row="1" column="1">
 | 
					 | 
				
			||||||
      <widget class="QSpinBox" name="memoryNumber">
 | 
					 | 
				
			||||||
       <property name="maximum">
 | 
					 | 
				
			||||||
        <number>999999999</number>
 | 
					 | 
				
			||||||
       </property>
 | 
					 | 
				
			||||||
      </widget>
 | 
					 | 
				
			||||||
     </item>
 | 
					 | 
				
			||||||
     <item row="8" column="1">
 | 
					 | 
				
			||||||
      <spacer name="verticalSpacer">
 | 
					 | 
				
			||||||
       <property name="orientation">
 | 
					 | 
				
			||||||
        <enum>Qt::Vertical</enum>
 | 
					 | 
				
			||||||
       </property>
 | 
					 | 
				
			||||||
       <property name="sizeHint" stdset="0">
 | 
					 | 
				
			||||||
        <size>
 | 
					 | 
				
			||||||
         <width>20</width>
 | 
					 | 
				
			||||||
         <height>40</height>
 | 
					 | 
				
			||||||
        </size>
 | 
					 | 
				
			||||||
       </property>
 | 
					 | 
				
			||||||
      </spacer>
 | 
					 | 
				
			||||||
     </item>
 | 
					 | 
				
			||||||
     <item row="6" column="1">
 | 
					 | 
				
			||||||
      <widget class="QSpinBox" name="vncNumber">
 | 
					 | 
				
			||||||
       <property name="maximum">
 | 
					 | 
				
			||||||
        <number>9999</number>
 | 
					 | 
				
			||||||
       </property>
 | 
					 | 
				
			||||||
      </widget>
 | 
					 | 
				
			||||||
     </item>
 | 
					 | 
				
			||||||
     <item row="0" column="0">
 | 
					 | 
				
			||||||
      <widget class="QLabel" name="label_6">
 | 
					 | 
				
			||||||
       <property name="text">
 | 
					 | 
				
			||||||
        <string><h3>基础设置</h3></string>
 | 
					 | 
				
			||||||
       </property>
 | 
					 | 
				
			||||||
      </widget>
 | 
					 | 
				
			||||||
     </item>
 | 
					 | 
				
			||||||
     <item row="5" column="0">
 | 
					 | 
				
			||||||
      <widget class="QCheckBox" name="enableVnc">
 | 
					 | 
				
			||||||
       <property name="text">
 | 
					 | 
				
			||||||
        <string>开启VNC服务</string>
 | 
					 | 
				
			||||||
       </property>
 | 
					 | 
				
			||||||
      </widget>
 | 
					 | 
				
			||||||
     </item>
 | 
					 | 
				
			||||||
     <item row="3" column="0">
 | 
					 | 
				
			||||||
      <widget class="QCheckBox" name="enableKvm">
 | 
					 | 
				
			||||||
       <property name="text">
 | 
					 | 
				
			||||||
        <string>开启 kvm 加速</string>
 | 
					 | 
				
			||||||
       </property>
 | 
					 | 
				
			||||||
      </widget>
 | 
					 | 
				
			||||||
     </item>
 | 
					 | 
				
			||||||
     <item row="2" column="0">
 | 
					 | 
				
			||||||
      <widget class="QLabel" name="label_3">
 | 
					 | 
				
			||||||
       <property name="text">
 | 
					 | 
				
			||||||
        <string>CPU核心数:</string>
 | 
					 | 
				
			||||||
       </property>
 | 
					 | 
				
			||||||
      </widget>
 | 
					 | 
				
			||||||
     </item>
 | 
					 | 
				
			||||||
     <item row="2" column="1">
 | 
					 | 
				
			||||||
      <widget class="QSpinBox" name="cpuNumber">
 | 
					 | 
				
			||||||
       <property name="maximum">
 | 
					 | 
				
			||||||
        <number>999999999</number>
 | 
					 | 
				
			||||||
       </property>
 | 
					 | 
				
			||||||
      </widget>
 | 
					 | 
				
			||||||
     </item>
 | 
					 | 
				
			||||||
     <item row="3" column="1">
 | 
					 | 
				
			||||||
      <widget class="QCheckBox" name="enableSound">
 | 
					 | 
				
			||||||
       <property name="text">
 | 
					 | 
				
			||||||
        <string>开启声音</string>
 | 
					 | 
				
			||||||
       </property>
 | 
					 | 
				
			||||||
      </widget>
 | 
					 | 
				
			||||||
     </item>
 | 
					 | 
				
			||||||
    </layout>
 | 
					 | 
				
			||||||
   </item>
 | 
					 | 
				
			||||||
   <item>
 | 
					 | 
				
			||||||
    <layout class="QVBoxLayout" name="verticalLayout_2">
 | 
					 | 
				
			||||||
     <property name="sizeConstraint">
 | 
					 | 
				
			||||||
      <enum>QLayout::SetDefaultConstraint</enum>
 | 
					 | 
				
			||||||
     </property>
 | 
					 | 
				
			||||||
     <item>
 | 
					 | 
				
			||||||
      <widget class="QPushButton" name="save">
 | 
					 | 
				
			||||||
       <property name="sizePolicy">
 | 
					 | 
				
			||||||
        <sizepolicy hsizetype="Fixed" vsizetype="Fixed">
 | 
					 | 
				
			||||||
         <horstretch>0</horstretch>
 | 
					 | 
				
			||||||
         <verstretch>0</verstretch>
 | 
					 | 
				
			||||||
        </sizepolicy>
 | 
					 | 
				
			||||||
       </property>
 | 
					 | 
				
			||||||
       <property name="text">
 | 
					 | 
				
			||||||
        <string>保存</string>
 | 
					 | 
				
			||||||
       </property>
 | 
					 | 
				
			||||||
      </widget>
 | 
					 | 
				
			||||||
     </item>
 | 
					 | 
				
			||||||
     <item>
 | 
					 | 
				
			||||||
      <widget class="QPushButton" name="cancel">
 | 
					 | 
				
			||||||
       <property name="sizePolicy">
 | 
					 | 
				
			||||||
        <sizepolicy hsizetype="Fixed" vsizetype="Fixed">
 | 
					 | 
				
			||||||
         <horstretch>0</horstretch>
 | 
					 | 
				
			||||||
         <verstretch>0</verstretch>
 | 
					 | 
				
			||||||
        </sizepolicy>
 | 
					 | 
				
			||||||
       </property>
 | 
					 | 
				
			||||||
       <property name="text">
 | 
					 | 
				
			||||||
        <string>取消</string>
 | 
					 | 
				
			||||||
       </property>
 | 
					 | 
				
			||||||
      </widget>
 | 
					 | 
				
			||||||
     </item>
 | 
					 | 
				
			||||||
     <item>
 | 
					 | 
				
			||||||
      <widget class="QPushButton" name="setDefault">
 | 
					 | 
				
			||||||
       <property name="sizePolicy">
 | 
					 | 
				
			||||||
        <sizepolicy hsizetype="Fixed" vsizetype="Fixed">
 | 
					 | 
				
			||||||
         <horstretch>0</horstretch>
 | 
					 | 
				
			||||||
         <verstretch>0</verstretch>
 | 
					 | 
				
			||||||
        </sizepolicy>
 | 
					 | 
				
			||||||
       </property>
 | 
					 | 
				
			||||||
       <property name="text">
 | 
					 | 
				
			||||||
        <string>重置
 | 
					 | 
				
			||||||
默认</string>
 | 
					 | 
				
			||||||
       </property>
 | 
					 | 
				
			||||||
      </widget>
 | 
					 | 
				
			||||||
     </item>
 | 
					 | 
				
			||||||
     <item>
 | 
					 | 
				
			||||||
      <widget class="QPushButton" name="getrunner">
 | 
					 | 
				
			||||||
       <property name="sizePolicy">
 | 
					 | 
				
			||||||
        <sizepolicy hsizetype="Fixed" vsizetype="Fixed">
 | 
					 | 
				
			||||||
         <horstretch>0</horstretch>
 | 
					 | 
				
			||||||
         <verstretch>0</verstretch>
 | 
					 | 
				
			||||||
        </sizepolicy>
 | 
					 | 
				
			||||||
       </property>
 | 
					 | 
				
			||||||
       <property name="text">
 | 
					 | 
				
			||||||
        <string>获取
 | 
					 | 
				
			||||||
Wine
 | 
					 | 
				
			||||||
运行器</string>
 | 
					 | 
				
			||||||
       </property>
 | 
					 | 
				
			||||||
      </widget>
 | 
					 | 
				
			||||||
     </item>
 | 
					 | 
				
			||||||
     <item>
 | 
					 | 
				
			||||||
      <spacer name="verticalSpacer_2">
 | 
					 | 
				
			||||||
       <property name="orientation">
 | 
					 | 
				
			||||||
        <enum>Qt::Vertical</enum>
 | 
					 | 
				
			||||||
       </property>
 | 
					 | 
				
			||||||
       <property name="sizeHint" stdset="0">
 | 
					 | 
				
			||||||
        <size>
 | 
					 | 
				
			||||||
         <width>20</width>
 | 
					 | 
				
			||||||
         <height>40</height>
 | 
					 | 
				
			||||||
        </size>
 | 
					 | 
				
			||||||
       </property>
 | 
					 | 
				
			||||||
      </spacer>
 | 
					 | 
				
			||||||
     </item>
 | 
					 | 
				
			||||||
    </layout>
 | 
					 | 
				
			||||||
   </item>
 | 
					 | 
				
			||||||
  </layout>
 | 
					 | 
				
			||||||
 </widget>
 | 
					 | 
				
			||||||
 <resources/>
 | 
					 | 
				
			||||||
 <connections/>
 | 
					 | 
				
			||||||
</ui>
 | 
					 | 
				
			||||||
							
								
								
									
										
											BIN
										
									
								
								VM-source/run
									
									
									
									
									
								
							
							
						
						@ -1,22 +0,0 @@
 | 
				
			|||||||
#include <iostream>
 | 
					 | 
				
			||||||
#include <filesystem>
 | 
					 | 
				
			||||||
using namespace std;
 | 
					 | 
				
			||||||
// 清屏
 | 
					 | 
				
			||||||
void CleanScreen(){
 | 
					 | 
				
			||||||
	/*if(filesystem::exists("/")){
 | 
					 | 
				
			||||||
		return;
 | 
					 | 
				
			||||||
	}*/
 | 
					 | 
				
			||||||
	system("clear");
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
int main(int argc, char* argv[]){
 | 
					 | 
				
			||||||
	// 判断参数是否齐全
 | 
					 | 
				
			||||||
	CleanScreen();
 | 
					 | 
				
			||||||
	//
 | 
					 | 
				
			||||||
	if(argc < 3) {
 | 
					 | 
				
			||||||
		cout << "参数不齐!" << endl;
 | 
					 | 
				
			||||||
		return 1;
 | 
					 | 
				
			||||||
	}
 | 
					 | 
				
			||||||
	cout << argc << endl;
 | 
					 | 
				
			||||||
	return 0;
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
@ -1,50 +0,0 @@
 | 
				
			|||||||
#!/usr/bin/env python3
 | 
					 | 
				
			||||||
import os
 | 
					 | 
				
			||||||
import api
 | 
					 | 
				
			||||||
import sys
 | 
					 | 
				
			||||||
import psutil
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
if __name__ == "__main__":
 | 
					 | 
				
			||||||
    os.system("clear")
 | 
					 | 
				
			||||||
    programPath = os.path.split(os.path.realpath(__file__))[0]
 | 
					 | 
				
			||||||
    if len(sys.argv) < 3 :
 | 
					 | 
				
			||||||
        print("参数不齐!")
 | 
					 | 
				
			||||||
        exit()
 | 
					 | 
				
			||||||
    net = ""
 | 
					 | 
				
			||||||
    for k, v in psutil.net_if_addrs().items():
 | 
					 | 
				
			||||||
        for item in v:
 | 
					 | 
				
			||||||
            if item[0] == 2 and not item[1] == "127.0.0.1" and not item[1] == "192.168.250.1":
 | 
					 | 
				
			||||||
                net = k
 | 
					 | 
				
			||||||
                break
 | 
					 | 
				
			||||||
    if net == "":
 | 
					 | 
				
			||||||
        exit()
 | 
					 | 
				
			||||||
    # 创建一个叫Windows的虚拟机
 | 
					 | 
				
			||||||
    vm = api.Manager("Windows")
 | 
					 | 
				
			||||||
    if sys.argv[2] == "0":
 | 
					 | 
				
			||||||
        vm.Create("Windows7")
 | 
					 | 
				
			||||||
    elif sys.argv[2] == "1":
 | 
					 | 
				
			||||||
        vm.Create("Windows7_64")
 | 
					 | 
				
			||||||
    else:
 | 
					 | 
				
			||||||
        vm.Create("WindowsNT_64")
 | 
					 | 
				
			||||||
    vm.CreateDisk(f"{api.homePath}/VirtualBox VMs/Windows/Windows.vdi", 131072)
 | 
					 | 
				
			||||||
    vm.CreateDiskControl()
 | 
					 | 
				
			||||||
    vm.MountDisk(f"{api.homePath}/VirtualBox VMs/Windows/Windows.vdi")
 | 
					 | 
				
			||||||
    vm.MountISO(sys.argv[1])
 | 
					 | 
				
			||||||
    if sys.argv[2] == "0":
 | 
					 | 
				
			||||||
        vm.MountISO(f"{programPath}/Windows7X86Auto.iso", device=1)
 | 
					 | 
				
			||||||
    elif sys.argv[2] == "1":
 | 
					 | 
				
			||||||
        vm.MountISO(f"{programPath}/Windows7X64Auto.iso", device=1)
 | 
					 | 
				
			||||||
    vm.SetCPU(1)
 | 
					 | 
				
			||||||
    vm.SetMemory(psutil.virtual_memory().total // 1024 // 1024 // 3)
 | 
					 | 
				
			||||||
    vm.SetDisplayMemory(32)
 | 
					 | 
				
			||||||
    vm.SetNetBridge(net)
 | 
					 | 
				
			||||||
    vm.EnabledAudio()
 | 
					 | 
				
			||||||
    vm.EnabledClipboardMode()
 | 
					 | 
				
			||||||
    vm.EnabledDraganddrop()
 | 
					 | 
				
			||||||
    vm.SetVBoxSVGA()
 | 
					 | 
				
			||||||
    vm.SetMousePS2()
 | 
					 | 
				
			||||||
    vm.SetKeyboardPS2()
 | 
					 | 
				
			||||||
    vm.OpenUSB()
 | 
					 | 
				
			||||||
    vm.ShareFile("ROOT", "/")
 | 
					 | 
				
			||||||
    vm.ShareFile("HOME", api.homePath)
 | 
					 | 
				
			||||||
    vm.Start()
 | 
					 | 
				
			||||||
@ -1,289 +0,0 @@
 | 
				
			|||||||
mov ax,0xb800
 | 
					 | 
				
			||||||
mov es,ax
 | 
					 | 
				
			||||||
; 清屏
 | 
					 | 
				
			||||||
mov cx,80*25
 | 
					 | 
				
			||||||
clean:
 | 
					 | 
				
			||||||
	mov di,cx
 | 
					 | 
				
			||||||
	add di,di
 | 
					 | 
				
			||||||
	mov byte [es:di],''
 | 
					 | 
				
			||||||
	add di,1
 | 
					 | 
				
			||||||
	mov byte [es:di],0x0F
 | 
					 | 
				
			||||||
	loop clean
 | 
					 | 
				
			||||||
; 显示上方白条
 | 
					 | 
				
			||||||
; 移除(0,0)的S字符
 | 
					 | 
				
			||||||
mov byte [es:0x00],''
 | 
					 | 
				
			||||||
mov cx,80*2-1
 | 
					 | 
				
			||||||
mov di,0
 | 
					 | 
				
			||||||
push cx
 | 
					 | 
				
			||||||
headtitle:
 | 
					 | 
				
			||||||
	mov di,cx
 | 
					 | 
				
			||||||
	mov byte [es:di],0xF0
 | 
					 | 
				
			||||||
	; 写入空字符
 | 
					 | 
				
			||||||
	add di,di
 | 
					 | 
				
			||||||
	mov byte [es:di],''
 | 
					 | 
				
			||||||
	;inc cx
 | 
					 | 
				
			||||||
	;sub cx,1
 | 
					 | 
				
			||||||
	loop headtitle
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
xor di,di
 | 
					 | 
				
			||||||
pop cx
 | 
					 | 
				
			||||||
; 显示下方白条
 | 
					 | 
				
			||||||
tailtitle:
 | 
					 | 
				
			||||||
	mov di,cx
 | 
					 | 
				
			||||||
	add di,80*2*24
 | 
					 | 
				
			||||||
	mov byte [es:di],0xF0
 | 
					 | 
				
			||||||
	; 写入空字符
 | 
					 | 
				
			||||||
	mov di,cx
 | 
					 | 
				
			||||||
	add di,di
 | 
					 | 
				
			||||||
	add di,80*2*24
 | 
					 | 
				
			||||||
	mov byte [es:di],''
 | 
					 | 
				
			||||||
	loop tailtitle
 | 
					 | 
				
			||||||
; 在第一行写入文本
 | 
					 | 
				
			||||||
jmp near showHeadText
 | 
					 | 
				
			||||||
headText: db 'Wine Runner  Webiste:http://gitee.com/gfdgd-xi/deep-wine-runner'
 | 
					 | 
				
			||||||
showHeadText:
 | 
					 | 
				
			||||||
; 虽然可以简单粗暴的用 movsw,但是会出现问题
 | 
					 | 
				
			||||||
	mov cx,showHeadText-headText
 | 
					 | 
				
			||||||
	mov ax,0x7c0
 | 
					 | 
				
			||||||
	mov ds,ax ; 定位到汇编程序所在的内存地址
 | 
					 | 
				
			||||||
	showHeadTextLoop:
 | 
					 | 
				
			||||||
		mov dx,cx
 | 
					 | 
				
			||||||
		mov di,cx
 | 
					 | 
				
			||||||
		add di,di
 | 
					 | 
				
			||||||
		mov si,headText
 | 
					 | 
				
			||||||
		sub dx,1
 | 
					 | 
				
			||||||
		add si,dx
 | 
					 | 
				
			||||||
;		inc si
 | 
					 | 
				
			||||||
;		mov al,1000
 | 
					 | 
				
			||||||
		mov al,[ds:si]
 | 
					 | 
				
			||||||
		mov byte [es:di],al
 | 
					 | 
				
			||||||
		loop showHeadTextLoop
 | 
					 | 
				
			||||||
jmp near showTailText
 | 
					 | 
				
			||||||
tailText: db '2020~Now gfdgd xi'
 | 
					 | 
				
			||||||
showTailText:
 | 
					 | 
				
			||||||
	mov cx,showTailText-tailText
 | 
					 | 
				
			||||||
	mov ax,0x7c0
 | 
					 | 
				
			||||||
	mov ds,ax
 | 
					 | 
				
			||||||
	showTailTextLoop:
 | 
					 | 
				
			||||||
		mov dx,cx
 | 
					 | 
				
			||||||
		mov di,cx
 | 
					 | 
				
			||||||
		add di,di
 | 
					 | 
				
			||||||
		add di,80*2*24
 | 
					 | 
				
			||||||
		mov si,tailText
 | 
					 | 
				
			||||||
		sub dx,1
 | 
					 | 
				
			||||||
		add si,dx
 | 
					 | 
				
			||||||
		mov al,[ds:si]
 | 
					 | 
				
			||||||
		mov byte [es:di],al
 | 
					 | 
				
			||||||
		loop showTailTextLoop
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
; 显示中部提示文本
 | 
					 | 
				
			||||||
jmp near showCenterText
 | 
					 | 
				
			||||||
centerTextScreenSize:
 | 
					 | 
				
			||||||
	; 第一位是行数
 | 
					 | 
				
			||||||
	; 第二位是单行偏移量
 | 
					 | 
				
			||||||
	db 1, -1
 | 
					 | 
				
			||||||
centerText: 
 | 
					 | 
				
			||||||
	db 'Mode: Real Mode Demo', 0x0A
 | 
					 | 
				
			||||||
	db 'Bit: 16', 0x0A
 | 
					 | 
				
			||||||
	db 'Virtual Machine: qemu-system-i386'
 | 
					 | 
				
			||||||
	db  0x03  ; 结束符
 | 
					 | 
				
			||||||
showCenterText:
 | 
					 | 
				
			||||||
	centerTextLong equ showCenterText-centerText
 | 
					 | 
				
			||||||
	mov cx,centerTextLong
 | 
					 | 
				
			||||||
	xor ax,ax
 | 
					 | 
				
			||||||
	loopShowCenterText:
 | 
					 | 
				
			||||||
		jmp near addScreenLineFinish
 | 
					 | 
				
			||||||
		addScreenLine:
 | 
					 | 
				
			||||||
			; 如果检测到换行符
 | 
					 | 
				
			||||||
			mov dx, [centerTextScreenSize]
 | 
					 | 
				
			||||||
			add dx,1
 | 
					 | 
				
			||||||
			mov [centerTextScreenSize], dx
 | 
					 | 
				
			||||||
			dec cx
 | 
					 | 
				
			||||||
			mov al,-1
 | 
					 | 
				
			||||||
			mov [centerTextScreenSize+1],al
 | 
					 | 
				
			||||||
			; 行数+1,偏移量设为 -1(从头开始)
 | 
					 | 
				
			||||||
			;ret
 | 
					 | 
				
			||||||
		addScreenLineFinish:
 | 
					 | 
				
			||||||
		; 偏移量 + 1
 | 
					 | 
				
			||||||
		mov al,[centerTextScreenSize+1]
 | 
					 | 
				
			||||||
		add al,1
 | 
					 | 
				
			||||||
		mov [centerTextScreenSize+1],al
 | 
					 | 
				
			||||||
		mov di,centerText
 | 
					 | 
				
			||||||
		add di,centerTextLong
 | 
					 | 
				
			||||||
		sub di,cx
 | 
					 | 
				
			||||||
		mov bl,[di]
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
		; 判断是不是结束符
 | 
					 | 
				
			||||||
		cmp bl,0x03
 | 
					 | 
				
			||||||
		je showCenterTextEnd
 | 
					 | 
				
			||||||
		
 | 
					 | 
				
			||||||
		; 判断是不是换行符
 | 
					 | 
				
			||||||
		cmp bl,0x0A
 | 
					 | 
				
			||||||
		je addScreenLine ; 换行符检测
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
		xor ah,ah ; 清空高位
 | 
					 | 
				
			||||||
		add al,al
 | 
					 | 
				
			||||||
		mov di,ax
 | 
					 | 
				
			||||||
		
 | 
					 | 
				
			||||||
		; 计算显示位置
 | 
					 | 
				
			||||||
		xor dx,dx
 | 
					 | 
				
			||||||
		mov dl,[centerTextScreenSize]
 | 
					 | 
				
			||||||
		mov ax,80
 | 
					 | 
				
			||||||
		mul dx
 | 
					 | 
				
			||||||
		mov dx,2
 | 
					 | 
				
			||||||
		mul dx
 | 
					 | 
				
			||||||
		add ax,2
 | 
					 | 
				
			||||||
		add di,ax
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
		; 显示
 | 
					 | 
				
			||||||
		mov byte [es:di], bl
 | 
					 | 
				
			||||||
		loop loopShowCenterText
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
showCenterTextEnd:
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
;mov ax,[cs:0x100]
 | 
					 | 
				
			||||||
;mov dx,[cs:0x102]
 | 
					 | 
				
			||||||
;	mov bx,16
 | 
					 | 
				
			||||||
;	div bx
 | 
					 | 
				
			||||||
;	mov ds,ax
 | 
					 | 
				
			||||||
;	mov es,ax
 | 
					 | 
				
			||||||
;xor di,di
 | 
					 | 
				
			||||||
;mov si,1
 | 
					 | 
				
			||||||
;xor ds,ds
 | 
					 | 
				
			||||||
;mov bx,512
 | 
					 | 
				
			||||||
;xor bx,bx
 | 
					 | 
				
			||||||
;call read_hard_disk_0
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
get_data:
 | 
					 | 
				
			||||||
	mov di,80*2*25-2
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
	; 读取秒
 | 
					 | 
				
			||||||
	mov al,0x00
 | 
					 | 
				
			||||||
	call read_time
 | 
					 | 
				
			||||||
	mov byte [es:di-4],':'
 | 
					 | 
				
			||||||
	mov byte [es:di-2],ah
 | 
					 | 
				
			||||||
	mov byte [es:di],al
 | 
					 | 
				
			||||||
	; 读取分钟
 | 
					 | 
				
			||||||
	mov al,0x02
 | 
					 | 
				
			||||||
	call read_time
 | 
					 | 
				
			||||||
	mov byte [es:di-10],':'
 | 
					 | 
				
			||||||
	mov byte [es:di-8],ah
 | 
					 | 
				
			||||||
	mov byte [es:di-6],al
 | 
					 | 
				
			||||||
	; 读取小时
 | 
					 | 
				
			||||||
	mov al,0x04
 | 
					 | 
				
			||||||
	call read_time
 | 
					 | 
				
			||||||
	mov byte [es:di-14],ah
 | 
					 | 
				
			||||||
	mov byte [es:di-12],al
 | 
					 | 
				
			||||||
	; 读取日
 | 
					 | 
				
			||||||
	mov al,0x07
 | 
					 | 
				
			||||||
	call read_time
 | 
					 | 
				
			||||||
	mov byte [es:di-22],'.'
 | 
					 | 
				
			||||||
	mov byte [es:di-20],ah
 | 
					 | 
				
			||||||
	mov byte [es:di-18],al
 | 
					 | 
				
			||||||
	; 读取月
 | 
					 | 
				
			||||||
	mov al,0x08
 | 
					 | 
				
			||||||
	call read_time
 | 
					 | 
				
			||||||
	mov byte [es:di-28],'.'
 | 
					 | 
				
			||||||
	mov byte [es:di-26],ah
 | 
					 | 
				
			||||||
	mov byte [es:di-24],al
 | 
					 | 
				
			||||||
	; 读取年
 | 
					 | 
				
			||||||
	mov al,0x09
 | 
					 | 
				
			||||||
	call read_time
 | 
					 | 
				
			||||||
	mov byte [es:di-32],ah
 | 
					 | 
				
			||||||
	mov byte [es:di-30],al
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
hlt  ; 使用停机指令降低 CPU 使用率
 | 
					 | 
				
			||||||
jmp near get_data
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
read_time:
 | 
					 | 
				
			||||||
	out 0x70,al
 | 
					 | 
				
			||||||
	in al,0x71
 | 
					 | 
				
			||||||
	call bcd_to_ascii
 | 
					 | 
				
			||||||
	ret
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
; 用于编码转换:BCD=》ASCII
 | 
					 | 
				
			||||||
; 输入:AL=bcd码
 | 
					 | 
				
			||||||
; 输出:AX=ascii
 | 
					 | 
				
			||||||
bcd_to_ascii:
 | 
					 | 
				
			||||||
	mov ah,al
 | 
					 | 
				
			||||||
	and al,0x0f
 | 
					 | 
				
			||||||
	add al,0x30
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
	shr ah,4
 | 
					 | 
				
			||||||
	and ah,0x0f
 | 
					 | 
				
			||||||
	add ah,0x30
 | 
					 | 
				
			||||||
	ret
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
;poweroff:
 | 
					 | 
				
			||||||
	; 关机
 | 
					 | 
				
			||||||
;	mov ax,5307H  ; 高级电源管理功能,设置电源状态
 | 
					 | 
				
			||||||
;	mov bx,0001H  ; 设备ID,1:所有设备
 | 
					 | 
				
			||||||
;	mov cx,0003H  ; 状态,3:表示关机
 | 
					 | 
				
			||||||
;	int 15h
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
end:
 | 
					 | 
				
			||||||
	times 510-($-$$) db 0
 | 
					 | 
				
			||||||
	db 0x55,0xaa
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
; 后面部分暂时废弃
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
read_hard_disk_0:  ; 从硬盘读取一个逻辑扇区
 | 
					 | 
				
			||||||
		; 输入:DI:SI=起始逻辑扇区号
 | 
					 | 
				
			||||||
		; DS:BX=目标缓冲区地址
 | 
					 | 
				
			||||||
	push ax
 | 
					 | 
				
			||||||
	push bx
 | 
					 | 
				
			||||||
	push cx
 | 
					 | 
				
			||||||
	push dx
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
	mov dx,0x1f2
 | 
					 | 
				
			||||||
	mov al,1
 | 
					 | 
				
			||||||
	out dx,al ; 读取的扇区数
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
	inc dx ; 0x1f3
 | 
					 | 
				
			||||||
	mov ax,si
 | 
					 | 
				
			||||||
	out dx,al ; LBA地址7~0
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
	inc dx ; 0x1f4
 | 
					 | 
				
			||||||
	mov al,ah
 | 
					 | 
				
			||||||
	out dx,al ; LBA地址15~8
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
	inc dx ; 0x1f5
 | 
					 | 
				
			||||||
	mov ax,di
 | 
					 | 
				
			||||||
	out dx,al ; LBA地址23~16
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
	inc dx ; 0x1f6
 | 
					 | 
				
			||||||
	mov al,0xe0 ; LBA28模式,主盘
 | 
					 | 
				
			||||||
	or al,ah ; LBA地址27~24
 | 
					 | 
				
			||||||
	out dx,al
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
	inc dx ; 0x1f7
 | 
					 | 
				
			||||||
	mov al,0x20 ; 读命令
 | 
					 | 
				
			||||||
	out dx,al
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
	.waits:
 | 
					 | 
				
			||||||
		in al,dx  ; 此时 dx 为 0x1f7,此时为命令端口也是状态窗口
 | 
					 | 
				
			||||||
		and al,0x88
 | 
					 | 
				
			||||||
		cmp al,0x08
 | 
					 | 
				
			||||||
		jnz .waits
 | 
					 | 
				
			||||||
		; 内部操作期间,会将 0x1f7 端口第 7 位设置为“1”,准备就绪后会将此位清零,并将第 3 位设为 1
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
		mov cx,256 ; 总计要读取的/字/数
 | 
					 | 
				
			||||||
		mov dx,0x1f0
 | 
					 | 
				
			||||||
	
 | 
					 | 
				
			||||||
	.readw:
 | 
					 | 
				
			||||||
		in ax,dx
 | 
					 | 
				
			||||||
		mov [bx],ax
 | 
					 | 
				
			||||||
		add bx,2
 | 
					 | 
				
			||||||
		loop .readw
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
		pop dx
 | 
					 | 
				
			||||||
		pop cx
 | 
					 | 
				
			||||||
		pop bx
 | 
					 | 
				
			||||||
		pop ax
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
@ -1,8 +0,0 @@
 | 
				
			|||||||
<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>
 | 
					 | 
				
			||||||
@ -1,113 +0,0 @@
 | 
				
			|||||||
/*
 | 
					 | 
				
			||||||
 * gfdgd xi
 | 
					 | 
				
			||||||
 */
 | 
					 | 
				
			||||||
#include "vbox.h"
 | 
					 | 
				
			||||||
#include "command.h"
 | 
					 | 
				
			||||||
#include <QMessageBox>
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
vbox::vbox(QString name, QString managerPath) {
 | 
					 | 
				
			||||||
    this->name = name;
 | 
					 | 
				
			||||||
    this->managerPath = managerPath;
 | 
					 | 
				
			||||||
    //Command command = Command();
 | 
					 | 
				
			||||||
    this->vboxVersion = Command().GetCommand("'" + managerPath + "' -v");
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
int vbox::Create(QString type){
 | 
					 | 
				
			||||||
    system(("\"" + managerPath + "\" createvm --name \""
 | 
					 | 
				
			||||||
                   + name + "\" --ostype \"" + type +
 | 
					 | 
				
			||||||
                   "\" --register").toLatin1());
 | 
					 | 
				
			||||||
    return system(("\"" + managerPath + "\" modifyvm \""
 | 
					 | 
				
			||||||
                   + name + "\" --ostype \"" + type +
 | 
					 | 
				
			||||||
                   "\" ").toLatin1());
 | 
					 | 
				
			||||||
    //vboxmanage modifyvm testvm --ostype
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
int vbox::CreateDisk(QString path, int size){
 | 
					 | 
				
			||||||
    return system(("\"" + managerPath + "\" createvdi --filename \"" + path + "\" --size \"" + QString::number(size) + "\"").toLatin1());
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
int vbox::CreateDiskControl(QString controlName){
 | 
					 | 
				
			||||||
    return system(("\"" + managerPath + "\" storagectl \"" + name + "\" --name \"" + controlName + "\" --add ide").toLatin1());
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
int vbox::MountDisk(QString diskPath, QString controlName, int port, int device){
 | 
					 | 
				
			||||||
    return system(("\"" + managerPath + "\" storageattach \"" + name +
 | 
					 | 
				
			||||||
                   "\" --storagectl \"" + controlName + "\" --type hdd --port "
 | 
					 | 
				
			||||||
                   + QString::number(port) + " --device " + QString::number(device) + " --medium \"" + diskPath + "\"").toLatin1());
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
int vbox::MountISO(QString isoPath, QString controlName, int port, int device){
 | 
					 | 
				
			||||||
    return system(("\"" + managerPath + "\" storageattach \"" + name + "\" --storagectl \"" +
 | 
					 | 
				
			||||||
                   controlName + "\" --type dvddrive --port " + QString::number(port) + " --device " + QString::number(device)
 | 
					 | 
				
			||||||
                   + " --medium \"" + isoPath + "\"").toLatin1());
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
int vbox::BootFirst(QString bootDrive){
 | 
					 | 
				
			||||||
    return system(("\"" + managerPath + "\" modifyvm \"" + name + "\" --boot1 " + bootDrive).toLatin1());
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
int vbox::SetNetBridge(QString netDriver){
 | 
					 | 
				
			||||||
    return system(("\"" + managerPath + "\" modifyvm \"" + name +
 | 
					 | 
				
			||||||
                   "\" --nic1 bridged --cableconnected1 on --nictype1 82540EM --bridgeadapter1 \"" + netDriver + "\" --intnet1 brigh1 --macaddress1 auto").toLatin1());
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
int vbox::SetCPU(int number, int cpuNum, int coreNum){
 | 
					 | 
				
			||||||
    return system(("\"" + managerPath + "\" modifyvm \"" + name + "\" --cpus " + QString::number(number)).toLatin1());
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
int vbox::SetMemory(int memory){
 | 
					 | 
				
			||||||
    return system(("\"" + managerPath + "\" modifyvm \"" + name + "\" --memory " + QString::number(memory)).toLatin1());
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
int vbox::SetRemote(bool setting){
 | 
					 | 
				
			||||||
    if(setting){
 | 
					 | 
				
			||||||
        return system(("\"" + managerPath + "\" modifyvm \"" + name + "\" --vrde on").toLatin1());
 | 
					 | 
				
			||||||
    }
 | 
					 | 
				
			||||||
    return system(("\"" + managerPath + "\" modifyvm \"" + name + "\" --vrde off").toLatin1());
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
int vbox::SetRemoteConnectSetting(int port){
 | 
					 | 
				
			||||||
    return system(("\"" + managerPath + "\" modifyvm \"" + name + "\" --vrdeport " + QString::number(port) + " --vrdeaddress """).toLatin1());
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
int vbox::Start(bool unShown){
 | 
					 | 
				
			||||||
    if(unShown){
 | 
					 | 
				
			||||||
        return system(("\"" + managerPath + "\" > /tmp/windows-virtual-machine-installer-for-wine-runner-install.log 2>&1").toLatin1());
 | 
					 | 
				
			||||||
    }
 | 
					 | 
				
			||||||
    return system(("\"" + managerPath + "\" startvm \"" + name + "\"  > /tmp/windows-virtual-machine-installer-for-wine-runner-install.log 2>&1").toLatin1());
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
int vbox::Stop(){
 | 
					 | 
				
			||||||
    return system(("\"" + managerPath + "\" controlvm \"" + name + "\" poweroff").toLatin1());
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
int vbox::Delete(){
 | 
					 | 
				
			||||||
    return system(("\"" + managerPath + "\" unregistervm --delete \"" + name + "\"").toLatin1());
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
int vbox::SetDisplayMemory(int memory){
 | 
					 | 
				
			||||||
    return system(("\"" + managerPath + "\" modifyvm \"" + name + "\" --vram " + QString::number(memory)).toLatin1());
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
int vbox::InstallGuessAdditions(QString controlName, int port, int device){
 | 
					 | 
				
			||||||
    return MountISO("/usr/share/virtualbox/VBoxGuestAdditions.iso", controlName, port, device);
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
int vbox::EnabledAudio(){
 | 
					 | 
				
			||||||
    return system(("\"" + managerPath + "\" modifyvm \"" + name + "\" --audio-driver pulse --audiocontroller hda --audioin on --audioout on").toLatin1());
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
int vbox::EnabledClipboardMode(){
 | 
					 | 
				
			||||||
    return system(("\"" + managerPath + "\" modifyvm \"" + name + "\" --clipboard-mode bidirectional").toLatin1());
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
int vbox::EnabledDraganddrop(){
 | 
					 | 
				
			||||||
    return system(("\"" + managerPath + "\" modifyvm \"" + name + "\" --draganddrop bidirectional").toLatin1());
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
int vbox::ShareFile(QString name, QString path){
 | 
					 | 
				
			||||||
    return system(("\"" + managerPath + "\" sharedfolder add \"" + this->name + "\" -name \"" + name + "\" -hostpath \"" + path + "\"").toLatin1());
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
int vbox::SetVBoxSVGA(){
 | 
					 | 
				
			||||||
    return system(("\"" + managerPath + "\" modifyvm \"" + name + "\" --graphicscontroller vboxsvga").toLatin1());
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
int vbox::SetMousePS2(){
 | 
					 | 
				
			||||||
    return system(("\"" + managerPath + "\" modifyvm \"" + name + "\" --mouse usb").toLatin1());
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
int vbox::SetKeyboardPS2(){
 | 
					 | 
				
			||||||
    return system(("\"" + managerPath + "\" modifyvm \"" + name + "\" --keyboard usb").toLatin1());
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
int vbox::OpenUSB(){
 | 
					 | 
				
			||||||
    return system(("\"" + managerPath + "\" modifyvm \"" + name + "\" --usbohci on").toLatin1());
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
int vbox::EnabledUEFI(bool status){
 | 
					 | 
				
			||||||
    if(status){
 | 
					 | 
				
			||||||
        return system(("\"" + managerPath + "\" modifyvm \"" + name + "\" --firmware=efi").toLatin1());
 | 
					 | 
				
			||||||
    }
 | 
					 | 
				
			||||||
    return system(("\"" + managerPath + "\" modifyvm \"" + name + "\" --firmware=bios").toLatin1());
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
int vbox::AutoInstall(QString iso){
 | 
					 | 
				
			||||||
    return system(("vboxmanage unattended install '" + name + "' '--iso=" + iso + "'").toLatin1());
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
@ -1,47 +0,0 @@
 | 
				
			|||||||
/*
 | 
					 | 
				
			||||||
 * gfdgd xi
 | 
					 | 
				
			||||||
 * 依照 GPLV3 开源
 | 
					 | 
				
			||||||
 */
 | 
					 | 
				
			||||||
#ifndef VBOX_H
 | 
					 | 
				
			||||||
#define VBOX_H
 | 
					 | 
				
			||||||
#include <QString>
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
class vbox
 | 
					 | 
				
			||||||
{
 | 
					 | 
				
			||||||
public:
 | 
					 | 
				
			||||||
    // 虚拟机信息
 | 
					 | 
				
			||||||
    QString name;
 | 
					 | 
				
			||||||
    QString managerPath;
 | 
					 | 
				
			||||||
    QString vboxVersion;
 | 
					 | 
				
			||||||
    vbox(QString name, QString managerPath="VBoxManage");
 | 
					 | 
				
			||||||
    int Create(QString type="Windows7");
 | 
					 | 
				
			||||||
    int CreateDisk(QString path, int size);
 | 
					 | 
				
			||||||
    int CreateDiskControl(QString controlName="storage_controller_1");
 | 
					 | 
				
			||||||
    int MountDisk(QString diskPath, QString controlName="storage_controller_1", int port=0, int device=0);
 | 
					 | 
				
			||||||
    int MountISO(QString isoPath, QString controlName="storage_controller_1", int port=1, int device=0);
 | 
					 | 
				
			||||||
    int BootFirst(QString bootDrive);
 | 
					 | 
				
			||||||
    int SetNetBridge(QString netDriver);
 | 
					 | 
				
			||||||
    int SetCPU(int number, int cpuNum, int coreNum);
 | 
					 | 
				
			||||||
    int SetMemory(int memory);
 | 
					 | 
				
			||||||
    int SetRemote(bool setting);
 | 
					 | 
				
			||||||
    int SetRemoteConnectSetting(int port=5540);
 | 
					 | 
				
			||||||
    int Start(bool unShown=false);
 | 
					 | 
				
			||||||
    int Stop();
 | 
					 | 
				
			||||||
    int Delete();
 | 
					 | 
				
			||||||
    int SetDisplayMemory(int memory);
 | 
					 | 
				
			||||||
    int InstallGuessAdditions(QString controlName="storage_controller_1", int port=1, int device=0);
 | 
					 | 
				
			||||||
    int EnabledAudio();
 | 
					 | 
				
			||||||
    int EnabledClipboardMode();
 | 
					 | 
				
			||||||
    int EnabledDraganddrop();
 | 
					 | 
				
			||||||
    int ShareFile(QString name, QString path);
 | 
					 | 
				
			||||||
    int SetVBoxSVGA();
 | 
					 | 
				
			||||||
    int SetMousePS2();
 | 
					 | 
				
			||||||
    int SetKeyboardPS2();
 | 
					 | 
				
			||||||
    int OpenUSB();
 | 
					 | 
				
			||||||
    int EnabledUEFI(bool status);
 | 
					 | 
				
			||||||
    int AutoInstall(QString iso);
 | 
					 | 
				
			||||||
private:
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
};
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
#endif // VBOX_H
 | 
					 | 
				
			||||||
@ -1,144 +0,0 @@
 | 
				
			|||||||
<!--
 | 
					 | 
				
			||||||
WARNING: THIS IS AN AUTO-GENERATED FILE. CHANGES TO IT ARE LIKELY TO BE
 | 
					 | 
				
			||||||
OVERWRITTEN AND LOST. Changes to this xml configuration should be made using:
 | 
					 | 
				
			||||||
  virsh edit win7
 | 
					 | 
				
			||||||
or other application using the libvirt API.
 | 
					 | 
				
			||||||
-->
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
<domain type='kvm'>
 | 
					 | 
				
			||||||
  <name>win7</name>
 | 
					 | 
				
			||||||
  <uuid>721bf798-852e-4e2c-bfa7-c151037433b7</uuid>
 | 
					 | 
				
			||||||
  <metadata>
 | 
					 | 
				
			||||||
    <libosinfo:libosinfo xmlns:libosinfo="http://libosinfo.org/xmlns/libvirt/domain/1.0">
 | 
					 | 
				
			||||||
      <libosinfo:os id="http://microsoft.com/win/7"/>
 | 
					 | 
				
			||||||
    </libosinfo:libosinfo>
 | 
					 | 
				
			||||||
  </metadata>
 | 
					 | 
				
			||||||
  <memory unit='KiB'>4194304</memory>
 | 
					 | 
				
			||||||
  <currentMemory unit='KiB'>4194304</currentMemory>
 | 
					 | 
				
			||||||
  <vcpu placement='static'>2</vcpu>
 | 
					 | 
				
			||||||
  <os>
 | 
					 | 
				
			||||||
    <type arch='x86_64' machine='pc-q35-5.2'>hvm</type>
 | 
					 | 
				
			||||||
    <boot dev='hd'/>
 | 
					 | 
				
			||||||
  </os>
 | 
					 | 
				
			||||||
  <features>
 | 
					 | 
				
			||||||
    <acpi/>
 | 
					 | 
				
			||||||
    <apic/>
 | 
					 | 
				
			||||||
    <hyperv mode='custom'>
 | 
					 | 
				
			||||||
      <relaxed state='on'/>
 | 
					 | 
				
			||||||
      <vapic state='on'/>
 | 
					 | 
				
			||||||
      <spinlocks state='on' retries='8191'/>
 | 
					 | 
				
			||||||
    </hyperv>
 | 
					 | 
				
			||||||
    <vmport state='off'/>
 | 
					 | 
				
			||||||
  </features>
 | 
					 | 
				
			||||||
  <cpu mode='host-model' check='partial'/>
 | 
					 | 
				
			||||||
  <clock offset='localtime'>
 | 
					 | 
				
			||||||
    <timer name='rtc' tickpolicy='catchup'/>
 | 
					 | 
				
			||||||
    <timer name='pit' tickpolicy='delay'/>
 | 
					 | 
				
			||||||
    <timer name='hpet' present='no'/>
 | 
					 | 
				
			||||||
    <timer name='hypervclock' present='yes'/>
 | 
					 | 
				
			||||||
  </clock>
 | 
					 | 
				
			||||||
  <on_poweroff>destroy</on_poweroff>
 | 
					 | 
				
			||||||
  <on_reboot>restart</on_reboot>
 | 
					 | 
				
			||||||
  <on_crash>destroy</on_crash>
 | 
					 | 
				
			||||||
  <pm>
 | 
					 | 
				
			||||||
    <suspend-to-mem enabled='no'/>
 | 
					 | 
				
			||||||
    <suspend-to-disk enabled='no'/>
 | 
					 | 
				
			||||||
  </pm>
 | 
					 | 
				
			||||||
  <devices>
 | 
					 | 
				
			||||||
    <emulator>/usr/bin/qemu-system-x86_64</emulator>
 | 
					 | 
				
			||||||
    <disk type='file' device='disk'>
 | 
					 | 
				
			||||||
      <driver name='qemu' type='qcow2'/>
 | 
					 | 
				
			||||||
      <source file='/var/lib/libvirt/images/win7'/>
 | 
					 | 
				
			||||||
      <target dev='sda' bus='sata'/>
 | 
					 | 
				
			||||||
      <address type='drive' controller='0' bus='0' target='0' unit='0'/>
 | 
					 | 
				
			||||||
    </disk>
 | 
					 | 
				
			||||||
    <disk type='file' device='cdrom'>
 | 
					 | 
				
			||||||
      <driver name='qemu' type='raw'/>
 | 
					 | 
				
			||||||
      <source file='/media/gfdgd_xi/ventoy/XiaYuHao/System-ISO/Windows-ISO/Windows-7/Windows-7-SP1-x86.iso'/>
 | 
					 | 
				
			||||||
      <target dev='sdb' bus='sata'/>
 | 
					 | 
				
			||||||
      <readonly/>
 | 
					 | 
				
			||||||
      <address type='drive' controller='0' bus='0' target='0' unit='1'/>
 | 
					 | 
				
			||||||
    </disk>
 | 
					 | 
				
			||||||
    <disk type='file' device='cdrom'>
 | 
					 | 
				
			||||||
      <driver name='qemu' type='raw'/>
 | 
					 | 
				
			||||||
      <source file='/home/gfdgd_xi/Desktop/deep-wine-runner/VM/Windows7X86自动应答.iso'/>
 | 
					 | 
				
			||||||
      <target dev='sdc' bus='sata'/>
 | 
					 | 
				
			||||||
      <readonly/>
 | 
					 | 
				
			||||||
      <address type='drive' controller='0' bus='0' target='0' unit='2'/>
 | 
					 | 
				
			||||||
    </disk>
 | 
					 | 
				
			||||||
    <controller type='usb' index='0' model='ich9-ehci1'>
 | 
					 | 
				
			||||||
      <address type='pci' domain='0x0000' bus='0x00' slot='0x1d' function='0x7'/>
 | 
					 | 
				
			||||||
    </controller>
 | 
					 | 
				
			||||||
    <controller type='usb' index='0' model='ich9-uhci1'>
 | 
					 | 
				
			||||||
      <master startport='0'/>
 | 
					 | 
				
			||||||
      <address type='pci' domain='0x0000' bus='0x00' slot='0x1d' function='0x0' multifunction='on'/>
 | 
					 | 
				
			||||||
    </controller>
 | 
					 | 
				
			||||||
    <controller type='usb' index='0' model='ich9-uhci2'>
 | 
					 | 
				
			||||||
      <master startport='2'/>
 | 
					 | 
				
			||||||
      <address type='pci' domain='0x0000' bus='0x00' slot='0x1d' function='0x1'/>
 | 
					 | 
				
			||||||
    </controller>
 | 
					 | 
				
			||||||
    <controller type='usb' index='0' model='ich9-uhci3'>
 | 
					 | 
				
			||||||
      <master startport='4'/>
 | 
					 | 
				
			||||||
      <address type='pci' domain='0x0000' bus='0x00' slot='0x1d' function='0x2'/>
 | 
					 | 
				
			||||||
    </controller>
 | 
					 | 
				
			||||||
    <controller type='sata' index='0'>
 | 
					 | 
				
			||||||
      <address type='pci' domain='0x0000' bus='0x00' slot='0x1f' function='0x2'/>
 | 
					 | 
				
			||||||
    </controller>
 | 
					 | 
				
			||||||
    <controller type='pci' index='0' model='pcie-root'/>
 | 
					 | 
				
			||||||
    <controller type='pci' index='1' model='pcie-root-port'>
 | 
					 | 
				
			||||||
      <model name='pcie-root-port'/>
 | 
					 | 
				
			||||||
      <target chassis='1' port='0x10'/>
 | 
					 | 
				
			||||||
      <address type='pci' domain='0x0000' bus='0x00' slot='0x02' function='0x0' multifunction='on'/>
 | 
					 | 
				
			||||||
    </controller>
 | 
					 | 
				
			||||||
    <controller type='pci' index='2' model='pcie-root-port'>
 | 
					 | 
				
			||||||
      <model name='pcie-root-port'/>
 | 
					 | 
				
			||||||
      <target chassis='2' port='0x11'/>
 | 
					 | 
				
			||||||
      <address type='pci' domain='0x0000' bus='0x00' slot='0x02' function='0x1'/>
 | 
					 | 
				
			||||||
    </controller>
 | 
					 | 
				
			||||||
    <controller type='pci' index='3' model='pcie-root-port'>
 | 
					 | 
				
			||||||
      <model name='pcie-root-port'/>
 | 
					 | 
				
			||||||
      <target chassis='3' port='0x12'/>
 | 
					 | 
				
			||||||
      <address type='pci' domain='0x0000' bus='0x00' slot='0x02' function='0x2'/>
 | 
					 | 
				
			||||||
    </controller>
 | 
					 | 
				
			||||||
    <interface type='direct'>
 | 
					 | 
				
			||||||
      <mac address='52:54:00:a3:d2:72'/>
 | 
					 | 
				
			||||||
      <source dev='enp37s0' mode='bridge'/>
 | 
					 | 
				
			||||||
      <model type='e1000e'/>
 | 
					 | 
				
			||||||
      <address type='pci' domain='0x0000' bus='0x01' slot='0x00' function='0x0'/>
 | 
					 | 
				
			||||||
    </interface>
 | 
					 | 
				
			||||||
    <serial type='pty'>
 | 
					 | 
				
			||||||
      <target type='isa-serial' port='0'>
 | 
					 | 
				
			||||||
        <model name='isa-serial'/>
 | 
					 | 
				
			||||||
      </target>
 | 
					 | 
				
			||||||
    </serial>
 | 
					 | 
				
			||||||
    <console type='pty'>
 | 
					 | 
				
			||||||
      <target type='serial' port='0'/>
 | 
					 | 
				
			||||||
    </console>
 | 
					 | 
				
			||||||
    <input type='tablet' bus='usb'>
 | 
					 | 
				
			||||||
      <address type='usb' bus='0' port='1'/>
 | 
					 | 
				
			||||||
    </input>
 | 
					 | 
				
			||||||
    <input type='mouse' bus='ps2'/>
 | 
					 | 
				
			||||||
    <input type='keyboard' bus='ps2'/>
 | 
					 | 
				
			||||||
    <graphics type='spice' autoport='yes'>
 | 
					 | 
				
			||||||
      <listen type='address'/>
 | 
					 | 
				
			||||||
      <image compression='off'/>
 | 
					 | 
				
			||||||
    </graphics>
 | 
					 | 
				
			||||||
    <sound model='ich9'>
 | 
					 | 
				
			||||||
      <address type='pci' domain='0x0000' bus='0x00' slot='0x1b' function='0x0'/>
 | 
					 | 
				
			||||||
    </sound>
 | 
					 | 
				
			||||||
    <audio id='1' type='spice'/>
 | 
					 | 
				
			||||||
    <video>
 | 
					 | 
				
			||||||
      <model type='qxl' ram='65536' vram='65536' vgamem='16384' heads='1' primary='yes'/>
 | 
					 | 
				
			||||||
      <address type='pci' domain='0x0000' bus='0x00' slot='0x01' function='0x0'/>
 | 
					 | 
				
			||||||
    </video>
 | 
					 | 
				
			||||||
    <redirdev bus='usb' type='spicevmc'>
 | 
					 | 
				
			||||||
      <address type='usb' bus='0' port='2'/>
 | 
					 | 
				
			||||||
    </redirdev>
 | 
					 | 
				
			||||||
    <redirdev bus='usb' type='spicevmc'>
 | 
					 | 
				
			||||||
      <address type='usb' bus='0' port='3'/>
 | 
					 | 
				
			||||||
    </redirdev>
 | 
					 | 
				
			||||||
    <memballoon model='virtio'>
 | 
					 | 
				
			||||||
      <address type='pci' domain='0x0000' bus='0x02' slot='0x00' function='0x0'/>
 | 
					 | 
				
			||||||
    </memballoon>
 | 
					 | 
				
			||||||
  </devices>
 | 
					 | 
				
			||||||
</domain>
 | 
					 | 
				
			||||||
@ -1 +0,0 @@
 | 
				
			|||||||
<クdハ<>箆!ソ`。スン
 | 
					 | 
				
			||||||
@ -1,597 +0,0 @@
 | 
				
			|||||||
<?xml version="1.0" encoding="utf-8"?>
 | 
					 | 
				
			||||||
<!DOCTYPE TS>
 | 
					 | 
				
			||||||
<TS version="2.1">
 | 
					 | 
				
			||||||
<context>
 | 
					 | 
				
			||||||
    <name>MainWindow</name>
 | 
					 | 
				
			||||||
    <message>
 | 
					 | 
				
			||||||
        <location filename="mainwindow.ui" line="14"/>
 | 
					 | 
				
			||||||
        <source>Wine 运行器虚拟机安装工具</source>
 | 
					 | 
				
			||||||
        <oldsource>Windows 应用适配工具</oldsource>
 | 
					 | 
				
			||||||
        <translation type="unfinished"></translation>
 | 
					 | 
				
			||||||
    </message>
 | 
					 | 
				
			||||||
    <message>
 | 
					 | 
				
			||||||
        <location filename="mainwindow.ui" line="32"/>
 | 
					 | 
				
			||||||
        <location filename="mainwindow.ui" line="35"/>
 | 
					 | 
				
			||||||
        <source>设置</source>
 | 
					 | 
				
			||||||
        <translation type="unfinished"></translation>
 | 
					 | 
				
			||||||
    </message>
 | 
					 | 
				
			||||||
    <message>
 | 
					 | 
				
			||||||
        <location filename="mainwindow.ui" line="43"/>
 | 
					 | 
				
			||||||
        <source>镜像路径:</source>
 | 
					 | 
				
			||||||
        <translation type="unfinished"></translation>
 | 
					 | 
				
			||||||
    </message>
 | 
					 | 
				
			||||||
    <message>
 | 
					 | 
				
			||||||
        <location filename="mainwindow.ui" line="50"/>
 | 
					 | 
				
			||||||
        <source>请选择系统镜像</source>
 | 
					 | 
				
			||||||
        <translation type="unfinished"></translation>
 | 
					 | 
				
			||||||
    </message>
 | 
					 | 
				
			||||||
    <message>
 | 
					 | 
				
			||||||
        <location filename="mainwindow.ui" line="57"/>
 | 
					 | 
				
			||||||
        <source>浏览……</source>
 | 
					 | 
				
			||||||
        <translation type="unfinished"></translation>
 | 
					 | 
				
			||||||
    </message>
 | 
					 | 
				
			||||||
    <message>
 | 
					 | 
				
			||||||
        <location filename="mainwindow.ui" line="68"/>
 | 
					 | 
				
			||||||
        <source>系统版本:</source>
 | 
					 | 
				
			||||||
        <translation type="unfinished"></translation>
 | 
					 | 
				
			||||||
    </message>
 | 
					 | 
				
			||||||
    <message>
 | 
					 | 
				
			||||||
        <location filename="mainwindow.ui" line="89"/>
 | 
					 | 
				
			||||||
        <source>其它 Windows 系统(不支持自动安装,传统启动,推荐 Windows 7 及以下)</source>
 | 
					 | 
				
			||||||
        <translation type="unfinished"></translation>
 | 
					 | 
				
			||||||
    </message>
 | 
					 | 
				
			||||||
    <message>
 | 
					 | 
				
			||||||
        <location filename="mainwindow.ui" line="94"/>
 | 
					 | 
				
			||||||
        <source>其他 Windows 系统(不支持自动安装,UEFI 启动,推荐 Windows 8 及以上)</source>
 | 
					 | 
				
			||||||
        <translation type="unfinished"></translation>
 | 
					 | 
				
			||||||
    </message>
 | 
					 | 
				
			||||||
    <message>
 | 
					 | 
				
			||||||
        <location filename="mainwindow.ui" line="99"/>
 | 
					 | 
				
			||||||
        <source>安装 WIndows 11(不支持自动安装)</source>
 | 
					 | 
				
			||||||
        <translation type="unfinished"></translation>
 | 
					 | 
				
			||||||
    </message>
 | 
					 | 
				
			||||||
    <message>
 | 
					 | 
				
			||||||
        <location filename="mainwindow.ui" line="104"/>
 | 
					 | 
				
			||||||
        <source>安装其他 Windows XP(支持自动安装,只支持 VirtualBox)</source>
 | 
					 | 
				
			||||||
        <translation type="unfinished"></translation>
 | 
					 | 
				
			||||||
    </message>
 | 
					 | 
				
			||||||
    <message>
 | 
					 | 
				
			||||||
        <location filename="mainwindow.ui" line="109"/>
 | 
					 | 
				
			||||||
        <source>安装其他 Windows (支持自动安装,传统启动,只支持 VirtualBox)</source>
 | 
					 | 
				
			||||||
        <translation type="unfinished"></translation>
 | 
					 | 
				
			||||||
    </message>
 | 
					 | 
				
			||||||
    <message>
 | 
					 | 
				
			||||||
        <location filename="mainwindow.ui" line="114"/>
 | 
					 | 
				
			||||||
        <source>安装其他 Windows(支持自动安装,UEFI 启动,只支持 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><!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd">
 | 
					 | 
				
			||||||
<html><head><meta name="qrichtext" content="1" /><style type="text/css">
 | 
					 | 
				
			||||||
p, li { white-space: pre-wrap; }
 | 
					 | 
				
			||||||
</style></head><body style=" font-family:'Noto Sans CJK SC'; font-size:10.5pt; font-weight:400; font-style:normal;">
 | 
					 | 
				
			||||||
<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-size:11pt;">UOS 3a4000 用户在使用 Qemu 时可能会出现虚拟机无法正常开机的问题,需要安装/降级到以下链接的版本:</span></p>
 | 
					 | 
				
			||||||
<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-size:11pt;">蓝奏云:</span><a href="https://gfdgdxi.lanzoue.com/b01rk9wza"><span style=" font-size:11pt; text-decoration: underline; color:#0082fa;">https://gfdgdxi.lanzoue.com/b01rk9wza</span></a><span style=" font-size:11pt;"> 密码:6wvf</span></p>
 | 
					 | 
				
			||||||
<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-size:11pt;">诚通网盘:</span><a href="http://ctfile.gfdgdxi.top/d/31540479-58662214-c46520?p=2061"><span style=" font-size:11pt; text-decoration: underline; color:#0082fa;">http://ctfile.gfdgdxi.top/d/31540479-58662214-c46520?p=2061</span></a><span style=" font-size:11pt;"> (访问密码: 2061)</span></p>
 | 
					 | 
				
			||||||
<hr />
 | 
					 | 
				
			||||||
<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-size:11pt;">注:Qemu 跨架构效率较低,如无特殊情况不建议跨架构/不开硬件加速(如 kvm)运行 Qemu</span></p>
 | 
					 | 
				
			||||||
<hr />
 | 
					 | 
				
			||||||
<p style=" margin-top:12px; margin-bottom:12px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-size:10pt;">如何安装系统?使用迅雷或者网盘下载以下任意一个链接的 ISO 镜像然后在上面选择即可:</span></p>
 | 
					 | 
				
			||||||
<p style=" margin-top:12px; margin-bottom:12px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-size:10pt;">123 网盘链接:</span><a href="https://www.123pan.com/s/pDSKVv-oypWv"><span style=" font-size:11pt; text-decoration: underline; color:#0082fa;">https://www.123pan.com/s/pDSKVv-oypWv</span></a></p>
 | 
					 | 
				
			||||||
<p style=" margin-top:12px; margin-bottom:12px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-size:10pt;">迅雷网盘:</span><a href="https://pan.xunlei.com/s/VNKMz3wgbYHg6JIh50ZKIc7pA1?pwd=35e5"><span style=" font-size:11pt; text-decoration: underline; color:#0082fa;">https://pan.xunlei.com/s/VNKMz3wgbYHg6JIh50ZKIc7pA1?pwd=35e5</span></a><span style=" font-size:10pt;">  提取码:35e5</span></p>
 | 
					 | 
				
			||||||
<p style=" margin-top:12px; margin-bottom:12px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-size:10pt;">百度网盘:</span><a href="https://pan.baidu.com/s/19WbvinITCQJFZpAdZutrjg?pwd=me4y"><span style=" font-size:11pt; text-decoration: underline; color:#0082fa;">https://pan.baidu.com/s/19WbvinITCQJFZpAdZutrjg?pwd=me4y</span></a><span style=" font-size:10pt;"> 提取码: me4y</span></p>
 | 
					 | 
				
			||||||
<p style=" margin-top:12px; margin-bottom:12px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-size:10pt;">诚通网盘:</span><a href="http://ctfile.gfdgdxi.top/d/31540479-58662220-3590cf?p=2061"><span style=" font-size:11pt; text-decoration: underline; color:#0082fa;">http://ctfile.gfdgdxi.top/d/31540479-58662220-3590cf?p=2061</span></a><span style=" font-size:10pt;"> (访问密码: 2061)</span></p>
 | 
					 | 
				
			||||||
<p style=" margin-top:12px; margin-bottom:12px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-size:10pt;">(如果下载这个,系统版本选第一项,一般推荐这个)</span><a href="ed2k://|file|cn_windows_7_ultimate_with_sp1_x86_dvd_u_677486.iso|2653276160|7503E4B9B8738DFCB95872445C72AEFB|/"><span style=" font-size:11pt; text-decoration: underline; color:#0082fa;">ed2k://|file|cn_windows_7_ultimate_with_sp1_x86_dvd_u_677486.iso|2653276160|7503E4B9B8738DFCB95872445C72AEFB|/</span></a></p>
 | 
					 | 
				
			||||||
<p style=" margin-top:12px; margin-bottom:12px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-size:10pt;">(如果下载这个,系统版本选第二项)</span><a href="ed2k://|file|cn_windows_7_ultimate_with_sp1_x64_dvd_u_677408.iso|3420557312|B58548681854236C7939003B583A8078|/"><span style=" font-size:11pt; text-decoration: underline; color:#0082fa;">ed2k://|file|cn_windows_7_ultimate_with_sp1_x64_dvd_u_677408.iso|3420557312|B58548681854236C7939003B583A8078|/</span></a></p>
 | 
					 | 
				
			||||||
<hr />
 | 
					 | 
				
			||||||
<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-size:11pt; font-weight:600;">常用 Windows 软件:</span></p>
 | 
					 | 
				
			||||||
<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-size:11pt;">百度网盘:链接: </span><a href="https://pan.baidu.com/s/1D1NSy7k7XBnOZL_tNTnG6g?pwd=7s2p"><span style=" font-size:11pt; text-decoration: underline; color:#0082fa;">https://pan.baidu.com/s/1D1NSy7k7XBnOZL_tNTnG6g?pwd=7s2p</span></a><span style=" font-size:11pt;"> 提取码: 7s2p </span></p>
 | 
					 | 
				
			||||||
<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-size:11pt;">诚通网盘:</span><a href="http://ctfile.gfdgdxi.top/d/31540479-58659214-0732a8?p=2061"><span style=" font-size:11pt; text-decoration: underline; color:#0082fa;">http://ctfile.gfdgdxi.top/d/31540479-58659214-0732a8?p=2061</span></a><span style=" font-size:11pt;"> (访问密码: 2061)</span></p>
 | 
					 | 
				
			||||||
<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-size:11pt;">123网盘:</span><a href="https://www.123pan.com/s/pDSKVv-uCBWv.html"><span style=" font-size:11pt; text-decoration: underline; color:#0082fa;">https://www.123pan.com/s/pDSKVv-uCBWv.html</span></a></p>
 | 
					 | 
				
			||||||
<hr /></body></html></source>
 | 
					 | 
				
			||||||
        <translation type="unfinished"></translation>
 | 
					 | 
				
			||||||
    </message>
 | 
					 | 
				
			||||||
    <message>
 | 
					 | 
				
			||||||
        <location filename="mainwindow.ui" line="283"/>
 | 
					 | 
				
			||||||
        <source><!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd">
 | 
					 | 
				
			||||||
<html><head><meta name="qrichtext" content="1" /><style type="text/css">
 | 
					 | 
				
			||||||
p, li { white-space: pre-wrap; }
 | 
					 | 
				
			||||||
</style></head><body style=" font-family:'Noto Sans CJK SC'; font-size:10.5pt; font-weight:400; font-style:normal;">
 | 
					 | 
				
			||||||
<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-size:26pt; font-weight:600;">给小白的一段话</span></p>
 | 
					 | 
				
			||||||
<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">其实本质上跑完安装程序就没有然后了,顶多如果想要运行舒服一点点,可以安装加强功能,直接拉到最底下看就可以了,<span style=" font-weight:600; font-style:italic; text-decoration: underline;">只限使用 VirtualBox</span></p>
 | 
					 | 
				
			||||||
<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-weight:600; font-style:italic; text-decoration: underline;">如果你是用非 X86 PC,那暂时只能使用 qemu(没 kvm),且跨架构的性能损失很大,推荐使用 Windows XP 而非 Windows 7</span></p>
 | 
					 | 
				
			||||||
<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">如果爱折腾的话,下面的都看看也无所谓的,想看往下翻就可以了</p>
 | 
					 | 
				
			||||||
<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-weight:600; text-decoration: underline;">(这里的帮助更新可能不会那么及时,更详细/新的帮助可以看:https://gitee.com/gfdgd-xi/deep-wine-runner/wikis 或 https://gitee.com/gfdgd-xi/wine-runner-wiki)</span></p>
 | 
					 | 
				
			||||||
<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">(如果鼠标被锁定到里面了按下键盘右边的“Ctrl”键就可以了,<span style=" font-weight:600; font-style:italic; text-decoration: underline;">qemu则是 Ctrl+Alt+G</span> )</p>
 | 
					 | 
				
			||||||
<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">VirtualBox 可以安装增强功能以优化体验,安装方法往下翻即可查询</p>
 | 
					 | 
				
			||||||
<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">Qemu 可以安装 Virtio 以优化体验,下载链接:<a href="https://fedorapeople.org/groups/virt/virtio-win/direct-downloads/archive-virtio/"><span style=" font-size:11pt; text-decoration: underline; color:#0082fa;">https://fedorapeople.org/groups/virt/virtio-win/direct-downloads/archive-virtio/</span></a></p>
 | 
					 | 
				
			||||||
<hr />
 | 
					 | 
				
			||||||
<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><br /></p>
 | 
					 | 
				
			||||||
<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:26pt; font-weight:600;"><br /></p>
 | 
					 | 
				
			||||||
<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:26pt; font-weight:600;"><br /></p>
 | 
					 | 
				
			||||||
<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:26pt; font-weight:600;"><br /></p>
 | 
					 | 
				
			||||||
<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:26pt; font-weight:600;"><br /></p>
 | 
					 | 
				
			||||||
<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:26pt; font-weight:600;"><br /></p>
 | 
					 | 
				
			||||||
<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:26pt; font-weight:600;"><br /></p>
 | 
					 | 
				
			||||||
<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:26pt; font-weight:600;"><br /></p>
 | 
					 | 
				
			||||||
<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:26pt; font-weight:600;"><br /></p>
 | 
					 | 
				
			||||||
<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:26pt; font-weight:600;"><br /></p>
 | 
					 | 
				
			||||||
<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:26pt; font-weight:600;"><br /></p>
 | 
					 | 
				
			||||||
<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:26pt; font-weight:600;"><br /></p>
 | 
					 | 
				
			||||||
<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:26pt; font-weight:600;"><br /></p>
 | 
					 | 
				
			||||||
<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-size:26pt; font-weight:600;">安装是否需要人工进行操作?</span></p>
 | 
					 | 
				
			||||||
<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">如果您下载的镜像本程序支持,则大部分不用,已经尽量省去了让新手头疼的虚拟机程序安装,创建、设置虚拟机,虚拟磁盘分区,寻找原版镜像文件等内容</p>
 | 
					 | 
				
			||||||
<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><img src=":/picture/截图/截图_VirtualBox Machine_20220712191756.png" /></p>
 | 
					 | 
				
			||||||
<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">但有些设置依旧需要人工自行设置,例如安装界面密钥的输入、系统的激活(涉及版权问题,不会考虑省略)、增强功能的安装、需要使用的软件等等</p>
 | 
					 | 
				
			||||||
<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><img src=":/picture/截图/截图_VirtualBox Machine_20220712192850.png" /></p>
 | 
					 | 
				
			||||||
<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><img src=":/picture/截图/截图_VirtualBox Machine_20220712193527.png" /></p>
 | 
					 | 
				
			||||||
<hr />
 | 
					 | 
				
			||||||
<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-size:26pt; font-weight:600;">什么样的镜像本程序(可能)不支持自动安装?</span></p>
 | 
					 | 
				
			||||||
<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">非 Windows 7 镜像可能不支持自动安装(纯的 Windows 7 企业版镜像可能不支持自动安装),不保证系统能自动安装成功,例如 Windows XP、Windows 10、Deepin、Ubuntu 等等</p>
 | 
					 | 
				
			||||||
<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><br /></p>
 | 
					 | 
				
			||||||
<hr />
 | 
					 | 
				
			||||||
<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-size:26pt; font-weight:600;">默认的虚拟机设置不习惯怎么改?</span></p>
 | 
					 | 
				
			||||||
<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-size:11pt;">1、打开启动器,打开 Oracle VM VirtualBox 程序</span></p>
 | 
					 | 
				
			||||||
<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-size:11pt;">2、选择名字为“Windows”的虚拟机,然后在右边点击设置</span></p>
 | 
					 | 
				
			||||||
<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><img src=":/picture/截图/截图_VirtualBox Manager_20220712223602.png" /></p>
 | 
					 | 
				
			||||||
<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-size:11pt;">3、在这里修改即可</span></p>
 | 
					 | 
				
			||||||
<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><img src=":/picture/截图/截图_VirtualBox_20220712223705.png" /></p>
 | 
					 | 
				
			||||||
<hr />
 | 
					 | 
				
			||||||
<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-size:26pt; font-weight:600;">安装加强功能有什么好处?(只限使用 VirtualBox)</span></p>
 | 
					 | 
				
			||||||
<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">1、支持鼠标自由从虚拟机和实体机切换</p>
 | 
					 | 
				
			||||||
<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">2、支持虚拟机根据窗口大小自动设置分辨率</p>
 | 
					 | 
				
			||||||
<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">3、支持文件共享、剪切板共享、文件拖放</p>
 | 
					 | 
				
			||||||
<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">4、支持无缝模式</p>
 | 
					 | 
				
			||||||
<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><img src=":/picture/截图/截图_选择区域_20220712224639.png" /></p>
 | 
					 | 
				
			||||||
<hr />
 | 
					 | 
				
			||||||
<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-size:26pt; font-weight:600;">如何安装加强功能?</span></p>
 | 
					 | 
				
			||||||
<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">1、点击“设备”=》“加强功能”</p>
 | 
					 | 
				
			||||||
<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><img src=":/picture/截图_VirtualBox Machine_20220712142929.png" /></p>
 | 
					 | 
				
			||||||
<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">2、打开“计算机”,找到名为“VirtualBox Guest Additions”的光盘,双击进入,然后双击打开名为“VBoxWindowsAdditions”的程序</p>
 | 
					 | 
				
			||||||
<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><img src=":/picture/截图/截图_VirtualBox Machine_20220712143006.png" /></p>
 | 
					 | 
				
			||||||
<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">3、在弹出的界面点击“是”</p>
 | 
					 | 
				
			||||||
<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><img src=":/picture/截图/截图_VirtualBox Machine_20220712143018.png" /></p>
 | 
					 | 
				
			||||||
<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">4、一直点“Next”</p>
 | 
					 | 
				
			||||||
<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><img src=":/picture/截图/截图_VirtualBox Machine_20220712143029.png" /></p>
 | 
					 | 
				
			||||||
<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><img src=":/picture/截图/截图_VirtualBox Machine_20220712143037.png" /></p>
 | 
					 | 
				
			||||||
<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-size:11pt;">5、全部选择,然后点击“Install”进行安装</span></p>
 | 
					 | 
				
			||||||
<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><img src=":/picture/截图/截图_VirtualBox Machine_20220712143044.png" /></p>
 | 
					 | 
				
			||||||
<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-size:11pt;">6、等待安装完毕后,选择“Reboot now”然后点击“Finish”重启此虚拟机即可安装成功(选择“Reboot now”并点“Finish”会自动重新启动)</span></p>
 | 
					 | 
				
			||||||
<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><img src=":/picture/截图/截图_VirtualBox Machine_20220712143103.png" /></p></body></html></source>
 | 
					 | 
				
			||||||
        <translation type="unfinished"></translation>
 | 
					 | 
				
			||||||
    </message>
 | 
					 | 
				
			||||||
    <message>
 | 
					 | 
				
			||||||
        <location filename="mainwindow.ui" line="421"/>
 | 
					 | 
				
			||||||
        <source><!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd">
 | 
					 | 
				
			||||||
<html><head><meta name="qrichtext" content="1" /><style type="text/css">
 | 
					 | 
				
			||||||
p, li { white-space: pre-wrap; }
 | 
					 | 
				
			||||||
</style></head><body style=" font-family:'Noto Sans CJK SC'; font-size:10.5pt; font-weight:400; font-style:normal;">
 | 
					 | 
				
			||||||
<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">此为 wine 运行器附属组件(虽然违背了“Wine Is Not An Emulator”&lt;Wine 不是一个模拟器&gt;的原意),旨在能更加完美、简单的运行 Windows 应用</p>
 | 
					 | 
				
			||||||
<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">本程序基于 C++ Qt、Python 和 Virtualbox 制作,通过运行安装 Windows 操作系统的虚拟机实现在 Linux 运行 Windows exe 程序的功能。</p>
 | 
					 | 
				
			||||||
<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">基于 GPL V3 协议开源</p>
 | 
					 | 
				
			||||||
<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">项目地址:</p>
 | 
					 | 
				
			||||||
<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">    Gitee:<a href="https://gitee.com/gfdgd-xi/deep-wine-runner"><span style=" font-size:11pt; text-decoration: underline; color:#0082fa;">https://gitee.com/gfdgd-xi/deep-wine-runner</span></a></p>
 | 
					 | 
				
			||||||
<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">    Github:<a href="https://github.com/gfdgd-xi/deep-wine-runner"><span style=" font-size:11pt; text-decoration: underline; color:#0082fa;">https://github.com/gfdgd-xi/deep-wine-runner</span></a></p>
 | 
					 | 
				
			||||||
<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">此组件也有非常大的缺点,就是相比于 Wine,会需要占用大量的空间、安装需要大量的时间、某些情况下需要相比于 Wine 需要消耗更多的系统资源,但可以更加完美、流畅的运行 Windows 应用,会尽量减少因为缺少或未实现导致的 Windows exe 程序运行异常</p>
 | 
					 | 
				
			||||||
<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">该组件制作者:gfdgd xi</p>
 | 
					 | 
				
			||||||
<hr />
 | 
					 | 
				
			||||||
<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><br /></p></body></html></source>
 | 
					 | 
				
			||||||
        <translation type="unfinished"></translation>
 | 
					 | 
				
			||||||
    </message>
 | 
					 | 
				
			||||||
    <message>
 | 
					 | 
				
			||||||
        <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>虚拟机测试(X86、Qemu)</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><p>程序版本号:</source>
 | 
					 | 
				
			||||||
        <translation type="unfinished"></translation>
 | 
					 | 
				
			||||||
    </message>
 | 
					 | 
				
			||||||
    <message>
 | 
					 | 
				
			||||||
        <location filename="mainwindow.cpp" line="90"/>
 | 
					 | 
				
			||||||
        <source></p><p>安装包构建时间:</source>
 | 
					 | 
				
			||||||
        <translation type="unfinished"></translation>
 | 
					 | 
				
			||||||
    </message>
 | 
					 | 
				
			||||||
    <message>
 | 
					 | 
				
			||||||
        <location filename="mainwindow.cpp" line="90"/>
 | 
					 | 
				
			||||||
        <source></p><p>该组件构建时间:</source>
 | 
					 | 
				
			||||||
        <translation type="unfinished"></translation>
 | 
					 | 
				
			||||||
    </message>
 | 
					 | 
				
			||||||
    <message>
 | 
					 | 
				
			||||||
        <location filename="mainwindow.cpp" line="92"/>
 | 
					 | 
				
			||||||
        <source><hr/><h1>谢明列表</h1></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><h3>远程服务</h3></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><h3>基础设置</h3></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>
 | 
					 | 
				
			||||||
@ -1,27 +0,0 @@
 | 
				
			|||||||
#!/usr/bin/env python3
 | 
					 | 
				
			||||||
import os
 | 
					 | 
				
			||||||
import sys
 | 
					 | 
				
			||||||
import subprocess
 | 
					 | 
				
			||||||
import PyQt5.QtWidgets as QtWidgets
 | 
					 | 
				
			||||||
programPath = os.path.split(os.path.realpath(__file__))[0]  # 返回 string
 | 
					 | 
				
			||||||
arch = subprocess.getoutput("dpkg --print-architecture").replace(" ", "").replace("\n", "")
 | 
					 | 
				
			||||||
if os.path.exists(f"{programPath}/VirtualMachine-{arch}"):
 | 
					 | 
				
			||||||
    os.system(f"{programPath}/VirtualMachine-{arch}")
 | 
					 | 
				
			||||||
    exit()
 | 
					 | 
				
			||||||
# 判断文件是否解压
 | 
					 | 
				
			||||||
if not os.path.exists(f"{programPath}/VirtualMachine-amd64"):
 | 
					 | 
				
			||||||
    # 解压文件
 | 
					 | 
				
			||||||
    os.system(f"cd '{programPath}' ; tar -xvf vm.tar.gz")
 | 
					 | 
				
			||||||
    if os.path.exists(f"{programPath}/VirtualMachine-{arch}"):
 | 
					 | 
				
			||||||
        os.system(f"{programPath}/VirtualMachine-{arch}")
 | 
					 | 
				
			||||||
        exit()
 | 
					 | 
				
			||||||
app = QtWidgets.QApplication(sys.argv)
 | 
					 | 
				
			||||||
QtWidgets.QMessageBox.information(None, "提示", "虚拟机安装器暂不支持此系统")
 | 
					 | 
				
			||||||
exit(1)
 | 
					 | 
				
			||||||
# 后面已废弃
 | 
					 | 
				
			||||||
# 只能使用 Qemu User 运行程序
 | 
					 | 
				
			||||||
if os.path.exists("/usr/lib/x86_64-linux-gnu/") and not os.system("which qemu-x86_64"):
 | 
					 | 
				
			||||||
    os.system(f"qemu-x86_64 '{programPath}/VirtualMachine-x86_64'")
 | 
					 | 
				
			||||||
    exit()
 | 
					 | 
				
			||||||
print("未安装环境,立即安装!")
 | 
					 | 
				
			||||||
os.system(f"python3 '{programPath}/../RunCommandWithTerminal.py' '{programPath}/../InstallRuntime/amd64.sh'")
 | 
					 | 
				
			||||||
							
								
								
									
										1
									
								
								VM/VirtualMachine
									
									
									
									
									
										Symbolic link
									
								
							
							
						
						@ -0,0 +1 @@
 | 
				
			|||||||
 | 
					mainwindow.py
 | 
				
			||||||
							
								
								
									
										0
									
								
								VM-source/application-vnd.oasis.opendocument.text.svg → VM/application-vnd.oasis.opendocument.text.svg
									
									
									
									
									
										
										
										Normal file → Executable file
									
								
							
							
						
						| 
		 Before Width: | Height: | Size: 2.5 KiB After Width: | Height: | Size: 2.5 KiB  | 
| 
		 Before Width: | Height: | Size: 15 KiB After Width: | Height: | Size: 15 KiB  | 
							
								
								
									
										242
									
								
								VM/buildvbox.py
									
									
									
									
									
										
										
										Normal file → Executable file
									
								
							
							
						
						@ -1 +1,241 @@
 | 
				
			|||||||
#!/usr/bin/env python3
 | 
					# *
 | 
				
			||||||
 | 
					# * gfdgd xi
 | 
				
			||||||
 | 
					# * 依照 GPLV3 开源
 | 
				
			||||||
 | 
					# *
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					import os
 | 
				
			||||||
 | 
					import psutil
 | 
				
			||||||
 | 
					import subprocess
 | 
				
			||||||
 | 
					from vbox import *
 | 
				
			||||||
 | 
					from qemu import *
 | 
				
			||||||
 | 
					from infoUtils import *
 | 
				
			||||||
 | 
					from PyQt5.QtNetwork import *
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					class buildvbox:
 | 
				
			||||||
 | 
					    def homePath(self):
 | 
				
			||||||
 | 
					        return os.getenv("HOME")
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    def applicationDirPath(self):
 | 
				
			||||||
 | 
					        return os.path.split(os.path.realpath(__file__))[0]  # 返回 string
 | 
				
			||||||
 | 
					    
 | 
				
			||||||
 | 
					    # 清屏
 | 
				
			||||||
 | 
					    def CleanScreen(self):
 | 
				
			||||||
 | 
					        if(os.system("/etc/os-version")):
 | 
				
			||||||
 | 
					            # Unix
 | 
				
			||||||
 | 
					            os.system("clear")
 | 
				
			||||||
 | 
					            return
 | 
				
			||||||
 | 
					        # Windows
 | 
				
			||||||
 | 
					        os.system("cls")
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    # 获取 CPU 个数
 | 
				
			||||||
 | 
					    def GetCPUSocket(self) -> int:
 | 
				
			||||||
 | 
					        # 获取命令返回值
 | 
				
			||||||
 | 
					        value = int(subprocess.getoutput("bash -c 'cat /proc/cpuinfo | grep \"cpu cores\" | uniq | wc -l'"))
 | 
				
			||||||
 | 
					        # 判断异常值,例如没挂载 /proc
 | 
				
			||||||
 | 
					        if (value <= 0):
 | 
				
			||||||
 | 
					            value = 1
 | 
				
			||||||
 | 
					        return value
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    # 获取 CPU 核心数
 | 
				
			||||||
 | 
					    def GetCPUCore(self) -> int:
 | 
				
			||||||
 | 
					        value = int(subprocess.getoutput("bash -c \"grep 'core id' /proc/cpuinfo | sort -u | wc -l\""))
 | 
				
			||||||
 | 
					        # 判断异常值,例如没挂载 /proc
 | 
				
			||||||
 | 
					        if(value <= 0):
 | 
				
			||||||
 | 
					            value = 1
 | 
				
			||||||
 | 
					        return value
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    def GetNet(self) -> str:
 | 
				
			||||||
 | 
					        netList = QNetworkInterface.allInterfaces()
 | 
				
			||||||
 | 
					        for net in netList:
 | 
				
			||||||
 | 
					            print("Device:", net.name())
 | 
				
			||||||
 | 
					            entryList = net.addressEntries()
 | 
				
			||||||
 | 
					            for entry in entryList:
 | 
				
			||||||
 | 
					                ip = entry.ip().toString()
 | 
				
			||||||
 | 
					                print("IP Address: ", ip)
 | 
				
			||||||
 | 
					                if(ip != "127.0.0.1" and ip != "192.168.250.1" and ip != "::1" and net.name() != "lo"):
 | 
				
			||||||
 | 
					                    # 返回网卡名称
 | 
				
			||||||
 | 
					                    return net.name()
 | 
				
			||||||
 | 
					        return ""
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    def Download(self, url: str, path: str, fileName: str) -> int:
 | 
				
			||||||
 | 
					        return os.system(("aria2c -x 16 -s 16 -c " + url + " -d " + path + " -o " + fileName))
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    def __init__(self, isoPath: str, id = 0, vm = 0):
 | 
				
			||||||
 | 
					        programPath = self.applicationDirPath()
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        net = self.GetNet()
 | 
				
			||||||
 | 
					        print("使用网卡:", net)
 | 
				
			||||||
 | 
					        if(vm == 0):
 | 
				
			||||||
 | 
					            # Qemu
 | 
				
			||||||
 | 
					            vm = qemu("Windows")
 | 
				
			||||||
 | 
					            setISOAlready = 0
 | 
				
			||||||
 | 
					            if (id == 0):
 | 
				
			||||||
 | 
					                vm.Create("Windows7")
 | 
				
			||||||
 | 
					                vm.SetDisplayMemory(32)
 | 
				
			||||||
 | 
					            elif (id == 1):
 | 
				
			||||||
 | 
					                vm.Create("Windows7_64")
 | 
				
			||||||
 | 
					                vm.SetDisplayMemory(32)
 | 
				
			||||||
 | 
					            elif (id == 2):
 | 
				
			||||||
 | 
					                vm.Create("WindowsNT_64")
 | 
				
			||||||
 | 
					                vm.SetDisplayMemory(32)
 | 
				
			||||||
 | 
					            elif (id == 3):
 | 
				
			||||||
 | 
					                vm.Create("WindowsNT_64")
 | 
				
			||||||
 | 
					                vm.SetDisplayMemory(32)
 | 
				
			||||||
 | 
					                vm.EnabledUEFI(True)
 | 
				
			||||||
 | 
					            elif (id == 4):
 | 
				
			||||||
 | 
					                vm.Create("Windows11_64")
 | 
				
			||||||
 | 
					                vm.SetDisplayMemory(128)
 | 
				
			||||||
 | 
					                vm.EnabledUEFI(True)
 | 
				
			||||||
 | 
					                setISOAlready = 1
 | 
				
			||||||
 | 
					            elif (id == 5):
 | 
				
			||||||
 | 
					                vm.Create("WindowsXP_32")
 | 
				
			||||||
 | 
					                vm.SetDisplayMemory(32)
 | 
				
			||||||
 | 
					                setISOAlready = 1
 | 
				
			||||||
 | 
					            elif (id == 6):
 | 
				
			||||||
 | 
					                vm.Create("WindowsNT_64")
 | 
				
			||||||
 | 
					                vm.SetDisplayMemory(32)
 | 
				
			||||||
 | 
					                setISOAlready = 1
 | 
				
			||||||
 | 
					            elif (id == 7):
 | 
				
			||||||
 | 
					                vm.Create("WindowsNT_64")
 | 
				
			||||||
 | 
					                vm.SetDisplayMemory(32)
 | 
				
			||||||
 | 
					                vm.EnabledUEFI(True)
 | 
				
			||||||
 | 
					                setISOAlready = 1
 | 
				
			||||||
 | 
					            elif (id == 8):
 | 
				
			||||||
 | 
					                vm.Create("WindowsNT_64")
 | 
				
			||||||
 | 
					                vm.SetDisplayMemory(32)
 | 
				
			||||||
 | 
					                vm.UseArmhfEFI()
 | 
				
			||||||
 | 
					                setISOAlready = 1
 | 
				
			||||||
 | 
					            elif (id == 9):
 | 
				
			||||||
 | 
					                vm.Create("WindowsNT_64")
 | 
				
			||||||
 | 
					                vm.SetDisplayMemory(32)
 | 
				
			||||||
 | 
					                vm.UseAarch64EFI()
 | 
				
			||||||
 | 
					                setISOAlready = 1
 | 
				
			||||||
 | 
					            vm.CreateDiskControl()
 | 
				
			||||||
 | 
					            #vm.CreateDiskControl("storage_controller_2")
 | 
				
			||||||
 | 
					            if(id == 0 or id == 1):
 | 
				
			||||||
 | 
					                vm.CreateDisk(self.homePath() + "/Qemu/Windows/Windows.qcow2", 131072)
 | 
				
			||||||
 | 
					            else:
 | 
				
			||||||
 | 
					                vm.CreateDisk(self.homePath() + "/Qemu/Windows/Windows.qcow2", 131072 * 5)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					            #vm.MountDisk(self.homePath() + "/Qemu/Windows/Windows.qcow2")
 | 
				
			||||||
 | 
					            vm.MountMainDisk(self.homePath() + "/Qemu/Windows/Windows.qcow2")
 | 
				
			||||||
 | 
					            if(os.system("/opt/apps/deepin-wine-runner-qemu-system-extra/files/resources/virtio-win.iso")):
 | 
				
			||||||
 | 
					                vm.MountISO("/opt/apps/deepin-wine-runner-qemu-system-extra/files/resources/virtio-win.iso", "storage_controller_2", 1, 3)
 | 
				
			||||||
 | 
					            if(not setISOAlready):
 | 
				
			||||||
 | 
					                vm.MountISO(isoPath, "storage_controller_1", 0, 1)
 | 
				
			||||||
 | 
					                if (id == 0):
 | 
				
			||||||
 | 
					                    if(os.system(programPath + "/Windows7X86Auto.iso")):
 | 
				
			||||||
 | 
					                        vm.MountISO(programPath + "/Windows7X86Auto.iso", "storage_controller_1", 1, 2)
 | 
				
			||||||
 | 
					                elif (id == 1):
 | 
				
			||||||
 | 
					                    if(os.system(programPath + "/Windows7X64Auto.iso")):
 | 
				
			||||||
 | 
					                        vm.MountISO(programPath + "/Windows7X64Auto.iso", "storage_controller_1", 1, 2)
 | 
				
			||||||
 | 
					            else:
 | 
				
			||||||
 | 
					                #vm.AutoInstall(isoPath)
 | 
				
			||||||
 | 
					                if(isoPath != ""):
 | 
				
			||||||
 | 
					                    vm.MountMainISO(isoPath)
 | 
				
			||||||
 | 
					            vm.SetCPU(psutil.cpu_count(), self.GetCPUSocket(), self.GetCPUCore())
 | 
				
			||||||
 | 
					            memory = 0
 | 
				
			||||||
 | 
					            memoryAll = 0
 | 
				
			||||||
 | 
					            swap = 0
 | 
				
			||||||
 | 
					            swapAll = 0
 | 
				
			||||||
 | 
					            # TODO
 | 
				
			||||||
 | 
					            memory, memoryAll, swap, swapAll = infoUtils().memoryRate()
 | 
				
			||||||
 | 
					            vm.SetMemory(int(memoryAll / 3 / 1024))
 | 
				
			||||||
 | 
					            vm.SetNetBridge(net)
 | 
				
			||||||
 | 
					            vm.EnabledAudio()
 | 
				
			||||||
 | 
					            vm.EnabledClipboardMode()
 | 
				
			||||||
 | 
					            vm.EnabledDraganddrop()
 | 
				
			||||||
 | 
					            vm.SetVBoxSVGA()
 | 
				
			||||||
 | 
					            vm.SetMousePS2()
 | 
				
			||||||
 | 
					            vm.SetKeyboardPS2()
 | 
				
			||||||
 | 
					            vm.OpenUSB()
 | 
				
			||||||
 | 
					            vm.ShareFile("ROOT", "/")
 | 
				
			||||||
 | 
					            vm.ShareFile("HOME", self.homePath())
 | 
				
			||||||
 | 
					            # TODO
 | 
				
			||||||
 | 
					            if (id == 8):
 | 
				
			||||||
 | 
					                vm.StartArmhf()
 | 
				
			||||||
 | 
					            elif (id == 9):
 | 
				
			||||||
 | 
					                vm.StartAarch64()
 | 
				
			||||||
 | 
					            else:
 | 
				
			||||||
 | 
					                vm.Start()
 | 
				
			||||||
 | 
					        elif(vm == 1):
 | 
				
			||||||
 | 
					            # VirtualBox
 | 
				
			||||||
 | 
					            vm = vbox("Windows")
 | 
				
			||||||
 | 
					            setISOAlready = 1
 | 
				
			||||||
 | 
					            if (id == 0):
 | 
				
			||||||
 | 
					                vm.Create("Windows7")
 | 
				
			||||||
 | 
					                vm.SetDisplayMemory(32)
 | 
				
			||||||
 | 
					            elif (id == 1):
 | 
				
			||||||
 | 
					                vm.Create("Windows7_64")
 | 
				
			||||||
 | 
					                vm.SetDisplayMemory(32)
 | 
				
			||||||
 | 
					            elif (id == 2):
 | 
				
			||||||
 | 
					                vm.Create("WindowsNT_64")
 | 
				
			||||||
 | 
					                vm.SetDisplayMemory(32)
 | 
				
			||||||
 | 
					            elif (id == 3):
 | 
				
			||||||
 | 
					                vm.Create("WindowsNT_64")
 | 
				
			||||||
 | 
					                vm.EnabledUEFI(True)
 | 
				
			||||||
 | 
					                vm.SetDisplayMemory(32)
 | 
				
			||||||
 | 
					            elif (id == 4):
 | 
				
			||||||
 | 
					                vm.Create("Windows11_64")
 | 
				
			||||||
 | 
					                vm.SetDisplayMemory(128)
 | 
				
			||||||
 | 
					                vm.EnabledUEFI(True)
 | 
				
			||||||
 | 
					                setISOAlready = 1
 | 
				
			||||||
 | 
					            elif (id == 5):
 | 
				
			||||||
 | 
					                vm.Create("WindowsXP_32")
 | 
				
			||||||
 | 
					                vm.SetDisplayMemory(32)
 | 
				
			||||||
 | 
					                setISOAlready = 1
 | 
				
			||||||
 | 
					            elif (id == 6):
 | 
				
			||||||
 | 
					                vm.Create("WindowsNT_64")
 | 
				
			||||||
 | 
					                vm.SetDisplayMemory(32)
 | 
				
			||||||
 | 
					                setISOAlready = 1
 | 
				
			||||||
 | 
					            elif (id == 7):
 | 
				
			||||||
 | 
					                vm.Create("WindowsNT_64")
 | 
				
			||||||
 | 
					                vm.SetDisplayMemory(32)
 | 
				
			||||||
 | 
					                vm.EnabledUEFI(True)
 | 
				
			||||||
 | 
					                setISOAlready = 1
 | 
				
			||||||
 | 
					            if (not os.path.exists):
 | 
				
			||||||
 | 
					                os.makedirs("/home/gfdgd_xi/Qemu/Windows/")
 | 
				
			||||||
 | 
					            vm.CreateDiskControl()
 | 
				
			||||||
 | 
					            #vm.CreateDiskControl("storage_controller_2")
 | 
				
			||||||
 | 
					            if(id == 0 or id == 1):
 | 
				
			||||||
 | 
					                vm.CreateDisk(self.homePath() + "/VirtualBox VMs/Windows/Windows.vdi", 131072)
 | 
				
			||||||
 | 
					            else:
 | 
				
			||||||
 | 
					                vm.CreateDisk(self.homePath() + "/VirtualBox VMs/Windows/Windows.vdi", 131072 * 5)
 | 
				
			||||||
 | 
					            vm.MountDisk(self.homePath() + "/VirtualBox VMs/Windows/Windows.vdi")
 | 
				
			||||||
 | 
					            if(not setISOAlready):
 | 
				
			||||||
 | 
					                vm.MountISO(isoPath, "storage_controller_1", 0, 1)
 | 
				
			||||||
 | 
					                if (id == 0):
 | 
				
			||||||
 | 
					                    if(os.system(programPath + "/Windows7X86Auto.iso")):
 | 
				
			||||||
 | 
					                        vm.MountISO(programPath + "/Windows7X86Auto.iso", "storage_controller_1", 1, 0)
 | 
				
			||||||
 | 
					                elif (id == 1):
 | 
				
			||||||
 | 
					                    if(os.system(programPath + "/Windows7X64Auto.iso")):
 | 
				
			||||||
 | 
					                        vm.MountISO(programPath + "/Windows7X64Auto.iso", "storage_controller_1", 1, 0)
 | 
				
			||||||
 | 
					            else:
 | 
				
			||||||
 | 
					                vm.AutoInstall(isoPath)
 | 
				
			||||||
 | 
					            # 判断 VirtualBox Guest ISO 是否存在
 | 
				
			||||||
 | 
					            # 在的话直接挂载
 | 
				
			||||||
 | 
					            if(os.system("/usr/share/virtualbox/VBoxGuestAdditions.iso")):
 | 
				
			||||||
 | 
					                vm.MountISO("/usr/share/virtualbox/VBoxGuestAdditions.iso", "storage_controller_1", 1, 1)
 | 
				
			||||||
 | 
					            # VirtualBox 的 CPU 数量设置方法和 Qemu 不一样
 | 
				
			||||||
 | 
					            vm.SetCPU(self.GetCPUCore(), self.GetCPUSocket(), self.GetCPUCore())
 | 
				
			||||||
 | 
					            memory = 0
 | 
				
			||||||
 | 
					            memoryAll = 0
 | 
				
			||||||
 | 
					            swap = 0
 | 
				
			||||||
 | 
					            swapAll = 0
 | 
				
			||||||
 | 
					            # TODO
 | 
				
			||||||
 | 
					            memory, memoryAll, swap, swapAll = infoUtils().memoryRate()
 | 
				
			||||||
 | 
					            #memoryRate(memory, memoryAll, swap, swapAll)
 | 
				
			||||||
 | 
					            vm.SetMemory(int(memoryAll / 3 / 1024))
 | 
				
			||||||
 | 
					            print(memoryAll)
 | 
				
			||||||
 | 
					            vm.SetNetBridge(net)
 | 
				
			||||||
 | 
					            vm.EnabledAudio()
 | 
				
			||||||
 | 
					            vm.EnabledClipboardMode()
 | 
				
			||||||
 | 
					            vm.EnabledDraganddrop()
 | 
				
			||||||
 | 
					            vm.SetVBoxSVGA()
 | 
				
			||||||
 | 
					            vm.SetMousePS2()
 | 
				
			||||||
 | 
					            vm.SetKeyboardPS2()
 | 
				
			||||||
 | 
					            vm.OpenUSB()
 | 
				
			||||||
 | 
					            vm.ShareFile("ROOT", "/")
 | 
				
			||||||
 | 
					            vm.ShareFile("HOME", self.homePath())
 | 
				
			||||||
 | 
					            vm.Start()
 | 
				
			||||||
 | 
					    
 | 
				
			||||||
| 
		 Before Width: | Height: | Size: 16 KiB After Width: | Height: | Size: 16 KiB  | 
							
								
								
									
										184
									
								
								VM/infoUtils.py
									
									
									
									
									
										Executable file
									
								
							
							
						
						@ -0,0 +1,184 @@
 | 
				
			|||||||
 | 
					PROC_UPTIME = "/proc/uptime"
 | 
				
			||||||
 | 
					PROC_CPU =    "/proc/stat"
 | 
				
			||||||
 | 
					PROC_MEM =    "/proc/meminfo"
 | 
				
			||||||
 | 
					PROC_NET =    "/proc/net/dev"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					import enum
 | 
				
			||||||
 | 
					import psutil
 | 
				
			||||||
 | 
					from PyQt5.QtCore import *
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					class infoUtils:
 | 
				
			||||||
 | 
					    class RateUnit(enum.Enum):
 | 
				
			||||||
 | 
					        RateBit = 0,
 | 
				
			||||||
 | 
					        RateByte = 1,
 | 
				
			||||||
 | 
					        RateKb = 2,
 | 
				
			||||||
 | 
					        RateMb = 3,
 | 
				
			||||||
 | 
					        RateGb = 4,
 | 
				
			||||||
 | 
					        RateTb = 5,
 | 
				
			||||||
 | 
					        RateUnknow = 6
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    class Sensitive(enum.Enum):
 | 
				
			||||||
 | 
					        Default = 0,  # 大小写混合
 | 
				
			||||||
 | 
					        Upper = 1,    # 全部大写
 | 
				
			||||||
 | 
					        Lower = 2     # 全部小写
 | 
				
			||||||
 | 
					    
 | 
				
			||||||
 | 
					    def setRateUnitSensitive(self, unit: RateUnit, sensitive: Sensitive):
 | 
				
			||||||
 | 
					        if (sensitive == self.Sensitive.Default):
 | 
				
			||||||
 | 
					            if (unit == self.RateUnit.RateBit):
 | 
				
			||||||
 | 
					                return str("b/s")
 | 
				
			||||||
 | 
					            elif (unit == self.RateUnit.RateByte):
 | 
				
			||||||
 | 
					                return str("B/s")
 | 
				
			||||||
 | 
					            elif (unit == self.RateUnit.RateKb):
 | 
				
			||||||
 | 
					                return str("Kb/s")
 | 
				
			||||||
 | 
					            elif (unit == self.RateUnit.RateMb):
 | 
				
			||||||
 | 
					                return str("Mb/s")
 | 
				
			||||||
 | 
					            elif (unit == self.RateUnit.RateGb):
 | 
				
			||||||
 | 
					                return str("Gb/s")
 | 
				
			||||||
 | 
					            elif (unit == self.RateUnit.RateTb):
 | 
				
			||||||
 | 
					                return str("Tb/s")
 | 
				
			||||||
 | 
					            else:
 | 
				
			||||||
 | 
					                # print("Sensitive::Default,  RateUnit is RateUnknow.")
 | 
				
			||||||
 | 
					                return str("")
 | 
				
			||||||
 | 
					        elif (sensitive == self.Sensitive.Upper): 
 | 
				
			||||||
 | 
					            if (unit == self.RateUnit.RateBit):
 | 
				
			||||||
 | 
					                return str("BIT/S")
 | 
				
			||||||
 | 
					            elif (unit == self.RateUnit.RateByte):
 | 
				
			||||||
 | 
					                return str("B/S")
 | 
				
			||||||
 | 
					            elif (unit == self.RateUnit.RateKb):
 | 
				
			||||||
 | 
					                return str("KB/S")
 | 
				
			||||||
 | 
					            elif (unit == self.RateUnit.RateMb):
 | 
				
			||||||
 | 
					                return str("MB/S")
 | 
				
			||||||
 | 
					            elif (unit == self.RateUnit.RateGb):
 | 
				
			||||||
 | 
					                return str("GB/S")
 | 
				
			||||||
 | 
					            elif (unit == self.RateUnit.RateTb):
 | 
				
			||||||
 | 
					                return str("TB/S")
 | 
				
			||||||
 | 
					            else:
 | 
				
			||||||
 | 
					                #print("Sensitive::Upper,  RateUnit is RateUnknow.")
 | 
				
			||||||
 | 
					                return str("")
 | 
				
			||||||
 | 
					        elif (sensitive == self.Sensitive.Lower):
 | 
				
			||||||
 | 
					            if (unit == self.RateUnit.RateBit):
 | 
				
			||||||
 | 
					                return str("bit/s")
 | 
				
			||||||
 | 
					            elif (unit == self.RateUnit.RateByte):
 | 
				
			||||||
 | 
					                return str("b/s")
 | 
				
			||||||
 | 
					            elif (unit == self.RateUnit.RateKb):
 | 
				
			||||||
 | 
					                return str("kb/s")
 | 
				
			||||||
 | 
					            elif (unit == self.RateUnit.RateMb):
 | 
				
			||||||
 | 
					                return str("mb/s")
 | 
				
			||||||
 | 
					            elif (unit == self.RateUnit.RateGb):
 | 
				
			||||||
 | 
					                return str("gb/s")
 | 
				
			||||||
 | 
					            elif (unit == self.RateUnit.RateTb):
 | 
				
			||||||
 | 
					                return str("tb/s")
 | 
				
			||||||
 | 
					            else:
 | 
				
			||||||
 | 
					                #qDebug()<<str("Sensitive::Lower,  RateUnit is RateUnknow.")
 | 
				
			||||||
 | 
					                return str("")
 | 
				
			||||||
 | 
					        else: 
 | 
				
			||||||
 | 
					            # qDebug()<<str("Sensitive is RateUnknow.")
 | 
				
			||||||
 | 
					            return str("")
 | 
				
			||||||
 | 
					        
 | 
				
			||||||
 | 
					    # TODO unit 在原来是指针,这里还没做处理
 | 
				
			||||||
 | 
					    def autoRateUnits(self, speed: int, unit: RateUnit) -> float:
 | 
				
			||||||
 | 
					        # 自动判断合适的速率单位,默认传进来的是 Byte
 | 
				
			||||||
 | 
					        # * bit    0 ~ 7 位 (不到 1 字节)
 | 
				
			||||||
 | 
					        # * Byte   1    ~ 2^10  Byte
 | 
				
			||||||
 | 
					        # * KB     2^10 ~ 2^20  Byte
 | 
				
			||||||
 | 
					        # * MB     2^20 ~ 2^30  Byte
 | 
				
			||||||
 | 
					        # * GB     2^30 ~ 2^40  Byte
 | 
				
			||||||
 | 
					        # * TB     2^40 ~ 2^50  Byte
 | 
				
			||||||
 | 
					        if (unit != self.RateUnit.RateByte):
 | 
				
			||||||
 | 
					            #print("请先将单位转为字节(byte)后再传参")
 | 
				
			||||||
 | 
					            return -1
 | 
				
			||||||
 | 
					        sp = 0
 | 
				
			||||||
 | 
					        if (0 <= speed and speed < pow(2, 10)):
 | 
				
			||||||
 | 
					            unit = self.RateUnit.RateByte
 | 
				
			||||||
 | 
					            sp = speed
 | 
				
			||||||
 | 
					        elif (pow(2, 10) <= speed and speed < pow(2, 20)):
 | 
				
			||||||
 | 
					            unit = self.RateUnit.RateKb
 | 
				
			||||||
 | 
					            sp = float(speed / pow(2, 10) * 1.0)
 | 
				
			||||||
 | 
					        elif (pow(2, 20) <= speed and speed < pow(2, 30)):
 | 
				
			||||||
 | 
					            unit = self.RateUnit.RateMb
 | 
				
			||||||
 | 
					            sp = float(speed / pow(2, 20) * 1.0)
 | 
				
			||||||
 | 
					        elif (pow(2, 30) <= speed and speed < pow(2, 40)):
 | 
				
			||||||
 | 
					            unit = self.RateUnit.RateGb
 | 
				
			||||||
 | 
					            sp = float(speed / pow(2, 30) * 1.0)
 | 
				
			||||||
 | 
					        elif (pow(2, 40) <= speed and speed < pow(2, 50)):
 | 
				
			||||||
 | 
					            unit = self.RateUnit.RateTb
 | 
				
			||||||
 | 
					            sp = float(speed / pow(2, 40) * 1.0)
 | 
				
			||||||
 | 
					        else:
 | 
				
			||||||
 | 
					            unit = self.RateUnit.RateUnknow
 | 
				
			||||||
 | 
					            # qDebug()<<"本设备网络速率单位传输超过 TB, 或者低于 0 Byte."
 | 
				
			||||||
 | 
					            sp = -1
 | 
				
			||||||
 | 
					        return sp
 | 
				
			||||||
 | 
					    
 | 
				
			||||||
 | 
					    # TODO run,idle 在原来是指针,这里还没做处理
 | 
				
			||||||
 | 
					    def uptime(self):
 | 
				
			||||||
 | 
					        file = QFile(PROC_UPTIME) # /proc/uptime
 | 
				
			||||||
 | 
					        if(not file.open(QIODevice.ReadOnly or QIODevice.Text)):
 | 
				
			||||||
 | 
					            return
 | 
				
			||||||
 | 
					        stream = QTextStream(file)
 | 
				
			||||||
 | 
					        line = stream.readLine()
 | 
				
			||||||
 | 
					        list = line.split(QRegExp("\\s{1,}"))
 | 
				
			||||||
 | 
					        if(list.count()):
 | 
				
			||||||
 | 
					            run = float(list[0])
 | 
				
			||||||
 | 
					            idle = float(list[1])
 | 
				
			||||||
 | 
					        file.close()
 | 
				
			||||||
 | 
					        return run, idle
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    # TODO netDown, netUpload 在原来是指针,这里还没做处理
 | 
				
			||||||
 | 
					    def netRate(self, netDown, netUpload):
 | 
				
			||||||
 | 
					        file = QFile(PROC_NET) #  /proc/net/dev
 | 
				
			||||||
 | 
					        if (not file.open(QIODevice.ReadOnly or QIODevice.Text)):  # 在读取时,把行尾结束符修改为 '\n'; 在写入时,把行尾结束符修改为本地系统换行风格,比如Windows文本换行是 "\r\n"
 | 
				
			||||||
 | 
					            return
 | 
				
			||||||
 | 
					        down = 0
 | 
				
			||||||
 | 
					        upload = 0
 | 
				
			||||||
 | 
					        stream = QTextStream(file)
 | 
				
			||||||
 | 
					        line = stream.readLine()
 | 
				
			||||||
 | 
					        line  = stream.readLine()
 | 
				
			||||||
 | 
					        line  = stream.readLine()
 | 
				
			||||||
 | 
					        while (not line.isNull()):
 | 
				
			||||||
 | 
					            line = line.trimmed()
 | 
				
			||||||
 | 
					            list = line.split(QRegExp("\\s{1,}"))   # 匹配任意 大于等于1个的 空白字符
 | 
				
			||||||
 | 
					            if (list.count()):
 | 
				
			||||||
 | 
					                down = int(list[1])
 | 
				
			||||||
 | 
					                upload = int(list[9])
 | 
				
			||||||
 | 
					            netDown += down
 | 
				
			||||||
 | 
					            netUpload += upload
 | 
				
			||||||
 | 
					            line  = stream.readLine()
 | 
				
			||||||
 | 
					        file.close()
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    '''def cpuRate(self, cpuAll, cpuFree):
 | 
				
			||||||
 | 
					        cpuAll = cpuFree = 0
 | 
				
			||||||
 | 
					        ok = False
 | 
				
			||||||
 | 
					        file = QFile(PROC_CPU) # /proc/stat
 | 
				
			||||||
 | 
					        if(not file.open(QIODevice.ReadOnly or QIODevice.Text)):
 | 
				
			||||||
 | 
					            return
 | 
				
			||||||
 | 
					        stream = QTextStream(file)
 | 
				
			||||||
 | 
					        line = stream.readLine()
 | 
				
			||||||
 | 
					        if (line != None):
 | 
				
			||||||
 | 
					            list = line.split(QRegExp("\\s{1,}"))
 | 
				
			||||||
 | 
					            for (auto v = list.begin() + 1 v != list.end() ++v)
 | 
				
			||||||
 | 
					                cpuAll += (*v).toLong(&ok)
 | 
				
			||||||
 | 
					            cpuFree = list.at(4).toLong(&ok)
 | 
				
			||||||
 | 
					        file.close()'''
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    def memoryRate(self):
 | 
				
			||||||
 | 
					        memory = memoryAll = 0
 | 
				
			||||||
 | 
					        swap = swapAll = None
 | 
				
			||||||
 | 
					        '''ok = False
 | 
				
			||||||
 | 
					        file = QFile(PROC_MEM) # /proc/meminfo
 | 
				
			||||||
 | 
					        if (not file.open(QIODevice.ReadOnly or QIODevice.Text)):
 | 
				
			||||||
 | 
					            return
 | 
				
			||||||
 | 
					        stream = QTextStream(file)
 | 
				
			||||||
 | 
					        buff = [0]
 | 
				
			||||||
 | 
					        for i in range(16):
 | 
				
			||||||
 | 
					            line = stream.readLine()
 | 
				
			||||||
 | 
					            list = line.split(QRegExp("\\s{1,}"))
 | 
				
			||||||
 | 
					            buff[i] = int(list[1])
 | 
				
			||||||
 | 
					        memoryAll = buff[0]
 | 
				
			||||||
 | 
					        memory = buff[0] - buff[2]
 | 
				
			||||||
 | 
					        swapAll = buff[14]
 | 
				
			||||||
 | 
					        swap = buff[14] - buff[15]
 | 
				
			||||||
 | 
					        file.close()'''
 | 
				
			||||||
 | 
					        mem = psutil.virtual_memory()
 | 
				
			||||||
 | 
					        memoryAll = int(mem.total / 1024) 
 | 
				
			||||||
 | 
					        memory = int(mem.used/ 1024)
 | 
				
			||||||
 | 
					        return memory, memoryAll, swap, swapAll
 | 
				
			||||||
							
								
								
									
										330
									
								
								VM/mainwindow.py
									
									
									
									
									
										Executable file
									
								
							
							
						
						@ -0,0 +1,330 @@
 | 
				
			|||||||
 | 
					#!/usr/bin/env python3
 | 
				
			||||||
 | 
					import os
 | 
				
			||||||
 | 
					import sys
 | 
				
			||||||
 | 
					programPath = os.path.split(os.path.realpath(__file__))[0]  # 返回 string
 | 
				
			||||||
 | 
					sys.path.append(f"{programPath}/../")
 | 
				
			||||||
 | 
					sys.path.append(f"{programPath}/")
 | 
				
			||||||
 | 
					import json
 | 
				
			||||||
 | 
					import subprocess
 | 
				
			||||||
 | 
					import program_resources
 | 
				
			||||||
 | 
					import ui_mainwindow
 | 
				
			||||||
 | 
					import globalenv
 | 
				
			||||||
 | 
					from buildvbox import *
 | 
				
			||||||
 | 
					from PyQt5.QtGui import *
 | 
				
			||||||
 | 
					from PyQt5.QtCore import *
 | 
				
			||||||
 | 
					from PyQt5.QtWidgets import *
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					stopShowTime = False
 | 
				
			||||||
 | 
					m_cpuAll = 0
 | 
				
			||||||
 | 
					m_cpuFree = 0
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					def ShowCPUMessage():
 | 
				
			||||||
 | 
					    pass
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					def MainWindow():
 | 
				
			||||||
 | 
					    global cpuGet
 | 
				
			||||||
 | 
					    if (__name__ == "__main__"):
 | 
				
			||||||
 | 
					        ui.tabWidget.setTabPosition(QTabWidget.West)  # 标签靠左
 | 
				
			||||||
 | 
					    else:
 | 
				
			||||||
 | 
					        ui.tabWidget.setTabPosition(QTabWidget.East)  # 标签靠左
 | 
				
			||||||
 | 
					    #QApplication a(argc, argv)
 | 
				
			||||||
 | 
					    # 选择最优虚拟机
 | 
				
			||||||
 | 
					    if(not os.system("which qemu-system-x86_64")):
 | 
				
			||||||
 | 
					        ui.vmChooser.setCurrentIndex(0)
 | 
				
			||||||
 | 
					    if(not os.system("which vboxmanage")):
 | 
				
			||||||
 | 
					        ui.vmChooser.setCurrentIndex(1)
 | 
				
			||||||
 | 
					    if(not os.path.exists(programPath + "/../RunCommandWithTerminal.py")):
 | 
				
			||||||
 | 
					        ui.getQemu.setDisabled(True)
 | 
				
			||||||
 | 
					    # 允许输出 qDebug 信息
 | 
				
			||||||
 | 
					    #QLoggingCategory.defaultCategory().setEnabled(QLoggingCategory.QtDebugMsg, True)
 | 
				
			||||||
 | 
					    # 判断是否安装 vbox(无需判断)
 | 
				
			||||||
 | 
					    '''if(os.system("which VBoxManage")):
 | 
				
			||||||
 | 
					        if(QMessageBox.question(this, ("提示"), "检测到您似乎没有安装 VirtualBox,立即安装?") == QMessageBox.Yes):
 | 
				
			||||||
 | 
					            os.system("xdg-open https:#www.virtualbox.org/wiki/Linux_Downloads")
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					    }'''
 | 
				
			||||||
 | 
					    # QTimer
 | 
				
			||||||
 | 
					    cpuGet = QTimer(window)
 | 
				
			||||||
 | 
					    cpuGet.timeout.connect(ShowCPUMessage)
 | 
				
			||||||
 | 
					    cpuGet.setInterval(1000)
 | 
				
			||||||
 | 
					    cpuGet.start()
 | 
				
			||||||
 | 
					    ShowCPUMessage()
 | 
				
			||||||
 | 
					    # 读取程序版本号
 | 
				
			||||||
 | 
					    # / 版本号文件是否存在
 | 
				
			||||||
 | 
					    if (not os.path.exists(programPath + "/../information.json")):
 | 
				
			||||||
 | 
					        QMessageBox.critical(window, "错误", "无法读取版本号!")
 | 
				
			||||||
 | 
					        return
 | 
				
			||||||
 | 
					    with open(programPath + "/../information.json", "r") as file:
 | 
				
			||||||
 | 
					        fileinfo = file.read()
 | 
				
			||||||
 | 
					    versionObject = json.loads(fileinfo)
 | 
				
			||||||
 | 
					    buildTime = versionObject["Time"]
 | 
				
			||||||
 | 
					    versionValue = versionObject["Version"]
 | 
				
			||||||
 | 
					    thank = versionObject["Thank"]
 | 
				
			||||||
 | 
					    thankText = ""
 | 
				
			||||||
 | 
					    for i in range(0, len(thank)):
 | 
				
			||||||
 | 
					        thankText += "<p>" + thank[i] + "</p>\n"
 | 
				
			||||||
 | 
					        print(thank[i])
 | 
				
			||||||
 | 
					    # 设置程序标题
 | 
				
			||||||
 | 
					    this.setWindowTitle(("Wine 运行器虚拟机安装工具 ") + versionValue)
 | 
				
			||||||
 | 
					    # 读取谢明列表
 | 
				
			||||||
 | 
					    ui.textBrowser_2.setHtml(("<p>程序版本号:") + versionValue + ", " + subprocess.getoutput("arch") + ("</p><p>安装包构建时间:") + buildTime +  "</p>" + ui.textBrowser_2.toHtml() +
 | 
				
			||||||
 | 
					                               ("<hr/><h1>谢明列表</h1>") + thankText)
 | 
				
			||||||
 | 
					    ui.textBrowser_2.anchorClicked.connect(lambda link: QDesktopServices.openUrl(link))
 | 
				
			||||||
 | 
					    ui.textBrowser.anchorClicked.connect(lambda link: QDesktopServices.openUrl(link))
 | 
				
			||||||
 | 
					    ui.textBrowser_3.anchorClicked.connect(lambda link: QDesktopServices.openUrl(link))
 | 
				
			||||||
 | 
					    # 设置标签栏图标
 | 
				
			||||||
 | 
					    ui.tabWidget.setTabIcon(1, QIcon.fromTheme(f"{programPath}/application-vnd.oasis.opendocument.text.svg"))
 | 
				
			||||||
 | 
					    # 设置窗口图标
 | 
				
			||||||
 | 
					    this.setWindowIcon(QIcon(f"{programPath}/deepin-wine-runner.svg"))
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					def GetRunCommand(command: str):
 | 
				
			||||||
 | 
					    return subprocess.getoutput(command)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					def on_browser_clicked():
 | 
				
			||||||
 | 
					    # 浏览镜像文件
 | 
				
			||||||
 | 
					    filePath = QFileDialog.getOpenFileName(this, "选择 ISO 文件", QDir.homePath(), "ISO 镜像文件(*.iso)所有文件(*.*)")[0]
 | 
				
			||||||
 | 
					    if(filePath != ""):
 | 
				
			||||||
 | 
					        ui.isoPath.setText(filePath)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					def on_install_clicked():
 | 
				
			||||||
 | 
					    global stopShowTime
 | 
				
			||||||
 | 
					    if (ui.vmChooser.currentIndex() == 0):
 | 
				
			||||||
 | 
					        if(os.system("which qemu-system-x86_64")):
 | 
				
			||||||
 | 
					            if(QMessageBox.question(this, ("提示"), ("您似乎没有安装 Qemu,是否继续创建虚拟机?")) == QMessageBox.No):
 | 
				
			||||||
 | 
					                return
 | 
				
			||||||
 | 
					    elif (ui.vmChooser.currentIndex() == 1):
 | 
				
			||||||
 | 
					        if(os.system("which vboxmanage")):
 | 
				
			||||||
 | 
					            if(QMessageBox.question(this, ("提示"), ("您似乎没有安装 VBox,是否继续创建虚拟机?")) == QMessageBox.No):
 | 
				
			||||||
 | 
					                return
 | 
				
			||||||
 | 
					    elif (ui.vmChooser.currentIndex() == 8):
 | 
				
			||||||
 | 
					        if(os.system("which qemu-system-arm")):
 | 
				
			||||||
 | 
					            if(QMessageBox.question(this, ("提示"), ("无法检测到 qemu-system-arm,是否继续创建虚拟机?")) == QMessageBox.No):
 | 
				
			||||||
 | 
					                return
 | 
				
			||||||
 | 
					    elif (ui.vmChooser.currentIndex() == 9):
 | 
				
			||||||
 | 
					       if(os.system("which qemu-system-aarch64")):
 | 
				
			||||||
 | 
					           if(QMessageBox.question(this, ("提示"), ("无法检测到 qemu-system-aarch64,是否继续创建虚拟机?")) == QMessageBox.No):
 | 
				
			||||||
 | 
					               return
 | 
				
			||||||
 | 
					    file = QFile(QDir.homePath() + "/.config/deepin-wine-runner/QEMU-EFI")
 | 
				
			||||||
 | 
					    archFile = QFile(QDir.homePath() + "/.config/deepin-wine-runner/QEMU-ARCH")
 | 
				
			||||||
 | 
					    dir = QDir(QDir.homePath() + "/.config/deepin-wine-runner")
 | 
				
			||||||
 | 
					    archFile.open(QIODevice.WriteOnly)
 | 
				
			||||||
 | 
					    archFile.write("amd64".encode("utf-8"))
 | 
				
			||||||
 | 
					    archFile.close()
 | 
				
			||||||
 | 
					    if (ui.systemVersion.currentIndex() == 0):
 | 
				
			||||||
 | 
					        if(not QFile.exists(programPath + "/Windows7X86Auto.iso")):
 | 
				
			||||||
 | 
					            if(QMessageBox.question(this, ("提示"), ("似乎无法找到 Windows7X86Auto.iso,是否继续创建虚拟机?\n缺少该文件可能会导致虚拟机无法正常启动,尝试重新安装 Wine 运行器再试试?")) == QMessageBox.No):
 | 
				
			||||||
 | 
					                return
 | 
				
			||||||
 | 
					    elif (ui.systemVersion.currentIndex() == 1):
 | 
				
			||||||
 | 
					        if(not QFile.exists(programPath + "/Windows7X64Auto.iso")):
 | 
				
			||||||
 | 
					            if(QMessageBox.question(this, ("提示"), ("似乎无法找到 Windows7X64Auto.iso,是否继续创建虚拟机?\n缺少该文件可能会导致虚拟机无法正常启动,尝试重新安装 Wine 运行器再试试?")) == QMessageBox.No):
 | 
				
			||||||
 | 
					                return
 | 
				
			||||||
 | 
					    elif (ui.systemVersion.currentIndex() == 3):
 | 
				
			||||||
 | 
					        if(not QFile.exists("/usr/share/qemu/OVMF.fd") and not QFile.exists(programPath + "/OVMF.fd") and ui.vmChooser.currentIndex() == 0):
 | 
				
			||||||
 | 
					            if(QMessageBox.question(this, ("提示"), ("似乎无法找到 UEFI 固件,是否继续创建虚拟机?\nQemu 固件可以在“安装 Qemu”处安装")) == QMessageBox.No):
 | 
				
			||||||
 | 
					                return
 | 
				
			||||||
 | 
					            if(not dir.exists()):
 | 
				
			||||||
 | 
					                dir.mkpath(QDir.homePath() + "/.config/deepin-wine-runner")
 | 
				
			||||||
 | 
					            if(not QFile.exists(QDir.homePath() + "/.config/deepin-wine-runner/QEMU-EFI")):
 | 
				
			||||||
 | 
					                # 写入用于识别的空文件
 | 
				
			||||||
 | 
					                file.open(QIODevice.WriteOnly)
 | 
				
			||||||
 | 
					                file.write("1")
 | 
				
			||||||
 | 
					                file.close()
 | 
				
			||||||
 | 
					    elif (ui.systemVersion.currentIndex() == 4 or
 | 
				
			||||||
 | 
					          ui.systemVersion.currentIndex() == 5 or
 | 
				
			||||||
 | 
					          ui.systemVersion.currentIndex() == 6 or
 | 
				
			||||||
 | 
					          ui.systemVersion.currentIndex() == 7):
 | 
				
			||||||
 | 
					        if(ui.vmChooser.currentIndex() == 0):
 | 
				
			||||||
 | 
					            QMessageBox.warning(this, ("提示"), ("Qemu 不支持该选项!"))
 | 
				
			||||||
 | 
					            return
 | 
				
			||||||
 | 
					    elif (ui.systemVersion.currentIndex() == 8):
 | 
				
			||||||
 | 
					        if(ui.vmChooser.currentIndex() == 1):
 | 
				
			||||||
 | 
					            QMessageBox.warning(this, ("提示"), ("VirtualBox 不支持该选项!"))
 | 
				
			||||||
 | 
					            return
 | 
				
			||||||
 | 
					        archFile.open(QIODevice.WriteOnly)
 | 
				
			||||||
 | 
					        archFile.write("armhf")
 | 
				
			||||||
 | 
					        archFile.close()
 | 
				
			||||||
 | 
					    elif (ui.systemVersion.currentIndex() == 9):
 | 
				
			||||||
 | 
					        if(ui.vmChooser.currentIndex() == 1):
 | 
				
			||||||
 | 
					            QMessageBox.warning(this, ("提示"), ("VirtualBox 不支持该选项!"))
 | 
				
			||||||
 | 
					            return
 | 
				
			||||||
 | 
					        archFile.open(QIODevice.WriteOnly)
 | 
				
			||||||
 | 
					        archFile.write("aarch64")
 | 
				
			||||||
 | 
					        archFile.close()
 | 
				
			||||||
 | 
					    else:
 | 
				
			||||||
 | 
					        if(ui.vmChooser.currentIndex() == 0 and QFile.exists(QDir.homePath() + "/.config/deepin-wine-runner/QEMU-EFI")):
 | 
				
			||||||
 | 
					            QFile.remove(QDir.homePath() + "/.config/deepin-wine-runner/QEMU-EFI")
 | 
				
			||||||
 | 
					    buildvbox(ui.isoPath.text(), ui.systemVersion.currentIndex(), ui.vmChooser.currentIndex())
 | 
				
			||||||
 | 
					    ui.tabWidget.setCurrentIndex(1)
 | 
				
			||||||
 | 
					    stopShowTime = 1
 | 
				
			||||||
 | 
					    ui.CPUValue.showMessage(("提示:目前已经尝试开启虚拟机,如果在一段时间后依旧还没看到虚拟机窗口开启,请在菜单栏查看虚拟机日志"), 10000)
 | 
				
			||||||
 | 
					    return
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					def on_getvbox_clicked():
 | 
				
			||||||
 | 
					    QDesktopServices.openUrl(QUrl("https://www.virtualbox.org/wiki/Linux_Downloads"))
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					def on_getQemu_clicked():
 | 
				
			||||||
 | 
					    os.system(("python3 '" + programPath + "/../RunCommandWithTerminal.py' pkexec '" + programPath + "/../QemuSystemInstall.sh'"))
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					def on_vmChooser_currentIndexChanged(index: int):
 | 
				
			||||||
 | 
					    ui.qemuSetting.setDisabled(index)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# TODO
 | 
				
			||||||
 | 
					def on_qemuSetting_clicked():
 | 
				
			||||||
 | 
					    global show
 | 
				
			||||||
 | 
					    show = QemuSetting()
 | 
				
			||||||
 | 
					    show.show()
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					def on_addQemuDisk_triggered():
 | 
				
			||||||
 | 
					    if(QFile.exists(QDir.homePath() + "/Qemu/Windows/Windows.qcow2")):
 | 
				
			||||||
 | 
					        if(QMessageBox.question(this, ("提示"), ("磁盘文件已存在,是否覆盖?\n覆盖后将无法恢复!")) == QMessageBox.No):
 | 
				
			||||||
 | 
					            return
 | 
				
			||||||
 | 
					    path = QFileDialog.getOpenFileName(this, ("选择 Qemu 镜像"), QDir.homePath(), ("Qemu镜像(*.qcow2 *.img *.raw *.qcow *.qed *.vdi *.vhdx *.vmdk)所有文件(*.*)"))
 | 
				
			||||||
 | 
					    if(path == ""):
 | 
				
			||||||
 | 
					        return
 | 
				
			||||||
 | 
					    dir = QDir(QDir.homePath() + "/Qemu/Windows")
 | 
				
			||||||
 | 
					    if(not dir.exists()):
 | 
				
			||||||
 | 
					        dir.mkpath(QDir.homePath() + "/Qemu/Windows")
 | 
				
			||||||
 | 
					    if(QFile.exists(QDir.homePath() + "/Qemu/Windows/Windows.qcow2")):
 | 
				
			||||||
 | 
					        if(not QFile.remove(QDir.homePath() + "/Qemu/Windows/Windows.qcow2") or not QFile.copy(path, QDir.homePath() + "/Qemu/Windows/Windows.qcow2")):
 | 
				
			||||||
 | 
					            QMessageBox.critical(this, ("提示"), ("添加错误!"))
 | 
				
			||||||
 | 
					            return
 | 
				
			||||||
 | 
					    else:
 | 
				
			||||||
 | 
					        if(not QFile.copy(path, QDir.homePath() + "/Qemu/Windows/Windows.qcow2")):
 | 
				
			||||||
 | 
					            QMessageBox.critical(this, ("提示"), ("添加错误!"))
 | 
				
			||||||
 | 
					            return
 | 
				
			||||||
 | 
					    QMessageBox.information(this, ("提示"), ("添加完成!"))
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					def on_delQemuDisk_triggered():
 | 
				
			||||||
 | 
					    if(not QFile.exists(QDir.homePath() + "/Qemu/Windows/Windows.qcow2")):
 | 
				
			||||||
 | 
					        QMessageBox.information(this, ("提示"), ("不存在磁盘文件,无法导出"))
 | 
				
			||||||
 | 
					        return
 | 
				
			||||||
 | 
					    os.system(("xdg-open \"" + QDir.homePath() + "/Qemu/Windows/\""))
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					def on_addQemuDiskButton_clicked():
 | 
				
			||||||
 | 
					    on_addQemuDisk_triggered()
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					def on_saveQemuDiskButton_clicked():
 | 
				
			||||||
 | 
					    on_delQemuDisk_triggered()
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					def on_delQemuDiskButton_clicked():
 | 
				
			||||||
 | 
					    if(not QFile.exists(QDir.homePath() + "/Qemu/Windows/Windows.qcow2")):
 | 
				
			||||||
 | 
					        QMessageBox.information(this, ("提示"), ("不存在磁盘文件,无法移除"))
 | 
				
			||||||
 | 
					        return
 | 
				
			||||||
 | 
					    if(QMessageBox.question(this, ("提示"), ("是否删除?\n删除后将无法恢复!")) == QMessageBox.No):
 | 
				
			||||||
 | 
					        return
 | 
				
			||||||
 | 
					    if(not QFile.remove(QDir.homePath() + "/Qemu/Windows/Windows.qcow2")):
 | 
				
			||||||
 | 
					        QMessageBox.critical(this, ("提示"), ("移除失败"))
 | 
				
			||||||
 | 
					        return
 | 
				
			||||||
 | 
					    QMessageBox.information(this, ("提示"), ("移除成功"))
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					def on_kvmTest_clicked():
 | 
				
			||||||
 | 
					    if(os.system("which kvm-ok") and not QFile.exists(programPath + "/kvm-ok")):
 | 
				
			||||||
 | 
					        QMessageBox.critical(this, ("错误"), ("未识别到命令 kvm-ok\n可以使用命令 sudo apt install cpu-checker 安装"))
 | 
				
			||||||
 | 
					        return
 | 
				
			||||||
 | 
					    kvm_ok_path = "kvm-ok"
 | 
				
			||||||
 | 
					    if(not os.system("which kvm-ok")):
 | 
				
			||||||
 | 
					        kvm_ok_path = "kvm-ok"
 | 
				
			||||||
 | 
					    elif(QFile.exists(programPath + "/kvm-ok")):
 | 
				
			||||||
 | 
					        kvm_ok_path = programPath + "/kvm-ok"
 | 
				
			||||||
 | 
					    print(("使用"), kvm_ok_path)
 | 
				
			||||||
 | 
					    process = QProcess()
 | 
				
			||||||
 | 
					    process.start(kvm_ok_path)
 | 
				
			||||||
 | 
					    process.waitForStarted()
 | 
				
			||||||
 | 
					    process.waitForFinished()
 | 
				
			||||||
 | 
					    if(process.exitCode()):
 | 
				
			||||||
 | 
					        QMessageBox.critical(this, ("错误"), ("您的系统不支持使用 kvm:\n") + process.readAll())
 | 
				
			||||||
 | 
					        return
 | 
				
			||||||
 | 
					    QMessageBox.information(this, ("提示"), ("您的系统支持使用 kvm:\n") + process.readAll())
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					def on_actionVMRunlLog_triggered():
 | 
				
			||||||
 | 
					    if(not os.path.exists("/tmp/windows-virtual-machine-installer-for-wine-runner-run.log")):
 | 
				
			||||||
 | 
					        QMessageBox.information(this, ("提示"), ("没有日志文件"))
 | 
				
			||||||
 | 
					        return
 | 
				
			||||||
 | 
					    file = open("/tmp/windows-virtual-machine-installer-for-wine-runner-run.log")
 | 
				
			||||||
 | 
					    QInputDialog.getMultiLineText(this, ("运行日志"), ("虚拟机运行日志"),file.read())
 | 
				
			||||||
 | 
					    file.close()
 | 
				
			||||||
 | 
					    
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					def on_actionVMTest_triggered():
 | 
				
			||||||
 | 
					    # 运行 Demo
 | 
				
			||||||
 | 
					    if(QFile.exists(programPath + "/test.qcow2")):
 | 
				
			||||||
 | 
					        # 优先使用本地的磁盘
 | 
				
			||||||
 | 
					        os.system(("qemu-system-i386 --hda '" + programPath + "/test.qcow2' -rtc base=localtime > /tmp/windows-virtual-machine-installer-for-wine-runner-run.log 2>&1"))
 | 
				
			||||||
 | 
					        return
 | 
				
			||||||
 | 
					    # 写入 disk 文件
 | 
				
			||||||
 | 
					    file = QFile(":/TestDisk/test.qcow2")
 | 
				
			||||||
 | 
					    # 计算随机数
 | 
				
			||||||
 | 
					    writeFile = QFile("/tmp/indows-virtual-machine-installer-for-wine-runner-test-disk.qcow2")
 | 
				
			||||||
 | 
					    file.open(QIODevice.ReadOnly)
 | 
				
			||||||
 | 
					    writeFile.open(QIODevice.WriteOnly)
 | 
				
			||||||
 | 
					    writeFile.write(file.readAll())
 | 
				
			||||||
 | 
					    file.close()
 | 
				
			||||||
 | 
					    writeFile.close()
 | 
				
			||||||
 | 
					    os.system("qemu-system-i386 --hda /tmp/indows-virtual-machine-installer-for-wine-runner-test-disk.qcow2 -rtc base=localtime > /tmp/windows-virtual-machine-installer-for-wine-runner-run.log 2>&1")
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					def on_actionVMInstallLog_triggered():
 | 
				
			||||||
 | 
					    if(not os.path.exists("/tmp/windows-virtual-machine-installer-for-wine-runner-install.log")):
 | 
				
			||||||
 | 
					        QMessageBox.information(this, ("提示"), ("没有日志文件"))
 | 
				
			||||||
 | 
					        return
 | 
				
			||||||
 | 
					    file = open("/tmp/windows-virtual-machine-installer-for-wine-runner-install.log")
 | 
				
			||||||
 | 
					    QInputDialog.getMultiLineText(this, ("安装日志"), ("虚拟机安装日志"),file.read())
 | 
				
			||||||
 | 
					    file.close()
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					def on_action_StopVirtualBox_triggered():
 | 
				
			||||||
 | 
					    vmControl = vbox("")
 | 
				
			||||||
 | 
					    vmControl.Stop()
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					def on_action_StopQemu_triggered():
 | 
				
			||||||
 | 
					    vmControl = qemu("")
 | 
				
			||||||
 | 
					    vmControl.Stop()
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					def on_actionQemuDiskAddSpace_triggered():
 | 
				
			||||||
 | 
					    data = QInputDialog.getDouble(this, ("磁盘扩容"), "输入扩容多少GB\n注:1、扩容所需要的时间较长,程序可能会出现假死的情况,请不要关闭否则会导致虚拟磁盘损坏\n2、扩展后需要自行在虚拟机使用 Deepin Community Live CD、Live CD、Windows PE\n等工具调整系统分区大小才能使用")[0]
 | 
				
			||||||
 | 
					    if(data <= 0):
 | 
				
			||||||
 | 
					        return
 | 
				
			||||||
 | 
					    # 开始扩容
 | 
				
			||||||
 | 
					    result = qemu("").AddDiskSpace(QDir.homePath() + "/Qemu/Windows/Windows.qcow2", data)
 | 
				
			||||||
 | 
					    qDebug() << "Exit Code: " << result
 | 
				
			||||||
 | 
					    if(result):
 | 
				
			||||||
 | 
					        QMessageBox.critical(this, ("错误"), ("扩容失败!"))
 | 
				
			||||||
 | 
					        return
 | 
				
			||||||
 | 
					    QMessageBox.information(this, ("提示"), ("扩容完成!"))
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					def on_getDCLC_triggered():
 | 
				
			||||||
 | 
					    QDesktopServices.openUrl(QUrl("https://github.com/gfdgd-xi/deepin-community-live-cd/"))
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					programPath = os.path.split(os.path.realpath(__file__))[0]  # 返回 string
 | 
				
			||||||
 | 
					if (__name__ == "__main__"):
 | 
				
			||||||
 | 
					    app = QApplication(sys.argv)
 | 
				
			||||||
 | 
					else:
 | 
				
			||||||
 | 
					    app = globalenv.get_value("app")
 | 
				
			||||||
 | 
					this = window = QMainWindow()
 | 
				
			||||||
 | 
					ui = ui_mainwindow.Ui_MainWindow()
 | 
				
			||||||
 | 
					ui.setupUi(window)
 | 
				
			||||||
 | 
					MainWindow()
 | 
				
			||||||
 | 
					# 绑定信号
 | 
				
			||||||
 | 
					ui.browser.clicked.connect(on_browser_clicked)
 | 
				
			||||||
 | 
					ui.install.clicked.connect(on_install_clicked)
 | 
				
			||||||
 | 
					ui.getvbox.clicked.connect(on_getvbox_clicked)
 | 
				
			||||||
 | 
					ui.getQemu.clicked.connect(on_getQemu_clicked)
 | 
				
			||||||
 | 
					ui.vmChooser.currentIndexChanged.connect(on_vmChooser_currentIndexChanged)
 | 
				
			||||||
 | 
					ui.qemuSetting.clicked.connect(on_qemuSetting_clicked)
 | 
				
			||||||
 | 
					ui.addQemuDisk.triggered.connect(on_addQemuDisk_triggered)
 | 
				
			||||||
 | 
					ui.delQemuDisk.triggered.connect(on_delQemuDisk_triggered)
 | 
				
			||||||
 | 
					ui.addQemuDiskButton.clicked.connect(on_addQemuDiskButton_clicked)
 | 
				
			||||||
 | 
					ui.delQemuDiskButton.clicked.connect(on_delQemuDiskButton_clicked)
 | 
				
			||||||
 | 
					ui.saveQemuDiskButton.clicked.connect(on_saveQemuDiskButton_clicked)
 | 
				
			||||||
 | 
					ui.kvmTest.clicked.connect(on_kvmTest_clicked)
 | 
				
			||||||
 | 
					ui.actionVMRunlLog.triggered.connect(on_actionVMRunlLog_triggered)
 | 
				
			||||||
 | 
					ui.actionVMInstallLog.triggered.connect(on_actionVMInstallLog_triggered)
 | 
				
			||||||
 | 
					ui.actionVMTest.triggered.connect(on_actionVMTest_triggered)
 | 
				
			||||||
 | 
					ui.action_StopQemu.triggered.connect(on_action_StopQemu_triggered)
 | 
				
			||||||
 | 
					ui.action_StopVirtualBox.triggered.connect(on_action_StopVirtualBox_triggered)
 | 
				
			||||||
 | 
					ui.actionQemuDiskAddSpace.triggered.connect(on_actionQemuDiskAddSpace_triggered)
 | 
				
			||||||
 | 
					ui.getDCLC.triggered.connect(on_getDCLC_triggered)
 | 
				
			||||||
 | 
					window.show()
 | 
				
			||||||
 | 
					sys.exit(app.exec_())
 | 
				
			||||||
							
								
								
									
										30
									
								
								VM/qemu.py
									
									
									
									
									
										
										
										Normal file → Executable file
									
								
							
							
						
						@ -15,7 +15,7 @@ class qemu:
 | 
				
			|||||||
    def homePath(self):
 | 
					    def homePath(self):
 | 
				
			||||||
        return os.getenv("HOME")
 | 
					        return os.getenv("HOME")
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    def __init__(self, name: str, managerPath: str) -> None:
 | 
					    def __init__(self, name: str, managerPath = "/usr/bin") -> None:
 | 
				
			||||||
        if (not os.path.exists(name)):
 | 
					        if (not os.path.exists(name)):
 | 
				
			||||||
            self.name = self.homePath() + "/Qemu/" + name
 | 
					            self.name = self.homePath() + "/Qemu/" + name
 | 
				
			||||||
        else:
 | 
					        else:
 | 
				
			||||||
@ -27,7 +27,7 @@ class qemu:
 | 
				
			|||||||
            qemuPath = "/opt/apps/deepin-wine-runner-qemu-system-extra/files/run.sh qemu-system-i386"
 | 
					            qemuPath = "/opt/apps/deepin-wine-runner-qemu-system-extra/files/run.sh qemu-system-i386"
 | 
				
			||||||
        self.vboxVersion = subprocess.getoutput(qemuPath + " --version")
 | 
					        self.vboxVersion = subprocess.getoutput(qemuPath + " --version")
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    def Create(self, type: str):
 | 
					    def Create(self, type = "Windows7"):
 | 
				
			||||||
        if(not os.path.exists(self.name)):
 | 
					        if(not os.path.exists(self.name)):
 | 
				
			||||||
            os.makedirs(self.name)
 | 
					            os.makedirs(self.name)
 | 
				
			||||||
        return 0
 | 
					        return 0
 | 
				
			||||||
@ -37,14 +37,14 @@ class qemu:
 | 
				
			|||||||
            return 0
 | 
					            return 0
 | 
				
			||||||
        return os.system(("qemu-img create -f qcow2 '" + self.path + "' " + str(size) + "M"))
 | 
					        return os.system(("qemu-img create -f qcow2 '" + self.path + "' " + str(size) + "M"))
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    def CreateDiskControl(self, controlName: str):
 | 
					    def CreateDiskControl(self, controlName = "storage_controller_1"):
 | 
				
			||||||
        return 0
 | 
					        return 0
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    def MountDisk(self, diskPath: str, controlName: str, port: int, device: int):
 | 
					    def MountDisk(self, diskPath: str, controlName = "storage_controller_1", port = 0, device = 0):
 | 
				
			||||||
        self.commandOption += "-drive 'file=" + diskPath + ",if=ide,index=" + str(device) + "' "
 | 
					        self.commandOption += "-drive 'file=" + diskPath + ",if=ide,index=" + str(device) + "' "
 | 
				
			||||||
        return 0
 | 
					        return 0
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    def MountISO(self, isoPath, controlName: str, port: int, device: int):
 | 
					    def MountISO(self, isoPath, controlName = "storage_controller_1", port = 1, device = 0):
 | 
				
			||||||
        self.commandOption += "-drive 'media=cdrom,file=" + isoPath + ",if=ide,index=" + str(device) + "' "
 | 
					        self.commandOption += "-drive 'media=cdrom,file=" + isoPath + ",if=ide,index=" + str(device) + "' "
 | 
				
			||||||
        return 0
 | 
					        return 0
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@ -62,7 +62,7 @@ class qemu:
 | 
				
			|||||||
        print("Socket: ", cpuNum)
 | 
					        print("Socket: ", cpuNum)
 | 
				
			||||||
        print("Core: ", coreNum)
 | 
					        print("Core: ", coreNum)
 | 
				
			||||||
        print("Threads: ", number)
 | 
					        print("Threads: ", number)
 | 
				
			||||||
        self.commandOption += "-smp " + str(number) + ",sockets=" + str(cpuNum) + ",cores=" + str(coreNum / cpuNum) + ",threads=" + str(number / cpuNum / coreNum) + " "
 | 
					        self.commandOption += "-smp " + str(number) + ",sockets=" + str(cpuNum) + ",cores=" + str(int(coreNum / cpuNum)) + ",threads=" + str(int(number / cpuNum / coreNum)) + " "
 | 
				
			||||||
        return 0
 | 
					        return 0
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    def SetMemory(self, memory: str):
 | 
					    def SetMemory(self, memory: str):
 | 
				
			||||||
@ -72,7 +72,7 @@ class qemu:
 | 
				
			|||||||
    def SetRemote(self, setting: bool):
 | 
					    def SetRemote(self, setting: bool):
 | 
				
			||||||
        return 0
 | 
					        return 0
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    def SetRemoteConnectSetting(self, port: int):
 | 
					    def SetRemoteConnectSetting(self, port = 5540):
 | 
				
			||||||
        return 0
 | 
					        return 0
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    def MountMainDisk(self, diskPath: str):
 | 
					    def MountMainDisk(self, diskPath: str):
 | 
				
			||||||
@ -85,7 +85,7 @@ class qemu:
 | 
				
			|||||||
        if(os.path.exists("/opt/apps/deepin-wine-runner-qemu-system-extra/files/run.sh")):
 | 
					        if(os.path.exists("/opt/apps/deepin-wine-runner-qemu-system-extra/files/run.sh")):
 | 
				
			||||||
            # 如果存在拓展 Qemu,则调用此
 | 
					            # 如果存在拓展 Qemu,则调用此
 | 
				
			||||||
            qemuPath = "/opt/apps/deepin-wine-runner-qemu-system-extra/files/run.sh qemu-system-arm"
 | 
					            qemuPath = "/opt/apps/deepin-wine-runner-qemu-system-extra/files/run.sh qemu-system-arm"
 | 
				
			||||||
        if(subprocess.getoutput("arch").replace("\n", "").replace(" ", "") == "aarch64" and not os.system((self.applicationDirPath() + "/kvm-ok").toUtf8())):
 | 
					        if(subprocess.getoutput("arch").replace("\n", "").replace(" ", "") == "aarch64" and not os.system((self.applicationDirPath() + "/kvm-ok"))):
 | 
				
			||||||
            return os.system((qemuPath + " --boot 'splash=" + self.GetBootLogoPath() + ",order=d,menu=on,splash-time=2000' -display vnc=:5 -display gtk --enable-kvm -cpu host -M virt " + self.commandOption + " -device virtio-gpu-pci -device nec-usb-xhci,id=xhci,addr=0x1b -device usb-tablet,id=tablet,bus=xhci.0,port=1 -device usb-kbd,id=keyboard,bus=xhci.0,port=2 > /tmp/windows-virtual-machine-installer-for-wine-runner-install.log 2>&1 &"))
 | 
					            return os.system((qemuPath + " --boot 'splash=" + self.GetBootLogoPath() + ",order=d,menu=on,splash-time=2000' -display vnc=:5 -display gtk --enable-kvm -cpu host -M virt " + self.commandOption + " -device virtio-gpu-pci -device nec-usb-xhci,id=xhci,addr=0x1b -device usb-tablet,id=tablet,bus=xhci.0,port=1 -device usb-kbd,id=keyboard,bus=xhci.0,port=2 > /tmp/windows-virtual-machine-installer-for-wine-runner-install.log 2>&1 &"))
 | 
				
			||||||
    
 | 
					    
 | 
				
			||||||
        return os.system((qemuPath + " --boot 'splash=" + self.GetBootLogoPath() + ",order=d,menu=on,splash-time=2000'  -display vnc=:5 -display gtk -cpu max -M virt " + self.commandOption + " -device virtio-gpu-pci -device nec-usb-xhci,id=xhci,addr=0x1b -device usb-tablet,id=tablet,bus=xhci.0,port=1 -device usb-kbd,id=keyboard,bus=xhci.0,port=2 > /tmp/windows-virtual-machine-installer-for-wine-runner-install.log 2>&1 &"))
 | 
					        return os.system((qemuPath + " --boot 'splash=" + self.GetBootLogoPath() + ",order=d,menu=on,splash-time=2000'  -display vnc=:5 -display gtk -cpu max -M virt " + self.commandOption + " -device virtio-gpu-pci -device nec-usb-xhci,id=xhci,addr=0x1b -device usb-tablet,id=tablet,bus=xhci.0,port=1 -device usb-kbd,id=keyboard,bus=xhci.0,port=2 > /tmp/windows-virtual-machine-installer-for-wine-runner-install.log 2>&1 &"))
 | 
				
			||||||
@ -106,7 +106,7 @@ class qemu:
 | 
				
			|||||||
            qemuPath = "/opt/apps/deepin-wine-runner-qemu-system-extra/files/run.sh qemu-system-aarch64"
 | 
					            qemuPath = "/opt/apps/deepin-wine-runner-qemu-system-extra/files/run.sh qemu-system-aarch64"
 | 
				
			||||||
    
 | 
					    
 | 
				
			||||||
        print(self.commandOption)
 | 
					        print(self.commandOption)
 | 
				
			||||||
        if(subprocess.getoutput("arch").replace("\n", "").replace(" ", "") == "aarch64" and not os.system((self.applicationDirPath() + "/kvm-ok").toUtf8())):
 | 
					        if(subprocess.getoutput("arch").replace("\n", "").replace(" ", "") == "aarch64" and not os.system((self.applicationDirPath() + "/kvm-ok"))):
 | 
				
			||||||
            return os.system((qemuPath + " --boot 'splash=" + self.GetBootLogoPath() + ",order=d,menu=on,splash-time=2000' -display vnc=:5 -display gtk --enable-kvm -cpu host -M virt " + self.commandOption + " -device virtio-gpu-pci -device nec-usb-xhci,id=xhci,addr=0x1b -device usb-tablet,id=tablet,bus=xhci.0,port=1 -device usb-kbd,id=keyboard,bus=xhci.0,port=2 > /tmp/windows-virtual-machine-installer-for-wine-runner-install.log 2>&1 &"))
 | 
					            return os.system((qemuPath + " --boot 'splash=" + self.GetBootLogoPath() + ",order=d,menu=on,splash-time=2000' -display vnc=:5 -display gtk --enable-kvm -cpu host -M virt " + self.commandOption + " -device virtio-gpu-pci -device nec-usb-xhci,id=xhci,addr=0x1b -device usb-tablet,id=tablet,bus=xhci.0,port=1 -device usb-kbd,id=keyboard,bus=xhci.0,port=2 > /tmp/windows-virtual-machine-installer-for-wine-runner-install.log 2>&1 &"))
 | 
				
			||||||
    
 | 
					    
 | 
				
			||||||
        return os.system((qemuPath + " --boot 'splash=" + self.GetBootLogoPath() + ",order=d,menu=on,splash-time=2000'  -display vnc=:5 -display gtk -cpu max -M virt " + self.commandOption + " -device virtio-gpu-pci -device nec-usb-xhci,id=xhci,addr=0x1b -device usb-tablet,id=tablet,bus=xhci.0,port=1 -device usb-kbd,id=keyboard,bus=xhci.0,port=2 > /tmp/windows-virtual-machine-installer-for-wine-runner-install.log 2>&1 &"))
 | 
					        return os.system((qemuPath + " --boot 'splash=" + self.GetBootLogoPath() + ",order=d,menu=on,splash-time=2000'  -display vnc=:5 -display gtk -cpu max -M virt " + self.commandOption + " -device virtio-gpu-pci -device nec-usb-xhci,id=xhci,addr=0x1b -device usb-tablet,id=tablet,bus=xhci.0,port=1 -device usb-kbd,id=keyboard,bus=xhci.0,port=2 > /tmp/windows-virtual-machine-installer-for-wine-runner-install.log 2>&1 &"))
 | 
				
			||||||
@ -114,14 +114,14 @@ class qemu:
 | 
				
			|||||||
    def StartLoong64(self):
 | 
					    def StartLoong64(self):
 | 
				
			||||||
        return 1
 | 
					        return 1
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    def Start(self, unShown: bool):
 | 
					    def Start(self, unShown = False):
 | 
				
			||||||
        newCommandOption = self.commandOption
 | 
					        newCommandOption = self.commandOption
 | 
				
			||||||
        qemuPath = "qemu-system-x86_64"
 | 
					        qemuPath = "qemu-system-x86_64"
 | 
				
			||||||
        print(self.GetBootLogoPath())
 | 
					        print(self.GetBootLogoPath())
 | 
				
			||||||
        if (self.isUEFI):
 | 
					        if (self.isUEFI):
 | 
				
			||||||
            newcommandOption += " -vga none -device virtio-gpu-pci -device nec-usb-xhci,id=xhci,addr=0x1b -device usb-tablet,id=tablet,bus=xhci.0,port=1 -device usb-kbd,id=keyboard,bus=xhci.0,port=2 "
 | 
					            newCommandOption += " -vga none -device virtio-gpu-pci -device nec-usb-xhci,id=xhci,addr=0x1b -device usb-tablet,id=tablet,bus=xhci.0,port=1 -device usb-kbd,id=keyboard,bus=xhci.0,port=2 "
 | 
				
			||||||
        else:
 | 
					        else:
 | 
				
			||||||
            newcommandOption += " -vga virtio -device nec-usb-xhci,id=xhci,addr=0x1b -device usb-tablet,id=tablet,bus=xhci.0,port=1 "
 | 
					            newCommandOption += " -vga virtio -device nec-usb-xhci,id=xhci,addr=0x1b -device usb-tablet,id=tablet,bus=xhci.0,port=1 "
 | 
				
			||||||
        # UOS 3a4000 使用程序自带的 qemu
 | 
					        # UOS 3a4000 使用程序自带的 qemu
 | 
				
			||||||
        info = self.SystemInfo().lower()
 | 
					        info = self.SystemInfo().lower()
 | 
				
			||||||
        if("uos" in info or "unio" in info):
 | 
					        if("uos" in info or "unio" in info):
 | 
				
			||||||
@ -133,7 +133,7 @@ class qemu:
 | 
				
			|||||||
            # 如果存在拓展 Qemu,则调用此
 | 
					            # 如果存在拓展 Qemu,则调用此
 | 
				
			||||||
            qemuPath = "/opt/apps/deepin-wine-runner-qemu-system-extra/files/run.sh qemu-system-x86_64"
 | 
					            qemuPath = "/opt/apps/deepin-wine-runner-qemu-system-extra/files/run.sh qemu-system-x86_64"
 | 
				
			||||||
        print(self.commandOption)
 | 
					        print(self.commandOption)
 | 
				
			||||||
        if(subprocess.getoutput("arch").replace("\n", "").replace(" ", "") == "x86_64" and not os.system((self.applicationDirPath() + "/kvm-ok").toUtf8())):
 | 
					        if(subprocess.getoutput("arch").replace("\n", "").replace(" ", "") == "x86_64" and not os.system((self.applicationDirPath() + "/kvm-ok"))):
 | 
				
			||||||
            return os.system((qemuPath + " --boot 'splash=" + self.GetBootLogoPath() + ",order=d,menu=on,splash-time=2000' -display vnc=:5 -display gtk --enable-kvm -cpu host " + newCommandOption + " > /tmp/windows-virtual-machine-installer-for-wine-runner-install.log 2>&1 &"))
 | 
					            return os.system((qemuPath + " --boot 'splash=" + self.GetBootLogoPath() + ",order=d,menu=on,splash-time=2000' -display vnc=:5 -display gtk --enable-kvm -cpu host " + newCommandOption + " > /tmp/windows-virtual-machine-installer-for-wine-runner-install.log 2>&1 &"))
 | 
				
			||||||
        return os.system((qemuPath + " --boot 'splash=" + self.GetBootLogoPath() + ",order=d,menu=on,splash-time=2000' -display vnc=:5 -display gtk -nic model=rtl8139 " + newCommandOption + " > /tmp/windows-virtual-machine-installer-for-wine-runner-install.log 2>&1 &"))
 | 
					        return os.system((qemuPath + " --boot 'splash=" + self.GetBootLogoPath() + ",order=d,menu=on,splash-time=2000' -display vnc=:5 -display gtk -nic model=rtl8139 " + newCommandOption + " > /tmp/windows-virtual-machine-installer-for-wine-runner-install.log 2>&1 &"))
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@ -150,7 +150,7 @@ class qemu:
 | 
				
			|||||||
    def SetDisplayMemory(self, memory: int):
 | 
					    def SetDisplayMemory(self, memory: int):
 | 
				
			||||||
        return 0
 | 
					        return 0
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    def InstallGuessAdditions(self, controlName: str, port: int, device: int):
 | 
					    def InstallGuessAdditions(self, controlName = "storage_controller_1", port = 1, device = 0):
 | 
				
			||||||
        return 0
 | 
					        return 0
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    def EnabledAudio(self):
 | 
					    def EnabledAudio(self):
 | 
				
			||||||
@ -222,7 +222,7 @@ class qemu:
 | 
				
			|||||||
        return 0
 | 
					        return 0
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    def AddDiskSpace(self, path, data: float):
 | 
					    def AddDiskSpace(self, path, data: float):
 | 
				
			||||||
        return os.system(("qemu-img resize '" + self.path + "' +" + str(data) + "G").toUtf8())
 | 
					        return os.system(("qemu-img resize '" + self.path + "' +" + str(data) + "G"))
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    def GetBootLogoPath(self) -> str:
 | 
					    def GetBootLogoPath(self) -> str:
 | 
				
			||||||
        bootScreenLogo = ""
 | 
					        bootScreenLogo = ""
 | 
				
			||||||
 | 
				
			|||||||
							
								
								
									
										180
									
								
								VM-source/mainwindow_ui.py → VM/ui_mainwindow.py
									
									
									
									
									
										
										
										Normal file → Executable file
									
								
							
							
						
						@ -1,8 +1,8 @@
 | 
				
			|||||||
# -*- coding: utf-8 -*-
 | 
					# -*- coding: utf-8 -*-
 | 
				
			||||||
 | 
					
 | 
				
			||||||
# Form implementation generated from reading ui file '/home/gfdgd_xi/Desktop/deep-wine-runner/VM-source/mainwindow.ui'
 | 
					# Form implementation generated from reading ui file 'mainwindow.ui'
 | 
				
			||||||
#
 | 
					#
 | 
				
			||||||
# Created by: PyQt5 UI code generator 5.15.6
 | 
					# Created by: PyQt5 UI code generator 5.15.9
 | 
				
			||||||
#
 | 
					#
 | 
				
			||||||
# WARNING: Any manual changes made to this file will be lost when pyuic5 is
 | 
					# WARNING: Any manual changes made to this file will be lost when pyuic5 is
 | 
				
			||||||
# run again.  Do not edit this file unless you know what you are doing.
 | 
					# run again.  Do not edit this file unless you know what you are doing.
 | 
				
			||||||
@ -174,7 +174,7 @@ class Ui_MainWindow(object):
 | 
				
			|||||||
        self.CPUValue.setObjectName("CPUValue")
 | 
					        self.CPUValue.setObjectName("CPUValue")
 | 
				
			||||||
        MainWindow.setStatusBar(self.CPUValue)
 | 
					        MainWindow.setStatusBar(self.CPUValue)
 | 
				
			||||||
        self.menuBar = QtWidgets.QMenuBar(MainWindow)
 | 
					        self.menuBar = QtWidgets.QMenuBar(MainWindow)
 | 
				
			||||||
        self.menuBar.setGeometry(QtCore.QRect(0, 0, 1058, 36))
 | 
					        self.menuBar.setGeometry(QtCore.QRect(0, 0, 1058, 23))
 | 
				
			||||||
        self.menuBar.setObjectName("menuBar")
 | 
					        self.menuBar.setObjectName("menuBar")
 | 
				
			||||||
        self.menuVM = QtWidgets.QMenu(self.menuBar)
 | 
					        self.menuVM = QtWidgets.QMenu(self.menuBar)
 | 
				
			||||||
        self.menuVM.setObjectName("menuVM")
 | 
					        self.menuVM.setObjectName("menuVM")
 | 
				
			||||||
@ -193,10 +193,25 @@ class Ui_MainWindow(object):
 | 
				
			|||||||
        self.actionVMRunlLog.setObjectName("actionVMRunlLog")
 | 
					        self.actionVMRunlLog.setObjectName("actionVMRunlLog")
 | 
				
			||||||
        self.actionVMTest = QtWidgets.QAction(MainWindow)
 | 
					        self.actionVMTest = QtWidgets.QAction(MainWindow)
 | 
				
			||||||
        self.actionVMTest.setObjectName("actionVMTest")
 | 
					        self.actionVMTest.setObjectName("actionVMTest")
 | 
				
			||||||
 | 
					        self.action_StopVirtualBox = QtWidgets.QAction(MainWindow)
 | 
				
			||||||
 | 
					        self.action_StopVirtualBox.setObjectName("action_StopVirtualBox")
 | 
				
			||||||
 | 
					        self.action_StopQemu = QtWidgets.QAction(MainWindow)
 | 
				
			||||||
 | 
					        self.action_StopQemu.setObjectName("action_StopQemu")
 | 
				
			||||||
 | 
					        self.actionQemuDiskAddSpace = QtWidgets.QAction(MainWindow)
 | 
				
			||||||
 | 
					        self.actionQemuDiskAddSpace.setObjectName("actionQemuDiskAddSpace")
 | 
				
			||||||
 | 
					        self.getDCLC = QtWidgets.QAction(MainWindow)
 | 
				
			||||||
 | 
					        self.getDCLC.setObjectName("getDCLC")
 | 
				
			||||||
        self.menuVM.addAction(self.actionVMInstallLog)
 | 
					        self.menuVM.addAction(self.actionVMInstallLog)
 | 
				
			||||||
        self.menuVM.addAction(self.actionVMRunlLog)
 | 
					        self.menuVM.addAction(self.actionVMRunlLog)
 | 
				
			||||||
        self.menuVM.addSeparator()
 | 
					        self.menuVM.addSeparator()
 | 
				
			||||||
        self.menuVM.addAction(self.actionVMTest)
 | 
					        self.menuVM.addAction(self.actionVMTest)
 | 
				
			||||||
 | 
					        self.menuVM.addSeparator()
 | 
				
			||||||
 | 
					        self.menuVM.addAction(self.action_StopVirtualBox)
 | 
				
			||||||
 | 
					        self.menuVM.addAction(self.action_StopQemu)
 | 
				
			||||||
 | 
					        self.menuVM.addSeparator()
 | 
				
			||||||
 | 
					        self.menuVM.addAction(self.actionQemuDiskAddSpace)
 | 
				
			||||||
 | 
					        self.menuVM.addSeparator()
 | 
				
			||||||
 | 
					        self.menuVM.addAction(self.getDCLC)
 | 
				
			||||||
        self.menuBar.addAction(self.menuVM.menuAction())
 | 
					        self.menuBar.addAction(self.menuVM.menuAction())
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        self.retranslateUi(MainWindow)
 | 
					        self.retranslateUi(MainWindow)
 | 
				
			||||||
@ -235,110 +250,119 @@ class Ui_MainWindow(object):
 | 
				
			|||||||
        self.getvbox.setText(_translate("MainWindow", "获取VirtualBox"))
 | 
					        self.getvbox.setText(_translate("MainWindow", "获取VirtualBox"))
 | 
				
			||||||
        self.install.setText(_translate("MainWindow", "安装"))
 | 
					        self.install.setText(_translate("MainWindow", "安装"))
 | 
				
			||||||
        self.textBrowser_3.setHtml(_translate("MainWindow", "<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.0//EN\" \"http://www.w3.org/TR/REC-html40/strict.dtd\">\n"
 | 
					        self.textBrowser_3.setHtml(_translate("MainWindow", "<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.0//EN\" \"http://www.w3.org/TR/REC-html40/strict.dtd\">\n"
 | 
				
			||||||
"<html><head><meta name=\"qrichtext\" content=\"1\" /><style type=\"text/css\">\n"
 | 
					"<html><head><meta name=\"qrichtext\" content=\"1\" /><meta charset=\"utf-8\" /><style type=\"text/css\">\n"
 | 
				
			||||||
"p, li { white-space: pre-wrap; }\n"
 | 
					"p, li { white-space: pre-wrap; }\n"
 | 
				
			||||||
"</style></head><body style=\" font-family:\'Noto Sans CJK SC\'; font-size:10.5pt; font-weight:400; font-style:normal;\">\n"
 | 
					"hr { height: 1px; border-width: 0; }\n"
 | 
				
			||||||
"<p style=\" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;\"><span style=\" font-size:11pt;\">UOS 3a4000 用户在使用 Qemu 时可能会出现虚拟机无法正常开机的问题,需要安装/降级到以下链接的版本:</span></p>\n"
 | 
					"li.unchecked::marker { content: \"\\2610\"; }\n"
 | 
				
			||||||
"<p style=\" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;\"><span style=\" font-size:11pt;\">蓝奏云:</span><a href=\"https://gfdgdxi.lanzoue.com/b01rk9wza\"><span style=\" font-size:11pt; text-decoration: underline; color:#0082fa;\">https://gfdgdxi.lanzoue.com/b01rk9wza</span></a><span style=\" font-size:11pt;\"> 密码:6wvf</span></p>\n"
 | 
					"li.checked::marker { content: \"\\2612\"; }\n"
 | 
				
			||||||
"<p style=\" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;\"><span style=\" font-size:11pt;\">诚通网盘:</span><a href=\"http://ctfile.gfdgdxi.top/d/31540479-58662214-c46520?p=2061\"><span style=\" font-size:11pt; text-decoration: underline; color:#0082fa;\">http://ctfile.gfdgdxi.top/d/31540479-58662214-c46520?p=2061</span></a><span style=\" font-size:11pt;\"> (访问密码: 2061)</span></p>\n"
 | 
					"</style></head><body style=\" font-family:\'Sans Serif\'; font-size:9pt; font-weight:400; font-style:normal;\">\n"
 | 
				
			||||||
 | 
					"<p style=\" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;\"><span style=\" font-family:\'Noto Sans CJK SC\'; font-size:11pt;\">UOS 3a4000 用户在使用 Qemu 时可能会出现虚拟机无法正常开机的问题,如果出现上述问题需要安装/降级到以下链接的版本:</span></p>\n"
 | 
				
			||||||
 | 
					"<p style=\" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;\"><span style=\" font-family:\'Noto Sans CJK SC\'; font-size:11pt;\">蓝奏云:</span><a href=\"https://gfdgdxi.lanzoue.com/b01rk9wza\"><span style=\" font-family:\'Noto Sans CJK SC\'; font-size:11pt; text-decoration: underline; color:#0082fa;\">https://gfdgdxi.lanzoue.com/b01rk9wza</span></a><span style=\" font-family:\'Noto Sans CJK SC\'; font-size:11pt;\"> 密码:6wvf</span></p>\n"
 | 
				
			||||||
 | 
					"<p style=\" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;\"><span style=\" font-family:\'Noto Sans CJK SC\'; font-size:11pt;\">诚通网盘:</span><a href=\"http://ctfile.gfdgdxi.top/d/31540479-58662214-c46520?p=2061\"><span style=\" font-family:\'Noto Sans CJK SC\'; font-size:11pt; text-decoration: underline; color:#0082fa;\">http://ctfile.gfdgdxi.top/d/31540479-58662214-c46520?p=2061</span></a><span style=\" font-family:\'Noto Sans CJK SC\'; font-size:11pt;\"> (访问密码: 2061)</span></p>\n"
 | 
				
			||||||
"<hr />\n"
 | 
					"<hr />\n"
 | 
				
			||||||
"<p style=\" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;\"><span style=\" font-size:11pt;\">注:Qemu 跨架构效率较低,如无特殊情况不建议跨架构/不开硬件加速(如 kvm)运行 Qemu</span></p>\n"
 | 
					"<p style=\" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;\"><span style=\" font-family:\'Noto Sans CJK SC\'; font-size:11pt;\">注:Qemu 跨架构效率较低,如无特殊情况不建议跨架构/不开硬件加速(如 kvm)运行 Qemu</span></p>\n"
 | 
				
			||||||
"<hr />\n"
 | 
					"<hr />\n"
 | 
				
			||||||
"<p style=\" margin-top:12px; margin-bottom:12px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;\"><span style=\" font-size:10pt;\">如何安装系统?使用迅雷或者网盘下载以下任意一个链接的 ISO 镜像然后在上面选择即可:</span></p>\n"
 | 
					"<p style=\" margin-top:12px; margin-bottom:12px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;\"><span style=\" font-family:\'Noto Sans CJK SC\'; font-size:10pt;\">如何安装系统?使用迅雷或者网盘下载以下任意一个链接的 ISO 镜像然后在上面选择即可:</span></p>\n"
 | 
				
			||||||
"<p style=\" margin-top:12px; margin-bottom:12px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;\"><span style=\" font-size:10pt;\">123 网盘链接:</span><a href=\"https://www.123pan.com/s/pDSKVv-oypWv\"><span style=\" font-size:11pt; text-decoration: underline; color:#0082fa;\">https://www.123pan.com/s/pDSKVv-oypWv</span></a></p>\n"
 | 
					"<p style=\" margin-top:12px; margin-bottom:12px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;\"><span style=\" font-family:\'Noto Sans CJK SC\'; font-size:10pt;\">123 网盘链接:</span><a href=\"https://www.123pan.com/s/pDSKVv-oypWv\"><span style=\" font-family:\'Noto Sans CJK SC\'; font-size:11pt; text-decoration: underline; color:#0082fa;\">https://www.123pan.com/s/pDSKVv-oypWv</span></a></p>\n"
 | 
				
			||||||
"<p style=\" margin-top:12px; margin-bottom:12px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;\"><span style=\" font-size:10pt;\">迅雷网盘:</span><a href=\"https://pan.xunlei.com/s/VNKMz3wgbYHg6JIh50ZKIc7pA1?pwd=35e5\"><span style=\" font-size:11pt; text-decoration: underline; color:#0082fa;\">https://pan.xunlei.com/s/VNKMz3wgbYHg6JIh50ZKIc7pA1?pwd=35e5</span></a><span style=\" font-size:10pt;\">  提取码:35e5</span></p>\n"
 | 
					"<p style=\" margin-top:12px; margin-bottom:12px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;\"><span style=\" font-family:\'Noto Sans CJK SC\'; font-size:10pt;\">迅雷网盘:</span><a href=\"https://pan.xunlei.com/s/VNKMz3wgbYHg6JIh50ZKIc7pA1?pwd=35e5\"><span style=\" font-family:\'Noto Sans CJK SC\'; font-size:11pt; text-decoration: underline; color:#0082fa;\">https://pan.xunlei.com/s/VNKMz3wgbYHg6JIh50ZKIc7pA1?pwd=35e5</span></a><span style=\" font-family:\'Noto Sans CJK SC\'; font-size:10pt;\">  提取码:35e5</span></p>\n"
 | 
				
			||||||
"<p style=\" margin-top:12px; margin-bottom:12px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;\"><span style=\" font-size:10pt;\">百度网盘:</span><a href=\"https://pan.baidu.com/s/19WbvinITCQJFZpAdZutrjg?pwd=me4y\"><span style=\" font-size:11pt; text-decoration: underline; color:#0082fa;\">https://pan.baidu.com/s/19WbvinITCQJFZpAdZutrjg?pwd=me4y</span></a><span style=\" font-size:10pt;\"> 提取码: me4y</span></p>\n"
 | 
					"<p style=\" margin-top:12px; margin-bottom:12px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;\"><span style=\" font-family:\'Noto Sans CJK SC\'; font-size:10pt;\">百度网盘:</span><a href=\"https://pan.baidu.com/s/19WbvinITCQJFZpAdZutrjg?pwd=me4y\"><span style=\" font-family:\'Noto Sans CJK SC\'; font-size:11pt; text-decoration: underline; color:#0082fa;\">https://pan.baidu.com/s/19WbvinITCQJFZpAdZutrjg?pwd=me4y</span></a><span style=\" font-family:\'Noto Sans CJK SC\'; font-size:10pt;\"> 提取码: me4y</span></p>\n"
 | 
				
			||||||
"<p style=\" margin-top:12px; margin-bottom:12px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;\"><span style=\" font-size:10pt;\">诚通网盘:</span><a href=\"http://ctfile.gfdgdxi.top/d/31540479-58662220-3590cf?p=2061\"><span style=\" font-size:11pt; text-decoration: underline; color:#0082fa;\">http://ctfile.gfdgdxi.top/d/31540479-58662220-3590cf?p=2061</span></a><span style=\" font-size:10pt;\"> (访问密码: 2061)</span></p>\n"
 | 
					"<p style=\" margin-top:12px; margin-bottom:12px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;\"><span style=\" font-family:\'Noto Sans CJK SC\'; font-size:10pt;\">诚通网盘:</span><a href=\"http://ctfile.gfdgdxi.top/d/31540479-58662220-3590cf?p=2061\"><span style=\" font-family:\'Noto Sans CJK SC\'; font-size:11pt; text-decoration: underline; color:#0082fa;\">http://ctfile.gfdgdxi.top/d/31540479-58662220-3590cf?p=2061</span></a><span style=\" font-family:\'Noto Sans CJK SC\'; font-size:10pt;\"> (访问密码: 2061)</span></p>\n"
 | 
				
			||||||
"<p style=\" margin-top:12px; margin-bottom:12px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;\"><span style=\" font-size:10pt;\">(如果下载这个,系统版本选第一项,一般推荐这个)</span><a href=\"ed2k://|file|cn_windows_7_ultimate_with_sp1_x86_dvd_u_677486.iso|2653276160|7503E4B9B8738DFCB95872445C72AEFB|/\"><span style=\" font-size:11pt; text-decoration: underline; color:#0082fa;\">ed2k://|file|cn_windows_7_ultimate_with_sp1_x86_dvd_u_677486.iso|2653276160|7503E4B9B8738DFCB95872445C72AEFB|/</span></a></p>\n"
 | 
					"<p style=\" margin-top:12px; margin-bottom:12px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;\"><span style=\" font-family:\'Noto Sans CJK SC\'; font-size:10pt;\">(如果下载这个,系统版本选第一项,一般推荐这个)</span><a href=\"ed2k://|file|cn_windows_7_ultimate_with_sp1_x86_dvd_u_677486.iso|2653276160|7503E4B9B8738DFCB95872445C72AEFB|/\"><span style=\" font-family:\'Noto Sans CJK SC\'; font-size:11pt; text-decoration: underline; color:#0082fa;\">ed2k://|file|cn_windows_7_ultimate_with_sp1_x86_dvd_u_677486.iso|2653276160|7503E4B9B8738DFCB95872445C72AEFB|/</span></a></p>\n"
 | 
				
			||||||
"<p style=\" margin-top:12px; margin-bottom:12px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;\"><span style=\" font-size:10pt;\">(如果下载这个,系统版本选第二项)</span><a href=\"ed2k://|file|cn_windows_7_ultimate_with_sp1_x64_dvd_u_677408.iso|3420557312|B58548681854236C7939003B583A8078|/\"><span style=\" font-size:11pt; text-decoration: underline; color:#0082fa;\">ed2k://|file|cn_windows_7_ultimate_with_sp1_x64_dvd_u_677408.iso|3420557312|B58548681854236C7939003B583A8078|/</span></a></p>\n"
 | 
					"<p style=\" margin-top:12px; margin-bottom:12px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;\"><span style=\" font-family:\'Noto Sans CJK SC\'; font-size:10pt;\">(如果下载这个,系统版本选第二项)</span><a href=\"ed2k://|file|cn_windows_7_ultimate_with_sp1_x64_dvd_u_677408.iso|3420557312|B58548681854236C7939003B583A8078|/\"><span style=\" font-family:\'Noto Sans CJK SC\'; font-size:11pt; text-decoration: underline; color:#0082fa;\">ed2k://|file|cn_windows_7_ultimate_with_sp1_x64_dvd_u_677408.iso|3420557312|B58548681854236C7939003B583A8078|/</span></a></p>\n"
 | 
				
			||||||
"<hr />\n"
 | 
					"<hr />\n"
 | 
				
			||||||
"<p style=\" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;\"><span style=\" font-size:11pt; font-weight:600;\">常用 Windows 软件:</span></p>\n"
 | 
					"<p style=\" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;\"><span style=\" font-family:\'Noto Sans CJK SC\'; font-size:11pt; font-weight:600;\">常用 Windows 软件:</span></p>\n"
 | 
				
			||||||
"<p style=\" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;\"><span style=\" font-size:11pt;\">百度网盘:链接: </span><a href=\"https://pan.baidu.com/s/1D1NSy7k7XBnOZL_tNTnG6g?pwd=7s2p\"><span style=\" font-size:11pt; text-decoration: underline; color:#0082fa;\">https://pan.baidu.com/s/1D1NSy7k7XBnOZL_tNTnG6g?pwd=7s2p</span></a><span style=\" font-size:11pt;\"> 提取码: 7s2p </span></p>\n"
 | 
					"<p style=\" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;\"><span style=\" font-family:\'Noto Sans CJK SC\'; font-size:11pt;\">百度网盘:链接: </span><a href=\"https://pan.baidu.com/s/1D1NSy7k7XBnOZL_tNTnG6g?pwd=7s2p\"><span style=\" font-family:\'Noto Sans CJK SC\'; font-size:11pt; text-decoration: underline; color:#0082fa;\">https://pan.baidu.com/s/1D1NSy7k7XBnOZL_tNTnG6g?pwd=7s2p</span></a><span style=\" font-family:\'Noto Sans CJK SC\'; font-size:11pt;\"> 提取码: 7s2p </span></p>\n"
 | 
				
			||||||
"<p style=\" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;\"><span style=\" font-size:11pt;\">诚通网盘:</span><a href=\"http://ctfile.gfdgdxi.top/d/31540479-58659214-0732a8?p=2061\"><span style=\" font-size:11pt; text-decoration: underline; color:#0082fa;\">http://ctfile.gfdgdxi.top/d/31540479-58659214-0732a8?p=2061</span></a><span style=\" font-size:11pt;\"> (访问密码: 2061)</span></p>\n"
 | 
					"<p style=\" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;\"><span style=\" font-family:\'Noto Sans CJK SC\'; font-size:11pt;\">诚通网盘:</span><a href=\"http://ctfile.gfdgdxi.top/d/31540479-58659214-0732a8?p=2061\"><span style=\" font-family:\'Noto Sans CJK SC\'; font-size:11pt; text-decoration: underline; color:#0082fa;\">http://ctfile.gfdgdxi.top/d/31540479-58659214-0732a8?p=2061</span></a><span style=\" font-family:\'Noto Sans CJK SC\'; font-size:11pt;\"> (访问密码: 2061)</span></p>\n"
 | 
				
			||||||
"<p style=\" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;\"><span style=\" font-size:11pt;\">123网盘:</span><a href=\"https://www.123pan.com/s/pDSKVv-uCBWv.html\"><span style=\" font-size:11pt; text-decoration: underline; color:#0082fa;\">https://www.123pan.com/s/pDSKVv-uCBWv.html</span></a></p>\n"
 | 
					"<p style=\" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;\"><span style=\" font-family:\'Noto Sans CJK SC\'; font-size:11pt;\">123网盘:</span><a href=\"https://www.123pan.com/s/pDSKVv-uCBWv.html\"><span style=\" font-family:\'Noto Sans CJK SC\'; font-size:11pt; text-decoration: underline; color:#0082fa;\">https://www.123pan.com/s/pDSKVv-uCBWv.html</span></a></p>\n"
 | 
				
			||||||
"<hr /></body></html>"))
 | 
					"<hr /></body></html>"))
 | 
				
			||||||
        self.tabWidget.setTabText(self.tabWidget.indexOf(self.tab), _translate("MainWindow", "设置"))
 | 
					        self.tabWidget.setTabText(self.tabWidget.indexOf(self.tab), _translate("MainWindow", "设置"))
 | 
				
			||||||
        self.tabWidget.setTabToolTip(self.tabWidget.indexOf(self.tab), _translate("MainWindow", "设置"))
 | 
					        self.tabWidget.setTabToolTip(self.tabWidget.indexOf(self.tab), _translate("MainWindow", "设置"))
 | 
				
			||||||
        self.textBrowser.setHtml(_translate("MainWindow", "<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.0//EN\" \"http://www.w3.org/TR/REC-html40/strict.dtd\">\n"
 | 
					        self.textBrowser.setHtml(_translate("MainWindow", "<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.0//EN\" \"http://www.w3.org/TR/REC-html40/strict.dtd\">\n"
 | 
				
			||||||
"<html><head><meta name=\"qrichtext\" content=\"1\" /><style type=\"text/css\">\n"
 | 
					"<html><head><meta name=\"qrichtext\" content=\"1\" /><meta charset=\"utf-8\" /><style type=\"text/css\">\n"
 | 
				
			||||||
"p, li { white-space: pre-wrap; }\n"
 | 
					"p, li { white-space: pre-wrap; }\n"
 | 
				
			||||||
"</style></head><body style=\" font-family:\'Noto Sans CJK SC\'; font-size:10.5pt; font-weight:400; font-style:normal;\">\n"
 | 
					"hr { height: 1px; border-width: 0; }\n"
 | 
				
			||||||
"<p style=\" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;\"><span style=\" font-size:26pt; font-weight:600;\">给小白的一段话</span></p>\n"
 | 
					"li.unchecked::marker { content: \"\\2610\"; }\n"
 | 
				
			||||||
"<p style=\" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;\">其实本质上跑完安装程序就没有然后了,顶多如果想要运行舒服一点点,可以安装加强功能,直接拉到最底下看就可以了,<span style=\" font-weight:600; font-style:italic; text-decoration: underline;\">只限使用 VirtualBox</span></p>\n"
 | 
					"li.checked::marker { content: \"\\2612\"; }\n"
 | 
				
			||||||
"<p style=\" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;\"><span style=\" font-weight:600; font-style:italic; text-decoration: underline;\">如果你是用非 X86 PC,那暂时只能使用 qemu(没 kvm),且跨架构的性能损失很大,推荐使用 Windows XP 而非 Windows 7</span></p>\n"
 | 
					"</style></head><body style=\" font-family:\'Sans Serif\'; font-size:9pt; font-weight:400; font-style:normal;\">\n"
 | 
				
			||||||
"<p style=\" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;\">如果爱折腾的话,下面的都看看也无所谓的,想看往下翻就可以了</p>\n"
 | 
					"<p style=\" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;\"><span style=\" font-family:\'Noto Sans CJK SC\'; font-size:26pt; font-weight:600;\">给小白的一段话</span></p>\n"
 | 
				
			||||||
"<p style=\" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;\"><span style=\" font-weight:600; text-decoration: underline;\">(这里的帮助更新可能不会那么及时,更详细/新的帮助可以看:https://gitee.com/gfdgd-xi/deep-wine-runner/wikis 或 https://gitee.com/gfdgd-xi/wine-runner-wiki)</span></p>\n"
 | 
					"<p style=\" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;\"><span style=\" font-family:\'Noto Sans CJK SC\'; font-size:10.5pt;\">其实本质上跑完安装程序就没有然后了,顶多如果想要运行舒服一点点,可以安装加强功能,直接拉到最底下看就可以了,</span><span style=\" font-family:\'Noto Sans CJK SC\'; font-size:10.5pt; font-weight:600; font-style:italic; text-decoration: underline;\">只限使用 VirtualBox</span></p>\n"
 | 
				
			||||||
"<p style=\" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;\">(如果鼠标被锁定到里面了按下键盘右边的“Ctrl”键就可以了,<span style=\" font-weight:600; font-style:italic; text-decoration: underline;\">qemu则是 Ctrl+Alt+G</span> )</p>\n"
 | 
					"<p style=\" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;\"><span style=\" font-family:\'Noto Sans CJK SC\'; font-size:10.5pt; font-weight:600; font-style:italic; text-decoration: underline;\">如果你是用非 X86 PC,那暂时只能使用 qemu(没 kvm),且跨架构的性能损失很大,推荐使用 Windows XP 而非 Windows 7</span></p>\n"
 | 
				
			||||||
"<p style=\" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;\">VirtualBox 可以安装增强功能以优化体验,安装方法往下翻即可查询</p>\n"
 | 
					"<p style=\" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;\"><span style=\" font-family:\'Noto Sans CJK SC\'; font-size:10.5pt;\">如果爱折腾的话,下面的都看看也无所谓的,想看往下翻就可以了</span></p>\n"
 | 
				
			||||||
"<p style=\" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;\">Qemu 可以安装 Virtio 以优化体验,下载链接:<a href=\"https://fedorapeople.org/groups/virt/virtio-win/direct-downloads/archive-virtio/\"><span style=\" font-size:11pt; text-decoration: underline; color:#0082fa;\">https://fedorapeople.org/groups/virt/virtio-win/direct-downloads/archive-virtio/</span></a></p>\n"
 | 
					"<p style=\" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;\"><span style=\" font-family:\'Noto Sans CJK SC\'; font-size:10.5pt; font-weight:600; text-decoration: underline;\">(这里的帮助更新可能不会那么及时,更详细/新的帮助可以看:https://gitee.com/gfdgd-xi/deep-wine-runner/wikis 或 https://gitee.com/gfdgd-xi/wine-runner-wiki)</span></p>\n"
 | 
				
			||||||
 | 
					"<p style=\" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;\"><span style=\" font-family:\'Noto Sans CJK SC\'; font-size:10.5pt;\">(如果鼠标被锁定到里面了按下键盘右边的“Ctrl”键就可以了,</span><span style=\" font-family:\'Noto Sans CJK SC\'; font-size:10.5pt; font-weight:600; font-style:italic; text-decoration: underline;\">qemu则是 Ctrl+Alt+G</span><span style=\" font-family:\'Noto Sans CJK SC\'; font-size:10.5pt;\"> )</span></p>\n"
 | 
				
			||||||
 | 
					"<p style=\" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;\"><span style=\" font-family:\'Noto Sans CJK SC\'; font-size:10.5pt;\">VirtualBox 可以安装增强功能以优化体验,安装方法往下翻即可查询</span></p>\n"
 | 
				
			||||||
 | 
					"<p style=\" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;\"><span style=\" font-family:\'Noto Sans CJK SC\'; font-size:10.5pt;\">Qemu 可以安装 Virtio 以优化体验,下载链接:</span><a href=\"https://fedorapeople.org/groups/virt/virtio-win/direct-downloads/archive-virtio/\"><span style=\" font-family:\'Noto Sans CJK SC\'; font-size:11pt; text-decoration: underline; color:#0082fa;\">https://fedorapeople.org/groups/virt/virtio-win/direct-downloads/archive-virtio/</span></a></p>\n"
 | 
				
			||||||
"<hr />\n"
 | 
					"<hr />\n"
 | 
				
			||||||
"<p style=\"-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;\"><br /></p>\n"
 | 
					"<p style=\"-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:\'Noto Sans CJK SC\'; font-size:10.5pt;\"><br /></p>\n"
 | 
				
			||||||
"<p style=\"-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:26pt; font-weight:600;\"><br /></p>\n"
 | 
					"<p style=\"-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:\'Noto Sans CJK SC\'; font-size:26pt; font-weight:600;\"><br /></p>\n"
 | 
				
			||||||
"<p style=\"-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:26pt; font-weight:600;\"><br /></p>\n"
 | 
					"<p style=\"-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:\'Noto Sans CJK SC\'; font-size:26pt; font-weight:600;\"><br /></p>\n"
 | 
				
			||||||
"<p style=\"-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:26pt; font-weight:600;\"><br /></p>\n"
 | 
					"<p style=\"-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:\'Noto Sans CJK SC\'; font-size:26pt; font-weight:600;\"><br /></p>\n"
 | 
				
			||||||
"<p style=\"-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:26pt; font-weight:600;\"><br /></p>\n"
 | 
					"<p style=\"-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:\'Noto Sans CJK SC\'; font-size:26pt; font-weight:600;\"><br /></p>\n"
 | 
				
			||||||
"<p style=\"-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:26pt; font-weight:600;\"><br /></p>\n"
 | 
					"<p style=\"-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:\'Noto Sans CJK SC\'; font-size:26pt; font-weight:600;\"><br /></p>\n"
 | 
				
			||||||
"<p style=\"-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:26pt; font-weight:600;\"><br /></p>\n"
 | 
					"<p style=\"-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:\'Noto Sans CJK SC\'; font-size:26pt; font-weight:600;\"><br /></p>\n"
 | 
				
			||||||
"<p style=\"-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:26pt; font-weight:600;\"><br /></p>\n"
 | 
					"<p style=\"-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:\'Noto Sans CJK SC\'; font-size:26pt; font-weight:600;\"><br /></p>\n"
 | 
				
			||||||
"<p style=\"-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:26pt; font-weight:600;\"><br /></p>\n"
 | 
					"<p style=\"-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:\'Noto Sans CJK SC\'; font-size:26pt; font-weight:600;\"><br /></p>\n"
 | 
				
			||||||
"<p style=\"-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:26pt; font-weight:600;\"><br /></p>\n"
 | 
					"<p style=\"-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:\'Noto Sans CJK SC\'; font-size:26pt; font-weight:600;\"><br /></p>\n"
 | 
				
			||||||
"<p style=\"-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:26pt; font-weight:600;\"><br /></p>\n"
 | 
					"<p style=\"-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:\'Noto Sans CJK SC\'; font-size:26pt; font-weight:600;\"><br /></p>\n"
 | 
				
			||||||
"<p style=\"-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:26pt; font-weight:600;\"><br /></p>\n"
 | 
					"<p style=\"-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:\'Noto Sans CJK SC\'; font-size:26pt; font-weight:600;\"><br /></p>\n"
 | 
				
			||||||
"<p style=\"-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:26pt; font-weight:600;\"><br /></p>\n"
 | 
					"<p style=\"-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:\'Noto Sans CJK SC\'; font-size:26pt; font-weight:600;\"><br /></p>\n"
 | 
				
			||||||
"<p style=\" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;\"><span style=\" font-size:26pt; font-weight:600;\">安装是否需要人工进行操作?</span></p>\n"
 | 
					"<p style=\" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;\"><span style=\" font-family:\'Noto Sans CJK SC\'; font-size:26pt; font-weight:600;\">安装是否需要人工进行操作?</span></p>\n"
 | 
				
			||||||
"<p style=\" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;\">如果您下载的镜像本程序支持,则大部分不用,已经尽量省去了让新手头疼的虚拟机程序安装,创建、设置虚拟机,虚拟磁盘分区,寻找原版镜像文件等内容</p>\n"
 | 
					"<p style=\" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;\"><span style=\" font-family:\'Noto Sans CJK SC\'; font-size:10.5pt;\">如果您下载的镜像本程序支持,则大部分不用,已经尽量省去了让新手头疼的虚拟机程序安装,创建、设置虚拟机,虚拟磁盘分区,寻找原版镜像文件等内容</span></p>\n"
 | 
				
			||||||
"<p style=\" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;\"><img src=\":/picture/截图/截图_VirtualBox Machine_20220712191756.png\" /></p>\n"
 | 
					"<p style=\" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;\"><img src=\":/picture/截图/截图_VirtualBox Machine_20220712191756.png\" /></p>\n"
 | 
				
			||||||
"<p style=\" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;\">但有些设置依旧需要人工自行设置,例如安装界面密钥的输入、系统的激活(涉及版权问题,不会考虑省略)、增强功能的安装、需要使用的软件等等</p>\n"
 | 
					"<p style=\" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;\"><span style=\" font-family:\'Noto Sans CJK SC\'; font-size:10.5pt;\">但有些设置依旧需要人工自行设置,例如安装界面密钥的输入、系统的激活(涉及版权问题,不会考虑省略)、增强功能的安装、需要使用的软件等等</span></p>\n"
 | 
				
			||||||
"<p style=\" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;\"><img src=\":/picture/截图/截图_VirtualBox Machine_20220712192850.png\" /></p>\n"
 | 
					"<p style=\" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;\"><img src=\":/picture/截图/截图_VirtualBox Machine_20220712192850.png\" /></p>\n"
 | 
				
			||||||
"<p style=\" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;\"><img src=\":/picture/截图/截图_VirtualBox Machine_20220712193527.png\" /></p>\n"
 | 
					"<p style=\" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;\"><img src=\":/picture/截图/截图_VirtualBox Machine_20220712193527.png\" /></p>\n"
 | 
				
			||||||
"<hr />\n"
 | 
					"<hr />\n"
 | 
				
			||||||
"<p style=\" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;\"><span style=\" font-size:26pt; font-weight:600;\">什么样的镜像本程序(可能)不支持自动安装?</span></p>\n"
 | 
					"<p style=\" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;\"><span style=\" font-family:\'Noto Sans CJK SC\'; font-size:26pt; font-weight:600;\">什么样的镜像本程序(可能)不支持自动安装?</span></p>\n"
 | 
				
			||||||
"<p style=\" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;\">非 Windows 7 镜像可能不支持自动安装(纯的 Windows 7 企业版镜像可能不支持自动安装),不保证系统能自动安装成功,例如 Windows XP、Windows 10、Deepin、Ubuntu 等等</p>\n"
 | 
					"<p style=\" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;\"><span style=\" font-family:\'Noto Sans CJK SC\'; font-size:10.5pt;\">非 Windows 7 镜像可能不支持自动安装(纯的 Windows 7 企业版镜像可能不支持自动安装),不保证系统能自动安装成功,例如 Windows XP、Windows 10、Deepin、Ubuntu 等等</span></p>\n"
 | 
				
			||||||
"<p style=\"-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;\"><br /></p>\n"
 | 
					"<p style=\"-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:\'Noto Sans CJK SC\'; font-size:10.5pt;\"><br /></p>\n"
 | 
				
			||||||
"<hr />\n"
 | 
					"<hr />\n"
 | 
				
			||||||
"<p style=\" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;\"><span style=\" font-size:26pt; font-weight:600;\">默认的虚拟机设置不习惯怎么改?</span></p>\n"
 | 
					"<p style=\" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;\"><span style=\" font-family:\'Noto Sans CJK SC\'; font-size:26pt; font-weight:600;\">默认的虚拟机设置不习惯怎么改?</span></p>\n"
 | 
				
			||||||
"<p style=\" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;\"><span style=\" font-size:11pt;\">1、打开启动器,打开 Oracle VM VirtualBox 程序</span></p>\n"
 | 
					"<p style=\" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;\"><span style=\" font-family:\'Noto Sans CJK SC\'; font-size:11pt;\">1、打开启动器,打开 Oracle VM VirtualBox 程序</span></p>\n"
 | 
				
			||||||
"<p style=\" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;\"><span style=\" font-size:11pt;\">2、选择名字为“Windows”的虚拟机,然后在右边点击设置</span></p>\n"
 | 
					"<p style=\" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;\"><span style=\" font-family:\'Noto Sans CJK SC\'; font-size:11pt;\">2、选择名字为“Windows”的虚拟机,然后在右边点击设置</span></p>\n"
 | 
				
			||||||
"<p style=\" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;\"><img src=\":/picture/截图/截图_VirtualBox Manager_20220712223602.png\" /></p>\n"
 | 
					"<p style=\" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;\"><img src=\":/picture/截图/截图_VirtualBox Manager_20220712223602.png\" /></p>\n"
 | 
				
			||||||
"<p style=\" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;\"><span style=\" font-size:11pt;\">3、在这里修改即可</span></p>\n"
 | 
					"<p style=\" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;\"><span style=\" font-family:\'Noto Sans CJK SC\'; font-size:11pt;\">3、在这里修改即可</span></p>\n"
 | 
				
			||||||
"<p style=\" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;\"><img src=\":/picture/截图/截图_VirtualBox_20220712223705.png\" /></p>\n"
 | 
					"<p style=\" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;\"><img src=\":/picture/截图/截图_VirtualBox_20220712223705.png\" /></p>\n"
 | 
				
			||||||
"<hr />\n"
 | 
					"<hr />\n"
 | 
				
			||||||
"<p style=\" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;\"><span style=\" font-size:26pt; font-weight:600;\">安装加强功能有什么好处?(只限使用 VirtualBox)</span></p>\n"
 | 
					"<p style=\" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;\"><span style=\" font-family:\'Noto Sans CJK SC\'; font-size:26pt; font-weight:600;\">安装加强功能有什么好处?(只限使用 VirtualBox)</span></p>\n"
 | 
				
			||||||
"<p style=\" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;\">1、支持鼠标自由从虚拟机和实体机切换</p>\n"
 | 
					"<p style=\" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;\"><span style=\" font-family:\'Noto Sans CJK SC\'; font-size:10.5pt;\">1、支持鼠标自由从虚拟机和实体机切换</span></p>\n"
 | 
				
			||||||
"<p style=\" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;\">2、支持虚拟机根据窗口大小自动设置分辨率</p>\n"
 | 
					"<p style=\" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;\"><span style=\" font-family:\'Noto Sans CJK SC\'; font-size:10.5pt;\">2、支持虚拟机根据窗口大小自动设置分辨率</span></p>\n"
 | 
				
			||||||
"<p style=\" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;\">3、支持文件共享、剪切板共享、文件拖放</p>\n"
 | 
					"<p style=\" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;\"><span style=\" font-family:\'Noto Sans CJK SC\'; font-size:10.5pt;\">3、支持文件共享、剪切板共享、文件拖放</span></p>\n"
 | 
				
			||||||
"<p style=\" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;\">4、支持无缝模式</p>\n"
 | 
					"<p style=\" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;\"><span style=\" font-family:\'Noto Sans CJK SC\'; font-size:10.5pt;\">4、支持无缝模式</span></p>\n"
 | 
				
			||||||
"<p style=\" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;\"><img src=\":/picture/截图/截图_选择区域_20220712224639.png\" /></p>\n"
 | 
					"<p style=\" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;\"><img src=\":/picture/截图/截图_选择区域_20220712224639.png\" /></p>\n"
 | 
				
			||||||
"<hr />\n"
 | 
					"<hr />\n"
 | 
				
			||||||
"<p style=\" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;\"><span style=\" font-size:26pt; font-weight:600;\">如何安装加强功能?</span></p>\n"
 | 
					"<p style=\" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;\"><span style=\" font-family:\'Noto Sans CJK SC\'; font-size:26pt; font-weight:600;\">如何安装加强功能?</span></p>\n"
 | 
				
			||||||
"<p style=\" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;\">1、点击“设备”=》“加强功能”</p>\n"
 | 
					"<p style=\" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;\"><span style=\" font-family:\'Noto Sans CJK SC\'; font-size:10.5pt;\">1、点击“设备”=》“加强功能”</span></p>\n"
 | 
				
			||||||
"<p style=\" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;\"><img src=\":/picture/截图_VirtualBox Machine_20220712142929.png\" /></p>\n"
 | 
					"<p style=\" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;\"><img src=\":/picture/截图_VirtualBox Machine_20220712142929.png\" /></p>\n"
 | 
				
			||||||
"<p style=\" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;\">2、打开“计算机”,找到名为“VirtualBox Guest Additions”的光盘,双击进入,然后双击打开名为“VBoxWindowsAdditions”的程序</p>\n"
 | 
					"<p style=\" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;\"><span style=\" font-family:\'Noto Sans CJK SC\'; font-size:10.5pt;\">2、打开“计算机”,找到名为“VirtualBox Guest Additions”的光盘,双击进入,然后双击打开名为“VBoxWindowsAdditions”的程序</span></p>\n"
 | 
				
			||||||
"<p style=\" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;\"><img src=\":/picture/截图/截图_VirtualBox Machine_20220712143006.png\" /></p>\n"
 | 
					"<p style=\" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;\"><img src=\":/picture/截图/截图_VirtualBox Machine_20220712143006.png\" /></p>\n"
 | 
				
			||||||
"<p style=\" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;\">3、在弹出的界面点击“是”</p>\n"
 | 
					"<p style=\" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;\"><span style=\" font-family:\'Noto Sans CJK SC\'; font-size:10.5pt;\">3、在弹出的界面点击“是”</span></p>\n"
 | 
				
			||||||
"<p style=\" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;\"><img src=\":/picture/截图/截图_VirtualBox Machine_20220712143018.png\" /></p>\n"
 | 
					"<p style=\" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;\"><img src=\":/picture/截图/截图_VirtualBox Machine_20220712143018.png\" /></p>\n"
 | 
				
			||||||
"<p style=\" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;\">4、一直点“Next”</p>\n"
 | 
					"<p style=\" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;\"><span style=\" font-family:\'Noto Sans CJK SC\'; font-size:10.5pt;\">4、一直点“Next”</span></p>\n"
 | 
				
			||||||
"<p style=\" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;\"><img src=\":/picture/截图/截图_VirtualBox Machine_20220712143029.png\" /></p>\n"
 | 
					"<p style=\" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;\"><img src=\":/picture/截图/截图_VirtualBox Machine_20220712143029.png\" /></p>\n"
 | 
				
			||||||
"<p style=\" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;\"><img src=\":/picture/截图/截图_VirtualBox Machine_20220712143037.png\" /></p>\n"
 | 
					"<p style=\" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;\"><img src=\":/picture/截图/截图_VirtualBox Machine_20220712143037.png\" /></p>\n"
 | 
				
			||||||
"<p style=\" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;\"><span style=\" font-size:11pt;\">5、全部选择,然后点击“Install”进行安装</span></p>\n"
 | 
					"<p style=\" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;\"><span style=\" font-family:\'Noto Sans CJK SC\'; font-size:11pt;\">5、全部选择,然后点击“Install”进行安装</span></p>\n"
 | 
				
			||||||
"<p style=\" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;\"><img src=\":/picture/截图/截图_VirtualBox Machine_20220712143044.png\" /></p>\n"
 | 
					"<p style=\" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;\"><img src=\":/picture/截图/截图_VirtualBox Machine_20220712143044.png\" /></p>\n"
 | 
				
			||||||
"<p style=\" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;\"><span style=\" font-size:11pt;\">6、等待安装完毕后,选择“Reboot now”然后点击“Finish”重启此虚拟机即可安装成功(选择“Reboot now”并点“Finish”会自动重新启动)</span></p>\n"
 | 
					"<p style=\" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;\"><span style=\" font-family:\'Noto Sans CJK SC\'; font-size:11pt;\">6、等待安装完毕后,选择“Reboot now”然后点击“Finish”重启此虚拟机即可安装成功(选择“Reboot now”并点“Finish”会自动重新启动)</span></p>\n"
 | 
				
			||||||
"<p style=\" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;\"><img src=\":/picture/截图/截图_VirtualBox Machine_20220712143103.png\" /></p></body></html>"))
 | 
					"<p style=\" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;\"><img src=\":/picture/截图/截图_VirtualBox Machine_20220712143103.png\" /></p></body></html>"))
 | 
				
			||||||
        self.tabWidget.setTabText(self.tabWidget.indexOf(self.tab_3), _translate("MainWindow", "安装/使用帮助"))
 | 
					        self.tabWidget.setTabText(self.tabWidget.indexOf(self.tab_3), _translate("MainWindow", "安装/使用帮助"))
 | 
				
			||||||
        self.textBrowser_2.setHtml(_translate("MainWindow", "<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.0//EN\" \"http://www.w3.org/TR/REC-html40/strict.dtd\">\n"
 | 
					        self.textBrowser_2.setHtml(_translate("MainWindow", "<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.0//EN\" \"http://www.w3.org/TR/REC-html40/strict.dtd\">\n"
 | 
				
			||||||
"<html><head><meta name=\"qrichtext\" content=\"1\" /><style type=\"text/css\">\n"
 | 
					"<html><head><meta name=\"qrichtext\" content=\"1\" /><meta charset=\"utf-8\" /><style type=\"text/css\">\n"
 | 
				
			||||||
"p, li { white-space: pre-wrap; }\n"
 | 
					"p, li { white-space: pre-wrap; }\n"
 | 
				
			||||||
"</style></head><body style=\" font-family:\'Noto Sans CJK SC\'; font-size:10.5pt; font-weight:400; font-style:normal;\">\n"
 | 
					"hr { height: 1px; border-width: 0; }\n"
 | 
				
			||||||
"<p style=\" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;\">此为 wine 运行器附属组件(虽然违背了“Wine Is Not An Emulator”<Wine 不是一个模拟器>的原意),旨在能更加完美、简单的运行 Windows 应用</p>\n"
 | 
					"li.unchecked::marker { content: \"\\2610\"; }\n"
 | 
				
			||||||
"<p style=\" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;\">本程序基于 C++ Qt、Python 和 Virtualbox 制作,通过运行安装 Windows 操作系统的虚拟机实现在 Linux 运行 Windows exe 程序的功能。</p>\n"
 | 
					"li.checked::marker { content: \"\\2612\"; }\n"
 | 
				
			||||||
"<p style=\" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;\">基于 GPL V3 协议开源</p>\n"
 | 
					"</style></head><body style=\" font-family:\'Sans Serif\'; font-size:9pt; font-weight:400; font-style:normal;\">\n"
 | 
				
			||||||
"<p style=\" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;\">项目地址:</p>\n"
 | 
					"<p style=\" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;\"><span style=\" font-family:\'Noto Sans CJK SC\'; font-size:10.5pt;\">此为 wine 运行器附属组件(虽然违背了“Wine Is Not An Emulator”<Wine 不是一个模拟器>的原意),旨在能更加完美、简单的运行 Windows 应用</span></p>\n"
 | 
				
			||||||
"<p style=\" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;\">    Gitee:<a href=\"https://gitee.com/gfdgd-xi/deep-wine-runner\"><span style=\" font-size:11pt; text-decoration: underline; color:#0082fa;\">https://gitee.com/gfdgd-xi/deep-wine-runner</span></a></p>\n"
 | 
					"<p style=\" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;\"><span style=\" font-family:\'Noto Sans CJK SC\'; font-size:10.5pt;\">本程序基于 C++ Qt、Python 和 Virtualbox 制作,通过运行安装 Windows 操作系统的虚拟机实现在 Linux 运行 Windows exe 程序的功能。</span></p>\n"
 | 
				
			||||||
"<p style=\" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;\">    Github:<a href=\"https://github.com/gfdgd-xi/deep-wine-runner\"><span style=\" font-size:11pt; text-decoration: underline; color:#0082fa;\">https://github.com/gfdgd-xi/deep-wine-runner</span></a></p>\n"
 | 
					"<p style=\" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;\"><span style=\" font-family:\'Noto Sans CJK SC\'; font-size:10.5pt;\">基于 GPL V3 协议开源</span></p>\n"
 | 
				
			||||||
"<p style=\" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;\">此组件也有非常大的缺点,就是相比于 Wine,会需要占用大量的空间、安装需要大量的时间、某些情况下需要相比于 Wine 需要消耗更多的系统资源,但可以更加完美、流畅的运行 Windows 应用,会尽量减少因为缺少或未实现导致的 Windows exe 程序运行异常</p>\n"
 | 
					"<p style=\" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;\"><span style=\" font-family:\'Noto Sans CJK SC\'; font-size:10.5pt;\">项目地址:</span></p>\n"
 | 
				
			||||||
"<p style=\" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;\">该组件制作者:gfdgd xi</p>\n"
 | 
					"<p style=\" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;\"><span style=\" font-family:\'Noto Sans CJK SC\'; font-size:10.5pt;\">    Gitee:</span><a href=\"https://gitee.com/gfdgd-xi/deep-wine-runner\"><span style=\" font-family:\'Noto Sans CJK SC\'; font-size:11pt; text-decoration: underline; color:#0082fa;\">https://gitee.com/gfdgd-xi/deep-wine-runner</span></a></p>\n"
 | 
				
			||||||
 | 
					"<p style=\" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;\"><span style=\" font-family:\'Noto Sans CJK SC\'; font-size:10.5pt;\">    Github:</span><a href=\"https://github.com/gfdgd-xi/deep-wine-runner\"><span style=\" font-family:\'Noto Sans CJK SC\'; font-size:11pt; text-decoration: underline; color:#0082fa;\">https://github.com/gfdgd-xi/deep-wine-runner</span></a></p>\n"
 | 
				
			||||||
 | 
					"<p style=\" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;\"><span style=\" font-family:\'Noto Sans CJK SC\'; font-size:10.5pt;\">此组件也有非常大的缺点,就是相比于 Wine,会需要占用大量的空间、安装需要大量的时间、某些情况下需要相比于 Wine 需要消耗更多的系统资源,但可以更加完美、流畅的运行 Windows 应用,会尽量减少因为缺少或未实现导致的 Windows exe 程序运行异常</span></p>\n"
 | 
				
			||||||
 | 
					"<p style=\" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;\"><span style=\" font-family:\'Noto Sans CJK SC\'; font-size:10.5pt;\">该组件制作者:gfdgd xi</span></p>\n"
 | 
				
			||||||
"<hr />\n"
 | 
					"<hr />\n"
 | 
				
			||||||
"<p style=\"-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;\"><br /></p></body></html>"))
 | 
					"<p style=\"-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:\'Noto Sans CJK SC\'; font-size:10.5pt;\"><br /></p></body></html>"))
 | 
				
			||||||
        self.tabWidget.setTabText(self.tabWidget.indexOf(self.tab_2), _translate("MainWindow", "关于"))
 | 
					        self.tabWidget.setTabText(self.tabWidget.indexOf(self.tab_2), _translate("MainWindow", "关于"))
 | 
				
			||||||
        self.menuVM.setTitle(_translate("MainWindow", "虚拟机"))
 | 
					        self.menuVM.setTitle(_translate("MainWindow", "虚拟机"))
 | 
				
			||||||
        self.action.setText(_translate("MainWindow", "退出"))
 | 
					        self.action.setText(_translate("MainWindow", "退出"))
 | 
				
			||||||
@ -348,3 +372,7 @@ class Ui_MainWindow(object):
 | 
				
			|||||||
        self.actionVMInstallLog.setText(_translate("MainWindow", "虚拟机安装日志"))
 | 
					        self.actionVMInstallLog.setText(_translate("MainWindow", "虚拟机安装日志"))
 | 
				
			||||||
        self.actionVMRunlLog.setText(_translate("MainWindow", "虚拟机运行日志"))
 | 
					        self.actionVMRunlLog.setText(_translate("MainWindow", "虚拟机运行日志"))
 | 
				
			||||||
        self.actionVMTest.setText(_translate("MainWindow", "虚拟机测试(X86、Qemu)"))
 | 
					        self.actionVMTest.setText(_translate("MainWindow", "虚拟机测试(X86、Qemu)"))
 | 
				
			||||||
 | 
					        self.action_StopVirtualBox.setText(_translate("MainWindow", "强制停止 VirtualBox"))
 | 
				
			||||||
 | 
					        self.action_StopQemu.setText(_translate("MainWindow", "强制停止 Qemu"))
 | 
				
			||||||
 | 
					        self.actionQemuDiskAddSpace.setText(_translate("MainWindow", "Qemu 磁盘扩容"))
 | 
				
			||||||
 | 
					        self.getDCLC.setText(_translate("MainWindow", "获取 Deepin Community Live CD"))
 | 
				
			||||||
							
								
								
									
										4
									
								
								VM/update-data.sh
									
									
									
									
									
										Executable file
									
								
							
							
						
						@ -0,0 +1,4 @@
 | 
				
			|||||||
 | 
					#!/bin/bash
 | 
				
			||||||
 | 
					cd `dirname $0`
 | 
				
			||||||
 | 
					pyuic5 -o ui_mainwindow.py mainwindow.ui
 | 
				
			||||||
 | 
					pyrcc5 -o program_resources.py  program_resources.qrc
 | 
				
			||||||
							
								
								
									
										18
									
								
								VM/vbox.py
									
									
									
									
									
										
										
										Normal file → Executable file
									
								
							
							
						
						@ -6,12 +6,12 @@ class vbox:
 | 
				
			|||||||
    managerPath = ""
 | 
					    managerPath = ""
 | 
				
			||||||
    vboxVersion = ""
 | 
					    vboxVersion = ""
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    def __init__(self, name: str, managerPath: str) -> None:
 | 
					    def __init__(self, name: str, managerPath = "VBoxManage") -> None:
 | 
				
			||||||
        self.name = name
 | 
					        self.name = name
 | 
				
			||||||
        self.managerPath = managerPath
 | 
					        self.managerPath = managerPath
 | 
				
			||||||
        self.vboxVersion = subprocess.getoutput("'" + managerPath + "' -v")
 | 
					        self.vboxVersion = subprocess.getoutput("'" + managerPath + "' -v")
 | 
				
			||||||
    
 | 
					    
 | 
				
			||||||
    def Create(self, type: str):
 | 
					    def Create(self, type = "Windows7"):
 | 
				
			||||||
        os.system(("\"" + self.managerPath + "\" createvm --name \""
 | 
					        os.system(("\"" + self.managerPath + "\" createvm --name \""
 | 
				
			||||||
                   + self.name + "\" --ostype \"" + type +
 | 
					                   + self.name + "\" --ostype \"" + type +
 | 
				
			||||||
                   "\" --register"))
 | 
					                   "\" --register"))
 | 
				
			||||||
@ -23,15 +23,15 @@ class vbox:
 | 
				
			|||||||
    def CreateDisk(self, path: str, size: int):
 | 
					    def CreateDisk(self, path: str, size: int):
 | 
				
			||||||
        return os.system(("\"" + self.managerPath + "\" createvdi --filename \"" + path + "\" --size \"" + str(size) + "\""))
 | 
					        return os.system(("\"" + self.managerPath + "\" createvdi --filename \"" + path + "\" --size \"" + str(size) + "\""))
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    def CreateDiskControl(self, controlName: str):
 | 
					    def CreateDiskControl(self, controlName = "storage_controller_1"):
 | 
				
			||||||
        return os.system(("\"" + self.managerPath + "\" storagectl \"" + self.name + "\" --name \"" + controlName + "\" --add ide"))
 | 
					        return os.system(("\"" + self.managerPath + "\" storagectl \"" + self.name + "\" --name \"" + controlName + "\" --add ide"))
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    def MountDisk(self, diskPath: str, controlName: str, port: int, device: int):
 | 
					    def MountDisk(self, diskPath: str, controlName = "storage_controller_1", port = 0, device = 0):
 | 
				
			||||||
        return os.system(("\"" + self.managerPath + "\" storageattach \"" + self.name +
 | 
					        return os.system(("\"" + self.managerPath + "\" storageattach \"" + self.name +
 | 
				
			||||||
                   "\" --storagectl \"" + controlName + "\" --type hdd --port "
 | 
					                   "\" --storagectl \"" + controlName + "\" --type hdd --port "
 | 
				
			||||||
                   + str(port) + " --device " + str(device) + " --medium \"" + diskPath + "\""))
 | 
					                   + str(port) + " --device " + str(device) + " --medium \"" + diskPath + "\""))
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    def MountISO(self, isoPath: str, controlName: str, port: int, device: int):
 | 
					    def MountISO(self, isoPath: str, controlName = "storage_controller_1", port = 1, device = 0):
 | 
				
			||||||
        return os.system(("\"" + self.managerPath + "\" storageattach \"" + self.name + "\" --storagectl \"" +
 | 
					        return os.system(("\"" + self.managerPath + "\" storageattach \"" + self.name + "\" --storagectl \"" +
 | 
				
			||||||
                   controlName + "\" --type dvddrive --port " + str(port) + " --device " + str(device)
 | 
					                   controlName + "\" --type dvddrive --port " + str(port) + " --device " + str(device)
 | 
				
			||||||
                   + " --medium \"" + isoPath + "\""))
 | 
					                   + " --medium \"" + isoPath + "\""))
 | 
				
			||||||
@ -54,10 +54,10 @@ class vbox:
 | 
				
			|||||||
            return os.system(("\"" + self.managerPath + "\" modifyvm \"" + self.name + "\" --vrde on"))
 | 
					            return os.system(("\"" + self.managerPath + "\" modifyvm \"" + self.name + "\" --vrde on"))
 | 
				
			||||||
        return os.system(("\"" + self.managerPath + "\" modifyvm \"" + self.name + "\" --vrde off"))
 | 
					        return os.system(("\"" + self.managerPath + "\" modifyvm \"" + self.name + "\" --vrde off"))
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    def SetRemoteConnectSetting(self, port: int):
 | 
					    def SetRemoteConnectSetting(self, port = 5540):
 | 
				
			||||||
        return os.system(("\"" + self.managerPath + "\" modifyvm \"" + self.name + "\" --vrdeport " + str(port) + " --vrdeaddress """))
 | 
					        return os.system(("\"" + self.managerPath + "\" modifyvm \"" + self.name + "\" --vrdeport " + str(port) + " --vrdeaddress """))
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    def Start(self, unShown: bool):
 | 
					    def Start(self, unShown = False):
 | 
				
			||||||
        if (unShown):
 | 
					        if (unShown):
 | 
				
			||||||
            return os.system(("\"" + self.managerPath + "\" > /tmp/windows-virtual-machine-installer-for-wine-runner-install.log 2>&1"))
 | 
					            return os.system(("\"" + self.managerPath + "\" > /tmp/windows-virtual-machine-installer-for-wine-runner-install.log 2>&1"))
 | 
				
			||||||
        return os.system(("\"" + self.managerPath + "\" startvm \"" + self.name + "\"  > /tmp/windows-virtual-machine-installer-for-wine-runner-install.log 2>&1"))
 | 
					        return os.system(("\"" + self.managerPath + "\" startvm \"" + self.name + "\"  > /tmp/windows-virtual-machine-installer-for-wine-runner-install.log 2>&1"))
 | 
				
			||||||
@ -71,7 +71,7 @@ class vbox:
 | 
				
			|||||||
    def SetDisplayMemory(self, memory: int):
 | 
					    def SetDisplayMemory(self, memory: int):
 | 
				
			||||||
        return os.system(("\"" + self.managerPath + "\" modifyvm \"" + self.name + "\" --vram " + str(memory)))
 | 
					        return os.system(("\"" + self.managerPath + "\" modifyvm \"" + self.name + "\" --vram " + str(memory)))
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    def InstallGuessAdditions(self, controlName: str, port: int, device: int):
 | 
					    def InstallGuessAdditions(self, controlName = "storage_controller_1", port = 1, device = 0):
 | 
				
			||||||
        return self.MountISO("/usr/share/virtualbox/VBoxGuestAdditions.iso", controlName, port, device);
 | 
					        return self.MountISO("/usr/share/virtualbox/VBoxGuestAdditions.iso", controlName, port, device);
 | 
				
			||||||
    
 | 
					    
 | 
				
			||||||
    def EnabledAudio(self):
 | 
					    def EnabledAudio(self):
 | 
				
			||||||
@ -84,7 +84,7 @@ class vbox:
 | 
				
			|||||||
        return os.system(("\"" + self.managerPath + "\" modifyvm \"" + self.name + "\" --draganddrop bidirectional"))
 | 
					        return os.system(("\"" + self.managerPath + "\" modifyvm \"" + self.name + "\" --draganddrop bidirectional"))
 | 
				
			||||||
    
 | 
					    
 | 
				
			||||||
    def ShareFile(self, name: str, path: str):
 | 
					    def ShareFile(self, name: str, path: str):
 | 
				
			||||||
        return os.system(("\"" + self.managerPath + "\" sharedfolder add \"" + this->name + "\" -name \"" + self.name + "\" -hostpath \"" + path + "\""))
 | 
					        return os.system(("\"" + self.managerPath + "\" sharedfolder add \"" + self.name + "\" -name \"" + self.name + "\" -hostpath \"" + path + "\""))
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    def SetVBoxSVGA(self):
 | 
					    def SetVBoxSVGA(self):
 | 
				
			||||||
        return os.system(("\"" + self.managerPath + "\" modifyvm \"" + self.name + "\" --graphicscontroller vboxsvga"))
 | 
					        return os.system(("\"" + self.managerPath + "\" modifyvm \"" + self.name + "\" --graphicscontroller vboxsvga"))
 | 
				
			||||||
 | 
				
			|||||||
| 
		 Before Width: | Height: | Size: 198 KiB After Width: | Height: | Size: 198 KiB  | 
| 
		 Before Width: | Height: | Size: 157 KiB After Width: | Height: | Size: 157 KiB  | 
| 
		 Before Width: | Height: | Size: 246 KiB After Width: | Height: | Size: 246 KiB  | 
| 
		 Before Width: | Height: | Size: 189 KiB After Width: | Height: | Size: 189 KiB  | 
| 
		 Before Width: | Height: | Size: 190 KiB After Width: | Height: | Size: 190 KiB  | 
| 
		 Before Width: | Height: | Size: 235 KiB After Width: | Height: | Size: 235 KiB  | 
| 
		 Before Width: | Height: | Size: 190 KiB After Width: | Height: | Size: 190 KiB  | 
| 
		 Before Width: | Height: | Size: 122 KiB After Width: | Height: | Size: 122 KiB  | 
| 
		 Before Width: | Height: | Size: 219 KiB After Width: | Height: | Size: 219 KiB  | 
| 
		 Before Width: | Height: | Size: 107 KiB After Width: | Height: | Size: 107 KiB  |