diff --git a/C++/2.2.6/Makefile b/C++/2.2.6/Makefile new file mode 100644 index 0000000..a8edd82 --- /dev/null +++ b/C++/2.2.6/Makefile @@ -0,0 +1,596 @@ +############################################################################# +# Makefile for building: untitled2 +# Generated by qmake (3.1) (Qt 6.9.1) +# Project: untitled2.pro +# Template: app +# Command: D:\Qt\6.9.1\mingw_64\bin\qmake.exe -o Makefile untitled2.pro -spec win32-g++ "CONFIG+=qtquickcompiler" +############################################################################# + +MAKEFILE = Makefile + +EQ = = + +first: release +install: release-install +uninstall: release-uninstall +QMAKE = D:\Qt\6.9.1\mingw_64\bin\qmake.exe +DEL_FILE = del +CHK_DIR_EXISTS= if not exist +MKDIR = mkdir +COPY = copy /y +COPY_FILE = copy /y +COPY_DIR = xcopy /s /q /y /i +INSTALL_FILE = copy /y +INSTALL_PROGRAM = copy /y +INSTALL_DIR = xcopy /s /q /y /i +QINSTALL = D:\Qt\6.9.1\mingw_64\bin\qmake.exe -install qinstall +QINSTALL_PROGRAM = D:\Qt\6.9.1\mingw_64\bin\qmake.exe -install qinstall -exe +DEL_FILE = del +SYMLINK = $(QMAKE) -install ln -f -s +DEL_DIR = rmdir +MOVE = move +IDC = idc +IDL = midl +ZIP = zip -r -9 +DEF_FILE = +RES_FILE = launcher_res.o +SED = $(QMAKE) -install sed +MOVE = move +SUBTARGETS = \ + release \ + debug + + +release: FORCE + $(MAKE) -f $(MAKEFILE).Release +release-make_first: FORCE + $(MAKE) -f $(MAKEFILE).Release +release-all: FORCE + $(MAKE) -f $(MAKEFILE).Release all +release-clean: FORCE + $(MAKE) -f $(MAKEFILE).Release clean +release-distclean: FORCE + $(MAKE) -f $(MAKEFILE).Release distclean +release-install: FORCE + $(MAKE) -f $(MAKEFILE).Release install +release-uninstall: FORCE + $(MAKE) -f $(MAKEFILE).Release uninstall +debug: FORCE + $(MAKE) -f $(MAKEFILE).Debug +debug-make_first: FORCE + $(MAKE) -f $(MAKEFILE).Debug +debug-all: FORCE + $(MAKE) -f $(MAKEFILE).Debug all +debug-clean: FORCE + $(MAKE) -f $(MAKEFILE).Debug clean +debug-distclean: FORCE + $(MAKE) -f $(MAKEFILE).Debug distclean +debug-install: FORCE + $(MAKE) -f $(MAKEFILE).Debug install +debug-uninstall: FORCE + $(MAKE) -f $(MAKEFILE).Debug uninstall + +Makefile: untitled2.pro D:/Qt/6.9.1/mingw_64/mkspecs/win32-g++/qmake.conf D:/Qt/6.9.1/mingw_64/mkspecs/features/spec_pre.prf \ + D:/Qt/6.9.1/mingw_64/mkspecs/features/device_config.prf \ + D:/Qt/6.9.1/mingw_64/mkspecs/common/sanitize.conf \ + D:/Qt/6.9.1/mingw_64/mkspecs/common/gcc-base.conf \ + D:/Qt/6.9.1/mingw_64/mkspecs/common/g++-base.conf \ + D:/Qt/6.9.1/mingw_64/mkspecs/features/win32/windows_vulkan_sdk.prf \ + D:/Qt/6.9.1/mingw_64/mkspecs/common/windows-vulkan.conf \ + D:/Qt/6.9.1/mingw_64/mkspecs/common/g++-win32.conf \ + D:/Qt/6.9.1/mingw_64/mkspecs/common/windows-desktop.conf \ + D:/Qt/6.9.1/mingw_64/mkspecs/qconfig.pri \ + D:/Qt/6.9.1/mingw_64/mkspecs/modules/qt_ext_freetype.pri \ + D:/Qt/6.9.1/mingw_64/mkspecs/modules/qt_ext_libjpeg.pri \ + D:/Qt/6.9.1/mingw_64/mkspecs/modules/qt_ext_libpng.pri \ + D:/Qt/6.9.1/mingw_64/mkspecs/modules/qt_ext_openxr_loader.pri \ + D:/Qt/6.9.1/mingw_64/mkspecs/modules/qt_lib_charts.pri \ + D:/Qt/6.9.1/mingw_64/mkspecs/modules/qt_lib_charts_private.pri \ + D:/Qt/6.9.1/mingw_64/mkspecs/modules/qt_lib_chartsqml.pri \ + D:/Qt/6.9.1/mingw_64/mkspecs/modules/qt_lib_chartsqml_private.pri \ + D:/Qt/6.9.1/mingw_64/mkspecs/modules/qt_lib_concurrent.pri \ + D:/Qt/6.9.1/mingw_64/mkspecs/modules/qt_lib_concurrent_private.pri \ + D:/Qt/6.9.1/mingw_64/mkspecs/modules/qt_lib_core.pri \ + D:/Qt/6.9.1/mingw_64/mkspecs/modules/qt_lib_core_private.pri \ + D:/Qt/6.9.1/mingw_64/mkspecs/modules/qt_lib_dbus.pri \ + D:/Qt/6.9.1/mingw_64/mkspecs/modules/qt_lib_dbus_private.pri \ + D:/Qt/6.9.1/mingw_64/mkspecs/modules/qt_lib_designer.pri \ + D:/Qt/6.9.1/mingw_64/mkspecs/modules/qt_lib_designer_private.pri \ + D:/Qt/6.9.1/mingw_64/mkspecs/modules/qt_lib_designercomponents_private.pri \ + D:/Qt/6.9.1/mingw_64/mkspecs/modules/qt_lib_devicediscovery_support_private.pri \ + D:/Qt/6.9.1/mingw_64/mkspecs/modules/qt_lib_entrypoint_private.pri \ + D:/Qt/6.9.1/mingw_64/mkspecs/modules/qt_lib_example_icons_private.pri \ + D:/Qt/6.9.1/mingw_64/mkspecs/modules/qt_lib_examples_asset_downloader_private.pri \ + D:/Qt/6.9.1/mingw_64/mkspecs/modules/qt_lib_fb_support_private.pri \ + D:/Qt/6.9.1/mingw_64/mkspecs/modules/qt_lib_ffmpegmediapluginimpl_private.pri \ + D:/Qt/6.9.1/mingw_64/mkspecs/modules/qt_lib_freetype_private.pri \ + D:/Qt/6.9.1/mingw_64/mkspecs/modules/qt_lib_gui.pri \ + D:/Qt/6.9.1/mingw_64/mkspecs/modules/qt_lib_gui_private.pri \ + D:/Qt/6.9.1/mingw_64/mkspecs/modules/qt_lib_harfbuzz_private.pri \ + D:/Qt/6.9.1/mingw_64/mkspecs/modules/qt_lib_help.pri \ + D:/Qt/6.9.1/mingw_64/mkspecs/modules/qt_lib_help_private.pri \ + D:/Qt/6.9.1/mingw_64/mkspecs/modules/qt_lib_jpeg_private.pri \ + D:/Qt/6.9.1/mingw_64/mkspecs/modules/qt_lib_labsanimation.pri \ + D:/Qt/6.9.1/mingw_64/mkspecs/modules/qt_lib_labsanimation_private.pri \ + D:/Qt/6.9.1/mingw_64/mkspecs/modules/qt_lib_labsfolderlistmodel.pri \ + D:/Qt/6.9.1/mingw_64/mkspecs/modules/qt_lib_labsfolderlistmodel_private.pri \ + D:/Qt/6.9.1/mingw_64/mkspecs/modules/qt_lib_labsplatform.pri \ + D:/Qt/6.9.1/mingw_64/mkspecs/modules/qt_lib_labsplatform_private.pri \ + D:/Qt/6.9.1/mingw_64/mkspecs/modules/qt_lib_labsqmlmodels.pri \ + D:/Qt/6.9.1/mingw_64/mkspecs/modules/qt_lib_labsqmlmodels_private.pri \ + D:/Qt/6.9.1/mingw_64/mkspecs/modules/qt_lib_labssettings.pri \ + D:/Qt/6.9.1/mingw_64/mkspecs/modules/qt_lib_labssettings_private.pri \ + D:/Qt/6.9.1/mingw_64/mkspecs/modules/qt_lib_labssharedimage.pri \ + D:/Qt/6.9.1/mingw_64/mkspecs/modules/qt_lib_labssharedimage_private.pri \ + D:/Qt/6.9.1/mingw_64/mkspecs/modules/qt_lib_labswavefrontmesh.pri \ + D:/Qt/6.9.1/mingw_64/mkspecs/modules/qt_lib_labswavefrontmesh_private.pri \ + D:/Qt/6.9.1/mingw_64/mkspecs/modules/qt_lib_linguist.pri \ + D:/Qt/6.9.1/mingw_64/mkspecs/modules/qt_lib_multimedia.pri \ + D:/Qt/6.9.1/mingw_64/mkspecs/modules/qt_lib_multimedia_private.pri \ + D:/Qt/6.9.1/mingw_64/mkspecs/modules/qt_lib_multimediaquick_private.pri \ + D:/Qt/6.9.1/mingw_64/mkspecs/modules/qt_lib_multimediatestlibprivate_private.pri \ + D:/Qt/6.9.1/mingw_64/mkspecs/modules/qt_lib_multimediawidgets.pri \ + D:/Qt/6.9.1/mingw_64/mkspecs/modules/qt_lib_multimediawidgets_private.pri \ + D:/Qt/6.9.1/mingw_64/mkspecs/modules/qt_lib_network.pri \ + D:/Qt/6.9.1/mingw_64/mkspecs/modules/qt_lib_network_private.pri \ + D:/Qt/6.9.1/mingw_64/mkspecs/modules/qt_lib_opengl.pri \ + D:/Qt/6.9.1/mingw_64/mkspecs/modules/qt_lib_opengl_private.pri \ + D:/Qt/6.9.1/mingw_64/mkspecs/modules/qt_lib_openglwidgets.pri \ + D:/Qt/6.9.1/mingw_64/mkspecs/modules/qt_lib_openglwidgets_private.pri \ + D:/Qt/6.9.1/mingw_64/mkspecs/modules/qt_lib_packetprotocol_private.pri \ + D:/Qt/6.9.1/mingw_64/mkspecs/modules/qt_lib_png_private.pri \ + D:/Qt/6.9.1/mingw_64/mkspecs/modules/qt_lib_printsupport.pri \ + D:/Qt/6.9.1/mingw_64/mkspecs/modules/qt_lib_printsupport_private.pri \ + D:/Qt/6.9.1/mingw_64/mkspecs/modules/qt_lib_qdoccatch_private.pri \ + D:/Qt/6.9.1/mingw_64/mkspecs/modules/qt_lib_qdoccatchconversions_private.pri \ + D:/Qt/6.9.1/mingw_64/mkspecs/modules/qt_lib_qdoccatchgenerators_private.pri \ + D:/Qt/6.9.1/mingw_64/mkspecs/modules/qt_lib_qml.pri \ + D:/Qt/6.9.1/mingw_64/mkspecs/modules/qt_lib_qml_private.pri \ + D:/Qt/6.9.1/mingw_64/mkspecs/modules/qt_lib_qmlassetdownloader.pri \ + D:/Qt/6.9.1/mingw_64/mkspecs/modules/qt_lib_qmlassetdownloader_private.pri \ + D:/Qt/6.9.1/mingw_64/mkspecs/modules/qt_lib_qmlcompiler.pri \ + D:/Qt/6.9.1/mingw_64/mkspecs/modules/qt_lib_qmlcompiler_private.pri \ + D:/Qt/6.9.1/mingw_64/mkspecs/modules/qt_lib_qmlcore.pri \ + D:/Qt/6.9.1/mingw_64/mkspecs/modules/qt_lib_qmlcore_private.pri \ + D:/Qt/6.9.1/mingw_64/mkspecs/modules/qt_lib_qmldebug_private.pri \ + D:/Qt/6.9.1/mingw_64/mkspecs/modules/qt_lib_qmldom_private.pri \ + D:/Qt/6.9.1/mingw_64/mkspecs/modules/qt_lib_qmlformat_private.pri \ + D:/Qt/6.9.1/mingw_64/mkspecs/modules/qt_lib_qmlintegration.pri \ + D:/Qt/6.9.1/mingw_64/mkspecs/modules/qt_lib_qmlintegration_private.pri \ + D:/Qt/6.9.1/mingw_64/mkspecs/modules/qt_lib_qmllocalstorage.pri \ + D:/Qt/6.9.1/mingw_64/mkspecs/modules/qt_lib_qmllocalstorage_private.pri \ + D:/Qt/6.9.1/mingw_64/mkspecs/modules/qt_lib_qmlls_private.pri \ + D:/Qt/6.9.1/mingw_64/mkspecs/modules/qt_lib_qmlmeta.pri \ + D:/Qt/6.9.1/mingw_64/mkspecs/modules/qt_lib_qmlmeta_private.pri \ + D:/Qt/6.9.1/mingw_64/mkspecs/modules/qt_lib_qmlmodels.pri \ + D:/Qt/6.9.1/mingw_64/mkspecs/modules/qt_lib_qmlmodels_private.pri \ + D:/Qt/6.9.1/mingw_64/mkspecs/modules/qt_lib_qmlnetwork.pri \ + D:/Qt/6.9.1/mingw_64/mkspecs/modules/qt_lib_qmlnetwork_private.pri \ + D:/Qt/6.9.1/mingw_64/mkspecs/modules/qt_lib_qmltest.pri \ + D:/Qt/6.9.1/mingw_64/mkspecs/modules/qt_lib_qmltest_private.pri \ + D:/Qt/6.9.1/mingw_64/mkspecs/modules/qt_lib_qmltoolingsettings_private.pri \ + D:/Qt/6.9.1/mingw_64/mkspecs/modules/qt_lib_qmltyperegistrar_private.pri \ + D:/Qt/6.9.1/mingw_64/mkspecs/modules/qt_lib_qmlworkerscript.pri \ + D:/Qt/6.9.1/mingw_64/mkspecs/modules/qt_lib_qmlworkerscript_private.pri \ + D:/Qt/6.9.1/mingw_64/mkspecs/modules/qt_lib_qmlxmllistmodel.pri \ + D:/Qt/6.9.1/mingw_64/mkspecs/modules/qt_lib_qmlxmllistmodel_private.pri \ + D:/Qt/6.9.1/mingw_64/mkspecs/modules/qt_lib_quick.pri \ + D:/Qt/6.9.1/mingw_64/mkspecs/modules/qt_lib_quick3d.pri \ + D:/Qt/6.9.1/mingw_64/mkspecs/modules/qt_lib_quick3d_private.pri \ + D:/Qt/6.9.1/mingw_64/mkspecs/modules/qt_lib_quick3dassetimport.pri \ + D:/Qt/6.9.1/mingw_64/mkspecs/modules/qt_lib_quick3dassetimport_private.pri \ + D:/Qt/6.9.1/mingw_64/mkspecs/modules/qt_lib_quick3dassetutils.pri \ + D:/Qt/6.9.1/mingw_64/mkspecs/modules/qt_lib_quick3dassetutils_private.pri \ + D:/Qt/6.9.1/mingw_64/mkspecs/modules/qt_lib_quick3deffects.pri \ + D:/Qt/6.9.1/mingw_64/mkspecs/modules/qt_lib_quick3deffects_private.pri \ + D:/Qt/6.9.1/mingw_64/mkspecs/modules/qt_lib_quick3dglslparser_private.pri \ + D:/Qt/6.9.1/mingw_64/mkspecs/modules/qt_lib_quick3dhelpers.pri \ + D:/Qt/6.9.1/mingw_64/mkspecs/modules/qt_lib_quick3dhelpers_private.pri \ + D:/Qt/6.9.1/mingw_64/mkspecs/modules/qt_lib_quick3dhelpersimpl.pri \ + D:/Qt/6.9.1/mingw_64/mkspecs/modules/qt_lib_quick3dhelpersimpl_private.pri \ + D:/Qt/6.9.1/mingw_64/mkspecs/modules/qt_lib_quick3diblbaker.pri \ + D:/Qt/6.9.1/mingw_64/mkspecs/modules/qt_lib_quick3diblbaker_private.pri \ + D:/Qt/6.9.1/mingw_64/mkspecs/modules/qt_lib_quick3dparticleeffects.pri \ + D:/Qt/6.9.1/mingw_64/mkspecs/modules/qt_lib_quick3dparticleeffects_private.pri \ + D:/Qt/6.9.1/mingw_64/mkspecs/modules/qt_lib_quick3dparticles.pri \ + D:/Qt/6.9.1/mingw_64/mkspecs/modules/qt_lib_quick3dparticles_private.pri \ + D:/Qt/6.9.1/mingw_64/mkspecs/modules/qt_lib_quick3druntimerender.pri \ + D:/Qt/6.9.1/mingw_64/mkspecs/modules/qt_lib_quick3druntimerender_private.pri \ + D:/Qt/6.9.1/mingw_64/mkspecs/modules/qt_lib_quick3dspatialaudio_private.pri \ + D:/Qt/6.9.1/mingw_64/mkspecs/modules/qt_lib_quick3dutils.pri \ + D:/Qt/6.9.1/mingw_64/mkspecs/modules/qt_lib_quick3dutils_private.pri \ + D:/Qt/6.9.1/mingw_64/mkspecs/modules/qt_lib_quick3dxr.pri \ + D:/Qt/6.9.1/mingw_64/mkspecs/modules/qt_lib_quick3dxr_private.pri \ + D:/Qt/6.9.1/mingw_64/mkspecs/modules/qt_lib_quick_private.pri \ + D:/Qt/6.9.1/mingw_64/mkspecs/modules/qt_lib_quickcontrols2.pri \ + D:/Qt/6.9.1/mingw_64/mkspecs/modules/qt_lib_quickcontrols2_private.pri \ + D:/Qt/6.9.1/mingw_64/mkspecs/modules/qt_lib_quickcontrols2basic.pri \ + D:/Qt/6.9.1/mingw_64/mkspecs/modules/qt_lib_quickcontrols2basic_private.pri \ + D:/Qt/6.9.1/mingw_64/mkspecs/modules/qt_lib_quickcontrols2basicstyleimpl.pri \ + D:/Qt/6.9.1/mingw_64/mkspecs/modules/qt_lib_quickcontrols2basicstyleimpl_private.pri \ + D:/Qt/6.9.1/mingw_64/mkspecs/modules/qt_lib_quickcontrols2fluentwinui3styleimpl.pri \ + D:/Qt/6.9.1/mingw_64/mkspecs/modules/qt_lib_quickcontrols2fluentwinui3styleimpl_private.pri \ + D:/Qt/6.9.1/mingw_64/mkspecs/modules/qt_lib_quickcontrols2fusion.pri \ + D:/Qt/6.9.1/mingw_64/mkspecs/modules/qt_lib_quickcontrols2fusion_private.pri \ + D:/Qt/6.9.1/mingw_64/mkspecs/modules/qt_lib_quickcontrols2fusionstyleimpl.pri \ + D:/Qt/6.9.1/mingw_64/mkspecs/modules/qt_lib_quickcontrols2fusionstyleimpl_private.pri \ + D:/Qt/6.9.1/mingw_64/mkspecs/modules/qt_lib_quickcontrols2imagine.pri \ + D:/Qt/6.9.1/mingw_64/mkspecs/modules/qt_lib_quickcontrols2imagine_private.pri \ + D:/Qt/6.9.1/mingw_64/mkspecs/modules/qt_lib_quickcontrols2imaginestyleimpl.pri \ + D:/Qt/6.9.1/mingw_64/mkspecs/modules/qt_lib_quickcontrols2imaginestyleimpl_private.pri \ + D:/Qt/6.9.1/mingw_64/mkspecs/modules/qt_lib_quickcontrols2impl.pri \ + D:/Qt/6.9.1/mingw_64/mkspecs/modules/qt_lib_quickcontrols2impl_private.pri \ + D:/Qt/6.9.1/mingw_64/mkspecs/modules/qt_lib_quickcontrols2material.pri \ + D:/Qt/6.9.1/mingw_64/mkspecs/modules/qt_lib_quickcontrols2material_private.pri \ + D:/Qt/6.9.1/mingw_64/mkspecs/modules/qt_lib_quickcontrols2materialstyleimpl.pri \ + D:/Qt/6.9.1/mingw_64/mkspecs/modules/qt_lib_quickcontrols2materialstyleimpl_private.pri \ + D:/Qt/6.9.1/mingw_64/mkspecs/modules/qt_lib_quickcontrols2universal.pri \ + D:/Qt/6.9.1/mingw_64/mkspecs/modules/qt_lib_quickcontrols2universal_private.pri \ + D:/Qt/6.9.1/mingw_64/mkspecs/modules/qt_lib_quickcontrols2universalstyleimpl.pri \ + D:/Qt/6.9.1/mingw_64/mkspecs/modules/qt_lib_quickcontrols2universalstyleimpl_private.pri \ + D:/Qt/6.9.1/mingw_64/mkspecs/modules/qt_lib_quickcontrols2windowsstyleimpl.pri \ + D:/Qt/6.9.1/mingw_64/mkspecs/modules/qt_lib_quickcontrols2windowsstyleimpl_private.pri \ + D:/Qt/6.9.1/mingw_64/mkspecs/modules/qt_lib_quickcontrolstestutilsprivate_private.pri \ + D:/Qt/6.9.1/mingw_64/mkspecs/modules/qt_lib_quickdialogs2.pri \ + D:/Qt/6.9.1/mingw_64/mkspecs/modules/qt_lib_quickdialogs2_private.pri \ + D:/Qt/6.9.1/mingw_64/mkspecs/modules/qt_lib_quickdialogs2quickimpl.pri \ + D:/Qt/6.9.1/mingw_64/mkspecs/modules/qt_lib_quickdialogs2quickimpl_private.pri \ + D:/Qt/6.9.1/mingw_64/mkspecs/modules/qt_lib_quickdialogs2utils.pri \ + D:/Qt/6.9.1/mingw_64/mkspecs/modules/qt_lib_quickdialogs2utils_private.pri \ + D:/Qt/6.9.1/mingw_64/mkspecs/modules/qt_lib_quickeffects.pri \ + D:/Qt/6.9.1/mingw_64/mkspecs/modules/qt_lib_quickeffects_private.pri \ + D:/Qt/6.9.1/mingw_64/mkspecs/modules/qt_lib_quicklayouts.pri \ + D:/Qt/6.9.1/mingw_64/mkspecs/modules/qt_lib_quicklayouts_private.pri \ + D:/Qt/6.9.1/mingw_64/mkspecs/modules/qt_lib_quickparticles_private.pri \ + D:/Qt/6.9.1/mingw_64/mkspecs/modules/qt_lib_quickshapes_private.pri \ + D:/Qt/6.9.1/mingw_64/mkspecs/modules/qt_lib_quicktemplates2.pri \ + D:/Qt/6.9.1/mingw_64/mkspecs/modules/qt_lib_quicktemplates2_private.pri \ + D:/Qt/6.9.1/mingw_64/mkspecs/modules/qt_lib_quicktestutilsprivate_private.pri \ + D:/Qt/6.9.1/mingw_64/mkspecs/modules/qt_lib_quicktimeline.pri \ + D:/Qt/6.9.1/mingw_64/mkspecs/modules/qt_lib_quicktimeline_private.pri \ + D:/Qt/6.9.1/mingw_64/mkspecs/modules/qt_lib_quicktimelineblendtrees.pri \ + D:/Qt/6.9.1/mingw_64/mkspecs/modules/qt_lib_quicktimelineblendtrees_private.pri \ + D:/Qt/6.9.1/mingw_64/mkspecs/modules/qt_lib_quickvectorimage.pri \ + D:/Qt/6.9.1/mingw_64/mkspecs/modules/qt_lib_quickvectorimage_private.pri \ + D:/Qt/6.9.1/mingw_64/mkspecs/modules/qt_lib_quickvectorimagegenerator_private.pri \ + D:/Qt/6.9.1/mingw_64/mkspecs/modules/qt_lib_quickwidgets.pri \ + D:/Qt/6.9.1/mingw_64/mkspecs/modules/qt_lib_quickwidgets_private.pri \ + D:/Qt/6.9.1/mingw_64/mkspecs/modules/qt_lib_shadertools.pri \ + D:/Qt/6.9.1/mingw_64/mkspecs/modules/qt_lib_shadertools_private.pri \ + D:/Qt/6.9.1/mingw_64/mkspecs/modules/qt_lib_spatialaudio.pri \ + D:/Qt/6.9.1/mingw_64/mkspecs/modules/qt_lib_spatialaudio_private.pri \ + D:/Qt/6.9.1/mingw_64/mkspecs/modules/qt_lib_sql.pri \ + D:/Qt/6.9.1/mingw_64/mkspecs/modules/qt_lib_sql_private.pri \ + D:/Qt/6.9.1/mingw_64/mkspecs/modules/qt_lib_svg.pri \ + D:/Qt/6.9.1/mingw_64/mkspecs/modules/qt_lib_svg_private.pri \ + D:/Qt/6.9.1/mingw_64/mkspecs/modules/qt_lib_svgwidgets.pri \ + D:/Qt/6.9.1/mingw_64/mkspecs/modules/qt_lib_svgwidgets_private.pri \ + D:/Qt/6.9.1/mingw_64/mkspecs/modules/qt_lib_testinternals_private.pri \ + D:/Qt/6.9.1/mingw_64/mkspecs/modules/qt_lib_testlib.pri \ + D:/Qt/6.9.1/mingw_64/mkspecs/modules/qt_lib_testlib_private.pri \ + D:/Qt/6.9.1/mingw_64/mkspecs/modules/qt_lib_tools_private.pri \ + D:/Qt/6.9.1/mingw_64/mkspecs/modules/qt_lib_uiplugin.pri \ + D:/Qt/6.9.1/mingw_64/mkspecs/modules/qt_lib_uitools.pri \ + D:/Qt/6.9.1/mingw_64/mkspecs/modules/qt_lib_uitools_private.pri \ + D:/Qt/6.9.1/mingw_64/mkspecs/modules/qt_lib_widgets.pri \ + D:/Qt/6.9.1/mingw_64/mkspecs/modules/qt_lib_widgets_private.pri \ + D:/Qt/6.9.1/mingw_64/mkspecs/modules/qt_lib_xml.pri \ + D:/Qt/6.9.1/mingw_64/mkspecs/modules/qt_lib_xml_private.pri \ + D:/Qt/6.9.1/mingw_64/mkspecs/modules/qt_lib_zlib_private.pri \ + D:/Qt/6.9.1/mingw_64/mkspecs/features/qt_functions.prf \ + D:/Qt/6.9.1/mingw_64/mkspecs/features/qt_config.prf \ + D:/Qt/6.9.1/mingw_64/mkspecs/win32-g++/qmake.conf \ + D:/Qt/6.9.1/mingw_64/mkspecs/features/spec_post.prf \ + .qmake.stash \ + D:/Qt/6.9.1/mingw_64/mkspecs/features/exclusive_builds.prf \ + D:/Qt/6.9.1/mingw_64/mkspecs/features/toolchain.prf \ + D:/Qt/6.9.1/mingw_64/mkspecs/features/default_pre.prf \ + D:/Qt/6.9.1/mingw_64/mkspecs/features/win32/default_pre.prf \ + D:/Qt/6.9.1/mingw_64/mkspecs/features/resolve_config.prf \ + D:/Qt/6.9.1/mingw_64/mkspecs/features/exclusive_builds_post.prf \ + D:/Qt/6.9.1/mingw_64/mkspecs/features/default_post.prf \ + D:/Qt/6.9.1/mingw_64/mkspecs/features/qtquickcompiler.prf \ + D:/Qt/6.9.1/mingw_64/mkspecs/features/precompile_header.prf \ + D:/Qt/6.9.1/mingw_64/mkspecs/features/warn_on.prf \ + D:/Qt/6.9.1/mingw_64/mkspecs/features/permissions.prf \ + D:/Qt/6.9.1/mingw_64/mkspecs/features/qt.prf \ + D:/Qt/6.9.1/mingw_64/mkspecs/features/resources_functions.prf \ + D:/Qt/6.9.1/mingw_64/mkspecs/features/resources.prf \ + D:/Qt/6.9.1/mingw_64/mkspecs/features/moc.prf \ + D:/Qt/6.9.1/mingw_64/mkspecs/features/win32/opengl.prf \ + D:/Qt/6.9.1/mingw_64/mkspecs/features/uic.prf \ + D:/Qt/6.9.1/mingw_64/mkspecs/features/qmake_use.prf \ + D:/Qt/6.9.1/mingw_64/mkspecs/features/file_copies.prf \ + D:/Qt/6.9.1/mingw_64/mkspecs/features/win32/windows.prf \ + D:/Qt/6.9.1/mingw_64/mkspecs/features/testcase_targets.prf \ + D:/Qt/6.9.1/mingw_64/mkspecs/features/exceptions.prf \ + D:/Qt/6.9.1/mingw_64/mkspecs/features/yacc.prf \ + D:/Qt/6.9.1/mingw_64/mkspecs/features/lex.prf \ + untitled2.pro \ + D:/Qt/6.9.1/mingw_64/lib/Qt6Widgets.prl \ + D:/Qt/6.9.1/mingw_64/lib/Qt6Gui.prl \ + D:/Qt/6.9.1/mingw_64/lib/Qt6Network.prl \ + D:/Qt/6.9.1/mingw_64/lib/Qt6Concurrent.prl \ + D:/Qt/6.9.1/mingw_64/lib/Qt6Core.prl \ + D:/Qt/6.9.1/mingw_64/lib/Qt6EntryPoint.prl \ + D:/Qt/6.9.1/mingw_64/mkspecs/features/build_pass.prf \ + resources.qrc + $(QMAKE) -o Makefile untitled2.pro -spec win32-g++ "CONFIG+=qtquickcompiler" +D:/Qt/6.9.1/mingw_64/mkspecs/features/spec_pre.prf: +D:/Qt/6.9.1/mingw_64/mkspecs/features/device_config.prf: +D:/Qt/6.9.1/mingw_64/mkspecs/common/sanitize.conf: +D:/Qt/6.9.1/mingw_64/mkspecs/common/gcc-base.conf: +D:/Qt/6.9.1/mingw_64/mkspecs/common/g++-base.conf: +D:/Qt/6.9.1/mingw_64/mkspecs/features/win32/windows_vulkan_sdk.prf: +D:/Qt/6.9.1/mingw_64/mkspecs/common/windows-vulkan.conf: +D:/Qt/6.9.1/mingw_64/mkspecs/common/g++-win32.conf: +D:/Qt/6.9.1/mingw_64/mkspecs/common/windows-desktop.conf: +D:/Qt/6.9.1/mingw_64/mkspecs/qconfig.pri: +D:/Qt/6.9.1/mingw_64/mkspecs/modules/qt_ext_freetype.pri: +D:/Qt/6.9.1/mingw_64/mkspecs/modules/qt_ext_libjpeg.pri: +D:/Qt/6.9.1/mingw_64/mkspecs/modules/qt_ext_libpng.pri: +D:/Qt/6.9.1/mingw_64/mkspecs/modules/qt_ext_openxr_loader.pri: +D:/Qt/6.9.1/mingw_64/mkspecs/modules/qt_lib_charts.pri: +D:/Qt/6.9.1/mingw_64/mkspecs/modules/qt_lib_charts_private.pri: +D:/Qt/6.9.1/mingw_64/mkspecs/modules/qt_lib_chartsqml.pri: +D:/Qt/6.9.1/mingw_64/mkspecs/modules/qt_lib_chartsqml_private.pri: +D:/Qt/6.9.1/mingw_64/mkspecs/modules/qt_lib_concurrent.pri: +D:/Qt/6.9.1/mingw_64/mkspecs/modules/qt_lib_concurrent_private.pri: +D:/Qt/6.9.1/mingw_64/mkspecs/modules/qt_lib_core.pri: +D:/Qt/6.9.1/mingw_64/mkspecs/modules/qt_lib_core_private.pri: +D:/Qt/6.9.1/mingw_64/mkspecs/modules/qt_lib_dbus.pri: +D:/Qt/6.9.1/mingw_64/mkspecs/modules/qt_lib_dbus_private.pri: +D:/Qt/6.9.1/mingw_64/mkspecs/modules/qt_lib_designer.pri: +D:/Qt/6.9.1/mingw_64/mkspecs/modules/qt_lib_designer_private.pri: +D:/Qt/6.9.1/mingw_64/mkspecs/modules/qt_lib_designercomponents_private.pri: +D:/Qt/6.9.1/mingw_64/mkspecs/modules/qt_lib_devicediscovery_support_private.pri: +D:/Qt/6.9.1/mingw_64/mkspecs/modules/qt_lib_entrypoint_private.pri: +D:/Qt/6.9.1/mingw_64/mkspecs/modules/qt_lib_example_icons_private.pri: +D:/Qt/6.9.1/mingw_64/mkspecs/modules/qt_lib_examples_asset_downloader_private.pri: +D:/Qt/6.9.1/mingw_64/mkspecs/modules/qt_lib_fb_support_private.pri: +D:/Qt/6.9.1/mingw_64/mkspecs/modules/qt_lib_ffmpegmediapluginimpl_private.pri: +D:/Qt/6.9.1/mingw_64/mkspecs/modules/qt_lib_freetype_private.pri: +D:/Qt/6.9.1/mingw_64/mkspecs/modules/qt_lib_gui.pri: +D:/Qt/6.9.1/mingw_64/mkspecs/modules/qt_lib_gui_private.pri: +D:/Qt/6.9.1/mingw_64/mkspecs/modules/qt_lib_harfbuzz_private.pri: +D:/Qt/6.9.1/mingw_64/mkspecs/modules/qt_lib_help.pri: +D:/Qt/6.9.1/mingw_64/mkspecs/modules/qt_lib_help_private.pri: +D:/Qt/6.9.1/mingw_64/mkspecs/modules/qt_lib_jpeg_private.pri: +D:/Qt/6.9.1/mingw_64/mkspecs/modules/qt_lib_labsanimation.pri: +D:/Qt/6.9.1/mingw_64/mkspecs/modules/qt_lib_labsanimation_private.pri: +D:/Qt/6.9.1/mingw_64/mkspecs/modules/qt_lib_labsfolderlistmodel.pri: +D:/Qt/6.9.1/mingw_64/mkspecs/modules/qt_lib_labsfolderlistmodel_private.pri: +D:/Qt/6.9.1/mingw_64/mkspecs/modules/qt_lib_labsplatform.pri: +D:/Qt/6.9.1/mingw_64/mkspecs/modules/qt_lib_labsplatform_private.pri: +D:/Qt/6.9.1/mingw_64/mkspecs/modules/qt_lib_labsqmlmodels.pri: +D:/Qt/6.9.1/mingw_64/mkspecs/modules/qt_lib_labsqmlmodels_private.pri: +D:/Qt/6.9.1/mingw_64/mkspecs/modules/qt_lib_labssettings.pri: +D:/Qt/6.9.1/mingw_64/mkspecs/modules/qt_lib_labssettings_private.pri: +D:/Qt/6.9.1/mingw_64/mkspecs/modules/qt_lib_labssharedimage.pri: +D:/Qt/6.9.1/mingw_64/mkspecs/modules/qt_lib_labssharedimage_private.pri: +D:/Qt/6.9.1/mingw_64/mkspecs/modules/qt_lib_labswavefrontmesh.pri: +D:/Qt/6.9.1/mingw_64/mkspecs/modules/qt_lib_labswavefrontmesh_private.pri: +D:/Qt/6.9.1/mingw_64/mkspecs/modules/qt_lib_linguist.pri: +D:/Qt/6.9.1/mingw_64/mkspecs/modules/qt_lib_multimedia.pri: +D:/Qt/6.9.1/mingw_64/mkspecs/modules/qt_lib_multimedia_private.pri: +D:/Qt/6.9.1/mingw_64/mkspecs/modules/qt_lib_multimediaquick_private.pri: +D:/Qt/6.9.1/mingw_64/mkspecs/modules/qt_lib_multimediatestlibprivate_private.pri: +D:/Qt/6.9.1/mingw_64/mkspecs/modules/qt_lib_multimediawidgets.pri: +D:/Qt/6.9.1/mingw_64/mkspecs/modules/qt_lib_multimediawidgets_private.pri: +D:/Qt/6.9.1/mingw_64/mkspecs/modules/qt_lib_network.pri: +D:/Qt/6.9.1/mingw_64/mkspecs/modules/qt_lib_network_private.pri: +D:/Qt/6.9.1/mingw_64/mkspecs/modules/qt_lib_opengl.pri: +D:/Qt/6.9.1/mingw_64/mkspecs/modules/qt_lib_opengl_private.pri: +D:/Qt/6.9.1/mingw_64/mkspecs/modules/qt_lib_openglwidgets.pri: +D:/Qt/6.9.1/mingw_64/mkspecs/modules/qt_lib_openglwidgets_private.pri: +D:/Qt/6.9.1/mingw_64/mkspecs/modules/qt_lib_packetprotocol_private.pri: +D:/Qt/6.9.1/mingw_64/mkspecs/modules/qt_lib_png_private.pri: +D:/Qt/6.9.1/mingw_64/mkspecs/modules/qt_lib_printsupport.pri: +D:/Qt/6.9.1/mingw_64/mkspecs/modules/qt_lib_printsupport_private.pri: +D:/Qt/6.9.1/mingw_64/mkspecs/modules/qt_lib_qdoccatch_private.pri: +D:/Qt/6.9.1/mingw_64/mkspecs/modules/qt_lib_qdoccatchconversions_private.pri: +D:/Qt/6.9.1/mingw_64/mkspecs/modules/qt_lib_qdoccatchgenerators_private.pri: +D:/Qt/6.9.1/mingw_64/mkspecs/modules/qt_lib_qml.pri: +D:/Qt/6.9.1/mingw_64/mkspecs/modules/qt_lib_qml_private.pri: +D:/Qt/6.9.1/mingw_64/mkspecs/modules/qt_lib_qmlassetdownloader.pri: +D:/Qt/6.9.1/mingw_64/mkspecs/modules/qt_lib_qmlassetdownloader_private.pri: +D:/Qt/6.9.1/mingw_64/mkspecs/modules/qt_lib_qmlcompiler.pri: +D:/Qt/6.9.1/mingw_64/mkspecs/modules/qt_lib_qmlcompiler_private.pri: +D:/Qt/6.9.1/mingw_64/mkspecs/modules/qt_lib_qmlcore.pri: +D:/Qt/6.9.1/mingw_64/mkspecs/modules/qt_lib_qmlcore_private.pri: +D:/Qt/6.9.1/mingw_64/mkspecs/modules/qt_lib_qmldebug_private.pri: +D:/Qt/6.9.1/mingw_64/mkspecs/modules/qt_lib_qmldom_private.pri: +D:/Qt/6.9.1/mingw_64/mkspecs/modules/qt_lib_qmlformat_private.pri: +D:/Qt/6.9.1/mingw_64/mkspecs/modules/qt_lib_qmlintegration.pri: +D:/Qt/6.9.1/mingw_64/mkspecs/modules/qt_lib_qmlintegration_private.pri: +D:/Qt/6.9.1/mingw_64/mkspecs/modules/qt_lib_qmllocalstorage.pri: +D:/Qt/6.9.1/mingw_64/mkspecs/modules/qt_lib_qmllocalstorage_private.pri: +D:/Qt/6.9.1/mingw_64/mkspecs/modules/qt_lib_qmlls_private.pri: +D:/Qt/6.9.1/mingw_64/mkspecs/modules/qt_lib_qmlmeta.pri: +D:/Qt/6.9.1/mingw_64/mkspecs/modules/qt_lib_qmlmeta_private.pri: +D:/Qt/6.9.1/mingw_64/mkspecs/modules/qt_lib_qmlmodels.pri: +D:/Qt/6.9.1/mingw_64/mkspecs/modules/qt_lib_qmlmodels_private.pri: +D:/Qt/6.9.1/mingw_64/mkspecs/modules/qt_lib_qmlnetwork.pri: +D:/Qt/6.9.1/mingw_64/mkspecs/modules/qt_lib_qmlnetwork_private.pri: +D:/Qt/6.9.1/mingw_64/mkspecs/modules/qt_lib_qmltest.pri: +D:/Qt/6.9.1/mingw_64/mkspecs/modules/qt_lib_qmltest_private.pri: +D:/Qt/6.9.1/mingw_64/mkspecs/modules/qt_lib_qmltoolingsettings_private.pri: +D:/Qt/6.9.1/mingw_64/mkspecs/modules/qt_lib_qmltyperegistrar_private.pri: +D:/Qt/6.9.1/mingw_64/mkspecs/modules/qt_lib_qmlworkerscript.pri: +D:/Qt/6.9.1/mingw_64/mkspecs/modules/qt_lib_qmlworkerscript_private.pri: +D:/Qt/6.9.1/mingw_64/mkspecs/modules/qt_lib_qmlxmllistmodel.pri: +D:/Qt/6.9.1/mingw_64/mkspecs/modules/qt_lib_qmlxmllistmodel_private.pri: +D:/Qt/6.9.1/mingw_64/mkspecs/modules/qt_lib_quick.pri: +D:/Qt/6.9.1/mingw_64/mkspecs/modules/qt_lib_quick3d.pri: +D:/Qt/6.9.1/mingw_64/mkspecs/modules/qt_lib_quick3d_private.pri: +D:/Qt/6.9.1/mingw_64/mkspecs/modules/qt_lib_quick3dassetimport.pri: +D:/Qt/6.9.1/mingw_64/mkspecs/modules/qt_lib_quick3dassetimport_private.pri: +D:/Qt/6.9.1/mingw_64/mkspecs/modules/qt_lib_quick3dassetutils.pri: +D:/Qt/6.9.1/mingw_64/mkspecs/modules/qt_lib_quick3dassetutils_private.pri: +D:/Qt/6.9.1/mingw_64/mkspecs/modules/qt_lib_quick3deffects.pri: +D:/Qt/6.9.1/mingw_64/mkspecs/modules/qt_lib_quick3deffects_private.pri: +D:/Qt/6.9.1/mingw_64/mkspecs/modules/qt_lib_quick3dglslparser_private.pri: +D:/Qt/6.9.1/mingw_64/mkspecs/modules/qt_lib_quick3dhelpers.pri: +D:/Qt/6.9.1/mingw_64/mkspecs/modules/qt_lib_quick3dhelpers_private.pri: +D:/Qt/6.9.1/mingw_64/mkspecs/modules/qt_lib_quick3dhelpersimpl.pri: +D:/Qt/6.9.1/mingw_64/mkspecs/modules/qt_lib_quick3dhelpersimpl_private.pri: +D:/Qt/6.9.1/mingw_64/mkspecs/modules/qt_lib_quick3diblbaker.pri: +D:/Qt/6.9.1/mingw_64/mkspecs/modules/qt_lib_quick3diblbaker_private.pri: +D:/Qt/6.9.1/mingw_64/mkspecs/modules/qt_lib_quick3dparticleeffects.pri: +D:/Qt/6.9.1/mingw_64/mkspecs/modules/qt_lib_quick3dparticleeffects_private.pri: +D:/Qt/6.9.1/mingw_64/mkspecs/modules/qt_lib_quick3dparticles.pri: +D:/Qt/6.9.1/mingw_64/mkspecs/modules/qt_lib_quick3dparticles_private.pri: +D:/Qt/6.9.1/mingw_64/mkspecs/modules/qt_lib_quick3druntimerender.pri: +D:/Qt/6.9.1/mingw_64/mkspecs/modules/qt_lib_quick3druntimerender_private.pri: +D:/Qt/6.9.1/mingw_64/mkspecs/modules/qt_lib_quick3dspatialaudio_private.pri: +D:/Qt/6.9.1/mingw_64/mkspecs/modules/qt_lib_quick3dutils.pri: +D:/Qt/6.9.1/mingw_64/mkspecs/modules/qt_lib_quick3dutils_private.pri: +D:/Qt/6.9.1/mingw_64/mkspecs/modules/qt_lib_quick3dxr.pri: +D:/Qt/6.9.1/mingw_64/mkspecs/modules/qt_lib_quick3dxr_private.pri: +D:/Qt/6.9.1/mingw_64/mkspecs/modules/qt_lib_quick_private.pri: +D:/Qt/6.9.1/mingw_64/mkspecs/modules/qt_lib_quickcontrols2.pri: +D:/Qt/6.9.1/mingw_64/mkspecs/modules/qt_lib_quickcontrols2_private.pri: +D:/Qt/6.9.1/mingw_64/mkspecs/modules/qt_lib_quickcontrols2basic.pri: +D:/Qt/6.9.1/mingw_64/mkspecs/modules/qt_lib_quickcontrols2basic_private.pri: +D:/Qt/6.9.1/mingw_64/mkspecs/modules/qt_lib_quickcontrols2basicstyleimpl.pri: +D:/Qt/6.9.1/mingw_64/mkspecs/modules/qt_lib_quickcontrols2basicstyleimpl_private.pri: +D:/Qt/6.9.1/mingw_64/mkspecs/modules/qt_lib_quickcontrols2fluentwinui3styleimpl.pri: +D:/Qt/6.9.1/mingw_64/mkspecs/modules/qt_lib_quickcontrols2fluentwinui3styleimpl_private.pri: +D:/Qt/6.9.1/mingw_64/mkspecs/modules/qt_lib_quickcontrols2fusion.pri: +D:/Qt/6.9.1/mingw_64/mkspecs/modules/qt_lib_quickcontrols2fusion_private.pri: +D:/Qt/6.9.1/mingw_64/mkspecs/modules/qt_lib_quickcontrols2fusionstyleimpl.pri: +D:/Qt/6.9.1/mingw_64/mkspecs/modules/qt_lib_quickcontrols2fusionstyleimpl_private.pri: +D:/Qt/6.9.1/mingw_64/mkspecs/modules/qt_lib_quickcontrols2imagine.pri: +D:/Qt/6.9.1/mingw_64/mkspecs/modules/qt_lib_quickcontrols2imagine_private.pri: +D:/Qt/6.9.1/mingw_64/mkspecs/modules/qt_lib_quickcontrols2imaginestyleimpl.pri: +D:/Qt/6.9.1/mingw_64/mkspecs/modules/qt_lib_quickcontrols2imaginestyleimpl_private.pri: +D:/Qt/6.9.1/mingw_64/mkspecs/modules/qt_lib_quickcontrols2impl.pri: +D:/Qt/6.9.1/mingw_64/mkspecs/modules/qt_lib_quickcontrols2impl_private.pri: +D:/Qt/6.9.1/mingw_64/mkspecs/modules/qt_lib_quickcontrols2material.pri: +D:/Qt/6.9.1/mingw_64/mkspecs/modules/qt_lib_quickcontrols2material_private.pri: +D:/Qt/6.9.1/mingw_64/mkspecs/modules/qt_lib_quickcontrols2materialstyleimpl.pri: +D:/Qt/6.9.1/mingw_64/mkspecs/modules/qt_lib_quickcontrols2materialstyleimpl_private.pri: +D:/Qt/6.9.1/mingw_64/mkspecs/modules/qt_lib_quickcontrols2universal.pri: +D:/Qt/6.9.1/mingw_64/mkspecs/modules/qt_lib_quickcontrols2universal_private.pri: +D:/Qt/6.9.1/mingw_64/mkspecs/modules/qt_lib_quickcontrols2universalstyleimpl.pri: +D:/Qt/6.9.1/mingw_64/mkspecs/modules/qt_lib_quickcontrols2universalstyleimpl_private.pri: +D:/Qt/6.9.1/mingw_64/mkspecs/modules/qt_lib_quickcontrols2windowsstyleimpl.pri: +D:/Qt/6.9.1/mingw_64/mkspecs/modules/qt_lib_quickcontrols2windowsstyleimpl_private.pri: +D:/Qt/6.9.1/mingw_64/mkspecs/modules/qt_lib_quickcontrolstestutilsprivate_private.pri: +D:/Qt/6.9.1/mingw_64/mkspecs/modules/qt_lib_quickdialogs2.pri: +D:/Qt/6.9.1/mingw_64/mkspecs/modules/qt_lib_quickdialogs2_private.pri: +D:/Qt/6.9.1/mingw_64/mkspecs/modules/qt_lib_quickdialogs2quickimpl.pri: +D:/Qt/6.9.1/mingw_64/mkspecs/modules/qt_lib_quickdialogs2quickimpl_private.pri: +D:/Qt/6.9.1/mingw_64/mkspecs/modules/qt_lib_quickdialogs2utils.pri: +D:/Qt/6.9.1/mingw_64/mkspecs/modules/qt_lib_quickdialogs2utils_private.pri: +D:/Qt/6.9.1/mingw_64/mkspecs/modules/qt_lib_quickeffects.pri: +D:/Qt/6.9.1/mingw_64/mkspecs/modules/qt_lib_quickeffects_private.pri: +D:/Qt/6.9.1/mingw_64/mkspecs/modules/qt_lib_quicklayouts.pri: +D:/Qt/6.9.1/mingw_64/mkspecs/modules/qt_lib_quicklayouts_private.pri: +D:/Qt/6.9.1/mingw_64/mkspecs/modules/qt_lib_quickparticles_private.pri: +D:/Qt/6.9.1/mingw_64/mkspecs/modules/qt_lib_quickshapes_private.pri: +D:/Qt/6.9.1/mingw_64/mkspecs/modules/qt_lib_quicktemplates2.pri: +D:/Qt/6.9.1/mingw_64/mkspecs/modules/qt_lib_quicktemplates2_private.pri: +D:/Qt/6.9.1/mingw_64/mkspecs/modules/qt_lib_quicktestutilsprivate_private.pri: +D:/Qt/6.9.1/mingw_64/mkspecs/modules/qt_lib_quicktimeline.pri: +D:/Qt/6.9.1/mingw_64/mkspecs/modules/qt_lib_quicktimeline_private.pri: +D:/Qt/6.9.1/mingw_64/mkspecs/modules/qt_lib_quicktimelineblendtrees.pri: +D:/Qt/6.9.1/mingw_64/mkspecs/modules/qt_lib_quicktimelineblendtrees_private.pri: +D:/Qt/6.9.1/mingw_64/mkspecs/modules/qt_lib_quickvectorimage.pri: +D:/Qt/6.9.1/mingw_64/mkspecs/modules/qt_lib_quickvectorimage_private.pri: +D:/Qt/6.9.1/mingw_64/mkspecs/modules/qt_lib_quickvectorimagegenerator_private.pri: +D:/Qt/6.9.1/mingw_64/mkspecs/modules/qt_lib_quickwidgets.pri: +D:/Qt/6.9.1/mingw_64/mkspecs/modules/qt_lib_quickwidgets_private.pri: +D:/Qt/6.9.1/mingw_64/mkspecs/modules/qt_lib_shadertools.pri: +D:/Qt/6.9.1/mingw_64/mkspecs/modules/qt_lib_shadertools_private.pri: +D:/Qt/6.9.1/mingw_64/mkspecs/modules/qt_lib_spatialaudio.pri: +D:/Qt/6.9.1/mingw_64/mkspecs/modules/qt_lib_spatialaudio_private.pri: +D:/Qt/6.9.1/mingw_64/mkspecs/modules/qt_lib_sql.pri: +D:/Qt/6.9.1/mingw_64/mkspecs/modules/qt_lib_sql_private.pri: +D:/Qt/6.9.1/mingw_64/mkspecs/modules/qt_lib_svg.pri: +D:/Qt/6.9.1/mingw_64/mkspecs/modules/qt_lib_svg_private.pri: +D:/Qt/6.9.1/mingw_64/mkspecs/modules/qt_lib_svgwidgets.pri: +D:/Qt/6.9.1/mingw_64/mkspecs/modules/qt_lib_svgwidgets_private.pri: +D:/Qt/6.9.1/mingw_64/mkspecs/modules/qt_lib_testinternals_private.pri: +D:/Qt/6.9.1/mingw_64/mkspecs/modules/qt_lib_testlib.pri: +D:/Qt/6.9.1/mingw_64/mkspecs/modules/qt_lib_testlib_private.pri: +D:/Qt/6.9.1/mingw_64/mkspecs/modules/qt_lib_tools_private.pri: +D:/Qt/6.9.1/mingw_64/mkspecs/modules/qt_lib_uiplugin.pri: +D:/Qt/6.9.1/mingw_64/mkspecs/modules/qt_lib_uitools.pri: +D:/Qt/6.9.1/mingw_64/mkspecs/modules/qt_lib_uitools_private.pri: +D:/Qt/6.9.1/mingw_64/mkspecs/modules/qt_lib_widgets.pri: +D:/Qt/6.9.1/mingw_64/mkspecs/modules/qt_lib_widgets_private.pri: +D:/Qt/6.9.1/mingw_64/mkspecs/modules/qt_lib_xml.pri: +D:/Qt/6.9.1/mingw_64/mkspecs/modules/qt_lib_xml_private.pri: +D:/Qt/6.9.1/mingw_64/mkspecs/modules/qt_lib_zlib_private.pri: +D:/Qt/6.9.1/mingw_64/mkspecs/features/qt_functions.prf: +D:/Qt/6.9.1/mingw_64/mkspecs/features/qt_config.prf: +D:/Qt/6.9.1/mingw_64/mkspecs/win32-g++/qmake.conf: +D:/Qt/6.9.1/mingw_64/mkspecs/features/spec_post.prf: +.qmake.stash: +D:/Qt/6.9.1/mingw_64/mkspecs/features/exclusive_builds.prf: +D:/Qt/6.9.1/mingw_64/mkspecs/features/toolchain.prf: +D:/Qt/6.9.1/mingw_64/mkspecs/features/default_pre.prf: +D:/Qt/6.9.1/mingw_64/mkspecs/features/win32/default_pre.prf: +D:/Qt/6.9.1/mingw_64/mkspecs/features/resolve_config.prf: +D:/Qt/6.9.1/mingw_64/mkspecs/features/exclusive_builds_post.prf: +D:/Qt/6.9.1/mingw_64/mkspecs/features/default_post.prf: +D:/Qt/6.9.1/mingw_64/mkspecs/features/qtquickcompiler.prf: +D:/Qt/6.9.1/mingw_64/mkspecs/features/precompile_header.prf: +D:/Qt/6.9.1/mingw_64/mkspecs/features/warn_on.prf: +D:/Qt/6.9.1/mingw_64/mkspecs/features/permissions.prf: +D:/Qt/6.9.1/mingw_64/mkspecs/features/qt.prf: +D:/Qt/6.9.1/mingw_64/mkspecs/features/resources_functions.prf: +D:/Qt/6.9.1/mingw_64/mkspecs/features/resources.prf: +D:/Qt/6.9.1/mingw_64/mkspecs/features/moc.prf: +D:/Qt/6.9.1/mingw_64/mkspecs/features/win32/opengl.prf: +D:/Qt/6.9.1/mingw_64/mkspecs/features/uic.prf: +D:/Qt/6.9.1/mingw_64/mkspecs/features/qmake_use.prf: +D:/Qt/6.9.1/mingw_64/mkspecs/features/file_copies.prf: +D:/Qt/6.9.1/mingw_64/mkspecs/features/win32/windows.prf: +D:/Qt/6.9.1/mingw_64/mkspecs/features/testcase_targets.prf: +D:/Qt/6.9.1/mingw_64/mkspecs/features/exceptions.prf: +D:/Qt/6.9.1/mingw_64/mkspecs/features/yacc.prf: +D:/Qt/6.9.1/mingw_64/mkspecs/features/lex.prf: +untitled2.pro: +D:/Qt/6.9.1/mingw_64/lib/Qt6Widgets.prl: +D:/Qt/6.9.1/mingw_64/lib/Qt6Gui.prl: +D:/Qt/6.9.1/mingw_64/lib/Qt6Network.prl: +D:/Qt/6.9.1/mingw_64/lib/Qt6Concurrent.prl: +D:/Qt/6.9.1/mingw_64/lib/Qt6Core.prl: +D:/Qt/6.9.1/mingw_64/lib/Qt6EntryPoint.prl: +D:/Qt/6.9.1/mingw_64/mkspecs/features/build_pass.prf: +resources.qrc: +qmake: FORCE + @$(QMAKE) -o Makefile untitled2.pro -spec win32-g++ "CONFIG+=qtquickcompiler" + +qmake_all: FORCE + +make_first: release-make_first debug-make_first FORCE +all: release-all debug-all FORCE +clean: release-clean debug-clean FORCE +distclean: release-distclean debug-distclean FORCE + -$(DEL_FILE) Makefile + -$(DEL_FILE) .qmake.stash + +release-mocclean: + $(MAKE) -f $(MAKEFILE).Release mocclean +debug-mocclean: + $(MAKE) -f $(MAKEFILE).Debug mocclean +mocclean: release-mocclean debug-mocclean + +release-mocables: + $(MAKE) -f $(MAKEFILE).Release mocables +debug-mocables: + $(MAKE) -f $(MAKEFILE).Debug mocables +mocables: release-mocables debug-mocables + +check: first + +benchmark: first +FORCE: + +.SUFFIXES: + +$(MAKEFILE).Release: Makefile +$(MAKEFILE).Debug: Makefile diff --git a/C++/2.2.6/Makefile.Debug b/C++/2.2.6/Makefile.Debug new file mode 100644 index 0000000..b2360a5 --- /dev/null +++ b/C++/2.2.6/Makefile.Debug @@ -0,0 +1,1173 @@ +############################################################################# +# Makefile for building: untitled2 +# Generated by qmake (3.1) (Qt 6.9.1) +# Project: untitled2.pro +# Template: app +############################################################################# + +MAKEFILE = Makefile.Debug + +EQ = = + +####### Compiler, tools and options + +CC = gcc +CXX = g++ +DEFINES = -DUNICODE -D_UNICODE -DWIN32 -DMINGW_HAS_SECURE_API=1 -DQT_WIDGETS_LIB -DQT_GUI_LIB -DQT_NETWORK_LIB -DQT_CONCURRENT_LIB -DQT_CORE_LIB -DQT_NEEDS_QMAIN +CFLAGS = -fno-keep-inline-dllexport -g -Wall -Wextra -Wextra $(DEFINES) +CXXFLAGS = -fno-keep-inline-dllexport -g -std=gnu++1z -Wall -Wextra -Wextra -fexceptions -mthreads $(DEFINES) +INCPATH = -I. -ID:/Qt/6.9.1/mingw_64/include -ID:/Qt/6.9.1/mingw_64/include/QtWidgets -ID:/Qt/6.9.1/mingw_64/include/QtGui -ID:/Qt/6.9.1/mingw_64/include/QtNetwork -ID:/Qt/6.9.1/mingw_64/include/QtConcurrent -ID:/Qt/6.9.1/mingw_64/include/QtCore -Idebug -I/include -ID:/Qt/6.9.1/mingw_64/mkspecs/win32-g++ +LINKER = g++ +LFLAGS = -Wl,-subsystem,windows -mthreads +LIBS = -ladvapi32 -luser32 -lshell32 -lkernel32 D:\Qt\6.9.1\mingw_64\lib\libQt6Widgets.a D:\Qt\6.9.1\mingw_64\lib\libQt6Gui.a D:\Qt\6.9.1\mingw_64\lib\libQt6Network.a D:\Qt\6.9.1\mingw_64\lib\libQt6Concurrent.a D:\Qt\6.9.1\mingw_64\lib\libQt6Core.a debug\launcher_res.o -lmingw32 D:\Qt\6.9.1\mingw_64\lib\libQt6EntryPoint.a -lshell32 +QMAKE = D:\Qt\6.9.1\mingw_64\bin\qmake.exe +DEL_FILE = del +CHK_DIR_EXISTS= if not exist +MKDIR = mkdir +COPY = copy /y +COPY_FILE = copy /y +COPY_DIR = xcopy /s /q /y /i +INSTALL_FILE = copy /y +INSTALL_PROGRAM = copy /y +INSTALL_DIR = xcopy /s /q /y /i +QINSTALL = D:\Qt\6.9.1\mingw_64\bin\qmake.exe -install qinstall +QINSTALL_PROGRAM = D:\Qt\6.9.1\mingw_64\bin\qmake.exe -install qinstall -exe +DEL_FILE = del +SYMLINK = $(QMAKE) -install ln -f -s +DEL_DIR = rmdir +MOVE = move +IDC = idc +IDL = midl +ZIP = zip -r -9 +DEF_FILE = +RES_FILE = debug\launcher_res.o +SED = $(QMAKE) -install sed +MOVE = move + +####### Output directory + +OBJECTS_DIR = debug + +####### Files + +SOURCES = main.cpp \ + mainwindow.cpp debug\qrc_resources.cpp \ + debug\moc_mainwindow.cpp +OBJECTS = debug/main.o \ + debug/mainwindow.o \ + debug/qrc_resources.o \ + debug/moc_mainwindow.o + +DIST = mainwindow.h main.cpp \ + mainwindow.cpp +QMAKE_TARGET = untitled2 +DESTDIR = debug\ #avoid trailing-slash linebreak +TARGET = untitled2.exe +DESTDIR_TARGET = debug\untitled2.exe + +####### Build rules + +first: all +all: Makefile.Debug debug/untitled2.exe + +debug/untitled2.exe: D:/Qt/6.9.1/mingw_64/lib/libQt6Widgets.a D:/Qt/6.9.1/mingw_64/lib/libQt6Gui.a D:/Qt/6.9.1/mingw_64/lib/libQt6Network.a D:/Qt/6.9.1/mingw_64/lib/libQt6Concurrent.a D:/Qt/6.9.1/mingw_64/lib/libQt6Core.a D:/Qt/6.9.1/mingw_64/lib/libQt6EntryPoint.a $(OBJECTS) debug/launcher_res.o + $(LINKER) $(LFLAGS) -o $(DESTDIR_TARGET) $(OBJECTS) $(LIBS) + +debug/launcher_res.o: launcher.rc + windres -i launcher.rc -o debug\launcher_res.o --include-dir=. $(DEFINES) + +qmake: FORCE + @$(QMAKE) -o Makefile.Debug untitled2.pro -spec win32-g++ "CONFIG+=qtquickcompiler" + +qmake_all: FORCE + +dist: + $(ZIP) untitled2.zip $(SOURCES) $(DIST) untitled2.pro D:\Qt\6.9.1\mingw_64\mkspecs\features\spec_pre.prf D:\Qt\6.9.1\mingw_64\mkspecs\features\device_config.prf D:\Qt\6.9.1\mingw_64\mkspecs\common\sanitize.conf D:\Qt\6.9.1\mingw_64\mkspecs\common\gcc-base.conf D:\Qt\6.9.1\mingw_64\mkspecs\common\g++-base.conf D:\Qt\6.9.1\mingw_64\mkspecs\features\win32\windows_vulkan_sdk.prf D:\Qt\6.9.1\mingw_64\mkspecs\common\windows-vulkan.conf D:\Qt\6.9.1\mingw_64\mkspecs\common\g++-win32.conf D:\Qt\6.9.1\mingw_64\mkspecs\common\windows-desktop.conf D:\Qt\6.9.1\mingw_64\mkspecs\qconfig.pri D:\Qt\6.9.1\mingw_64\mkspecs\modules\qt_ext_freetype.pri D:\Qt\6.9.1\mingw_64\mkspecs\modules\qt_ext_libjpeg.pri D:\Qt\6.9.1\mingw_64\mkspecs\modules\qt_ext_libpng.pri D:\Qt\6.9.1\mingw_64\mkspecs\modules\qt_ext_openxr_loader.pri D:\Qt\6.9.1\mingw_64\mkspecs\modules\qt_lib_charts.pri D:\Qt\6.9.1\mingw_64\mkspecs\modules\qt_lib_charts_private.pri D:\Qt\6.9.1\mingw_64\mkspecs\modules\qt_lib_chartsqml.pri D:\Qt\6.9.1\mingw_64\mkspecs\modules\qt_lib_chartsqml_private.pri D:\Qt\6.9.1\mingw_64\mkspecs\modules\qt_lib_concurrent.pri D:\Qt\6.9.1\mingw_64\mkspecs\modules\qt_lib_concurrent_private.pri D:\Qt\6.9.1\mingw_64\mkspecs\modules\qt_lib_core.pri D:\Qt\6.9.1\mingw_64\mkspecs\modules\qt_lib_core_private.pri D:\Qt\6.9.1\mingw_64\mkspecs\modules\qt_lib_dbus.pri D:\Qt\6.9.1\mingw_64\mkspecs\modules\qt_lib_dbus_private.pri D:\Qt\6.9.1\mingw_64\mkspecs\modules\qt_lib_designer.pri D:\Qt\6.9.1\mingw_64\mkspecs\modules\qt_lib_designer_private.pri D:\Qt\6.9.1\mingw_64\mkspecs\modules\qt_lib_designercomponents_private.pri D:\Qt\6.9.1\mingw_64\mkspecs\modules\qt_lib_devicediscovery_support_private.pri D:\Qt\6.9.1\mingw_64\mkspecs\modules\qt_lib_entrypoint_private.pri D:\Qt\6.9.1\mingw_64\mkspecs\modules\qt_lib_example_icons_private.pri D:\Qt\6.9.1\mingw_64\mkspecs\modules\qt_lib_examples_asset_downloader_private.pri D:\Qt\6.9.1\mingw_64\mkspecs\modules\qt_lib_fb_support_private.pri D:\Qt\6.9.1\mingw_64\mkspecs\modules\qt_lib_ffmpegmediapluginimpl_private.pri D:\Qt\6.9.1\mingw_64\mkspecs\modules\qt_lib_freetype_private.pri D:\Qt\6.9.1\mingw_64\mkspecs\modules\qt_lib_gui.pri D:\Qt\6.9.1\mingw_64\mkspecs\modules\qt_lib_gui_private.pri D:\Qt\6.9.1\mingw_64\mkspecs\modules\qt_lib_harfbuzz_private.pri D:\Qt\6.9.1\mingw_64\mkspecs\modules\qt_lib_help.pri D:\Qt\6.9.1\mingw_64\mkspecs\modules\qt_lib_help_private.pri D:\Qt\6.9.1\mingw_64\mkspecs\modules\qt_lib_jpeg_private.pri D:\Qt\6.9.1\mingw_64\mkspecs\modules\qt_lib_labsanimation.pri D:\Qt\6.9.1\mingw_64\mkspecs\modules\qt_lib_labsanimation_private.pri D:\Qt\6.9.1\mingw_64\mkspecs\modules\qt_lib_labsfolderlistmodel.pri D:\Qt\6.9.1\mingw_64\mkspecs\modules\qt_lib_labsfolderlistmodel_private.pri D:\Qt\6.9.1\mingw_64\mkspecs\modules\qt_lib_labsplatform.pri D:\Qt\6.9.1\mingw_64\mkspecs\modules\qt_lib_labsplatform_private.pri D:\Qt\6.9.1\mingw_64\mkspecs\modules\qt_lib_labsqmlmodels.pri D:\Qt\6.9.1\mingw_64\mkspecs\modules\qt_lib_labsqmlmodels_private.pri D:\Qt\6.9.1\mingw_64\mkspecs\modules\qt_lib_labssettings.pri D:\Qt\6.9.1\mingw_64\mkspecs\modules\qt_lib_labssettings_private.pri D:\Qt\6.9.1\mingw_64\mkspecs\modules\qt_lib_labssharedimage.pri D:\Qt\6.9.1\mingw_64\mkspecs\modules\qt_lib_labssharedimage_private.pri D:\Qt\6.9.1\mingw_64\mkspecs\modules\qt_lib_labswavefrontmesh.pri D:\Qt\6.9.1\mingw_64\mkspecs\modules\qt_lib_labswavefrontmesh_private.pri D:\Qt\6.9.1\mingw_64\mkspecs\modules\qt_lib_linguist.pri D:\Qt\6.9.1\mingw_64\mkspecs\modules\qt_lib_multimedia.pri D:\Qt\6.9.1\mingw_64\mkspecs\modules\qt_lib_multimedia_private.pri D:\Qt\6.9.1\mingw_64\mkspecs\modules\qt_lib_multimediaquick_private.pri D:\Qt\6.9.1\mingw_64\mkspecs\modules\qt_lib_multimediatestlibprivate_private.pri D:\Qt\6.9.1\mingw_64\mkspecs\modules\qt_lib_multimediawidgets.pri D:\Qt\6.9.1\mingw_64\mkspecs\modules\qt_lib_multimediawidgets_private.pri D:\Qt\6.9.1\mingw_64\mkspecs\modules\qt_lib_network.pri D:\Qt\6.9.1\mingw_64\mkspecs\modules\qt_lib_network_private.pri D:\Qt\6.9.1\mingw_64\mkspecs\modules\qt_lib_opengl.pri D:\Qt\6.9.1\mingw_64\mkspecs\modules\qt_lib_opengl_private.pri D:\Qt\6.9.1\mingw_64\mkspecs\modules\qt_lib_openglwidgets.pri D:\Qt\6.9.1\mingw_64\mkspecs\modules\qt_lib_openglwidgets_private.pri D:\Qt\6.9.1\mingw_64\mkspecs\modules\qt_lib_packetprotocol_private.pri D:\Qt\6.9.1\mingw_64\mkspecs\modules\qt_lib_png_private.pri D:\Qt\6.9.1\mingw_64\mkspecs\modules\qt_lib_printsupport.pri D:\Qt\6.9.1\mingw_64\mkspecs\modules\qt_lib_printsupport_private.pri D:\Qt\6.9.1\mingw_64\mkspecs\modules\qt_lib_qdoccatch_private.pri D:\Qt\6.9.1\mingw_64\mkspecs\modules\qt_lib_qdoccatchconversions_private.pri D:\Qt\6.9.1\mingw_64\mkspecs\modules\qt_lib_qdoccatchgenerators_private.pri D:\Qt\6.9.1\mingw_64\mkspecs\modules\qt_lib_qml.pri D:\Qt\6.9.1\mingw_64\mkspecs\modules\qt_lib_qml_private.pri D:\Qt\6.9.1\mingw_64\mkspecs\modules\qt_lib_qmlassetdownloader.pri D:\Qt\6.9.1\mingw_64\mkspecs\modules\qt_lib_qmlassetdownloader_private.pri D:\Qt\6.9.1\mingw_64\mkspecs\modules\qt_lib_qmlcompiler.pri D:\Qt\6.9.1\mingw_64\mkspecs\modules\qt_lib_qmlcompiler_private.pri D:\Qt\6.9.1\mingw_64\mkspecs\modules\qt_lib_qmlcore.pri D:\Qt\6.9.1\mingw_64\mkspecs\modules\qt_lib_qmlcore_private.pri D:\Qt\6.9.1\mingw_64\mkspecs\modules\qt_lib_qmldebug_private.pri D:\Qt\6.9.1\mingw_64\mkspecs\modules\qt_lib_qmldom_private.pri D:\Qt\6.9.1\mingw_64\mkspecs\modules\qt_lib_qmlformat_private.pri D:\Qt\6.9.1\mingw_64\mkspecs\modules\qt_lib_qmlintegration.pri D:\Qt\6.9.1\mingw_64\mkspecs\modules\qt_lib_qmlintegration_private.pri D:\Qt\6.9.1\mingw_64\mkspecs\modules\qt_lib_qmllocalstorage.pri D:\Qt\6.9.1\mingw_64\mkspecs\modules\qt_lib_qmllocalstorage_private.pri D:\Qt\6.9.1\mingw_64\mkspecs\modules\qt_lib_qmlls_private.pri D:\Qt\6.9.1\mingw_64\mkspecs\modules\qt_lib_qmlmeta.pri D:\Qt\6.9.1\mingw_64\mkspecs\modules\qt_lib_qmlmeta_private.pri D:\Qt\6.9.1\mingw_64\mkspecs\modules\qt_lib_qmlmodels.pri D:\Qt\6.9.1\mingw_64\mkspecs\modules\qt_lib_qmlmodels_private.pri D:\Qt\6.9.1\mingw_64\mkspecs\modules\qt_lib_qmlnetwork.pri D:\Qt\6.9.1\mingw_64\mkspecs\modules\qt_lib_qmlnetwork_private.pri D:\Qt\6.9.1\mingw_64\mkspecs\modules\qt_lib_qmltest.pri D:\Qt\6.9.1\mingw_64\mkspecs\modules\qt_lib_qmltest_private.pri D:\Qt\6.9.1\mingw_64\mkspecs\modules\qt_lib_qmltoolingsettings_private.pri D:\Qt\6.9.1\mingw_64\mkspecs\modules\qt_lib_qmltyperegistrar_private.pri D:\Qt\6.9.1\mingw_64\mkspecs\modules\qt_lib_qmlworkerscript.pri D:\Qt\6.9.1\mingw_64\mkspecs\modules\qt_lib_qmlworkerscript_private.pri D:\Qt\6.9.1\mingw_64\mkspecs\modules\qt_lib_qmlxmllistmodel.pri D:\Qt\6.9.1\mingw_64\mkspecs\modules\qt_lib_qmlxmllistmodel_private.pri D:\Qt\6.9.1\mingw_64\mkspecs\modules\qt_lib_quick.pri D:\Qt\6.9.1\mingw_64\mkspecs\modules\qt_lib_quick3d.pri D:\Qt\6.9.1\mingw_64\mkspecs\modules\qt_lib_quick3d_private.pri D:\Qt\6.9.1\mingw_64\mkspecs\modules\qt_lib_quick3dassetimport.pri D:\Qt\6.9.1\mingw_64\mkspecs\modules\qt_lib_quick3dassetimport_private.pri D:\Qt\6.9.1\mingw_64\mkspecs\modules\qt_lib_quick3dassetutils.pri D:\Qt\6.9.1\mingw_64\mkspecs\modules\qt_lib_quick3dassetutils_private.pri D:\Qt\6.9.1\mingw_64\mkspecs\modules\qt_lib_quick3deffects.pri D:\Qt\6.9.1\mingw_64\mkspecs\modules\qt_lib_quick3deffects_private.pri D:\Qt\6.9.1\mingw_64\mkspecs\modules\qt_lib_quick3dglslparser_private.pri D:\Qt\6.9.1\mingw_64\mkspecs\modules\qt_lib_quick3dhelpers.pri D:\Qt\6.9.1\mingw_64\mkspecs\modules\qt_lib_quick3dhelpers_private.pri D:\Qt\6.9.1\mingw_64\mkspecs\modules\qt_lib_quick3dhelpersimpl.pri D:\Qt\6.9.1\mingw_64\mkspecs\modules\qt_lib_quick3dhelpersimpl_private.pri D:\Qt\6.9.1\mingw_64\mkspecs\modules\qt_lib_quick3diblbaker.pri D:\Qt\6.9.1\mingw_64\mkspecs\modules\qt_lib_quick3diblbaker_private.pri D:\Qt\6.9.1\mingw_64\mkspecs\modules\qt_lib_quick3dparticleeffects.pri D:\Qt\6.9.1\mingw_64\mkspecs\modules\qt_lib_quick3dparticleeffects_private.pri D:\Qt\6.9.1\mingw_64\mkspecs\modules\qt_lib_quick3dparticles.pri D:\Qt\6.9.1\mingw_64\mkspecs\modules\qt_lib_quick3dparticles_private.pri D:\Qt\6.9.1\mingw_64\mkspecs\modules\qt_lib_quick3druntimerender.pri D:\Qt\6.9.1\mingw_64\mkspecs\modules\qt_lib_quick3druntimerender_private.pri D:\Qt\6.9.1\mingw_64\mkspecs\modules\qt_lib_quick3dspatialaudio_private.pri D:\Qt\6.9.1\mingw_64\mkspecs\modules\qt_lib_quick3dutils.pri D:\Qt\6.9.1\mingw_64\mkspecs\modules\qt_lib_quick3dutils_private.pri D:\Qt\6.9.1\mingw_64\mkspecs\modules\qt_lib_quick3dxr.pri D:\Qt\6.9.1\mingw_64\mkspecs\modules\qt_lib_quick3dxr_private.pri D:\Qt\6.9.1\mingw_64\mkspecs\modules\qt_lib_quick_private.pri D:\Qt\6.9.1\mingw_64\mkspecs\modules\qt_lib_quickcontrols2.pri D:\Qt\6.9.1\mingw_64\mkspecs\modules\qt_lib_quickcontrols2_private.pri D:\Qt\6.9.1\mingw_64\mkspecs\modules\qt_lib_quickcontrols2basic.pri D:\Qt\6.9.1\mingw_64\mkspecs\modules\qt_lib_quickcontrols2basic_private.pri D:\Qt\6.9.1\mingw_64\mkspecs\modules\qt_lib_quickcontrols2basicstyleimpl.pri D:\Qt\6.9.1\mingw_64\mkspecs\modules\qt_lib_quickcontrols2basicstyleimpl_private.pri D:\Qt\6.9.1\mingw_64\mkspecs\modules\qt_lib_quickcontrols2fluentwinui3styleimpl.pri D:\Qt\6.9.1\mingw_64\mkspecs\modules\qt_lib_quickcontrols2fluentwinui3styleimpl_private.pri D:\Qt\6.9.1\mingw_64\mkspecs\modules\qt_lib_quickcontrols2fusion.pri D:\Qt\6.9.1\mingw_64\mkspecs\modules\qt_lib_quickcontrols2fusion_private.pri D:\Qt\6.9.1\mingw_64\mkspecs\modules\qt_lib_quickcontrols2fusionstyleimpl.pri D:\Qt\6.9.1\mingw_64\mkspecs\modules\qt_lib_quickcontrols2fusionstyleimpl_private.pri D:\Qt\6.9.1\mingw_64\mkspecs\modules\qt_lib_quickcontrols2imagine.pri D:\Qt\6.9.1\mingw_64\mkspecs\modules\qt_lib_quickcontrols2imagine_private.pri D:\Qt\6.9.1\mingw_64\mkspecs\modules\qt_lib_quickcontrols2imaginestyleimpl.pri D:\Qt\6.9.1\mingw_64\mkspecs\modules\qt_lib_quickcontrols2imaginestyleimpl_private.pri D:\Qt\6.9.1\mingw_64\mkspecs\modules\qt_lib_quickcontrols2impl.pri D:\Qt\6.9.1\mingw_64\mkspecs\modules\qt_lib_quickcontrols2impl_private.pri D:\Qt\6.9.1\mingw_64\mkspecs\modules\qt_lib_quickcontrols2material.pri D:\Qt\6.9.1\mingw_64\mkspecs\modules\qt_lib_quickcontrols2material_private.pri D:\Qt\6.9.1\mingw_64\mkspecs\modules\qt_lib_quickcontrols2materialstyleimpl.pri D:\Qt\6.9.1\mingw_64\mkspecs\modules\qt_lib_quickcontrols2materialstyleimpl_private.pri D:\Qt\6.9.1\mingw_64\mkspecs\modules\qt_lib_quickcontrols2universal.pri D:\Qt\6.9.1\mingw_64\mkspecs\modules\qt_lib_quickcontrols2universal_private.pri D:\Qt\6.9.1\mingw_64\mkspecs\modules\qt_lib_quickcontrols2universalstyleimpl.pri D:\Qt\6.9.1\mingw_64\mkspecs\modules\qt_lib_quickcontrols2universalstyleimpl_private.pri D:\Qt\6.9.1\mingw_64\mkspecs\modules\qt_lib_quickcontrols2windowsstyleimpl.pri D:\Qt\6.9.1\mingw_64\mkspecs\modules\qt_lib_quickcontrols2windowsstyleimpl_private.pri D:\Qt\6.9.1\mingw_64\mkspecs\modules\qt_lib_quickcontrolstestutilsprivate_private.pri D:\Qt\6.9.1\mingw_64\mkspecs\modules\qt_lib_quickdialogs2.pri D:\Qt\6.9.1\mingw_64\mkspecs\modules\qt_lib_quickdialogs2_private.pri D:\Qt\6.9.1\mingw_64\mkspecs\modules\qt_lib_quickdialogs2quickimpl.pri D:\Qt\6.9.1\mingw_64\mkspecs\modules\qt_lib_quickdialogs2quickimpl_private.pri D:\Qt\6.9.1\mingw_64\mkspecs\modules\qt_lib_quickdialogs2utils.pri D:\Qt\6.9.1\mingw_64\mkspecs\modules\qt_lib_quickdialogs2utils_private.pri D:\Qt\6.9.1\mingw_64\mkspecs\modules\qt_lib_quickeffects.pri D:\Qt\6.9.1\mingw_64\mkspecs\modules\qt_lib_quickeffects_private.pri D:\Qt\6.9.1\mingw_64\mkspecs\modules\qt_lib_quicklayouts.pri D:\Qt\6.9.1\mingw_64\mkspecs\modules\qt_lib_quicklayouts_private.pri D:\Qt\6.9.1\mingw_64\mkspecs\modules\qt_lib_quickparticles_private.pri D:\Qt\6.9.1\mingw_64\mkspecs\modules\qt_lib_quickshapes_private.pri D:\Qt\6.9.1\mingw_64\mkspecs\modules\qt_lib_quicktemplates2.pri D:\Qt\6.9.1\mingw_64\mkspecs\modules\qt_lib_quicktemplates2_private.pri D:\Qt\6.9.1\mingw_64\mkspecs\modules\qt_lib_quicktestutilsprivate_private.pri D:\Qt\6.9.1\mingw_64\mkspecs\modules\qt_lib_quicktimeline.pri D:\Qt\6.9.1\mingw_64\mkspecs\modules\qt_lib_quicktimeline_private.pri D:\Qt\6.9.1\mingw_64\mkspecs\modules\qt_lib_quicktimelineblendtrees.pri D:\Qt\6.9.1\mingw_64\mkspecs\modules\qt_lib_quicktimelineblendtrees_private.pri D:\Qt\6.9.1\mingw_64\mkspecs\modules\qt_lib_quickvectorimage.pri D:\Qt\6.9.1\mingw_64\mkspecs\modules\qt_lib_quickvectorimage_private.pri D:\Qt\6.9.1\mingw_64\mkspecs\modules\qt_lib_quickvectorimagegenerator_private.pri D:\Qt\6.9.1\mingw_64\mkspecs\modules\qt_lib_quickwidgets.pri D:\Qt\6.9.1\mingw_64\mkspecs\modules\qt_lib_quickwidgets_private.pri D:\Qt\6.9.1\mingw_64\mkspecs\modules\qt_lib_shadertools.pri D:\Qt\6.9.1\mingw_64\mkspecs\modules\qt_lib_shadertools_private.pri D:\Qt\6.9.1\mingw_64\mkspecs\modules\qt_lib_spatialaudio.pri D:\Qt\6.9.1\mingw_64\mkspecs\modules\qt_lib_spatialaudio_private.pri D:\Qt\6.9.1\mingw_64\mkspecs\modules\qt_lib_sql.pri D:\Qt\6.9.1\mingw_64\mkspecs\modules\qt_lib_sql_private.pri D:\Qt\6.9.1\mingw_64\mkspecs\modules\qt_lib_svg.pri D:\Qt\6.9.1\mingw_64\mkspecs\modules\qt_lib_svg_private.pri D:\Qt\6.9.1\mingw_64\mkspecs\modules\qt_lib_svgwidgets.pri D:\Qt\6.9.1\mingw_64\mkspecs\modules\qt_lib_svgwidgets_private.pri D:\Qt\6.9.1\mingw_64\mkspecs\modules\qt_lib_testinternals_private.pri D:\Qt\6.9.1\mingw_64\mkspecs\modules\qt_lib_testlib.pri D:\Qt\6.9.1\mingw_64\mkspecs\modules\qt_lib_testlib_private.pri D:\Qt\6.9.1\mingw_64\mkspecs\modules\qt_lib_tools_private.pri D:\Qt\6.9.1\mingw_64\mkspecs\modules\qt_lib_uiplugin.pri D:\Qt\6.9.1\mingw_64\mkspecs\modules\qt_lib_uitools.pri D:\Qt\6.9.1\mingw_64\mkspecs\modules\qt_lib_uitools_private.pri D:\Qt\6.9.1\mingw_64\mkspecs\modules\qt_lib_widgets.pri D:\Qt\6.9.1\mingw_64\mkspecs\modules\qt_lib_widgets_private.pri D:\Qt\6.9.1\mingw_64\mkspecs\modules\qt_lib_xml.pri D:\Qt\6.9.1\mingw_64\mkspecs\modules\qt_lib_xml_private.pri D:\Qt\6.9.1\mingw_64\mkspecs\modules\qt_lib_zlib_private.pri D:\Qt\6.9.1\mingw_64\mkspecs\features\qt_functions.prf D:\Qt\6.9.1\mingw_64\mkspecs\features\qt_config.prf D:\Qt\6.9.1\mingw_64\mkspecs\win32-g++\qmake.conf D:\Qt\6.9.1\mingw_64\mkspecs\features\spec_post.prf .qmake.stash D:\Qt\6.9.1\mingw_64\mkspecs\features\exclusive_builds.prf D:\Qt\6.9.1\mingw_64\mkspecs\features\toolchain.prf D:\Qt\6.9.1\mingw_64\mkspecs\features\default_pre.prf D:\Qt\6.9.1\mingw_64\mkspecs\features\win32\default_pre.prf D:\Qt\6.9.1\mingw_64\mkspecs\features\resolve_config.prf D:\Qt\6.9.1\mingw_64\mkspecs\features\exclusive_builds_post.prf D:\Qt\6.9.1\mingw_64\mkspecs\features\default_post.prf D:\Qt\6.9.1\mingw_64\mkspecs\features\build_pass.prf D:\Qt\6.9.1\mingw_64\mkspecs\features\qtquickcompiler.prf D:\Qt\6.9.1\mingw_64\mkspecs\features\precompile_header.prf D:\Qt\6.9.1\mingw_64\mkspecs\features\warn_on.prf D:\Qt\6.9.1\mingw_64\mkspecs\features\permissions.prf D:\Qt\6.9.1\mingw_64\mkspecs\features\qt.prf D:\Qt\6.9.1\mingw_64\mkspecs\features\resources_functions.prf D:\Qt\6.9.1\mingw_64\mkspecs\features\resources.prf D:\Qt\6.9.1\mingw_64\mkspecs\features\moc.prf D:\Qt\6.9.1\mingw_64\mkspecs\features\win32\opengl.prf D:\Qt\6.9.1\mingw_64\mkspecs\features\uic.prf D:\Qt\6.9.1\mingw_64\mkspecs\features\qmake_use.prf D:\Qt\6.9.1\mingw_64\mkspecs\features\file_copies.prf D:\Qt\6.9.1\mingw_64\mkspecs\features\win32\windows.prf D:\Qt\6.9.1\mingw_64\mkspecs\features\testcase_targets.prf D:\Qt\6.9.1\mingw_64\mkspecs\features\exceptions.prf D:\Qt\6.9.1\mingw_64\mkspecs\features\yacc.prf D:\Qt\6.9.1\mingw_64\mkspecs\features\lex.prf untitled2.pro resources.qrc D:\Qt\6.9.1\mingw_64\lib\Qt6Widgets.prl D:\Qt\6.9.1\mingw_64\lib\Qt6Gui.prl D:\Qt\6.9.1\mingw_64\lib\Qt6Network.prl D:\Qt\6.9.1\mingw_64\lib\Qt6Concurrent.prl D:\Qt\6.9.1\mingw_64\lib\Qt6Core.prl D:\Qt\6.9.1\mingw_64\lib\Qt6EntryPoint.prl resources.qrc D:\Qt\6.9.1\mingw_64\mkspecs\features\data\dummy.cpp mainwindow.h main.cpp mainwindow.cpp + +clean: compiler_clean + -$(DEL_FILE) debug\main.o debug\mainwindow.o debug\qrc_resources.o debug\moc_mainwindow.o + -$(DEL_FILE) debug\launcher_res.o + +distclean: clean + -$(DEL_FILE) .qmake.stash + -$(DEL_FILE) $(DESTDIR_TARGET) + -$(DEL_FILE) Makefile.Debug + +mocclean: compiler_moc_header_clean compiler_moc_objc_header_clean compiler_moc_source_clean + +mocables: compiler_moc_header_make_all compiler_moc_objc_header_make_all compiler_moc_source_make_all + +check: first + +benchmark: first + +compiler_no_pch_compiler_make_all: +compiler_no_pch_compiler_clean: +compiler_rcc_make_all: debug/qrc_resources.cpp +compiler_rcc_clean: + -$(DEL_FILE) debug\qrc_resources.cpp +debug/qrc_resources.cpp: resources.qrc \ + D:/Qt/6.9.1/mingw_64/bin/rcc.exe \ + styles.qss \ + untitled2_zh_CN.ts + D:\Qt\6.9.1\mingw_64\bin\rcc.exe -name resources --no-zstd resources.qrc -o debug\qrc_resources.cpp + +compiler_moc_predefs_make_all: debug/moc_predefs.h +compiler_moc_predefs_clean: + -$(DEL_FILE) debug\moc_predefs.h +debug/moc_predefs.h: D:/Qt/6.9.1/mingw_64/mkspecs/features/data/dummy.cpp + g++ -fno-keep-inline-dllexport -g -std=gnu++1z -Wall -Wextra -Wextra -dM -E -o debug\moc_predefs.h D:\Qt\6.9.1\mingw_64\mkspecs\features\data\dummy.cpp + +compiler_moc_header_make_all: debug/moc_mainwindow.cpp +compiler_moc_header_clean: + -$(DEL_FILE) debug\moc_mainwindow.cpp +debug/moc_mainwindow.cpp: mainwindow.h \ + D:/Qt/6.9.1/mingw_64/include/QtWidgets/QMainWindow \ + D:/Qt/6.9.1/mingw_64/include/QtWidgets/qmainwindow.h \ + D:/Qt/6.9.1/mingw_64/include/QtWidgets/qtwidgetsglobal.h \ + D:/Qt/6.9.1/mingw_64/include/QtGui/qtguiglobal.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qglobal.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qtcoreglobal.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qtversionchecks.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qtconfiginclude.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qconfig.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qtcore-config.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qtconfigmacros.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qtdeprecationdefinitions.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qcompilerdetection.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qprocessordetection.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qsystemdetection.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qtcoreexports.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qtdeprecationmarkers.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qtclasshelpermacros.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qtpreprocessorsupport.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qassert.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qtnoop.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qtypes.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qtversion.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qtypeinfo.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qcontainerfwd.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qsysinfo.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qlogging.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qflags.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qcompare_impl.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qatomic.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qbasicatomic.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qatomic_cxx11.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qgenericatomic.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qyieldcpu.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qconstructormacros.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qdarwinhelpers.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qexceptionhandling.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qforeach.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qttypetraits.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qfunctionpointer.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qglobalstatic.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qmalloc.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qminmax.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qnumeric.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qoverload.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qswap.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qtenvironmentvariables.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qtresource.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qttranslation.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qversiontagging.h \ + D:/Qt/6.9.1/mingw_64/include/QtGui/qtgui-config.h \ + D:/Qt/6.9.1/mingw_64/include/QtGui/qtguiexports.h \ + D:/Qt/6.9.1/mingw_64/include/QtWidgets/qtwidgets-config.h \ + D:/Qt/6.9.1/mingw_64/include/QtWidgets/qtwidgetsexports.h \ + D:/Qt/6.9.1/mingw_64/include/QtWidgets/qwidget.h \ + D:/Qt/6.9.1/mingw_64/include/QtGui/qwindowdefs.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qobjectdefs.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qnamespace.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qcompare.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qstdlibdetection.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qcomparehelpers.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/q20type_traits.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qtmetamacros.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qobjectdefs_impl.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qfunctionaltools_impl.h \ + D:/Qt/6.9.1/mingw_64/include/QtGui/qwindowdefs_win.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qobject.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qstring.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qchar.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qstringview.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qbytearray.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qrefcount.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qarraydata.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qpair.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qarraydatapointer.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qarraydataops.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qcontainertools_impl.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qxptype_traits.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/q20functional.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/q20memory.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/q17memory.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qbytearrayalgorithms.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qbytearrayview.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qstringfwd.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qstringliteral.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qstringalgorithms.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qlatin1stringview.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qanystringview.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qutf8stringview.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qstringtokenizer.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qstringbuilder.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qstringconverter.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qstringconverter_base.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qlist.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qhashfunctions.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qiterator.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qbytearraylist.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qstringlist.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qalgorithms.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qstringmatcher.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qcoreevent.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qbasictimer.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qabstracteventdispatcher.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qeventloop.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qdeadlinetimer.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qelapsedtimer.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qmetatype.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qdatastream.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qscopedpointer.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qiodevicebase.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qfloat16.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qmath.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qtformat_impl.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qiterable.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qmetacontainer.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qcontainerinfo.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qtaggedpointer.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qscopeguard.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qobject_impl.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qbindingstorage.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qmargins.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/q23utility.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/q20utility.h \ + D:/Qt/6.9.1/mingw_64/include/QtGui/qaction.h \ + D:/Qt/6.9.1/mingw_64/include/QtGui/qkeysequence.h \ + D:/Qt/6.9.1/mingw_64/include/QtGui/qicon.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qsize.h \ + D:/Qt/6.9.1/mingw_64/include/QtGui/qpixmap.h \ + D:/Qt/6.9.1/mingw_64/include/QtGui/qpaintdevice.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qrect.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qpoint.h \ + D:/Qt/6.9.1/mingw_64/include/QtGui/qcolor.h \ + D:/Qt/6.9.1/mingw_64/include/QtGui/qrgb.h \ + D:/Qt/6.9.1/mingw_64/include/QtGui/qrgba64.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qshareddata.h \ + D:/Qt/6.9.1/mingw_64/include/QtGui/qimage.h \ + D:/Qt/6.9.1/mingw_64/include/QtGui/qpixelformat.h \ + D:/Qt/6.9.1/mingw_64/include/QtGui/qtransform.h \ + D:/Qt/6.9.1/mingw_64/include/QtGui/qpolygon.h \ + D:/Qt/6.9.1/mingw_64/include/QtGui/qregion.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qspan.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/q20iterator.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qline.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qvariant.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qdebug.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qtextstream.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qcontiguouscache.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qsharedpointer.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qsharedpointer_impl.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qmap.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qshareddata_impl.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qset.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qhash.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qvarlengtharray.h \ + D:/Qt/6.9.1/mingw_64/include/QtGui/qpalette.h \ + D:/Qt/6.9.1/mingw_64/include/QtGui/qbrush.h \ + D:/Qt/6.9.1/mingw_64/include/QtGui/qfont.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qendian.h \ + D:/Qt/6.9.1/mingw_64/include/QtGui/qfontmetrics.h \ + D:/Qt/6.9.1/mingw_64/include/QtGui/qfontinfo.h \ + D:/Qt/6.9.1/mingw_64/include/QtGui/qfontvariableaxis.h \ + D:/Qt/6.9.1/mingw_64/include/QtWidgets/qsizepolicy.h \ + D:/Qt/6.9.1/mingw_64/include/QtGui/qcursor.h \ + D:/Qt/6.9.1/mingw_64/include/QtGui/qbitmap.h \ + D:/Qt/6.9.1/mingw_64/include/QtGui/qevent.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qiodevice.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qurl.h \ + D:/Qt/6.9.1/mingw_64/include/QtGui/qeventpoint.h \ + D:/Qt/6.9.1/mingw_64/include/QtGui/qvector2d.h \ + D:/Qt/6.9.1/mingw_64/include/QtGui/qvectornd.h \ + D:/Qt/6.9.1/mingw_64/include/QtGui/qpointingdevice.h \ + D:/Qt/6.9.1/mingw_64/include/QtGui/qinputdevice.h \ + D:/Qt/6.9.1/mingw_64/include/QtGui/qscreen.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/QList \ + D:/Qt/6.9.1/mingw_64/include/QtCore/QObject \ + D:/Qt/6.9.1/mingw_64/include/QtCore/QRect \ + D:/Qt/6.9.1/mingw_64/include/QtCore/QSize \ + D:/Qt/6.9.1/mingw_64/include/QtCore/QSizeF \ + D:/Qt/6.9.1/mingw_64/include/QtGui/QTransform \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qnativeinterface.h \ + D:/Qt/6.9.1/mingw_64/include/QtGui/qscreen_platform.h \ + D:/Qt/6.9.1/mingw_64/include/QtGui/qguiapplication.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qcoreapplication.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qcoreapplication_platform.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qfuture.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qfutureinterface.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qmutex.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qtsan_impl.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qresultstore.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qfuture_impl.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qthreadpool.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qthread.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qrunnable.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qexception.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qpromise.h \ + D:/Qt/6.9.1/mingw_64/include/QtGui/qinputmethod.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qlocale.h \ + D:/Qt/6.9.1/mingw_64/include/QtGui/qguiapplication_platform.h \ + D:/Qt/6.9.1/mingw_64/include/QtWidgets/qtabwidget.h \ + D:/Qt/6.9.1/mingw_64/include/QtNetwork/QNetworkAccessManager \ + D:/Qt/6.9.1/mingw_64/include/QtNetwork/qnetworkaccessmanager.h \ + D:/Qt/6.9.1/mingw_64/include/QtNetwork/qtnetworkglobal.h \ + D:/Qt/6.9.1/mingw_64/include/QtNetwork/qtnetwork-config.h \ + D:/Qt/6.9.1/mingw_64/include/QtNetwork/qtnetworkexports.h \ + D:/Qt/6.9.1/mingw_64/include/QtNetwork/qnetworkrequest.h \ + D:/Qt/6.9.1/mingw_64/include/QtNetwork/qhttpheaders.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/QSharedDataPointer \ + D:/Qt/6.9.1/mingw_64/include/QtCore/QString \ + D:/Qt/6.9.1/mingw_64/include/QtCore/QUrl \ + D:/Qt/6.9.1/mingw_64/include/QtCore/QVariant \ + D:/Qt/6.9.1/mingw_64/include/QtCore/q26numeric.h \ + D:/Qt/6.9.1/mingw_64/include/QtNetwork/QSslConfiguration \ + D:/Qt/6.9.1/mingw_64/include/QtNetwork/qsslconfiguration.h \ + D:/Qt/6.9.1/mingw_64/include/QtNetwork/qsslsocket.h \ + D:/Qt/6.9.1/mingw_64/include/QtNetwork/qtcpsocket.h \ + D:/Qt/6.9.1/mingw_64/include/QtNetwork/qabstractsocket.h \ + D:/Qt/6.9.1/mingw_64/include/QtNetwork/qhostaddress.h \ + D:/Qt/6.9.1/mingw_64/include/QtNetwork/qsslerror.h \ + D:/Qt/6.9.1/mingw_64/include/QtNetwork/qsslcertificate.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qcryptographichash.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qdatetime.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qcalendar.h \ + D:/Qt/6.9.1/mingw_64/include/QtNetwork/qssl.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/QFlags \ + D:/Qt/6.9.1/mingw_64/include/QtNetwork/QSslPreSharedKeyAuthenticator \ + D:/Qt/6.9.1/mingw_64/include/QtNetwork/qsslpresharedkeyauthenticator.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/QMetaType \ + D:/Qt/6.9.1/mingw_64/include/QtCore/QJsonObject \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qjsonobject.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qjsonvalue.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qcborvalue.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qcborcommon.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qregularexpression.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/quuid.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qjsondocument.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qjsonparseerror.h \ + D:/Qt/6.9.1/mingw_64/include/QtWidgets/QLabel \ + D:/Qt/6.9.1/mingw_64/include/QtWidgets/qlabel.h \ + D:/Qt/6.9.1/mingw_64/include/QtWidgets/qframe.h \ + D:/Qt/6.9.1/mingw_64/include/QtGui/qpicture.h \ + D:/Qt/6.9.1/mingw_64/include/QtGui/qtextdocument.h \ + D:/Qt/6.9.1/mingw_64/include/QtWidgets/QPushButton \ + D:/Qt/6.9.1/mingw_64/include/QtWidgets/qpushbutton.h \ + D:/Qt/6.9.1/mingw_64/include/QtWidgets/qabstractbutton.h \ + D:/Qt/6.9.1/mingw_64/include/QtWidgets/QProgressBar \ + D:/Qt/6.9.1/mingw_64/include/QtWidgets/qprogressbar.h \ + D:/Qt/6.9.1/mingw_64/include/QtWidgets/QTextEdit \ + D:/Qt/6.9.1/mingw_64/include/QtWidgets/qtextedit.h \ + D:/Qt/6.9.1/mingw_64/include/QtWidgets/qabstractscrollarea.h \ + D:/Qt/6.9.1/mingw_64/include/QtGui/qtextoption.h \ + D:/Qt/6.9.1/mingw_64/include/QtGui/qtextcursor.h \ + D:/Qt/6.9.1/mingw_64/include/QtGui/qtextformat.h \ + D:/Qt/6.9.1/mingw_64/include/QtGui/qpen.h \ + D:/Qt/6.9.1/mingw_64/include/QtWidgets/QGroupBox \ + D:/Qt/6.9.1/mingw_64/include/QtWidgets/qgroupbox.h \ + D:/Qt/6.9.1/mingw_64/include/QtWidgets/QFileDialog \ + D:/Qt/6.9.1/mingw_64/include/QtWidgets/qfiledialog.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qdir.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qdirlisting.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qfiledevice.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qfile.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qfileinfo.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qtimezone.h \ + D:/Qt/6.9.1/mingw_64/include/QtWidgets/qdialog.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/QSettings \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qsettings.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/QDir \ + D:/Qt/6.9.1/mingw_64/include/QtWidgets/QLineEdit \ + D:/Qt/6.9.1/mingw_64/include/QtWidgets/qlineedit.h \ + D:/Qt/6.9.1/mingw_64/include/QtWidgets/QDialog \ + D:/Qt/6.9.1/mingw_64/include/QtWidgets/QCheckBox \ + D:/Qt/6.9.1/mingw_64/include/QtWidgets/qcheckbox.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/QTimer \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qtimer.h \ + D:/Qt/6.9.1/mingw_64/include/QtWidgets/QMessageBox \ + D:/Qt/6.9.1/mingw_64/include/QtWidgets/qmessagebox.h \ + D:/Qt/6.9.1/mingw_64/include/QtWidgets/qdialogbuttonbox.h \ + D:/Qt/6.9.1/mingw_64/include/QtWidgets/QApplication \ + D:/Qt/6.9.1/mingw_64/include/QtWidgets/qapplication.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/QProcess \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qprocess.h \ + debug/moc_predefs.h \ + D:/Qt/6.9.1/mingw_64/bin/moc.exe + D:\Qt\6.9.1\mingw_64\bin\moc.exe $(DEFINES) --include E:/C++/untitled2/debug/moc_predefs.h -ID:/Qt/6.9.1/mingw_64/mkspecs/win32-g++ -IE:/C++/untitled2 -ID:/Qt/6.9.1/mingw_64/include -ID:/Qt/6.9.1/mingw_64/include/QtWidgets -ID:/Qt/6.9.1/mingw_64/include/QtGui -ID:/Qt/6.9.1/mingw_64/include/QtNetwork -ID:/Qt/6.9.1/mingw_64/include/QtConcurrent -ID:/Qt/6.9.1/mingw_64/include/QtCore -ID:/Qt/Tools/mingw1310_64/lib/gcc/x86_64-w64-mingw32/13.1.0/include/c++ -ID:/Qt/Tools/mingw1310_64/lib/gcc/x86_64-w64-mingw32/13.1.0/include/c++/x86_64-w64-mingw32 -ID:/Qt/Tools/mingw1310_64/lib/gcc/x86_64-w64-mingw32/13.1.0/include/c++/backward -ID:/Qt/Tools/mingw1310_64/lib/gcc/x86_64-w64-mingw32/13.1.0/include -ID:/Qt/Tools/mingw1310_64/lib/gcc/x86_64-w64-mingw32/13.1.0/include-fixed -ID:/Qt/Tools/mingw1310_64/x86_64-w64-mingw32/include mainwindow.h -o debug\moc_mainwindow.cpp + +compiler_moc_objc_header_make_all: +compiler_moc_objc_header_clean: +compiler_moc_source_make_all: +compiler_moc_source_clean: +compiler_uic_make_all: +compiler_uic_clean: +compiler_yacc_decl_make_all: +compiler_yacc_decl_clean: +compiler_yacc_impl_make_all: +compiler_yacc_impl_clean: +compiler_lex_make_all: +compiler_lex_clean: +compiler_clean: compiler_rcc_clean compiler_moc_predefs_clean compiler_moc_header_clean + + + +####### Compile + +debug/main.o: main.cpp mainwindow.h \ + D:/Qt/6.9.1/mingw_64/include/QtWidgets/QMainWindow \ + D:/Qt/6.9.1/mingw_64/include/QtWidgets/qmainwindow.h \ + D:/Qt/6.9.1/mingw_64/include/QtWidgets/qtwidgetsglobal.h \ + D:/Qt/6.9.1/mingw_64/include/QtGui/qtguiglobal.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qglobal.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qtcoreglobal.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qtversionchecks.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qtconfiginclude.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qconfig.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qtcore-config.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qtconfigmacros.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qtdeprecationdefinitions.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qcompilerdetection.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qprocessordetection.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qsystemdetection.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qtcoreexports.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qtdeprecationmarkers.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qtclasshelpermacros.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qtpreprocessorsupport.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qassert.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qtnoop.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qtypes.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qtversion.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qtypeinfo.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qcontainerfwd.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qsysinfo.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qlogging.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qflags.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qcompare_impl.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qatomic.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qbasicatomic.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qatomic_cxx11.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qgenericatomic.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qyieldcpu.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qconstructormacros.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qdarwinhelpers.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qexceptionhandling.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qforeach.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qttypetraits.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qfunctionpointer.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qglobalstatic.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qmalloc.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qminmax.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qnumeric.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qoverload.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qswap.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qtenvironmentvariables.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qtresource.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qttranslation.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qversiontagging.h \ + D:/Qt/6.9.1/mingw_64/include/QtGui/qtgui-config.h \ + D:/Qt/6.9.1/mingw_64/include/QtGui/qtguiexports.h \ + D:/Qt/6.9.1/mingw_64/include/QtWidgets/qtwidgets-config.h \ + D:/Qt/6.9.1/mingw_64/include/QtWidgets/qtwidgetsexports.h \ + D:/Qt/6.9.1/mingw_64/include/QtWidgets/qwidget.h \ + D:/Qt/6.9.1/mingw_64/include/QtGui/qwindowdefs.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qobjectdefs.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qnamespace.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qcompare.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qstdlibdetection.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qcomparehelpers.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/q20type_traits.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qtmetamacros.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qobjectdefs_impl.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qfunctionaltools_impl.h \ + D:/Qt/6.9.1/mingw_64/include/QtGui/qwindowdefs_win.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qobject.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qstring.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qchar.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qstringview.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qbytearray.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qrefcount.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qarraydata.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qpair.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qarraydatapointer.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qarraydataops.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qcontainertools_impl.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qxptype_traits.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/q20functional.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/q20memory.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/q17memory.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qbytearrayalgorithms.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qbytearrayview.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qstringfwd.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qstringliteral.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qstringalgorithms.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qlatin1stringview.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qanystringview.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qutf8stringview.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qstringtokenizer.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qstringbuilder.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qstringconverter.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qstringconverter_base.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qlist.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qhashfunctions.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qiterator.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qbytearraylist.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qstringlist.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qalgorithms.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qstringmatcher.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qcoreevent.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qbasictimer.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qabstracteventdispatcher.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qeventloop.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qdeadlinetimer.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qelapsedtimer.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qmetatype.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qdatastream.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qscopedpointer.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qiodevicebase.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qfloat16.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qmath.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qtformat_impl.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qiterable.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qmetacontainer.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qcontainerinfo.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qtaggedpointer.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qscopeguard.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qobject_impl.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qbindingstorage.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qmargins.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/q23utility.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/q20utility.h \ + D:/Qt/6.9.1/mingw_64/include/QtGui/qaction.h \ + D:/Qt/6.9.1/mingw_64/include/QtGui/qkeysequence.h \ + D:/Qt/6.9.1/mingw_64/include/QtGui/qicon.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qsize.h \ + D:/Qt/6.9.1/mingw_64/include/QtGui/qpixmap.h \ + D:/Qt/6.9.1/mingw_64/include/QtGui/qpaintdevice.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qrect.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qpoint.h \ + D:/Qt/6.9.1/mingw_64/include/QtGui/qcolor.h \ + D:/Qt/6.9.1/mingw_64/include/QtGui/qrgb.h \ + D:/Qt/6.9.1/mingw_64/include/QtGui/qrgba64.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qshareddata.h \ + D:/Qt/6.9.1/mingw_64/include/QtGui/qimage.h \ + D:/Qt/6.9.1/mingw_64/include/QtGui/qpixelformat.h \ + D:/Qt/6.9.1/mingw_64/include/QtGui/qtransform.h \ + D:/Qt/6.9.1/mingw_64/include/QtGui/qpolygon.h \ + D:/Qt/6.9.1/mingw_64/include/QtGui/qregion.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qspan.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/q20iterator.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qline.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qvariant.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qdebug.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qtextstream.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qcontiguouscache.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qsharedpointer.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qsharedpointer_impl.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qmap.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qshareddata_impl.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qset.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qhash.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qvarlengtharray.h \ + D:/Qt/6.9.1/mingw_64/include/QtGui/qpalette.h \ + D:/Qt/6.9.1/mingw_64/include/QtGui/qbrush.h \ + D:/Qt/6.9.1/mingw_64/include/QtGui/qfont.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qendian.h \ + D:/Qt/6.9.1/mingw_64/include/QtGui/qfontmetrics.h \ + D:/Qt/6.9.1/mingw_64/include/QtGui/qfontinfo.h \ + D:/Qt/6.9.1/mingw_64/include/QtGui/qfontvariableaxis.h \ + D:/Qt/6.9.1/mingw_64/include/QtWidgets/qsizepolicy.h \ + D:/Qt/6.9.1/mingw_64/include/QtGui/qcursor.h \ + D:/Qt/6.9.1/mingw_64/include/QtGui/qbitmap.h \ + D:/Qt/6.9.1/mingw_64/include/QtGui/qevent.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qiodevice.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qurl.h \ + D:/Qt/6.9.1/mingw_64/include/QtGui/qeventpoint.h \ + D:/Qt/6.9.1/mingw_64/include/QtGui/qvector2d.h \ + D:/Qt/6.9.1/mingw_64/include/QtGui/qvectornd.h \ + D:/Qt/6.9.1/mingw_64/include/QtGui/qpointingdevice.h \ + D:/Qt/6.9.1/mingw_64/include/QtGui/qinputdevice.h \ + D:/Qt/6.9.1/mingw_64/include/QtGui/qscreen.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/QList \ + D:/Qt/6.9.1/mingw_64/include/QtCore/QObject \ + D:/Qt/6.9.1/mingw_64/include/QtCore/QRect \ + D:/Qt/6.9.1/mingw_64/include/QtCore/QSize \ + D:/Qt/6.9.1/mingw_64/include/QtCore/QSizeF \ + D:/Qt/6.9.1/mingw_64/include/QtGui/QTransform \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qnativeinterface.h \ + D:/Qt/6.9.1/mingw_64/include/QtGui/qscreen_platform.h \ + D:/Qt/6.9.1/mingw_64/include/QtGui/qguiapplication.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qcoreapplication.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qcoreapplication_platform.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qfuture.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qfutureinterface.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qmutex.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qtsan_impl.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qresultstore.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qfuture_impl.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qthreadpool.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qthread.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qrunnable.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qexception.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qpromise.h \ + D:/Qt/6.9.1/mingw_64/include/QtGui/qinputmethod.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qlocale.h \ + D:/Qt/6.9.1/mingw_64/include/QtGui/qguiapplication_platform.h \ + D:/Qt/6.9.1/mingw_64/include/QtWidgets/qtabwidget.h \ + D:/Qt/6.9.1/mingw_64/include/QtNetwork/QNetworkAccessManager \ + D:/Qt/6.9.1/mingw_64/include/QtNetwork/qnetworkaccessmanager.h \ + D:/Qt/6.9.1/mingw_64/include/QtNetwork/qtnetworkglobal.h \ + D:/Qt/6.9.1/mingw_64/include/QtNetwork/qtnetwork-config.h \ + D:/Qt/6.9.1/mingw_64/include/QtNetwork/qtnetworkexports.h \ + D:/Qt/6.9.1/mingw_64/include/QtNetwork/qnetworkrequest.h \ + D:/Qt/6.9.1/mingw_64/include/QtNetwork/qhttpheaders.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/QSharedDataPointer \ + D:/Qt/6.9.1/mingw_64/include/QtCore/QString \ + D:/Qt/6.9.1/mingw_64/include/QtCore/QUrl \ + D:/Qt/6.9.1/mingw_64/include/QtCore/QVariant \ + D:/Qt/6.9.1/mingw_64/include/QtCore/q26numeric.h \ + D:/Qt/6.9.1/mingw_64/include/QtNetwork/QSslConfiguration \ + D:/Qt/6.9.1/mingw_64/include/QtNetwork/qsslconfiguration.h \ + D:/Qt/6.9.1/mingw_64/include/QtNetwork/qsslsocket.h \ + D:/Qt/6.9.1/mingw_64/include/QtNetwork/qtcpsocket.h \ + D:/Qt/6.9.1/mingw_64/include/QtNetwork/qabstractsocket.h \ + D:/Qt/6.9.1/mingw_64/include/QtNetwork/qhostaddress.h \ + D:/Qt/6.9.1/mingw_64/include/QtNetwork/qsslerror.h \ + D:/Qt/6.9.1/mingw_64/include/QtNetwork/qsslcertificate.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qcryptographichash.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qdatetime.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qcalendar.h \ + D:/Qt/6.9.1/mingw_64/include/QtNetwork/qssl.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/QFlags \ + D:/Qt/6.9.1/mingw_64/include/QtNetwork/QSslPreSharedKeyAuthenticator \ + D:/Qt/6.9.1/mingw_64/include/QtNetwork/qsslpresharedkeyauthenticator.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/QMetaType \ + D:/Qt/6.9.1/mingw_64/include/QtCore/QJsonObject \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qjsonobject.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qjsonvalue.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qcborvalue.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qcborcommon.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qregularexpression.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/quuid.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qjsondocument.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qjsonparseerror.h \ + D:/Qt/6.9.1/mingw_64/include/QtWidgets/QLabel \ + D:/Qt/6.9.1/mingw_64/include/QtWidgets/qlabel.h \ + D:/Qt/6.9.1/mingw_64/include/QtWidgets/qframe.h \ + D:/Qt/6.9.1/mingw_64/include/QtGui/qpicture.h \ + D:/Qt/6.9.1/mingw_64/include/QtGui/qtextdocument.h \ + D:/Qt/6.9.1/mingw_64/include/QtWidgets/QPushButton \ + D:/Qt/6.9.1/mingw_64/include/QtWidgets/qpushbutton.h \ + D:/Qt/6.9.1/mingw_64/include/QtWidgets/qabstractbutton.h \ + D:/Qt/6.9.1/mingw_64/include/QtWidgets/QProgressBar \ + D:/Qt/6.9.1/mingw_64/include/QtWidgets/qprogressbar.h \ + D:/Qt/6.9.1/mingw_64/include/QtWidgets/QTextEdit \ + D:/Qt/6.9.1/mingw_64/include/QtWidgets/qtextedit.h \ + D:/Qt/6.9.1/mingw_64/include/QtWidgets/qabstractscrollarea.h \ + D:/Qt/6.9.1/mingw_64/include/QtGui/qtextoption.h \ + D:/Qt/6.9.1/mingw_64/include/QtGui/qtextcursor.h \ + D:/Qt/6.9.1/mingw_64/include/QtGui/qtextformat.h \ + D:/Qt/6.9.1/mingw_64/include/QtGui/qpen.h \ + D:/Qt/6.9.1/mingw_64/include/QtWidgets/QGroupBox \ + D:/Qt/6.9.1/mingw_64/include/QtWidgets/qgroupbox.h \ + D:/Qt/6.9.1/mingw_64/include/QtWidgets/QFileDialog \ + D:/Qt/6.9.1/mingw_64/include/QtWidgets/qfiledialog.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qdir.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qdirlisting.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qfiledevice.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qfile.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qfileinfo.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qtimezone.h \ + D:/Qt/6.9.1/mingw_64/include/QtWidgets/qdialog.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/QSettings \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qsettings.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/QDir \ + D:/Qt/6.9.1/mingw_64/include/QtWidgets/QLineEdit \ + D:/Qt/6.9.1/mingw_64/include/QtWidgets/qlineedit.h \ + D:/Qt/6.9.1/mingw_64/include/QtWidgets/QDialog \ + D:/Qt/6.9.1/mingw_64/include/QtWidgets/QCheckBox \ + D:/Qt/6.9.1/mingw_64/include/QtWidgets/qcheckbox.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/QTimer \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qtimer.h \ + D:/Qt/6.9.1/mingw_64/include/QtWidgets/QMessageBox \ + D:/Qt/6.9.1/mingw_64/include/QtWidgets/qmessagebox.h \ + D:/Qt/6.9.1/mingw_64/include/QtWidgets/qdialogbuttonbox.h \ + D:/Qt/6.9.1/mingw_64/include/QtWidgets/QApplication \ + D:/Qt/6.9.1/mingw_64/include/QtWidgets/qapplication.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/QProcess \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qprocess.h \ + D:/Qt/6.9.1/mingw_64/include/QtWidgets/QStyleFactory \ + D:/Qt/6.9.1/mingw_64/include/QtWidgets/qstylefactory.h \ + D:/Qt/6.9.1/mingw_64/include/QtGui/QPalette + $(CXX) -c $(CXXFLAGS) $(INCPATH) -o debug\main.o main.cpp + +debug/mainwindow.o: mainwindow.cpp mainwindow.h \ + D:/Qt/6.9.1/mingw_64/include/QtWidgets/QMainWindow \ + D:/Qt/6.9.1/mingw_64/include/QtWidgets/qmainwindow.h \ + D:/Qt/6.9.1/mingw_64/include/QtWidgets/qtwidgetsglobal.h \ + D:/Qt/6.9.1/mingw_64/include/QtGui/qtguiglobal.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qglobal.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qtcoreglobal.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qtversionchecks.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qtconfiginclude.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qconfig.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qtcore-config.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qtconfigmacros.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qtdeprecationdefinitions.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qcompilerdetection.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qprocessordetection.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qsystemdetection.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qtcoreexports.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qtdeprecationmarkers.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qtclasshelpermacros.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qtpreprocessorsupport.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qassert.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qtnoop.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qtypes.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qtversion.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qtypeinfo.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qcontainerfwd.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qsysinfo.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qlogging.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qflags.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qcompare_impl.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qatomic.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qbasicatomic.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qatomic_cxx11.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qgenericatomic.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qyieldcpu.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qconstructormacros.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qdarwinhelpers.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qexceptionhandling.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qforeach.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qttypetraits.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qfunctionpointer.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qglobalstatic.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qmalloc.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qminmax.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qnumeric.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qoverload.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qswap.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qtenvironmentvariables.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qtresource.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qttranslation.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qversiontagging.h \ + D:/Qt/6.9.1/mingw_64/include/QtGui/qtgui-config.h \ + D:/Qt/6.9.1/mingw_64/include/QtGui/qtguiexports.h \ + D:/Qt/6.9.1/mingw_64/include/QtWidgets/qtwidgets-config.h \ + D:/Qt/6.9.1/mingw_64/include/QtWidgets/qtwidgetsexports.h \ + D:/Qt/6.9.1/mingw_64/include/QtWidgets/qwidget.h \ + D:/Qt/6.9.1/mingw_64/include/QtGui/qwindowdefs.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qobjectdefs.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qnamespace.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qcompare.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qstdlibdetection.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qcomparehelpers.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/q20type_traits.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qtmetamacros.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qobjectdefs_impl.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qfunctionaltools_impl.h \ + D:/Qt/6.9.1/mingw_64/include/QtGui/qwindowdefs_win.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qobject.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qstring.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qchar.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qstringview.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qbytearray.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qrefcount.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qarraydata.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qpair.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qarraydatapointer.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qarraydataops.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qcontainertools_impl.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qxptype_traits.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/q20functional.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/q20memory.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/q17memory.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qbytearrayalgorithms.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qbytearrayview.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qstringfwd.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qstringliteral.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qstringalgorithms.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qlatin1stringview.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qanystringview.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qutf8stringview.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qstringtokenizer.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qstringbuilder.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qstringconverter.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qstringconverter_base.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qlist.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qhashfunctions.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qiterator.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qbytearraylist.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qstringlist.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qalgorithms.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qstringmatcher.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qcoreevent.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qbasictimer.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qabstracteventdispatcher.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qeventloop.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qdeadlinetimer.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qelapsedtimer.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qmetatype.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qdatastream.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qscopedpointer.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qiodevicebase.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qfloat16.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qmath.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qtformat_impl.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qiterable.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qmetacontainer.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qcontainerinfo.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qtaggedpointer.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qscopeguard.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qobject_impl.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qbindingstorage.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qmargins.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/q23utility.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/q20utility.h \ + D:/Qt/6.9.1/mingw_64/include/QtGui/qaction.h \ + D:/Qt/6.9.1/mingw_64/include/QtGui/qkeysequence.h \ + D:/Qt/6.9.1/mingw_64/include/QtGui/qicon.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qsize.h \ + D:/Qt/6.9.1/mingw_64/include/QtGui/qpixmap.h \ + D:/Qt/6.9.1/mingw_64/include/QtGui/qpaintdevice.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qrect.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qpoint.h \ + D:/Qt/6.9.1/mingw_64/include/QtGui/qcolor.h \ + D:/Qt/6.9.1/mingw_64/include/QtGui/qrgb.h \ + D:/Qt/6.9.1/mingw_64/include/QtGui/qrgba64.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qshareddata.h \ + D:/Qt/6.9.1/mingw_64/include/QtGui/qimage.h \ + D:/Qt/6.9.1/mingw_64/include/QtGui/qpixelformat.h \ + D:/Qt/6.9.1/mingw_64/include/QtGui/qtransform.h \ + D:/Qt/6.9.1/mingw_64/include/QtGui/qpolygon.h \ + D:/Qt/6.9.1/mingw_64/include/QtGui/qregion.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qspan.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/q20iterator.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qline.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qvariant.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qdebug.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qtextstream.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qcontiguouscache.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qsharedpointer.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qsharedpointer_impl.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qmap.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qshareddata_impl.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qset.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qhash.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qvarlengtharray.h \ + D:/Qt/6.9.1/mingw_64/include/QtGui/qpalette.h \ + D:/Qt/6.9.1/mingw_64/include/QtGui/qbrush.h \ + D:/Qt/6.9.1/mingw_64/include/QtGui/qfont.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qendian.h \ + D:/Qt/6.9.1/mingw_64/include/QtGui/qfontmetrics.h \ + D:/Qt/6.9.1/mingw_64/include/QtGui/qfontinfo.h \ + D:/Qt/6.9.1/mingw_64/include/QtGui/qfontvariableaxis.h \ + D:/Qt/6.9.1/mingw_64/include/QtWidgets/qsizepolicy.h \ + D:/Qt/6.9.1/mingw_64/include/QtGui/qcursor.h \ + D:/Qt/6.9.1/mingw_64/include/QtGui/qbitmap.h \ + D:/Qt/6.9.1/mingw_64/include/QtGui/qevent.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qiodevice.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qurl.h \ + D:/Qt/6.9.1/mingw_64/include/QtGui/qeventpoint.h \ + D:/Qt/6.9.1/mingw_64/include/QtGui/qvector2d.h \ + D:/Qt/6.9.1/mingw_64/include/QtGui/qvectornd.h \ + D:/Qt/6.9.1/mingw_64/include/QtGui/qpointingdevice.h \ + D:/Qt/6.9.1/mingw_64/include/QtGui/qinputdevice.h \ + D:/Qt/6.9.1/mingw_64/include/QtGui/qscreen.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/QList \ + D:/Qt/6.9.1/mingw_64/include/QtCore/QObject \ + D:/Qt/6.9.1/mingw_64/include/QtCore/QRect \ + D:/Qt/6.9.1/mingw_64/include/QtCore/QSize \ + D:/Qt/6.9.1/mingw_64/include/QtCore/QSizeF \ + D:/Qt/6.9.1/mingw_64/include/QtGui/QTransform \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qnativeinterface.h \ + D:/Qt/6.9.1/mingw_64/include/QtGui/qscreen_platform.h \ + D:/Qt/6.9.1/mingw_64/include/QtGui/qguiapplication.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qcoreapplication.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qcoreapplication_platform.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qfuture.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qfutureinterface.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qmutex.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qtsan_impl.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qresultstore.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qfuture_impl.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qthreadpool.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qthread.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qrunnable.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qexception.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qpromise.h \ + D:/Qt/6.9.1/mingw_64/include/QtGui/qinputmethod.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qlocale.h \ + D:/Qt/6.9.1/mingw_64/include/QtGui/qguiapplication_platform.h \ + D:/Qt/6.9.1/mingw_64/include/QtWidgets/qtabwidget.h \ + D:/Qt/6.9.1/mingw_64/include/QtNetwork/QNetworkAccessManager \ + D:/Qt/6.9.1/mingw_64/include/QtNetwork/qnetworkaccessmanager.h \ + D:/Qt/6.9.1/mingw_64/include/QtNetwork/qtnetworkglobal.h \ + D:/Qt/6.9.1/mingw_64/include/QtNetwork/qtnetwork-config.h \ + D:/Qt/6.9.1/mingw_64/include/QtNetwork/qtnetworkexports.h \ + D:/Qt/6.9.1/mingw_64/include/QtNetwork/qnetworkrequest.h \ + D:/Qt/6.9.1/mingw_64/include/QtNetwork/qhttpheaders.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/QSharedDataPointer \ + D:/Qt/6.9.1/mingw_64/include/QtCore/QString \ + D:/Qt/6.9.1/mingw_64/include/QtCore/QUrl \ + D:/Qt/6.9.1/mingw_64/include/QtCore/QVariant \ + D:/Qt/6.9.1/mingw_64/include/QtCore/q26numeric.h \ + D:/Qt/6.9.1/mingw_64/include/QtNetwork/QSslConfiguration \ + D:/Qt/6.9.1/mingw_64/include/QtNetwork/qsslconfiguration.h \ + D:/Qt/6.9.1/mingw_64/include/QtNetwork/qsslsocket.h \ + D:/Qt/6.9.1/mingw_64/include/QtNetwork/qtcpsocket.h \ + D:/Qt/6.9.1/mingw_64/include/QtNetwork/qabstractsocket.h \ + D:/Qt/6.9.1/mingw_64/include/QtNetwork/qhostaddress.h \ + D:/Qt/6.9.1/mingw_64/include/QtNetwork/qsslerror.h \ + D:/Qt/6.9.1/mingw_64/include/QtNetwork/qsslcertificate.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qcryptographichash.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qdatetime.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qcalendar.h \ + D:/Qt/6.9.1/mingw_64/include/QtNetwork/qssl.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/QFlags \ + D:/Qt/6.9.1/mingw_64/include/QtNetwork/QSslPreSharedKeyAuthenticator \ + D:/Qt/6.9.1/mingw_64/include/QtNetwork/qsslpresharedkeyauthenticator.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/QMetaType \ + D:/Qt/6.9.1/mingw_64/include/QtCore/QJsonObject \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qjsonobject.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qjsonvalue.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qcborvalue.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qcborcommon.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qregularexpression.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/quuid.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qjsondocument.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qjsonparseerror.h \ + D:/Qt/6.9.1/mingw_64/include/QtWidgets/QLabel \ + D:/Qt/6.9.1/mingw_64/include/QtWidgets/qlabel.h \ + D:/Qt/6.9.1/mingw_64/include/QtWidgets/qframe.h \ + D:/Qt/6.9.1/mingw_64/include/QtGui/qpicture.h \ + D:/Qt/6.9.1/mingw_64/include/QtGui/qtextdocument.h \ + D:/Qt/6.9.1/mingw_64/include/QtWidgets/QPushButton \ + D:/Qt/6.9.1/mingw_64/include/QtWidgets/qpushbutton.h \ + D:/Qt/6.9.1/mingw_64/include/QtWidgets/qabstractbutton.h \ + D:/Qt/6.9.1/mingw_64/include/QtWidgets/QProgressBar \ + D:/Qt/6.9.1/mingw_64/include/QtWidgets/qprogressbar.h \ + D:/Qt/6.9.1/mingw_64/include/QtWidgets/QTextEdit \ + D:/Qt/6.9.1/mingw_64/include/QtWidgets/qtextedit.h \ + D:/Qt/6.9.1/mingw_64/include/QtWidgets/qabstractscrollarea.h \ + D:/Qt/6.9.1/mingw_64/include/QtGui/qtextoption.h \ + D:/Qt/6.9.1/mingw_64/include/QtGui/qtextcursor.h \ + D:/Qt/6.9.1/mingw_64/include/QtGui/qtextformat.h \ + D:/Qt/6.9.1/mingw_64/include/QtGui/qpen.h \ + D:/Qt/6.9.1/mingw_64/include/QtWidgets/QGroupBox \ + D:/Qt/6.9.1/mingw_64/include/QtWidgets/qgroupbox.h \ + D:/Qt/6.9.1/mingw_64/include/QtWidgets/QFileDialog \ + D:/Qt/6.9.1/mingw_64/include/QtWidgets/qfiledialog.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qdir.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qdirlisting.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qfiledevice.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qfile.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qfileinfo.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qtimezone.h \ + D:/Qt/6.9.1/mingw_64/include/QtWidgets/qdialog.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/QSettings \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qsettings.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/QDir \ + D:/Qt/6.9.1/mingw_64/include/QtWidgets/QLineEdit \ + D:/Qt/6.9.1/mingw_64/include/QtWidgets/qlineedit.h \ + D:/Qt/6.9.1/mingw_64/include/QtWidgets/QDialog \ + D:/Qt/6.9.1/mingw_64/include/QtWidgets/QCheckBox \ + D:/Qt/6.9.1/mingw_64/include/QtWidgets/qcheckbox.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/QTimer \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qtimer.h \ + D:/Qt/6.9.1/mingw_64/include/QtWidgets/QMessageBox \ + D:/Qt/6.9.1/mingw_64/include/QtWidgets/qmessagebox.h \ + D:/Qt/6.9.1/mingw_64/include/QtWidgets/qdialogbuttonbox.h \ + D:/Qt/6.9.1/mingw_64/include/QtWidgets/QApplication \ + D:/Qt/6.9.1/mingw_64/include/QtWidgets/qapplication.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/QProcess \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qprocess.h \ + D:/Qt/6.9.1/mingw_64/include/QtWidgets/QVBoxLayout \ + D:/Qt/6.9.1/mingw_64/include/QtWidgets/qboxlayout.h \ + D:/Qt/6.9.1/mingw_64/include/QtWidgets/qlayout.h \ + D:/Qt/6.9.1/mingw_64/include/QtWidgets/qlayoutitem.h \ + D:/Qt/6.9.1/mingw_64/include/QtWidgets/qgridlayout.h \ + D:/Qt/6.9.1/mingw_64/include/QtWidgets/QHBoxLayout \ + D:/Qt/6.9.1/mingw_64/include/QtNetwork/QNetworkReply \ + D:/Qt/6.9.1/mingw_64/include/QtNetwork/qnetworkreply.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/QIODevice \ + D:/Qt/6.9.1/mingw_64/include/QtNetwork/QNetworkRequest \ + D:/Qt/6.9.1/mingw_64/include/QtCore/QJsonDocument \ + D:/Qt/6.9.1/mingw_64/include/QtCore/QJsonArray \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qjsonarray.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/QFile \ + D:/Qt/6.9.1/mingw_64/include/QtGui/QDesktopServices \ + D:/Qt/6.9.1/mingw_64/include/QtGui/qdesktopservices.h \ + D:/Qt/6.9.1/mingw_64/include/QtWidgets/QSystemTrayIcon \ + D:/Qt/6.9.1/mingw_64/include/QtWidgets/qsystemtrayicon.h \ + D:/Qt/6.9.1/mingw_64/include/QtWidgets/QMenu \ + D:/Qt/6.9.1/mingw_64/include/QtWidgets/qmenu.h \ + D:/Qt/6.9.1/mingw_64/include/QtGui/QCloseEvent \ + D:/Qt/6.9.1/mingw_64/include/QtCore/QThread \ + D:/Qt/6.9.1/mingw_64/include/QtNetwork/QSslSocket \ + D:/Qt/6.9.1/mingw_64/include/QtCore/QUuid \ + D:/Qt/6.9.1/mingw_64/include/QtCore/QCryptographicHash \ + D:/Qt/6.9.1/mingw_64/include/QtCore/QDateTime \ + D:/Qt/6.9.1/mingw_64/include/QtCore/QFuture \ + D:/Qt/6.9.1/mingw_64/include/QtConcurrent/QtConcurrent \ + D:/Qt/6.9.1/mingw_64/include/QtConcurrent/QtConcurrentDepends \ + D:/Qt/6.9.1/mingw_64/include/QtCore/QtCore \ + D:/Qt/6.9.1/mingw_64/include/QtCore/QtCoreDepends \ + D:/Qt/6.9.1/mingw_64/include/QtCore/q20algorithm.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/q20chrono.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/q20map.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/q20vector.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/q23functional.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qabstractanimation.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qabstractitemmodel.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qabstractnativeeventfilter.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qabstractproxymodel.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qanimationgroup.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qapplicationstatic.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/QMutex \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qassociativeiterable.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qatomicscopedvaluerollback.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qbitarray.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qbuffer.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qbytearraymatcher.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qcache.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qcborarray.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qcbormap.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qcborstream.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qcborstreamreader.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qcborstreamwriter.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qchronotimer.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qproperty.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qpropertyprivate.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qcollator.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qcommandlineoption.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qcommandlineparser.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qconcatenatetablesproxymodel.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qdiriterator.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qeasingcurve.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qfactoryinterface.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qfileselector.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/QStringList \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qfilesystemwatcher.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qfuturesynchronizer.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qfuturewatcher.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qidentityproxymodel.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qitemselectionmodel.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qlatin1stringmatcher.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qlibrary.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qlibraryinfo.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qversionnumber.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qtyperevision.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qlockfile.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qloggingcategory.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qmessageauthenticationcode.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qmetaobject.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qmimedata.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qmimedatabase.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qmimetype.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qobjectcleanuphandler.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qoperatingsystemversion.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qparallelanimationgroup.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qpauseanimation.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qpermissions.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qplugin.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qpointer.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qpluginloader.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qpropertyanimation.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qvariantanimation.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qqueue.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qrandom.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qreadwritelock.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qresource.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qsavefile.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qscopedvaluerollback.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qsemaphore.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qsequentialanimationgroup.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qsequentialiterable.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qsharedmemory.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qtipccommon.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qsignalmapper.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qsimd.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qsocketnotifier.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qsortfilterproxymodel.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qstack.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qstandardpaths.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qstaticlatin1stringmatcher.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qstorageinfo.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qstringlistmodel.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qsystemsemaphore.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qtcoreversion.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qtemporarydir.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qtemporaryfile.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qtextboundaryfinder.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qthreadstorage.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qtimeline.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qtmocconstants.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qtranslator.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qtransposeproxymodel.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qtsymbolmacros.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qurlquery.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qvarianthash.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/QHash \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qvariantlist.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qvariantmap.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/QMap \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qvector.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qwaitcondition.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/QDeadlineTimer \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qwineventnotifier.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qxmlstream.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qxpfunctional.h \ + D:/Qt/6.9.1/mingw_64/include/QtConcurrent/qtaskbuilder.h \ + D:/Qt/6.9.1/mingw_64/include/QtConcurrent/qtconcurrentstoredfunctioncall.h \ + D:/Qt/6.9.1/mingw_64/include/QtConcurrent/qtconcurrent_global.h \ + D:/Qt/6.9.1/mingw_64/include/QtConcurrent/qtconcurrentexports.h \ + D:/Qt/6.9.1/mingw_64/include/QtConcurrent/qtconcurrentrunbase.h \ + D:/Qt/6.9.1/mingw_64/include/QtConcurrent/qtconcurrentcompilertest.h \ + D:/Qt/6.9.1/mingw_64/include/QtConcurrent/qtconcurrentfilter.h \ + D:/Qt/6.9.1/mingw_64/include/QtConcurrent/qtconcurrentfilterkernel.h \ + D:/Qt/6.9.1/mingw_64/include/QtConcurrent/qtconcurrentiteratekernel.h \ + D:/Qt/6.9.1/mingw_64/include/QtConcurrent/qtconcurrentmedian.h \ + D:/Qt/6.9.1/mingw_64/include/QtConcurrent/qtconcurrentthreadengine.h \ + D:/Qt/6.9.1/mingw_64/include/QtConcurrent/qtconcurrentmapkernel.h \ + D:/Qt/6.9.1/mingw_64/include/QtConcurrent/qtconcurrentreducekernel.h \ + D:/Qt/6.9.1/mingw_64/include/QtConcurrent/qtconcurrentfunctionwrappers.h \ + D:/Qt/6.9.1/mingw_64/include/QtConcurrent/qtconcurrentmap.h \ + D:/Qt/6.9.1/mingw_64/include/QtConcurrent/qtconcurrentrun.h \ + D:/Qt/6.9.1/mingw_64/include/QtConcurrent/qtconcurrenttask.h \ + D:/Qt/6.9.1/mingw_64/include/QtConcurrent/qtconcurrentversion.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/QDebug \ + D:/Qt/6.9.1/mingw_64/include/QtGui/QGuiApplication \ + D:/Qt/6.9.1/mingw_64/include/QtGui/QScreen \ + D:/Qt/6.9.1/mingw_64/include/QtCore/QUrlQuery \ + D:/Qt/6.9.1/mingw_64/include/QtCore/QRegularExpression + $(CXX) -c $(CXXFLAGS) $(INCPATH) -o debug\mainwindow.o mainwindow.cpp + +debug/qrc_resources.o: debug/qrc_resources.cpp + $(CXX) -c $(CXXFLAGS) $(INCPATH) -o debug\qrc_resources.o debug\qrc_resources.cpp + +debug/moc_mainwindow.o: debug/moc_mainwindow.cpp + $(CXX) -c $(CXXFLAGS) $(INCPATH) -o debug\moc_mainwindow.o debug\moc_mainwindow.cpp + +####### Install + +install: FORCE + +uninstall: FORCE + +FORCE: + +.SUFFIXES: + diff --git a/C++/2.2.6/Makefile.Release b/C++/2.2.6/Makefile.Release new file mode 100644 index 0000000..9baafdd --- /dev/null +++ b/C++/2.2.6/Makefile.Release @@ -0,0 +1,1173 @@ +############################################################################# +# Makefile for building: untitled2 +# Generated by qmake (3.1) (Qt 6.9.1) +# Project: untitled2.pro +# Template: app +############################################################################# + +MAKEFILE = Makefile.Release + +EQ = = + +####### Compiler, tools and options + +CC = gcc +CXX = g++ +DEFINES = -DUNICODE -D_UNICODE -DWIN32 -DMINGW_HAS_SECURE_API=1 -DQT_NO_DEBUG -DQT_WIDGETS_LIB -DQT_GUI_LIB -DQT_NETWORK_LIB -DQT_CONCURRENT_LIB -DQT_CORE_LIB -DQT_NEEDS_QMAIN +CFLAGS = -fno-keep-inline-dllexport -O2 -Wall -Wextra -Wextra $(DEFINES) +CXXFLAGS = -fno-keep-inline-dllexport -O2 -std=gnu++1z -Wall -Wextra -Wextra -fexceptions -mthreads $(DEFINES) +INCPATH = -I. -ID:/Qt/6.9.1/mingw_64/include -ID:/Qt/6.9.1/mingw_64/include/QtWidgets -ID:/Qt/6.9.1/mingw_64/include/QtGui -ID:/Qt/6.9.1/mingw_64/include/QtNetwork -ID:/Qt/6.9.1/mingw_64/include/QtConcurrent -ID:/Qt/6.9.1/mingw_64/include/QtCore -Irelease -I/include -ID:/Qt/6.9.1/mingw_64/mkspecs/win32-g++ +LINKER = g++ +LFLAGS = -Wl,-s -Wl,-subsystem,windows -mthreads +LIBS = -ladvapi32 -luser32 -lshell32 -lkernel32 D:\Qt\6.9.1\mingw_64\lib\libQt6Widgets.a D:\Qt\6.9.1\mingw_64\lib\libQt6Gui.a D:\Qt\6.9.1\mingw_64\lib\libQt6Network.a D:\Qt\6.9.1\mingw_64\lib\libQt6Concurrent.a D:\Qt\6.9.1\mingw_64\lib\libQt6Core.a release\launcher_res.o -lmingw32 D:\Qt\6.9.1\mingw_64\lib\libQt6EntryPoint.a -lshell32 +QMAKE = D:\Qt\6.9.1\mingw_64\bin\qmake.exe +DEL_FILE = del +CHK_DIR_EXISTS= if not exist +MKDIR = mkdir +COPY = copy /y +COPY_FILE = copy /y +COPY_DIR = xcopy /s /q /y /i +INSTALL_FILE = copy /y +INSTALL_PROGRAM = copy /y +INSTALL_DIR = xcopy /s /q /y /i +QINSTALL = D:\Qt\6.9.1\mingw_64\bin\qmake.exe -install qinstall +QINSTALL_PROGRAM = D:\Qt\6.9.1\mingw_64\bin\qmake.exe -install qinstall -exe +DEL_FILE = del +SYMLINK = $(QMAKE) -install ln -f -s +DEL_DIR = rmdir +MOVE = move +IDC = idc +IDL = midl +ZIP = zip -r -9 +DEF_FILE = +RES_FILE = release\launcher_res.o +SED = $(QMAKE) -install sed +MOVE = move + +####### Output directory + +OBJECTS_DIR = release + +####### Files + +SOURCES = main.cpp \ + mainwindow.cpp release\qrc_resources.cpp \ + release\moc_mainwindow.cpp +OBJECTS = release/main.o \ + release/mainwindow.o \ + release/qrc_resources.o \ + release/moc_mainwindow.o + +DIST = mainwindow.h main.cpp \ + mainwindow.cpp +QMAKE_TARGET = untitled2 +DESTDIR = release\ #avoid trailing-slash linebreak +TARGET = untitled2.exe +DESTDIR_TARGET = release\untitled2.exe + +####### Build rules + +first: all +all: Makefile.Release release/untitled2.exe + +release/untitled2.exe: D:/Qt/6.9.1/mingw_64/lib/libQt6Widgets.a D:/Qt/6.9.1/mingw_64/lib/libQt6Gui.a D:/Qt/6.9.1/mingw_64/lib/libQt6Network.a D:/Qt/6.9.1/mingw_64/lib/libQt6Concurrent.a D:/Qt/6.9.1/mingw_64/lib/libQt6Core.a D:/Qt/6.9.1/mingw_64/lib/libQt6EntryPoint.a $(OBJECTS) release/launcher_res.o + $(LINKER) $(LFLAGS) -o $(DESTDIR_TARGET) $(OBJECTS) $(LIBS) + +release/launcher_res.o: launcher.rc + windres -i launcher.rc -o release\launcher_res.o --include-dir=. $(DEFINES) + +qmake: FORCE + @$(QMAKE) -o Makefile.Release untitled2.pro -spec win32-g++ "CONFIG+=qtquickcompiler" + +qmake_all: FORCE + +dist: + $(ZIP) untitled2.zip $(SOURCES) $(DIST) untitled2.pro D:\Qt\6.9.1\mingw_64\mkspecs\features\spec_pre.prf D:\Qt\6.9.1\mingw_64\mkspecs\features\device_config.prf D:\Qt\6.9.1\mingw_64\mkspecs\common\sanitize.conf D:\Qt\6.9.1\mingw_64\mkspecs\common\gcc-base.conf D:\Qt\6.9.1\mingw_64\mkspecs\common\g++-base.conf D:\Qt\6.9.1\mingw_64\mkspecs\features\win32\windows_vulkan_sdk.prf D:\Qt\6.9.1\mingw_64\mkspecs\common\windows-vulkan.conf D:\Qt\6.9.1\mingw_64\mkspecs\common\g++-win32.conf D:\Qt\6.9.1\mingw_64\mkspecs\common\windows-desktop.conf D:\Qt\6.9.1\mingw_64\mkspecs\qconfig.pri D:\Qt\6.9.1\mingw_64\mkspecs\modules\qt_ext_freetype.pri D:\Qt\6.9.1\mingw_64\mkspecs\modules\qt_ext_libjpeg.pri D:\Qt\6.9.1\mingw_64\mkspecs\modules\qt_ext_libpng.pri D:\Qt\6.9.1\mingw_64\mkspecs\modules\qt_ext_openxr_loader.pri D:\Qt\6.9.1\mingw_64\mkspecs\modules\qt_lib_charts.pri D:\Qt\6.9.1\mingw_64\mkspecs\modules\qt_lib_charts_private.pri D:\Qt\6.9.1\mingw_64\mkspecs\modules\qt_lib_chartsqml.pri D:\Qt\6.9.1\mingw_64\mkspecs\modules\qt_lib_chartsqml_private.pri D:\Qt\6.9.1\mingw_64\mkspecs\modules\qt_lib_concurrent.pri D:\Qt\6.9.1\mingw_64\mkspecs\modules\qt_lib_concurrent_private.pri D:\Qt\6.9.1\mingw_64\mkspecs\modules\qt_lib_core.pri D:\Qt\6.9.1\mingw_64\mkspecs\modules\qt_lib_core_private.pri D:\Qt\6.9.1\mingw_64\mkspecs\modules\qt_lib_dbus.pri D:\Qt\6.9.1\mingw_64\mkspecs\modules\qt_lib_dbus_private.pri D:\Qt\6.9.1\mingw_64\mkspecs\modules\qt_lib_designer.pri D:\Qt\6.9.1\mingw_64\mkspecs\modules\qt_lib_designer_private.pri D:\Qt\6.9.1\mingw_64\mkspecs\modules\qt_lib_designercomponents_private.pri D:\Qt\6.9.1\mingw_64\mkspecs\modules\qt_lib_devicediscovery_support_private.pri D:\Qt\6.9.1\mingw_64\mkspecs\modules\qt_lib_entrypoint_private.pri D:\Qt\6.9.1\mingw_64\mkspecs\modules\qt_lib_example_icons_private.pri D:\Qt\6.9.1\mingw_64\mkspecs\modules\qt_lib_examples_asset_downloader_private.pri D:\Qt\6.9.1\mingw_64\mkspecs\modules\qt_lib_fb_support_private.pri D:\Qt\6.9.1\mingw_64\mkspecs\modules\qt_lib_ffmpegmediapluginimpl_private.pri D:\Qt\6.9.1\mingw_64\mkspecs\modules\qt_lib_freetype_private.pri D:\Qt\6.9.1\mingw_64\mkspecs\modules\qt_lib_gui.pri D:\Qt\6.9.1\mingw_64\mkspecs\modules\qt_lib_gui_private.pri D:\Qt\6.9.1\mingw_64\mkspecs\modules\qt_lib_harfbuzz_private.pri D:\Qt\6.9.1\mingw_64\mkspecs\modules\qt_lib_help.pri D:\Qt\6.9.1\mingw_64\mkspecs\modules\qt_lib_help_private.pri D:\Qt\6.9.1\mingw_64\mkspecs\modules\qt_lib_jpeg_private.pri D:\Qt\6.9.1\mingw_64\mkspecs\modules\qt_lib_labsanimation.pri D:\Qt\6.9.1\mingw_64\mkspecs\modules\qt_lib_labsanimation_private.pri D:\Qt\6.9.1\mingw_64\mkspecs\modules\qt_lib_labsfolderlistmodel.pri D:\Qt\6.9.1\mingw_64\mkspecs\modules\qt_lib_labsfolderlistmodel_private.pri D:\Qt\6.9.1\mingw_64\mkspecs\modules\qt_lib_labsplatform.pri D:\Qt\6.9.1\mingw_64\mkspecs\modules\qt_lib_labsplatform_private.pri D:\Qt\6.9.1\mingw_64\mkspecs\modules\qt_lib_labsqmlmodels.pri D:\Qt\6.9.1\mingw_64\mkspecs\modules\qt_lib_labsqmlmodels_private.pri D:\Qt\6.9.1\mingw_64\mkspecs\modules\qt_lib_labssettings.pri D:\Qt\6.9.1\mingw_64\mkspecs\modules\qt_lib_labssettings_private.pri D:\Qt\6.9.1\mingw_64\mkspecs\modules\qt_lib_labssharedimage.pri D:\Qt\6.9.1\mingw_64\mkspecs\modules\qt_lib_labssharedimage_private.pri D:\Qt\6.9.1\mingw_64\mkspecs\modules\qt_lib_labswavefrontmesh.pri D:\Qt\6.9.1\mingw_64\mkspecs\modules\qt_lib_labswavefrontmesh_private.pri D:\Qt\6.9.1\mingw_64\mkspecs\modules\qt_lib_linguist.pri D:\Qt\6.9.1\mingw_64\mkspecs\modules\qt_lib_multimedia.pri D:\Qt\6.9.1\mingw_64\mkspecs\modules\qt_lib_multimedia_private.pri D:\Qt\6.9.1\mingw_64\mkspecs\modules\qt_lib_multimediaquick_private.pri D:\Qt\6.9.1\mingw_64\mkspecs\modules\qt_lib_multimediatestlibprivate_private.pri D:\Qt\6.9.1\mingw_64\mkspecs\modules\qt_lib_multimediawidgets.pri D:\Qt\6.9.1\mingw_64\mkspecs\modules\qt_lib_multimediawidgets_private.pri D:\Qt\6.9.1\mingw_64\mkspecs\modules\qt_lib_network.pri D:\Qt\6.9.1\mingw_64\mkspecs\modules\qt_lib_network_private.pri D:\Qt\6.9.1\mingw_64\mkspecs\modules\qt_lib_opengl.pri D:\Qt\6.9.1\mingw_64\mkspecs\modules\qt_lib_opengl_private.pri D:\Qt\6.9.1\mingw_64\mkspecs\modules\qt_lib_openglwidgets.pri D:\Qt\6.9.1\mingw_64\mkspecs\modules\qt_lib_openglwidgets_private.pri D:\Qt\6.9.1\mingw_64\mkspecs\modules\qt_lib_packetprotocol_private.pri D:\Qt\6.9.1\mingw_64\mkspecs\modules\qt_lib_png_private.pri D:\Qt\6.9.1\mingw_64\mkspecs\modules\qt_lib_printsupport.pri D:\Qt\6.9.1\mingw_64\mkspecs\modules\qt_lib_printsupport_private.pri D:\Qt\6.9.1\mingw_64\mkspecs\modules\qt_lib_qdoccatch_private.pri D:\Qt\6.9.1\mingw_64\mkspecs\modules\qt_lib_qdoccatchconversions_private.pri D:\Qt\6.9.1\mingw_64\mkspecs\modules\qt_lib_qdoccatchgenerators_private.pri D:\Qt\6.9.1\mingw_64\mkspecs\modules\qt_lib_qml.pri D:\Qt\6.9.1\mingw_64\mkspecs\modules\qt_lib_qml_private.pri D:\Qt\6.9.1\mingw_64\mkspecs\modules\qt_lib_qmlassetdownloader.pri D:\Qt\6.9.1\mingw_64\mkspecs\modules\qt_lib_qmlassetdownloader_private.pri D:\Qt\6.9.1\mingw_64\mkspecs\modules\qt_lib_qmlcompiler.pri D:\Qt\6.9.1\mingw_64\mkspecs\modules\qt_lib_qmlcompiler_private.pri D:\Qt\6.9.1\mingw_64\mkspecs\modules\qt_lib_qmlcore.pri D:\Qt\6.9.1\mingw_64\mkspecs\modules\qt_lib_qmlcore_private.pri D:\Qt\6.9.1\mingw_64\mkspecs\modules\qt_lib_qmldebug_private.pri D:\Qt\6.9.1\mingw_64\mkspecs\modules\qt_lib_qmldom_private.pri D:\Qt\6.9.1\mingw_64\mkspecs\modules\qt_lib_qmlformat_private.pri D:\Qt\6.9.1\mingw_64\mkspecs\modules\qt_lib_qmlintegration.pri D:\Qt\6.9.1\mingw_64\mkspecs\modules\qt_lib_qmlintegration_private.pri D:\Qt\6.9.1\mingw_64\mkspecs\modules\qt_lib_qmllocalstorage.pri D:\Qt\6.9.1\mingw_64\mkspecs\modules\qt_lib_qmllocalstorage_private.pri D:\Qt\6.9.1\mingw_64\mkspecs\modules\qt_lib_qmlls_private.pri D:\Qt\6.9.1\mingw_64\mkspecs\modules\qt_lib_qmlmeta.pri D:\Qt\6.9.1\mingw_64\mkspecs\modules\qt_lib_qmlmeta_private.pri D:\Qt\6.9.1\mingw_64\mkspecs\modules\qt_lib_qmlmodels.pri D:\Qt\6.9.1\mingw_64\mkspecs\modules\qt_lib_qmlmodels_private.pri D:\Qt\6.9.1\mingw_64\mkspecs\modules\qt_lib_qmlnetwork.pri D:\Qt\6.9.1\mingw_64\mkspecs\modules\qt_lib_qmlnetwork_private.pri D:\Qt\6.9.1\mingw_64\mkspecs\modules\qt_lib_qmltest.pri D:\Qt\6.9.1\mingw_64\mkspecs\modules\qt_lib_qmltest_private.pri D:\Qt\6.9.1\mingw_64\mkspecs\modules\qt_lib_qmltoolingsettings_private.pri D:\Qt\6.9.1\mingw_64\mkspecs\modules\qt_lib_qmltyperegistrar_private.pri D:\Qt\6.9.1\mingw_64\mkspecs\modules\qt_lib_qmlworkerscript.pri D:\Qt\6.9.1\mingw_64\mkspecs\modules\qt_lib_qmlworkerscript_private.pri D:\Qt\6.9.1\mingw_64\mkspecs\modules\qt_lib_qmlxmllistmodel.pri D:\Qt\6.9.1\mingw_64\mkspecs\modules\qt_lib_qmlxmllistmodel_private.pri D:\Qt\6.9.1\mingw_64\mkspecs\modules\qt_lib_quick.pri D:\Qt\6.9.1\mingw_64\mkspecs\modules\qt_lib_quick3d.pri D:\Qt\6.9.1\mingw_64\mkspecs\modules\qt_lib_quick3d_private.pri D:\Qt\6.9.1\mingw_64\mkspecs\modules\qt_lib_quick3dassetimport.pri D:\Qt\6.9.1\mingw_64\mkspecs\modules\qt_lib_quick3dassetimport_private.pri D:\Qt\6.9.1\mingw_64\mkspecs\modules\qt_lib_quick3dassetutils.pri D:\Qt\6.9.1\mingw_64\mkspecs\modules\qt_lib_quick3dassetutils_private.pri D:\Qt\6.9.1\mingw_64\mkspecs\modules\qt_lib_quick3deffects.pri D:\Qt\6.9.1\mingw_64\mkspecs\modules\qt_lib_quick3deffects_private.pri D:\Qt\6.9.1\mingw_64\mkspecs\modules\qt_lib_quick3dglslparser_private.pri D:\Qt\6.9.1\mingw_64\mkspecs\modules\qt_lib_quick3dhelpers.pri D:\Qt\6.9.1\mingw_64\mkspecs\modules\qt_lib_quick3dhelpers_private.pri D:\Qt\6.9.1\mingw_64\mkspecs\modules\qt_lib_quick3dhelpersimpl.pri D:\Qt\6.9.1\mingw_64\mkspecs\modules\qt_lib_quick3dhelpersimpl_private.pri D:\Qt\6.9.1\mingw_64\mkspecs\modules\qt_lib_quick3diblbaker.pri D:\Qt\6.9.1\mingw_64\mkspecs\modules\qt_lib_quick3diblbaker_private.pri D:\Qt\6.9.1\mingw_64\mkspecs\modules\qt_lib_quick3dparticleeffects.pri D:\Qt\6.9.1\mingw_64\mkspecs\modules\qt_lib_quick3dparticleeffects_private.pri D:\Qt\6.9.1\mingw_64\mkspecs\modules\qt_lib_quick3dparticles.pri D:\Qt\6.9.1\mingw_64\mkspecs\modules\qt_lib_quick3dparticles_private.pri D:\Qt\6.9.1\mingw_64\mkspecs\modules\qt_lib_quick3druntimerender.pri D:\Qt\6.9.1\mingw_64\mkspecs\modules\qt_lib_quick3druntimerender_private.pri D:\Qt\6.9.1\mingw_64\mkspecs\modules\qt_lib_quick3dspatialaudio_private.pri D:\Qt\6.9.1\mingw_64\mkspecs\modules\qt_lib_quick3dutils.pri D:\Qt\6.9.1\mingw_64\mkspecs\modules\qt_lib_quick3dutils_private.pri D:\Qt\6.9.1\mingw_64\mkspecs\modules\qt_lib_quick3dxr.pri D:\Qt\6.9.1\mingw_64\mkspecs\modules\qt_lib_quick3dxr_private.pri D:\Qt\6.9.1\mingw_64\mkspecs\modules\qt_lib_quick_private.pri D:\Qt\6.9.1\mingw_64\mkspecs\modules\qt_lib_quickcontrols2.pri D:\Qt\6.9.1\mingw_64\mkspecs\modules\qt_lib_quickcontrols2_private.pri D:\Qt\6.9.1\mingw_64\mkspecs\modules\qt_lib_quickcontrols2basic.pri D:\Qt\6.9.1\mingw_64\mkspecs\modules\qt_lib_quickcontrols2basic_private.pri D:\Qt\6.9.1\mingw_64\mkspecs\modules\qt_lib_quickcontrols2basicstyleimpl.pri D:\Qt\6.9.1\mingw_64\mkspecs\modules\qt_lib_quickcontrols2basicstyleimpl_private.pri D:\Qt\6.9.1\mingw_64\mkspecs\modules\qt_lib_quickcontrols2fluentwinui3styleimpl.pri D:\Qt\6.9.1\mingw_64\mkspecs\modules\qt_lib_quickcontrols2fluentwinui3styleimpl_private.pri D:\Qt\6.9.1\mingw_64\mkspecs\modules\qt_lib_quickcontrols2fusion.pri D:\Qt\6.9.1\mingw_64\mkspecs\modules\qt_lib_quickcontrols2fusion_private.pri D:\Qt\6.9.1\mingw_64\mkspecs\modules\qt_lib_quickcontrols2fusionstyleimpl.pri D:\Qt\6.9.1\mingw_64\mkspecs\modules\qt_lib_quickcontrols2fusionstyleimpl_private.pri D:\Qt\6.9.1\mingw_64\mkspecs\modules\qt_lib_quickcontrols2imagine.pri D:\Qt\6.9.1\mingw_64\mkspecs\modules\qt_lib_quickcontrols2imagine_private.pri D:\Qt\6.9.1\mingw_64\mkspecs\modules\qt_lib_quickcontrols2imaginestyleimpl.pri D:\Qt\6.9.1\mingw_64\mkspecs\modules\qt_lib_quickcontrols2imaginestyleimpl_private.pri D:\Qt\6.9.1\mingw_64\mkspecs\modules\qt_lib_quickcontrols2impl.pri D:\Qt\6.9.1\mingw_64\mkspecs\modules\qt_lib_quickcontrols2impl_private.pri D:\Qt\6.9.1\mingw_64\mkspecs\modules\qt_lib_quickcontrols2material.pri D:\Qt\6.9.1\mingw_64\mkspecs\modules\qt_lib_quickcontrols2material_private.pri D:\Qt\6.9.1\mingw_64\mkspecs\modules\qt_lib_quickcontrols2materialstyleimpl.pri D:\Qt\6.9.1\mingw_64\mkspecs\modules\qt_lib_quickcontrols2materialstyleimpl_private.pri D:\Qt\6.9.1\mingw_64\mkspecs\modules\qt_lib_quickcontrols2universal.pri D:\Qt\6.9.1\mingw_64\mkspecs\modules\qt_lib_quickcontrols2universal_private.pri D:\Qt\6.9.1\mingw_64\mkspecs\modules\qt_lib_quickcontrols2universalstyleimpl.pri D:\Qt\6.9.1\mingw_64\mkspecs\modules\qt_lib_quickcontrols2universalstyleimpl_private.pri D:\Qt\6.9.1\mingw_64\mkspecs\modules\qt_lib_quickcontrols2windowsstyleimpl.pri D:\Qt\6.9.1\mingw_64\mkspecs\modules\qt_lib_quickcontrols2windowsstyleimpl_private.pri D:\Qt\6.9.1\mingw_64\mkspecs\modules\qt_lib_quickcontrolstestutilsprivate_private.pri D:\Qt\6.9.1\mingw_64\mkspecs\modules\qt_lib_quickdialogs2.pri D:\Qt\6.9.1\mingw_64\mkspecs\modules\qt_lib_quickdialogs2_private.pri D:\Qt\6.9.1\mingw_64\mkspecs\modules\qt_lib_quickdialogs2quickimpl.pri D:\Qt\6.9.1\mingw_64\mkspecs\modules\qt_lib_quickdialogs2quickimpl_private.pri D:\Qt\6.9.1\mingw_64\mkspecs\modules\qt_lib_quickdialogs2utils.pri D:\Qt\6.9.1\mingw_64\mkspecs\modules\qt_lib_quickdialogs2utils_private.pri D:\Qt\6.9.1\mingw_64\mkspecs\modules\qt_lib_quickeffects.pri D:\Qt\6.9.1\mingw_64\mkspecs\modules\qt_lib_quickeffects_private.pri D:\Qt\6.9.1\mingw_64\mkspecs\modules\qt_lib_quicklayouts.pri D:\Qt\6.9.1\mingw_64\mkspecs\modules\qt_lib_quicklayouts_private.pri D:\Qt\6.9.1\mingw_64\mkspecs\modules\qt_lib_quickparticles_private.pri D:\Qt\6.9.1\mingw_64\mkspecs\modules\qt_lib_quickshapes_private.pri D:\Qt\6.9.1\mingw_64\mkspecs\modules\qt_lib_quicktemplates2.pri D:\Qt\6.9.1\mingw_64\mkspecs\modules\qt_lib_quicktemplates2_private.pri D:\Qt\6.9.1\mingw_64\mkspecs\modules\qt_lib_quicktestutilsprivate_private.pri D:\Qt\6.9.1\mingw_64\mkspecs\modules\qt_lib_quicktimeline.pri D:\Qt\6.9.1\mingw_64\mkspecs\modules\qt_lib_quicktimeline_private.pri D:\Qt\6.9.1\mingw_64\mkspecs\modules\qt_lib_quicktimelineblendtrees.pri D:\Qt\6.9.1\mingw_64\mkspecs\modules\qt_lib_quicktimelineblendtrees_private.pri D:\Qt\6.9.1\mingw_64\mkspecs\modules\qt_lib_quickvectorimage.pri D:\Qt\6.9.1\mingw_64\mkspecs\modules\qt_lib_quickvectorimage_private.pri D:\Qt\6.9.1\mingw_64\mkspecs\modules\qt_lib_quickvectorimagegenerator_private.pri D:\Qt\6.9.1\mingw_64\mkspecs\modules\qt_lib_quickwidgets.pri D:\Qt\6.9.1\mingw_64\mkspecs\modules\qt_lib_quickwidgets_private.pri D:\Qt\6.9.1\mingw_64\mkspecs\modules\qt_lib_shadertools.pri D:\Qt\6.9.1\mingw_64\mkspecs\modules\qt_lib_shadertools_private.pri D:\Qt\6.9.1\mingw_64\mkspecs\modules\qt_lib_spatialaudio.pri D:\Qt\6.9.1\mingw_64\mkspecs\modules\qt_lib_spatialaudio_private.pri D:\Qt\6.9.1\mingw_64\mkspecs\modules\qt_lib_sql.pri D:\Qt\6.9.1\mingw_64\mkspecs\modules\qt_lib_sql_private.pri D:\Qt\6.9.1\mingw_64\mkspecs\modules\qt_lib_svg.pri D:\Qt\6.9.1\mingw_64\mkspecs\modules\qt_lib_svg_private.pri D:\Qt\6.9.1\mingw_64\mkspecs\modules\qt_lib_svgwidgets.pri D:\Qt\6.9.1\mingw_64\mkspecs\modules\qt_lib_svgwidgets_private.pri D:\Qt\6.9.1\mingw_64\mkspecs\modules\qt_lib_testinternals_private.pri D:\Qt\6.9.1\mingw_64\mkspecs\modules\qt_lib_testlib.pri D:\Qt\6.9.1\mingw_64\mkspecs\modules\qt_lib_testlib_private.pri D:\Qt\6.9.1\mingw_64\mkspecs\modules\qt_lib_tools_private.pri D:\Qt\6.9.1\mingw_64\mkspecs\modules\qt_lib_uiplugin.pri D:\Qt\6.9.1\mingw_64\mkspecs\modules\qt_lib_uitools.pri D:\Qt\6.9.1\mingw_64\mkspecs\modules\qt_lib_uitools_private.pri D:\Qt\6.9.1\mingw_64\mkspecs\modules\qt_lib_widgets.pri D:\Qt\6.9.1\mingw_64\mkspecs\modules\qt_lib_widgets_private.pri D:\Qt\6.9.1\mingw_64\mkspecs\modules\qt_lib_xml.pri D:\Qt\6.9.1\mingw_64\mkspecs\modules\qt_lib_xml_private.pri D:\Qt\6.9.1\mingw_64\mkspecs\modules\qt_lib_zlib_private.pri D:\Qt\6.9.1\mingw_64\mkspecs\features\qt_functions.prf D:\Qt\6.9.1\mingw_64\mkspecs\features\qt_config.prf D:\Qt\6.9.1\mingw_64\mkspecs\win32-g++\qmake.conf D:\Qt\6.9.1\mingw_64\mkspecs\features\spec_post.prf .qmake.stash D:\Qt\6.9.1\mingw_64\mkspecs\features\exclusive_builds.prf D:\Qt\6.9.1\mingw_64\mkspecs\features\toolchain.prf D:\Qt\6.9.1\mingw_64\mkspecs\features\default_pre.prf D:\Qt\6.9.1\mingw_64\mkspecs\features\win32\default_pre.prf D:\Qt\6.9.1\mingw_64\mkspecs\features\resolve_config.prf D:\Qt\6.9.1\mingw_64\mkspecs\features\exclusive_builds_post.prf D:\Qt\6.9.1\mingw_64\mkspecs\features\default_post.prf D:\Qt\6.9.1\mingw_64\mkspecs\features\build_pass.prf D:\Qt\6.9.1\mingw_64\mkspecs\features\qtquickcompiler.prf D:\Qt\6.9.1\mingw_64\mkspecs\features\precompile_header.prf D:\Qt\6.9.1\mingw_64\mkspecs\features\warn_on.prf D:\Qt\6.9.1\mingw_64\mkspecs\features\permissions.prf D:\Qt\6.9.1\mingw_64\mkspecs\features\qt.prf D:\Qt\6.9.1\mingw_64\mkspecs\features\resources_functions.prf D:\Qt\6.9.1\mingw_64\mkspecs\features\resources.prf D:\Qt\6.9.1\mingw_64\mkspecs\features\moc.prf D:\Qt\6.9.1\mingw_64\mkspecs\features\win32\opengl.prf D:\Qt\6.9.1\mingw_64\mkspecs\features\uic.prf D:\Qt\6.9.1\mingw_64\mkspecs\features\qmake_use.prf D:\Qt\6.9.1\mingw_64\mkspecs\features\file_copies.prf D:\Qt\6.9.1\mingw_64\mkspecs\features\win32\windows.prf D:\Qt\6.9.1\mingw_64\mkspecs\features\testcase_targets.prf D:\Qt\6.9.1\mingw_64\mkspecs\features\exceptions.prf D:\Qt\6.9.1\mingw_64\mkspecs\features\yacc.prf D:\Qt\6.9.1\mingw_64\mkspecs\features\lex.prf untitled2.pro resources.qrc D:\Qt\6.9.1\mingw_64\lib\Qt6Widgets.prl D:\Qt\6.9.1\mingw_64\lib\Qt6Gui.prl D:\Qt\6.9.1\mingw_64\lib\Qt6Network.prl D:\Qt\6.9.1\mingw_64\lib\Qt6Concurrent.prl D:\Qt\6.9.1\mingw_64\lib\Qt6Core.prl D:\Qt\6.9.1\mingw_64\lib\Qt6EntryPoint.prl resources.qrc D:\Qt\6.9.1\mingw_64\mkspecs\features\data\dummy.cpp mainwindow.h main.cpp mainwindow.cpp + +clean: compiler_clean + -$(DEL_FILE) release\main.o release\mainwindow.o release\qrc_resources.o release\moc_mainwindow.o + -$(DEL_FILE) release\launcher_res.o + +distclean: clean + -$(DEL_FILE) .qmake.stash + -$(DEL_FILE) $(DESTDIR_TARGET) + -$(DEL_FILE) Makefile.Release + +mocclean: compiler_moc_header_clean compiler_moc_objc_header_clean compiler_moc_source_clean + +mocables: compiler_moc_header_make_all compiler_moc_objc_header_make_all compiler_moc_source_make_all + +check: first + +benchmark: first + +compiler_no_pch_compiler_make_all: +compiler_no_pch_compiler_clean: +compiler_rcc_make_all: release/qrc_resources.cpp +compiler_rcc_clean: + -$(DEL_FILE) release\qrc_resources.cpp +release/qrc_resources.cpp: resources.qrc \ + D:/Qt/6.9.1/mingw_64/bin/rcc.exe \ + styles.qss \ + untitled2_zh_CN.ts + D:\Qt\6.9.1\mingw_64\bin\rcc.exe -name resources --no-zstd resources.qrc -o release\qrc_resources.cpp + +compiler_moc_predefs_make_all: release/moc_predefs.h +compiler_moc_predefs_clean: + -$(DEL_FILE) release\moc_predefs.h +release/moc_predefs.h: D:/Qt/6.9.1/mingw_64/mkspecs/features/data/dummy.cpp + g++ -fno-keep-inline-dllexport -O2 -std=gnu++1z -Wall -Wextra -Wextra -dM -E -o release\moc_predefs.h D:\Qt\6.9.1\mingw_64\mkspecs\features\data\dummy.cpp + +compiler_moc_header_make_all: release/moc_mainwindow.cpp +compiler_moc_header_clean: + -$(DEL_FILE) release\moc_mainwindow.cpp +release/moc_mainwindow.cpp: mainwindow.h \ + D:/Qt/6.9.1/mingw_64/include/QtWidgets/QMainWindow \ + D:/Qt/6.9.1/mingw_64/include/QtWidgets/qmainwindow.h \ + D:/Qt/6.9.1/mingw_64/include/QtWidgets/qtwidgetsglobal.h \ + D:/Qt/6.9.1/mingw_64/include/QtGui/qtguiglobal.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qglobal.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qtcoreglobal.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qtversionchecks.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qtconfiginclude.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qconfig.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qtcore-config.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qtconfigmacros.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qtdeprecationdefinitions.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qcompilerdetection.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qprocessordetection.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qsystemdetection.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qtcoreexports.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qtdeprecationmarkers.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qtclasshelpermacros.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qtpreprocessorsupport.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qassert.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qtnoop.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qtypes.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qtversion.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qtypeinfo.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qcontainerfwd.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qsysinfo.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qlogging.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qflags.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qcompare_impl.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qatomic.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qbasicatomic.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qatomic_cxx11.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qgenericatomic.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qyieldcpu.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qconstructormacros.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qdarwinhelpers.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qexceptionhandling.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qforeach.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qttypetraits.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qfunctionpointer.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qglobalstatic.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qmalloc.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qminmax.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qnumeric.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qoverload.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qswap.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qtenvironmentvariables.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qtresource.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qttranslation.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qversiontagging.h \ + D:/Qt/6.9.1/mingw_64/include/QtGui/qtgui-config.h \ + D:/Qt/6.9.1/mingw_64/include/QtGui/qtguiexports.h \ + D:/Qt/6.9.1/mingw_64/include/QtWidgets/qtwidgets-config.h \ + D:/Qt/6.9.1/mingw_64/include/QtWidgets/qtwidgetsexports.h \ + D:/Qt/6.9.1/mingw_64/include/QtWidgets/qwidget.h \ + D:/Qt/6.9.1/mingw_64/include/QtGui/qwindowdefs.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qobjectdefs.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qnamespace.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qcompare.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qstdlibdetection.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qcomparehelpers.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/q20type_traits.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qtmetamacros.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qobjectdefs_impl.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qfunctionaltools_impl.h \ + D:/Qt/6.9.1/mingw_64/include/QtGui/qwindowdefs_win.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qobject.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qstring.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qchar.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qstringview.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qbytearray.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qrefcount.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qarraydata.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qpair.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qarraydatapointer.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qarraydataops.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qcontainertools_impl.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qxptype_traits.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/q20functional.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/q20memory.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/q17memory.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qbytearrayalgorithms.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qbytearrayview.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qstringfwd.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qstringliteral.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qstringalgorithms.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qlatin1stringview.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qanystringview.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qutf8stringview.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qstringtokenizer.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qstringbuilder.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qstringconverter.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qstringconverter_base.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qlist.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qhashfunctions.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qiterator.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qbytearraylist.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qstringlist.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qalgorithms.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qstringmatcher.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qcoreevent.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qbasictimer.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qabstracteventdispatcher.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qeventloop.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qdeadlinetimer.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qelapsedtimer.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qmetatype.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qdatastream.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qscopedpointer.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qiodevicebase.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qfloat16.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qmath.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qtformat_impl.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qiterable.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qmetacontainer.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qcontainerinfo.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qtaggedpointer.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qscopeguard.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qobject_impl.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qbindingstorage.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qmargins.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/q23utility.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/q20utility.h \ + D:/Qt/6.9.1/mingw_64/include/QtGui/qaction.h \ + D:/Qt/6.9.1/mingw_64/include/QtGui/qkeysequence.h \ + D:/Qt/6.9.1/mingw_64/include/QtGui/qicon.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qsize.h \ + D:/Qt/6.9.1/mingw_64/include/QtGui/qpixmap.h \ + D:/Qt/6.9.1/mingw_64/include/QtGui/qpaintdevice.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qrect.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qpoint.h \ + D:/Qt/6.9.1/mingw_64/include/QtGui/qcolor.h \ + D:/Qt/6.9.1/mingw_64/include/QtGui/qrgb.h \ + D:/Qt/6.9.1/mingw_64/include/QtGui/qrgba64.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qshareddata.h \ + D:/Qt/6.9.1/mingw_64/include/QtGui/qimage.h \ + D:/Qt/6.9.1/mingw_64/include/QtGui/qpixelformat.h \ + D:/Qt/6.9.1/mingw_64/include/QtGui/qtransform.h \ + D:/Qt/6.9.1/mingw_64/include/QtGui/qpolygon.h \ + D:/Qt/6.9.1/mingw_64/include/QtGui/qregion.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qspan.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/q20iterator.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qline.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qvariant.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qdebug.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qtextstream.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qcontiguouscache.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qsharedpointer.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qsharedpointer_impl.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qmap.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qshareddata_impl.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qset.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qhash.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qvarlengtharray.h \ + D:/Qt/6.9.1/mingw_64/include/QtGui/qpalette.h \ + D:/Qt/6.9.1/mingw_64/include/QtGui/qbrush.h \ + D:/Qt/6.9.1/mingw_64/include/QtGui/qfont.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qendian.h \ + D:/Qt/6.9.1/mingw_64/include/QtGui/qfontmetrics.h \ + D:/Qt/6.9.1/mingw_64/include/QtGui/qfontinfo.h \ + D:/Qt/6.9.1/mingw_64/include/QtGui/qfontvariableaxis.h \ + D:/Qt/6.9.1/mingw_64/include/QtWidgets/qsizepolicy.h \ + D:/Qt/6.9.1/mingw_64/include/QtGui/qcursor.h \ + D:/Qt/6.9.1/mingw_64/include/QtGui/qbitmap.h \ + D:/Qt/6.9.1/mingw_64/include/QtGui/qevent.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qiodevice.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qurl.h \ + D:/Qt/6.9.1/mingw_64/include/QtGui/qeventpoint.h \ + D:/Qt/6.9.1/mingw_64/include/QtGui/qvector2d.h \ + D:/Qt/6.9.1/mingw_64/include/QtGui/qvectornd.h \ + D:/Qt/6.9.1/mingw_64/include/QtGui/qpointingdevice.h \ + D:/Qt/6.9.1/mingw_64/include/QtGui/qinputdevice.h \ + D:/Qt/6.9.1/mingw_64/include/QtGui/qscreen.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/QList \ + D:/Qt/6.9.1/mingw_64/include/QtCore/QObject \ + D:/Qt/6.9.1/mingw_64/include/QtCore/QRect \ + D:/Qt/6.9.1/mingw_64/include/QtCore/QSize \ + D:/Qt/6.9.1/mingw_64/include/QtCore/QSizeF \ + D:/Qt/6.9.1/mingw_64/include/QtGui/QTransform \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qnativeinterface.h \ + D:/Qt/6.9.1/mingw_64/include/QtGui/qscreen_platform.h \ + D:/Qt/6.9.1/mingw_64/include/QtGui/qguiapplication.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qcoreapplication.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qcoreapplication_platform.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qfuture.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qfutureinterface.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qmutex.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qtsan_impl.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qresultstore.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qfuture_impl.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qthreadpool.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qthread.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qrunnable.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qexception.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qpromise.h \ + D:/Qt/6.9.1/mingw_64/include/QtGui/qinputmethod.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qlocale.h \ + D:/Qt/6.9.1/mingw_64/include/QtGui/qguiapplication_platform.h \ + D:/Qt/6.9.1/mingw_64/include/QtWidgets/qtabwidget.h \ + D:/Qt/6.9.1/mingw_64/include/QtNetwork/QNetworkAccessManager \ + D:/Qt/6.9.1/mingw_64/include/QtNetwork/qnetworkaccessmanager.h \ + D:/Qt/6.9.1/mingw_64/include/QtNetwork/qtnetworkglobal.h \ + D:/Qt/6.9.1/mingw_64/include/QtNetwork/qtnetwork-config.h \ + D:/Qt/6.9.1/mingw_64/include/QtNetwork/qtnetworkexports.h \ + D:/Qt/6.9.1/mingw_64/include/QtNetwork/qnetworkrequest.h \ + D:/Qt/6.9.1/mingw_64/include/QtNetwork/qhttpheaders.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/QSharedDataPointer \ + D:/Qt/6.9.1/mingw_64/include/QtCore/QString \ + D:/Qt/6.9.1/mingw_64/include/QtCore/QUrl \ + D:/Qt/6.9.1/mingw_64/include/QtCore/QVariant \ + D:/Qt/6.9.1/mingw_64/include/QtCore/q26numeric.h \ + D:/Qt/6.9.1/mingw_64/include/QtNetwork/QSslConfiguration \ + D:/Qt/6.9.1/mingw_64/include/QtNetwork/qsslconfiguration.h \ + D:/Qt/6.9.1/mingw_64/include/QtNetwork/qsslsocket.h \ + D:/Qt/6.9.1/mingw_64/include/QtNetwork/qtcpsocket.h \ + D:/Qt/6.9.1/mingw_64/include/QtNetwork/qabstractsocket.h \ + D:/Qt/6.9.1/mingw_64/include/QtNetwork/qhostaddress.h \ + D:/Qt/6.9.1/mingw_64/include/QtNetwork/qsslerror.h \ + D:/Qt/6.9.1/mingw_64/include/QtNetwork/qsslcertificate.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qcryptographichash.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qdatetime.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qcalendar.h \ + D:/Qt/6.9.1/mingw_64/include/QtNetwork/qssl.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/QFlags \ + D:/Qt/6.9.1/mingw_64/include/QtNetwork/QSslPreSharedKeyAuthenticator \ + D:/Qt/6.9.1/mingw_64/include/QtNetwork/qsslpresharedkeyauthenticator.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/QMetaType \ + D:/Qt/6.9.1/mingw_64/include/QtCore/QJsonObject \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qjsonobject.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qjsonvalue.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qcborvalue.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qcborcommon.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qregularexpression.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/quuid.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qjsondocument.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qjsonparseerror.h \ + D:/Qt/6.9.1/mingw_64/include/QtWidgets/QLabel \ + D:/Qt/6.9.1/mingw_64/include/QtWidgets/qlabel.h \ + D:/Qt/6.9.1/mingw_64/include/QtWidgets/qframe.h \ + D:/Qt/6.9.1/mingw_64/include/QtGui/qpicture.h \ + D:/Qt/6.9.1/mingw_64/include/QtGui/qtextdocument.h \ + D:/Qt/6.9.1/mingw_64/include/QtWidgets/QPushButton \ + D:/Qt/6.9.1/mingw_64/include/QtWidgets/qpushbutton.h \ + D:/Qt/6.9.1/mingw_64/include/QtWidgets/qabstractbutton.h \ + D:/Qt/6.9.1/mingw_64/include/QtWidgets/QProgressBar \ + D:/Qt/6.9.1/mingw_64/include/QtWidgets/qprogressbar.h \ + D:/Qt/6.9.1/mingw_64/include/QtWidgets/QTextEdit \ + D:/Qt/6.9.1/mingw_64/include/QtWidgets/qtextedit.h \ + D:/Qt/6.9.1/mingw_64/include/QtWidgets/qabstractscrollarea.h \ + D:/Qt/6.9.1/mingw_64/include/QtGui/qtextoption.h \ + D:/Qt/6.9.1/mingw_64/include/QtGui/qtextcursor.h \ + D:/Qt/6.9.1/mingw_64/include/QtGui/qtextformat.h \ + D:/Qt/6.9.1/mingw_64/include/QtGui/qpen.h \ + D:/Qt/6.9.1/mingw_64/include/QtWidgets/QGroupBox \ + D:/Qt/6.9.1/mingw_64/include/QtWidgets/qgroupbox.h \ + D:/Qt/6.9.1/mingw_64/include/QtWidgets/QFileDialog \ + D:/Qt/6.9.1/mingw_64/include/QtWidgets/qfiledialog.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qdir.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qdirlisting.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qfiledevice.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qfile.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qfileinfo.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qtimezone.h \ + D:/Qt/6.9.1/mingw_64/include/QtWidgets/qdialog.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/QSettings \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qsettings.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/QDir \ + D:/Qt/6.9.1/mingw_64/include/QtWidgets/QLineEdit \ + D:/Qt/6.9.1/mingw_64/include/QtWidgets/qlineedit.h \ + D:/Qt/6.9.1/mingw_64/include/QtWidgets/QDialog \ + D:/Qt/6.9.1/mingw_64/include/QtWidgets/QCheckBox \ + D:/Qt/6.9.1/mingw_64/include/QtWidgets/qcheckbox.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/QTimer \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qtimer.h \ + D:/Qt/6.9.1/mingw_64/include/QtWidgets/QMessageBox \ + D:/Qt/6.9.1/mingw_64/include/QtWidgets/qmessagebox.h \ + D:/Qt/6.9.1/mingw_64/include/QtWidgets/qdialogbuttonbox.h \ + D:/Qt/6.9.1/mingw_64/include/QtWidgets/QApplication \ + D:/Qt/6.9.1/mingw_64/include/QtWidgets/qapplication.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/QProcess \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qprocess.h \ + release/moc_predefs.h \ + D:/Qt/6.9.1/mingw_64/bin/moc.exe + D:\Qt\6.9.1\mingw_64\bin\moc.exe $(DEFINES) --include E:/C++/untitled2/release/moc_predefs.h -ID:/Qt/6.9.1/mingw_64/mkspecs/win32-g++ -IE:/C++/untitled2 -ID:/Qt/6.9.1/mingw_64/include -ID:/Qt/6.9.1/mingw_64/include/QtWidgets -ID:/Qt/6.9.1/mingw_64/include/QtGui -ID:/Qt/6.9.1/mingw_64/include/QtNetwork -ID:/Qt/6.9.1/mingw_64/include/QtConcurrent -ID:/Qt/6.9.1/mingw_64/include/QtCore -ID:/Qt/Tools/mingw1310_64/lib/gcc/x86_64-w64-mingw32/13.1.0/include/c++ -ID:/Qt/Tools/mingw1310_64/lib/gcc/x86_64-w64-mingw32/13.1.0/include/c++/x86_64-w64-mingw32 -ID:/Qt/Tools/mingw1310_64/lib/gcc/x86_64-w64-mingw32/13.1.0/include/c++/backward -ID:/Qt/Tools/mingw1310_64/lib/gcc/x86_64-w64-mingw32/13.1.0/include -ID:/Qt/Tools/mingw1310_64/lib/gcc/x86_64-w64-mingw32/13.1.0/include-fixed -ID:/Qt/Tools/mingw1310_64/x86_64-w64-mingw32/include mainwindow.h -o release\moc_mainwindow.cpp + +compiler_moc_objc_header_make_all: +compiler_moc_objc_header_clean: +compiler_moc_source_make_all: +compiler_moc_source_clean: +compiler_uic_make_all: +compiler_uic_clean: +compiler_yacc_decl_make_all: +compiler_yacc_decl_clean: +compiler_yacc_impl_make_all: +compiler_yacc_impl_clean: +compiler_lex_make_all: +compiler_lex_clean: +compiler_clean: compiler_rcc_clean compiler_moc_predefs_clean compiler_moc_header_clean + + + +####### Compile + +release/main.o: main.cpp mainwindow.h \ + D:/Qt/6.9.1/mingw_64/include/QtWidgets/QMainWindow \ + D:/Qt/6.9.1/mingw_64/include/QtWidgets/qmainwindow.h \ + D:/Qt/6.9.1/mingw_64/include/QtWidgets/qtwidgetsglobal.h \ + D:/Qt/6.9.1/mingw_64/include/QtGui/qtguiglobal.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qglobal.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qtcoreglobal.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qtversionchecks.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qtconfiginclude.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qconfig.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qtcore-config.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qtconfigmacros.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qtdeprecationdefinitions.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qcompilerdetection.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qprocessordetection.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qsystemdetection.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qtcoreexports.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qtdeprecationmarkers.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qtclasshelpermacros.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qtpreprocessorsupport.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qassert.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qtnoop.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qtypes.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qtversion.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qtypeinfo.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qcontainerfwd.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qsysinfo.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qlogging.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qflags.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qcompare_impl.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qatomic.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qbasicatomic.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qatomic_cxx11.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qgenericatomic.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qyieldcpu.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qconstructormacros.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qdarwinhelpers.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qexceptionhandling.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qforeach.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qttypetraits.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qfunctionpointer.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qglobalstatic.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qmalloc.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qminmax.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qnumeric.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qoverload.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qswap.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qtenvironmentvariables.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qtresource.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qttranslation.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qversiontagging.h \ + D:/Qt/6.9.1/mingw_64/include/QtGui/qtgui-config.h \ + D:/Qt/6.9.1/mingw_64/include/QtGui/qtguiexports.h \ + D:/Qt/6.9.1/mingw_64/include/QtWidgets/qtwidgets-config.h \ + D:/Qt/6.9.1/mingw_64/include/QtWidgets/qtwidgetsexports.h \ + D:/Qt/6.9.1/mingw_64/include/QtWidgets/qwidget.h \ + D:/Qt/6.9.1/mingw_64/include/QtGui/qwindowdefs.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qobjectdefs.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qnamespace.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qcompare.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qstdlibdetection.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qcomparehelpers.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/q20type_traits.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qtmetamacros.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qobjectdefs_impl.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qfunctionaltools_impl.h \ + D:/Qt/6.9.1/mingw_64/include/QtGui/qwindowdefs_win.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qobject.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qstring.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qchar.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qstringview.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qbytearray.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qrefcount.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qarraydata.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qpair.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qarraydatapointer.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qarraydataops.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qcontainertools_impl.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qxptype_traits.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/q20functional.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/q20memory.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/q17memory.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qbytearrayalgorithms.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qbytearrayview.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qstringfwd.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qstringliteral.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qstringalgorithms.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qlatin1stringview.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qanystringview.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qutf8stringview.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qstringtokenizer.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qstringbuilder.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qstringconverter.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qstringconverter_base.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qlist.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qhashfunctions.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qiterator.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qbytearraylist.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qstringlist.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qalgorithms.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qstringmatcher.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qcoreevent.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qbasictimer.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qabstracteventdispatcher.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qeventloop.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qdeadlinetimer.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qelapsedtimer.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qmetatype.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qdatastream.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qscopedpointer.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qiodevicebase.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qfloat16.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qmath.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qtformat_impl.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qiterable.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qmetacontainer.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qcontainerinfo.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qtaggedpointer.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qscopeguard.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qobject_impl.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qbindingstorage.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qmargins.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/q23utility.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/q20utility.h \ + D:/Qt/6.9.1/mingw_64/include/QtGui/qaction.h \ + D:/Qt/6.9.1/mingw_64/include/QtGui/qkeysequence.h \ + D:/Qt/6.9.1/mingw_64/include/QtGui/qicon.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qsize.h \ + D:/Qt/6.9.1/mingw_64/include/QtGui/qpixmap.h \ + D:/Qt/6.9.1/mingw_64/include/QtGui/qpaintdevice.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qrect.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qpoint.h \ + D:/Qt/6.9.1/mingw_64/include/QtGui/qcolor.h \ + D:/Qt/6.9.1/mingw_64/include/QtGui/qrgb.h \ + D:/Qt/6.9.1/mingw_64/include/QtGui/qrgba64.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qshareddata.h \ + D:/Qt/6.9.1/mingw_64/include/QtGui/qimage.h \ + D:/Qt/6.9.1/mingw_64/include/QtGui/qpixelformat.h \ + D:/Qt/6.9.1/mingw_64/include/QtGui/qtransform.h \ + D:/Qt/6.9.1/mingw_64/include/QtGui/qpolygon.h \ + D:/Qt/6.9.1/mingw_64/include/QtGui/qregion.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qspan.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/q20iterator.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qline.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qvariant.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qdebug.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qtextstream.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qcontiguouscache.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qsharedpointer.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qsharedpointer_impl.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qmap.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qshareddata_impl.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qset.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qhash.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qvarlengtharray.h \ + D:/Qt/6.9.1/mingw_64/include/QtGui/qpalette.h \ + D:/Qt/6.9.1/mingw_64/include/QtGui/qbrush.h \ + D:/Qt/6.9.1/mingw_64/include/QtGui/qfont.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qendian.h \ + D:/Qt/6.9.1/mingw_64/include/QtGui/qfontmetrics.h \ + D:/Qt/6.9.1/mingw_64/include/QtGui/qfontinfo.h \ + D:/Qt/6.9.1/mingw_64/include/QtGui/qfontvariableaxis.h \ + D:/Qt/6.9.1/mingw_64/include/QtWidgets/qsizepolicy.h \ + D:/Qt/6.9.1/mingw_64/include/QtGui/qcursor.h \ + D:/Qt/6.9.1/mingw_64/include/QtGui/qbitmap.h \ + D:/Qt/6.9.1/mingw_64/include/QtGui/qevent.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qiodevice.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qurl.h \ + D:/Qt/6.9.1/mingw_64/include/QtGui/qeventpoint.h \ + D:/Qt/6.9.1/mingw_64/include/QtGui/qvector2d.h \ + D:/Qt/6.9.1/mingw_64/include/QtGui/qvectornd.h \ + D:/Qt/6.9.1/mingw_64/include/QtGui/qpointingdevice.h \ + D:/Qt/6.9.1/mingw_64/include/QtGui/qinputdevice.h \ + D:/Qt/6.9.1/mingw_64/include/QtGui/qscreen.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/QList \ + D:/Qt/6.9.1/mingw_64/include/QtCore/QObject \ + D:/Qt/6.9.1/mingw_64/include/QtCore/QRect \ + D:/Qt/6.9.1/mingw_64/include/QtCore/QSize \ + D:/Qt/6.9.1/mingw_64/include/QtCore/QSizeF \ + D:/Qt/6.9.1/mingw_64/include/QtGui/QTransform \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qnativeinterface.h \ + D:/Qt/6.9.1/mingw_64/include/QtGui/qscreen_platform.h \ + D:/Qt/6.9.1/mingw_64/include/QtGui/qguiapplication.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qcoreapplication.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qcoreapplication_platform.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qfuture.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qfutureinterface.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qmutex.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qtsan_impl.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qresultstore.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qfuture_impl.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qthreadpool.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qthread.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qrunnable.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qexception.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qpromise.h \ + D:/Qt/6.9.1/mingw_64/include/QtGui/qinputmethod.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qlocale.h \ + D:/Qt/6.9.1/mingw_64/include/QtGui/qguiapplication_platform.h \ + D:/Qt/6.9.1/mingw_64/include/QtWidgets/qtabwidget.h \ + D:/Qt/6.9.1/mingw_64/include/QtNetwork/QNetworkAccessManager \ + D:/Qt/6.9.1/mingw_64/include/QtNetwork/qnetworkaccessmanager.h \ + D:/Qt/6.9.1/mingw_64/include/QtNetwork/qtnetworkglobal.h \ + D:/Qt/6.9.1/mingw_64/include/QtNetwork/qtnetwork-config.h \ + D:/Qt/6.9.1/mingw_64/include/QtNetwork/qtnetworkexports.h \ + D:/Qt/6.9.1/mingw_64/include/QtNetwork/qnetworkrequest.h \ + D:/Qt/6.9.1/mingw_64/include/QtNetwork/qhttpheaders.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/QSharedDataPointer \ + D:/Qt/6.9.1/mingw_64/include/QtCore/QString \ + D:/Qt/6.9.1/mingw_64/include/QtCore/QUrl \ + D:/Qt/6.9.1/mingw_64/include/QtCore/QVariant \ + D:/Qt/6.9.1/mingw_64/include/QtCore/q26numeric.h \ + D:/Qt/6.9.1/mingw_64/include/QtNetwork/QSslConfiguration \ + D:/Qt/6.9.1/mingw_64/include/QtNetwork/qsslconfiguration.h \ + D:/Qt/6.9.1/mingw_64/include/QtNetwork/qsslsocket.h \ + D:/Qt/6.9.1/mingw_64/include/QtNetwork/qtcpsocket.h \ + D:/Qt/6.9.1/mingw_64/include/QtNetwork/qabstractsocket.h \ + D:/Qt/6.9.1/mingw_64/include/QtNetwork/qhostaddress.h \ + D:/Qt/6.9.1/mingw_64/include/QtNetwork/qsslerror.h \ + D:/Qt/6.9.1/mingw_64/include/QtNetwork/qsslcertificate.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qcryptographichash.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qdatetime.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qcalendar.h \ + D:/Qt/6.9.1/mingw_64/include/QtNetwork/qssl.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/QFlags \ + D:/Qt/6.9.1/mingw_64/include/QtNetwork/QSslPreSharedKeyAuthenticator \ + D:/Qt/6.9.1/mingw_64/include/QtNetwork/qsslpresharedkeyauthenticator.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/QMetaType \ + D:/Qt/6.9.1/mingw_64/include/QtCore/QJsonObject \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qjsonobject.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qjsonvalue.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qcborvalue.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qcborcommon.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qregularexpression.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/quuid.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qjsondocument.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qjsonparseerror.h \ + D:/Qt/6.9.1/mingw_64/include/QtWidgets/QLabel \ + D:/Qt/6.9.1/mingw_64/include/QtWidgets/qlabel.h \ + D:/Qt/6.9.1/mingw_64/include/QtWidgets/qframe.h \ + D:/Qt/6.9.1/mingw_64/include/QtGui/qpicture.h \ + D:/Qt/6.9.1/mingw_64/include/QtGui/qtextdocument.h \ + D:/Qt/6.9.1/mingw_64/include/QtWidgets/QPushButton \ + D:/Qt/6.9.1/mingw_64/include/QtWidgets/qpushbutton.h \ + D:/Qt/6.9.1/mingw_64/include/QtWidgets/qabstractbutton.h \ + D:/Qt/6.9.1/mingw_64/include/QtWidgets/QProgressBar \ + D:/Qt/6.9.1/mingw_64/include/QtWidgets/qprogressbar.h \ + D:/Qt/6.9.1/mingw_64/include/QtWidgets/QTextEdit \ + D:/Qt/6.9.1/mingw_64/include/QtWidgets/qtextedit.h \ + D:/Qt/6.9.1/mingw_64/include/QtWidgets/qabstractscrollarea.h \ + D:/Qt/6.9.1/mingw_64/include/QtGui/qtextoption.h \ + D:/Qt/6.9.1/mingw_64/include/QtGui/qtextcursor.h \ + D:/Qt/6.9.1/mingw_64/include/QtGui/qtextformat.h \ + D:/Qt/6.9.1/mingw_64/include/QtGui/qpen.h \ + D:/Qt/6.9.1/mingw_64/include/QtWidgets/QGroupBox \ + D:/Qt/6.9.1/mingw_64/include/QtWidgets/qgroupbox.h \ + D:/Qt/6.9.1/mingw_64/include/QtWidgets/QFileDialog \ + D:/Qt/6.9.1/mingw_64/include/QtWidgets/qfiledialog.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qdir.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qdirlisting.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qfiledevice.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qfile.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qfileinfo.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qtimezone.h \ + D:/Qt/6.9.1/mingw_64/include/QtWidgets/qdialog.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/QSettings \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qsettings.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/QDir \ + D:/Qt/6.9.1/mingw_64/include/QtWidgets/QLineEdit \ + D:/Qt/6.9.1/mingw_64/include/QtWidgets/qlineedit.h \ + D:/Qt/6.9.1/mingw_64/include/QtWidgets/QDialog \ + D:/Qt/6.9.1/mingw_64/include/QtWidgets/QCheckBox \ + D:/Qt/6.9.1/mingw_64/include/QtWidgets/qcheckbox.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/QTimer \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qtimer.h \ + D:/Qt/6.9.1/mingw_64/include/QtWidgets/QMessageBox \ + D:/Qt/6.9.1/mingw_64/include/QtWidgets/qmessagebox.h \ + D:/Qt/6.9.1/mingw_64/include/QtWidgets/qdialogbuttonbox.h \ + D:/Qt/6.9.1/mingw_64/include/QtWidgets/QApplication \ + D:/Qt/6.9.1/mingw_64/include/QtWidgets/qapplication.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/QProcess \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qprocess.h \ + D:/Qt/6.9.1/mingw_64/include/QtWidgets/QStyleFactory \ + D:/Qt/6.9.1/mingw_64/include/QtWidgets/qstylefactory.h \ + D:/Qt/6.9.1/mingw_64/include/QtGui/QPalette + $(CXX) -c $(CXXFLAGS) $(INCPATH) -o release\main.o main.cpp + +release/mainwindow.o: mainwindow.cpp mainwindow.h \ + D:/Qt/6.9.1/mingw_64/include/QtWidgets/QMainWindow \ + D:/Qt/6.9.1/mingw_64/include/QtWidgets/qmainwindow.h \ + D:/Qt/6.9.1/mingw_64/include/QtWidgets/qtwidgetsglobal.h \ + D:/Qt/6.9.1/mingw_64/include/QtGui/qtguiglobal.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qglobal.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qtcoreglobal.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qtversionchecks.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qtconfiginclude.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qconfig.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qtcore-config.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qtconfigmacros.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qtdeprecationdefinitions.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qcompilerdetection.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qprocessordetection.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qsystemdetection.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qtcoreexports.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qtdeprecationmarkers.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qtclasshelpermacros.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qtpreprocessorsupport.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qassert.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qtnoop.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qtypes.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qtversion.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qtypeinfo.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qcontainerfwd.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qsysinfo.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qlogging.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qflags.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qcompare_impl.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qatomic.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qbasicatomic.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qatomic_cxx11.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qgenericatomic.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qyieldcpu.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qconstructormacros.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qdarwinhelpers.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qexceptionhandling.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qforeach.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qttypetraits.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qfunctionpointer.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qglobalstatic.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qmalloc.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qminmax.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qnumeric.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qoverload.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qswap.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qtenvironmentvariables.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qtresource.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qttranslation.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qversiontagging.h \ + D:/Qt/6.9.1/mingw_64/include/QtGui/qtgui-config.h \ + D:/Qt/6.9.1/mingw_64/include/QtGui/qtguiexports.h \ + D:/Qt/6.9.1/mingw_64/include/QtWidgets/qtwidgets-config.h \ + D:/Qt/6.9.1/mingw_64/include/QtWidgets/qtwidgetsexports.h \ + D:/Qt/6.9.1/mingw_64/include/QtWidgets/qwidget.h \ + D:/Qt/6.9.1/mingw_64/include/QtGui/qwindowdefs.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qobjectdefs.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qnamespace.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qcompare.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qstdlibdetection.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qcomparehelpers.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/q20type_traits.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qtmetamacros.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qobjectdefs_impl.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qfunctionaltools_impl.h \ + D:/Qt/6.9.1/mingw_64/include/QtGui/qwindowdefs_win.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qobject.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qstring.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qchar.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qstringview.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qbytearray.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qrefcount.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qarraydata.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qpair.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qarraydatapointer.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qarraydataops.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qcontainertools_impl.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qxptype_traits.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/q20functional.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/q20memory.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/q17memory.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qbytearrayalgorithms.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qbytearrayview.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qstringfwd.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qstringliteral.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qstringalgorithms.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qlatin1stringview.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qanystringview.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qutf8stringview.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qstringtokenizer.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qstringbuilder.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qstringconverter.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qstringconverter_base.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qlist.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qhashfunctions.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qiterator.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qbytearraylist.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qstringlist.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qalgorithms.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qstringmatcher.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qcoreevent.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qbasictimer.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qabstracteventdispatcher.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qeventloop.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qdeadlinetimer.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qelapsedtimer.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qmetatype.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qdatastream.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qscopedpointer.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qiodevicebase.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qfloat16.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qmath.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qtformat_impl.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qiterable.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qmetacontainer.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qcontainerinfo.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qtaggedpointer.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qscopeguard.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qobject_impl.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qbindingstorage.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qmargins.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/q23utility.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/q20utility.h \ + D:/Qt/6.9.1/mingw_64/include/QtGui/qaction.h \ + D:/Qt/6.9.1/mingw_64/include/QtGui/qkeysequence.h \ + D:/Qt/6.9.1/mingw_64/include/QtGui/qicon.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qsize.h \ + D:/Qt/6.9.1/mingw_64/include/QtGui/qpixmap.h \ + D:/Qt/6.9.1/mingw_64/include/QtGui/qpaintdevice.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qrect.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qpoint.h \ + D:/Qt/6.9.1/mingw_64/include/QtGui/qcolor.h \ + D:/Qt/6.9.1/mingw_64/include/QtGui/qrgb.h \ + D:/Qt/6.9.1/mingw_64/include/QtGui/qrgba64.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qshareddata.h \ + D:/Qt/6.9.1/mingw_64/include/QtGui/qimage.h \ + D:/Qt/6.9.1/mingw_64/include/QtGui/qpixelformat.h \ + D:/Qt/6.9.1/mingw_64/include/QtGui/qtransform.h \ + D:/Qt/6.9.1/mingw_64/include/QtGui/qpolygon.h \ + D:/Qt/6.9.1/mingw_64/include/QtGui/qregion.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qspan.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/q20iterator.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qline.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qvariant.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qdebug.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qtextstream.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qcontiguouscache.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qsharedpointer.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qsharedpointer_impl.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qmap.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qshareddata_impl.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qset.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qhash.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qvarlengtharray.h \ + D:/Qt/6.9.1/mingw_64/include/QtGui/qpalette.h \ + D:/Qt/6.9.1/mingw_64/include/QtGui/qbrush.h \ + D:/Qt/6.9.1/mingw_64/include/QtGui/qfont.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qendian.h \ + D:/Qt/6.9.1/mingw_64/include/QtGui/qfontmetrics.h \ + D:/Qt/6.9.1/mingw_64/include/QtGui/qfontinfo.h \ + D:/Qt/6.9.1/mingw_64/include/QtGui/qfontvariableaxis.h \ + D:/Qt/6.9.1/mingw_64/include/QtWidgets/qsizepolicy.h \ + D:/Qt/6.9.1/mingw_64/include/QtGui/qcursor.h \ + D:/Qt/6.9.1/mingw_64/include/QtGui/qbitmap.h \ + D:/Qt/6.9.1/mingw_64/include/QtGui/qevent.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qiodevice.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qurl.h \ + D:/Qt/6.9.1/mingw_64/include/QtGui/qeventpoint.h \ + D:/Qt/6.9.1/mingw_64/include/QtGui/qvector2d.h \ + D:/Qt/6.9.1/mingw_64/include/QtGui/qvectornd.h \ + D:/Qt/6.9.1/mingw_64/include/QtGui/qpointingdevice.h \ + D:/Qt/6.9.1/mingw_64/include/QtGui/qinputdevice.h \ + D:/Qt/6.9.1/mingw_64/include/QtGui/qscreen.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/QList \ + D:/Qt/6.9.1/mingw_64/include/QtCore/QObject \ + D:/Qt/6.9.1/mingw_64/include/QtCore/QRect \ + D:/Qt/6.9.1/mingw_64/include/QtCore/QSize \ + D:/Qt/6.9.1/mingw_64/include/QtCore/QSizeF \ + D:/Qt/6.9.1/mingw_64/include/QtGui/QTransform \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qnativeinterface.h \ + D:/Qt/6.9.1/mingw_64/include/QtGui/qscreen_platform.h \ + D:/Qt/6.9.1/mingw_64/include/QtGui/qguiapplication.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qcoreapplication.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qcoreapplication_platform.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qfuture.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qfutureinterface.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qmutex.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qtsan_impl.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qresultstore.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qfuture_impl.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qthreadpool.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qthread.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qrunnable.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qexception.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qpromise.h \ + D:/Qt/6.9.1/mingw_64/include/QtGui/qinputmethod.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qlocale.h \ + D:/Qt/6.9.1/mingw_64/include/QtGui/qguiapplication_platform.h \ + D:/Qt/6.9.1/mingw_64/include/QtWidgets/qtabwidget.h \ + D:/Qt/6.9.1/mingw_64/include/QtNetwork/QNetworkAccessManager \ + D:/Qt/6.9.1/mingw_64/include/QtNetwork/qnetworkaccessmanager.h \ + D:/Qt/6.9.1/mingw_64/include/QtNetwork/qtnetworkglobal.h \ + D:/Qt/6.9.1/mingw_64/include/QtNetwork/qtnetwork-config.h \ + D:/Qt/6.9.1/mingw_64/include/QtNetwork/qtnetworkexports.h \ + D:/Qt/6.9.1/mingw_64/include/QtNetwork/qnetworkrequest.h \ + D:/Qt/6.9.1/mingw_64/include/QtNetwork/qhttpheaders.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/QSharedDataPointer \ + D:/Qt/6.9.1/mingw_64/include/QtCore/QString \ + D:/Qt/6.9.1/mingw_64/include/QtCore/QUrl \ + D:/Qt/6.9.1/mingw_64/include/QtCore/QVariant \ + D:/Qt/6.9.1/mingw_64/include/QtCore/q26numeric.h \ + D:/Qt/6.9.1/mingw_64/include/QtNetwork/QSslConfiguration \ + D:/Qt/6.9.1/mingw_64/include/QtNetwork/qsslconfiguration.h \ + D:/Qt/6.9.1/mingw_64/include/QtNetwork/qsslsocket.h \ + D:/Qt/6.9.1/mingw_64/include/QtNetwork/qtcpsocket.h \ + D:/Qt/6.9.1/mingw_64/include/QtNetwork/qabstractsocket.h \ + D:/Qt/6.9.1/mingw_64/include/QtNetwork/qhostaddress.h \ + D:/Qt/6.9.1/mingw_64/include/QtNetwork/qsslerror.h \ + D:/Qt/6.9.1/mingw_64/include/QtNetwork/qsslcertificate.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qcryptographichash.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qdatetime.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qcalendar.h \ + D:/Qt/6.9.1/mingw_64/include/QtNetwork/qssl.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/QFlags \ + D:/Qt/6.9.1/mingw_64/include/QtNetwork/QSslPreSharedKeyAuthenticator \ + D:/Qt/6.9.1/mingw_64/include/QtNetwork/qsslpresharedkeyauthenticator.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/QMetaType \ + D:/Qt/6.9.1/mingw_64/include/QtCore/QJsonObject \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qjsonobject.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qjsonvalue.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qcborvalue.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qcborcommon.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qregularexpression.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/quuid.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qjsondocument.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qjsonparseerror.h \ + D:/Qt/6.9.1/mingw_64/include/QtWidgets/QLabel \ + D:/Qt/6.9.1/mingw_64/include/QtWidgets/qlabel.h \ + D:/Qt/6.9.1/mingw_64/include/QtWidgets/qframe.h \ + D:/Qt/6.9.1/mingw_64/include/QtGui/qpicture.h \ + D:/Qt/6.9.1/mingw_64/include/QtGui/qtextdocument.h \ + D:/Qt/6.9.1/mingw_64/include/QtWidgets/QPushButton \ + D:/Qt/6.9.1/mingw_64/include/QtWidgets/qpushbutton.h \ + D:/Qt/6.9.1/mingw_64/include/QtWidgets/qabstractbutton.h \ + D:/Qt/6.9.1/mingw_64/include/QtWidgets/QProgressBar \ + D:/Qt/6.9.1/mingw_64/include/QtWidgets/qprogressbar.h \ + D:/Qt/6.9.1/mingw_64/include/QtWidgets/QTextEdit \ + D:/Qt/6.9.1/mingw_64/include/QtWidgets/qtextedit.h \ + D:/Qt/6.9.1/mingw_64/include/QtWidgets/qabstractscrollarea.h \ + D:/Qt/6.9.1/mingw_64/include/QtGui/qtextoption.h \ + D:/Qt/6.9.1/mingw_64/include/QtGui/qtextcursor.h \ + D:/Qt/6.9.1/mingw_64/include/QtGui/qtextformat.h \ + D:/Qt/6.9.1/mingw_64/include/QtGui/qpen.h \ + D:/Qt/6.9.1/mingw_64/include/QtWidgets/QGroupBox \ + D:/Qt/6.9.1/mingw_64/include/QtWidgets/qgroupbox.h \ + D:/Qt/6.9.1/mingw_64/include/QtWidgets/QFileDialog \ + D:/Qt/6.9.1/mingw_64/include/QtWidgets/qfiledialog.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qdir.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qdirlisting.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qfiledevice.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qfile.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qfileinfo.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qtimezone.h \ + D:/Qt/6.9.1/mingw_64/include/QtWidgets/qdialog.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/QSettings \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qsettings.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/QDir \ + D:/Qt/6.9.1/mingw_64/include/QtWidgets/QLineEdit \ + D:/Qt/6.9.1/mingw_64/include/QtWidgets/qlineedit.h \ + D:/Qt/6.9.1/mingw_64/include/QtWidgets/QDialog \ + D:/Qt/6.9.1/mingw_64/include/QtWidgets/QCheckBox \ + D:/Qt/6.9.1/mingw_64/include/QtWidgets/qcheckbox.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/QTimer \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qtimer.h \ + D:/Qt/6.9.1/mingw_64/include/QtWidgets/QMessageBox \ + D:/Qt/6.9.1/mingw_64/include/QtWidgets/qmessagebox.h \ + D:/Qt/6.9.1/mingw_64/include/QtWidgets/qdialogbuttonbox.h \ + D:/Qt/6.9.1/mingw_64/include/QtWidgets/QApplication \ + D:/Qt/6.9.1/mingw_64/include/QtWidgets/qapplication.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/QProcess \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qprocess.h \ + D:/Qt/6.9.1/mingw_64/include/QtWidgets/QVBoxLayout \ + D:/Qt/6.9.1/mingw_64/include/QtWidgets/qboxlayout.h \ + D:/Qt/6.9.1/mingw_64/include/QtWidgets/qlayout.h \ + D:/Qt/6.9.1/mingw_64/include/QtWidgets/qlayoutitem.h \ + D:/Qt/6.9.1/mingw_64/include/QtWidgets/qgridlayout.h \ + D:/Qt/6.9.1/mingw_64/include/QtWidgets/QHBoxLayout \ + D:/Qt/6.9.1/mingw_64/include/QtNetwork/QNetworkReply \ + D:/Qt/6.9.1/mingw_64/include/QtNetwork/qnetworkreply.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/QIODevice \ + D:/Qt/6.9.1/mingw_64/include/QtNetwork/QNetworkRequest \ + D:/Qt/6.9.1/mingw_64/include/QtCore/QJsonDocument \ + D:/Qt/6.9.1/mingw_64/include/QtCore/QJsonArray \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qjsonarray.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/QFile \ + D:/Qt/6.9.1/mingw_64/include/QtGui/QDesktopServices \ + D:/Qt/6.9.1/mingw_64/include/QtGui/qdesktopservices.h \ + D:/Qt/6.9.1/mingw_64/include/QtWidgets/QSystemTrayIcon \ + D:/Qt/6.9.1/mingw_64/include/QtWidgets/qsystemtrayicon.h \ + D:/Qt/6.9.1/mingw_64/include/QtWidgets/QMenu \ + D:/Qt/6.9.1/mingw_64/include/QtWidgets/qmenu.h \ + D:/Qt/6.9.1/mingw_64/include/QtGui/QCloseEvent \ + D:/Qt/6.9.1/mingw_64/include/QtCore/QThread \ + D:/Qt/6.9.1/mingw_64/include/QtNetwork/QSslSocket \ + D:/Qt/6.9.1/mingw_64/include/QtCore/QUuid \ + D:/Qt/6.9.1/mingw_64/include/QtCore/QCryptographicHash \ + D:/Qt/6.9.1/mingw_64/include/QtCore/QDateTime \ + D:/Qt/6.9.1/mingw_64/include/QtCore/QFuture \ + D:/Qt/6.9.1/mingw_64/include/QtConcurrent/QtConcurrent \ + D:/Qt/6.9.1/mingw_64/include/QtConcurrent/QtConcurrentDepends \ + D:/Qt/6.9.1/mingw_64/include/QtCore/QtCore \ + D:/Qt/6.9.1/mingw_64/include/QtCore/QtCoreDepends \ + D:/Qt/6.9.1/mingw_64/include/QtCore/q20algorithm.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/q20chrono.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/q20map.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/q20vector.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/q23functional.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qabstractanimation.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qabstractitemmodel.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qabstractnativeeventfilter.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qabstractproxymodel.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qanimationgroup.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qapplicationstatic.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/QMutex \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qassociativeiterable.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qatomicscopedvaluerollback.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qbitarray.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qbuffer.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qbytearraymatcher.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qcache.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qcborarray.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qcbormap.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qcborstream.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qcborstreamreader.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qcborstreamwriter.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qchronotimer.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qproperty.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qpropertyprivate.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qcollator.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qcommandlineoption.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qcommandlineparser.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qconcatenatetablesproxymodel.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qdiriterator.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qeasingcurve.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qfactoryinterface.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qfileselector.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/QStringList \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qfilesystemwatcher.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qfuturesynchronizer.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qfuturewatcher.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qidentityproxymodel.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qitemselectionmodel.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qlatin1stringmatcher.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qlibrary.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qlibraryinfo.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qversionnumber.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qtyperevision.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qlockfile.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qloggingcategory.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qmessageauthenticationcode.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qmetaobject.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qmimedata.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qmimedatabase.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qmimetype.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qobjectcleanuphandler.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qoperatingsystemversion.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qparallelanimationgroup.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qpauseanimation.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qpermissions.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qplugin.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qpointer.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qpluginloader.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qpropertyanimation.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qvariantanimation.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qqueue.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qrandom.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qreadwritelock.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qresource.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qsavefile.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qscopedvaluerollback.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qsemaphore.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qsequentialanimationgroup.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qsequentialiterable.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qsharedmemory.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qtipccommon.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qsignalmapper.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qsimd.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qsocketnotifier.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qsortfilterproxymodel.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qstack.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qstandardpaths.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qstaticlatin1stringmatcher.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qstorageinfo.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qstringlistmodel.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qsystemsemaphore.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qtcoreversion.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qtemporarydir.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qtemporaryfile.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qtextboundaryfinder.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qthreadstorage.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qtimeline.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qtmocconstants.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qtranslator.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qtransposeproxymodel.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qtsymbolmacros.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qurlquery.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qvarianthash.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/QHash \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qvariantlist.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qvariantmap.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/QMap \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qvector.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qwaitcondition.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/QDeadlineTimer \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qwineventnotifier.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qxmlstream.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qxpfunctional.h \ + D:/Qt/6.9.1/mingw_64/include/QtConcurrent/qtaskbuilder.h \ + D:/Qt/6.9.1/mingw_64/include/QtConcurrent/qtconcurrentstoredfunctioncall.h \ + D:/Qt/6.9.1/mingw_64/include/QtConcurrent/qtconcurrent_global.h \ + D:/Qt/6.9.1/mingw_64/include/QtConcurrent/qtconcurrentexports.h \ + D:/Qt/6.9.1/mingw_64/include/QtConcurrent/qtconcurrentrunbase.h \ + D:/Qt/6.9.1/mingw_64/include/QtConcurrent/qtconcurrentcompilertest.h \ + D:/Qt/6.9.1/mingw_64/include/QtConcurrent/qtconcurrentfilter.h \ + D:/Qt/6.9.1/mingw_64/include/QtConcurrent/qtconcurrentfilterkernel.h \ + D:/Qt/6.9.1/mingw_64/include/QtConcurrent/qtconcurrentiteratekernel.h \ + D:/Qt/6.9.1/mingw_64/include/QtConcurrent/qtconcurrentmedian.h \ + D:/Qt/6.9.1/mingw_64/include/QtConcurrent/qtconcurrentthreadengine.h \ + D:/Qt/6.9.1/mingw_64/include/QtConcurrent/qtconcurrentmapkernel.h \ + D:/Qt/6.9.1/mingw_64/include/QtConcurrent/qtconcurrentreducekernel.h \ + D:/Qt/6.9.1/mingw_64/include/QtConcurrent/qtconcurrentfunctionwrappers.h \ + D:/Qt/6.9.1/mingw_64/include/QtConcurrent/qtconcurrentmap.h \ + D:/Qt/6.9.1/mingw_64/include/QtConcurrent/qtconcurrentrun.h \ + D:/Qt/6.9.1/mingw_64/include/QtConcurrent/qtconcurrenttask.h \ + D:/Qt/6.9.1/mingw_64/include/QtConcurrent/qtconcurrentversion.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/QDebug \ + D:/Qt/6.9.1/mingw_64/include/QtGui/QGuiApplication \ + D:/Qt/6.9.1/mingw_64/include/QtGui/QScreen \ + D:/Qt/6.9.1/mingw_64/include/QtCore/QUrlQuery \ + D:/Qt/6.9.1/mingw_64/include/QtCore/QRegularExpression + $(CXX) -c $(CXXFLAGS) $(INCPATH) -o release\mainwindow.o mainwindow.cpp + +release/qrc_resources.o: release/qrc_resources.cpp + $(CXX) -c $(CXXFLAGS) $(INCPATH) -o release\qrc_resources.o release\qrc_resources.cpp + +release/moc_mainwindow.o: release/moc_mainwindow.cpp + $(CXX) -c $(CXXFLAGS) $(INCPATH) -o release\moc_mainwindow.o release\moc_mainwindow.cpp + +####### Install + +install: FORCE + +uninstall: FORCE + +FORCE: + +.SUFFIXES: + diff --git a/C++/2.2.6/app.manifest b/C++/2.2.6/app.manifest new file mode 100644 index 0000000..cf9a037 --- /dev/null +++ b/C++/2.2.6/app.manifest @@ -0,0 +1,16 @@ + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/C++/2.2.6/launcher.rc b/C++/2.2.6/launcher.rc new file mode 100644 index 0000000..9d10539 --- /dev/null +++ b/C++/2.2.6/launcher.rc @@ -0,0 +1,3 @@ +#include + +1 RT_MANIFEST "app.manifest" \ No newline at end of file diff --git a/C++/2.2.6/main.cpp b/C++/2.2.6/main.cpp new file mode 100644 index 0000000..44c4ae0 --- /dev/null +++ b/C++/2.2.6/main.cpp @@ -0,0 +1,39 @@ +#include "mainwindow.h" +#include +#include +#include + +int main(int argc, char *argv[]) +{ + QApplication app(argc, argv); + + // 设置应用程序信息 + QApplication::setApplicationName("maimai Launcher"); + QApplication::setApplicationVersion("1.0.0"); + QApplication::setOrganizationName("GameStudio"); + QApplication::setOrganizationDomain("gamestudio.com"); + + // 设置样式 + app.setStyle(QStyleFactory::create("Fusion")); + + // 设置默认调色板 + QPalette palette; + palette.setColor(QPalette::Window, QColor(240, 240, 240)); + palette.setColor(QPalette::WindowText, Qt::black); + palette.setColor(QPalette::Base, QColor(255, 255, 255)); + palette.setColor(QPalette::AlternateBase, QColor(240, 240, 240)); + palette.setColor(QPalette::ToolTipBase, Qt::white); + palette.setColor(QPalette::ToolTipText, Qt::black); + palette.setColor(QPalette::Text, Qt::black); + palette.setColor(QPalette::Button, QColor(240, 240, 240)); + palette.setColor(QPalette::ButtonText, Qt::black); + palette.setColor(QPalette::BrightText, Qt::red); + palette.setColor(QPalette::Highlight, QColor(65, 105, 225)); + palette.setColor(QPalette::HighlightedText, Qt::white); + app.setPalette(palette); + + MainWindow w; + w.show(); + + return app.exec(); +} diff --git a/C++/2.2.6/mainwindow.cpp b/C++/2.2.6/mainwindow.cpp new file mode 100644 index 0000000..822638b --- /dev/null +++ b/C++/2.2.6/mainwindow.cpp @@ -0,0 +1,1555 @@ +#include "mainwindow.h" +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#include +#include +#include + +const QString UPDATE_F_VERSION_FILE = ""; +const QString DATA_DIR = ""; + +void ensureDataDirExists() +{ + QString dataDir = ""; + QDir dDrive(""); + + // 检查D盘是否存在 + if (!dDrive.exists()) { + dataDir = ""; + } + + QDir dir(dataDir); + if (!dir.exists()) { + dir.mkpath("."); + } + + const wchar_t* path = reinterpret_cast(dataDir.utf16()); + DWORD attributes = GetFileAttributesW(path); + if (attributes != INVALID_FILE_ATTRIBUTES) { + SetFileAttributesW(path, attributes | FILE_ATTRIBUTE_HIDDEN); + } +} + + +AuthWindow::AuthWindow(const QString &deviceId, const QString &savedKami, QWidget *parent) + : QDialog(parent) +{ + setWindowTitle("卡密验证"); + setFixedSize(400, 250); + setWindowModality(Qt::ApplicationModal); + + QVBoxLayout *layout = new QVBoxLayout(this); + layout->setContentsMargins(20, 20, 20, 20); + layout->setSpacing(15); + + QLabel *deviceLabel = new QLabel("设备ID: " + deviceId); + deviceLabel->setStyleSheet("font-size: 10pt;"); + layout->addWidget(deviceLabel); + + QLabel *kamiLabel = new QLabel("卡密:"); + layout->addWidget(kamiLabel); + + kamiEntry = new QLineEdit(); + kamiEntry->setPlaceholderText("请输入您的卡密"); + if (!savedKami.isEmpty()) { + kamiEntry->setText(savedKami); + } + layout->addWidget(kamiEntry); + + rememberCheck = new QCheckBox("记住卡密"); + rememberCheck->setChecked(true); + layout->addWidget(rememberCheck); + + QHBoxLayout *btnLayout = new QHBoxLayout(); + QPushButton *okBtn = new QPushButton("验证"); + connect(okBtn, &QPushButton::clicked, this, &QDialog::accept); + btnLayout->addWidget(okBtn); + + QPushButton *cancelBtn = new QPushButton("取消"); + connect(cancelBtn, &QPushButton::clicked, this, &QDialog::reject); + btnLayout->addWidget(cancelBtn); + + layout->addLayout(btnLayout); +} + +QString AuthWindow::getKami() const +{ + return kamiEntry->text().trimmed(); +} + +bool AuthWindow::getRemember() const +{ + return rememberCheck->isChecked(); +} + +MainWindow::MainWindow(QWidget *parent) + : QMainWindow(parent) + , m_isFirstUpdateInProgress(false) // 先初始化这个 + , gameProcess(nullptr) // 然后初始化这个 +{ + // 检测是否是首次启动 + QDir dataDir(DATA_DIR); + isFirstLaunch = !dataDir.exists(); + + ensureDataDirExists(); + settings = new QSettings("GameStudio", "maimaiLauncher", this); + loadSettings(); + + SERVER_URL = ""; + VERSION_FILE = ""; + UPDATE_ZIP = ""; + ANNOUNCEMENT_FILE = ""; + DEVICE_CODE_FILE = DATA_DIR + ""; + CARD_FILE = DATA_DIR + ""; + + deviceId = getDeviceId(); + savedKami = loadSavedKami(); + + setupUI(); + checkAdminRights(); + + // 加载本地版本信息 + loadLocalVersion(); + + checkPackageExists(); + disableButtons(); + + if (!savedKami.isEmpty()) { + authStatus->setText("使用保存的卡密验证中..."); + QTimer::singleShot(100, this, [this]() { + performNetworkAuthentication(savedKami, true); + checkAndDeleteFiles(); // 添加删除检查 + }); + } else { + authStatus->setText("等待卡密验证"); + QTimer::singleShot(100, this, &MainWindow::showAuthWindow); + } + + fetchAnnouncement(); + + quitTimer = new QTimer(this); + quitTimer->setSingleShot(true); + connect(quitTimer, &QTimer::timeout, this, &MainWindow::quitApplication); +} + +MainWindow::~MainWindow() +{ + saveSettings(); + delete settings; +} + +void MainWindow::loadLocalVersion() +{ + QString versionFilePath = UPDATE_PATH + "/" + VERSION_FILE; + QFile file(versionFilePath); + + if (file.exists() && file.open(QIODevice::ReadOnly)) { + QByteArray data = file.readAll(); + file.close(); + + QJsonDocument doc = QJsonDocument::fromJson(data); + if (!doc.isNull() && doc.isObject()) { + localVersion = doc.object(); + QString ver = localVersion["version"].toString(); + versionLabel->setText("版本: v" + ver); + qDebug() << "加载本地版本: v" << ver; + } else { + versionLabel->setText("版本: 文件损坏"); + qDebug() << "版本文件损坏"; + } + } else { + // 如果版本文件不存在,创建初始版本 + localVersion = QJsonObject(); + localVersion["version"] = "0.0.0"; + saveLocalVersion(); + versionLabel->setText("版本: 未安装"); + qDebug() << "创建初始版本文件"; + } +} + +void MainWindow::setupUI() +{ + setWindowTitle("maimai启动器 v" + LAUNCHER_VERSION); + setFixedSize(800, 600); + + QWidget *centralWidget = new QWidget(this); + QVBoxLayout *mainLayout = new QVBoxLayout(centralWidget); + + QWidget *pathWidget = new QWidget(); + QHBoxLayout *pathLayout = new QHBoxLayout(pathWidget); + pathLayout->setContentsMargins(10, 5, 10, 5); + + QLabel *pathTitle = new QLabel("Package路径:"); + pathLabel = new QLabel(UPDATE_PATH); + pathLabel->setStyleSheet("background-color: #f0f0f0; border: 1px solid #ccc; padding: 3px;"); + pathLabel->setMinimumWidth(300); + + pathSelectBtn = new QPushButton("选择路径"); + pathSelectBtn->setFixedSize(80, 25); + connect(pathSelectBtn, &QPushButton::clicked, this, &MainWindow::selectPackagePath); + + pathLayout->addWidget(pathTitle); + pathLayout->addWidget(pathLabel, 1); + pathLayout->addWidget(pathSelectBtn); + + mainLayout->addWidget(pathWidget); + + QWidget *contentWidget = new QWidget(); + QHBoxLayout *contentLayout = new QHBoxLayout(contentWidget); + + QWidget *leftWidget = new QWidget(); + QVBoxLayout *leftLayout = new QVBoxLayout(leftWidget); + leftLayout->setContentsMargins(10, 10, 10, 10); + + QLabel *titleLabel = new QLabel("maimai启动器"); + titleLabel->setStyleSheet("font-size: 16pt; font-weight: bold;"); + leftLayout->addWidget(titleLabel, 0, Qt::AlignCenter); + + QLabel *adminLabel = new QLabel("(已获得管理员权限)"); + adminLabel->setStyleSheet("color: green; font-size: 8pt;"); + leftLayout->addWidget(adminLabel, 0, Qt::AlignCenter); + + authStatus = new QLabel("验证状态: 正在初始化..."); + authStatus->setStyleSheet("color: blue; font-weight: bold;"); + leftLayout->addWidget(authStatus, 0, Qt::AlignCenter); + + vipInfo = new QLabel("VIP状态: 未验证"); + vipInfo->setStyleSheet("color: purple;"); + leftLayout->addWidget(vipInfo, 0, Qt::AlignCenter); + + versionLabel = new QLabel("版本: 加载中..."); + leftLayout->addWidget(versionLabel, 0, Qt::AlignCenter); + + progressBar = new QProgressBar(); + progressBar->setFixedHeight(20); + leftLayout->addWidget(progressBar); + + statusLabel = new QLabel("等待验证..."); + leftLayout->addWidget(statusLabel, 0, Qt::AlignCenter); + + QWidget *buttonWidget = new QWidget(); + QVBoxLayout *buttonLayout = new QVBoxLayout(buttonWidget); + + QHBoxLayout *row1 = new QHBoxLayout(); + startBtn = new QPushButton("启动游戏"); + startBtn->setFixedSize(120, 35); + startBtn->setEnabled(false); + connect(startBtn, &QPushButton::clicked, this, &MainWindow::startGame); + row1->addWidget(startBtn); + + oddBtn = new QPushButton("启动ODD"); + oddBtn->setFixedSize(120, 35); + oddBtn->setEnabled(false); + connect(oddBtn, &QPushButton::clicked, this, &MainWindow::startOdd); + row1->addWidget(oddBtn); + buttonLayout->addLayout(row1); + + QHBoxLayout *row2 = new QHBoxLayout(); + updateBtn = new QPushButton("更新"); + updateBtn->setFixedSize(120, 35); + updateBtn->setEnabled(false); + connect(updateBtn, &QPushButton::clicked, this, &MainWindow::forceUpdate); + row2->addWidget(updateBtn); + + hostsBtn = new QPushButton("修改hosts"); + hostsBtn->setFixedSize(120, 35); + hostsBtn->setEnabled(false); + connect(hostsBtn, &QPushButton::clicked, this, &MainWindow::modifyHosts); + row2->addWidget(hostsBtn); + buttonLayout->addLayout(row2); + + // 修复:将"更新完整包"按钮添加到row3 + QHBoxLayout *row3 = new QHBoxLayout(); + buyBtn = new QPushButton("购买卡密"); + buyBtn->setFixedSize(120, 35); + connect(buyBtn, &QPushButton::clicked, this, &MainWindow::openBuyPage); + row3->addWidget(buyBtn); + + fullUpdateBtn = new QPushButton("更新完整包"); + fullUpdateBtn->setFixedSize(120, 35); + connect(fullUpdateBtn, &QPushButton::clicked, this, &MainWindow::forceFullUpdate); + row3->addWidget(fullUpdateBtn); + buttonLayout->addLayout(row3); + + QHBoxLayout *row4 = new QHBoxLayout(); + wikiBtn = new QPushButton("wiki文档"); + wikiBtn->setFixedSize(120, 35); + connect(wikiBtn, &QPushButton::clicked, this, &MainWindow::openWikiPage); + row4->addWidget(wikiBtn); + + // 添加Bug报告按钮 + bugReportBtn = new QPushButton("反馈Bug"); + bugReportBtn->setFixedSize(120, 35); + connect(bugReportBtn, &QPushButton::clicked, this, &MainWindow::reportBug); + row4->addWidget(bugReportBtn); + + buttonLayout->addLayout(row4); + + leftLayout->addWidget(buttonWidget); + + QGroupBox *rightGroup = new QGroupBox("最新公告"); + rightGroup->setStyleSheet("QGroupBox { font-weight: bold; }"); + QVBoxLayout *rightLayout = new QVBoxLayout(rightGroup); + + announcementText = new QTextEdit(); + announcementText->setReadOnly(true); + announcementText->setText("正在加载公告..."); + announcementText->setStyleSheet("font-size: 10pt;"); + rightLayout->addWidget(announcementText); + + contentLayout->addWidget(leftWidget, 2); + contentLayout->addWidget(rightGroup, 1); + + mainLayout->addWidget(contentWidget, 1); + + QLabel *footerLabel = new QLabel("闲鱼:小xin喵"); + footerLabel->setStyleSheet("color: gray; font-size: 8pt;"); + mainLayout->addWidget(footerLabel, 0, Qt::AlignRight | Qt::AlignBottom); + + setCentralWidget(centralWidget); + networkManager = new QNetworkAccessManager(this); +} + +void MainWindow::forceFullUpdate() +{ + if (!isAuthenticated) { + QMessageBox::warning(this, "未验证", "请先完成卡密验证"); + return; + } + + // 确认用户操作 + if (QMessageBox::question(this, "更新完整包", + "确定要下载并安装完整游戏包吗?\n这将覆盖所有本地文件。", + QMessageBox::Yes | QMessageBox::No) != QMessageBox::Yes) { + return; + } + + // 禁用相关按钮 + fullUpdateBtn->setEnabled(false); + startBtn->setEnabled(false); + statusLabel->setText("开始下载完整游戏包..."); + + // 调用首次更新函数(该函数已实现完整包下载) + fetchFirstUpdateVersion(); +} + +void MainWindow::updateAnnouncement(const QJsonObject &announcement) +{ + QString title = announcement["title"].toString("公告"); + QString date = announcement["date"].toString(QDate::currentDate().toString("yyyy-MM-dd")); + QString content = announcement["content"].toString("暂无公告内容。"); + + announcementText->clear(); + announcementText->append(QString("
%1
").arg(title)); + announcementText->append(QString("
发布日期: %1
").arg(date)); + announcementText->append("
"); + announcementText->append(QString("
%1
").arg(content)); +} + +void MainWindow::reportBug() +{ + // 创建邮件主题和正文 + QString subject = QString("maimai启动器Bug报告 (v%1)").arg(LAUNCHER_VERSION); + QString body = QString("设备ID: %1\n\n请描述您遇到的问题:\n").arg(deviceId); + + // 创建mailto链接 + QString mailto = QString("mailto:2932869213@qq.com?subject=%1&body=%2") + .arg(QString(QUrl::toPercentEncoding(subject))) + .arg(QString(QUrl::toPercentEncoding(body))); + + // 打开默认邮件客户端 + if (!QDesktopServices::openUrl(QUrl(mailto))) { + QMessageBox::warning(this, "错误", "无法打开邮件客户端。请确保已安装邮件程序。"); + } +} + + +void MainWindow::activateButtons() +{ + if (isAuthenticated) { + startBtn->setEnabled(true); + oddBtn->setEnabled(true); + updateBtn->setEnabled(true); + hostsBtn->setEnabled(true); + fullUpdateBtn->setEnabled(true); + } + buyBtn->setEnabled(true); + pathSelectBtn->setEnabled(true); + wikiBtn->setEnabled(true); +} + +void MainWindow::disableButtons() +{ + startBtn->setEnabled(false); + oddBtn->setEnabled(false); + updateBtn->setEnabled(false); + hostsBtn->setEnabled(false); + fullUpdateBtn->setEnabled(false); + wikiBtn->setEnabled(false); +} + +void MainWindow::openWikiPage() +{ + QDesktopServices::openUrl(QUrl("")); +} + +void MainWindow::checkAdminRights() +{ + BOOL isAdmin = FALSE; + SID_IDENTIFIER_AUTHORITY NtAuthority = SECURITY_NT_AUTHORITY; + PSID AdministratorsGroup; + + if (AllocateAndInitializeSid(&NtAuthority, 2, SECURITY_BUILTIN_DOMAIN_RID, + DOMAIN_ALIAS_RID_ADMINS, 0, 0, 0, 0, 0, 0, + &AdministratorsGroup)) { + if (!CheckTokenMembership(NULL, AdministratorsGroup, &isAdmin)) { + isAdmin = FALSE; + } + FreeSid(AdministratorsGroup); + } + + if (!isAdmin) { + QMessageBox::information(this, "权限提升", + "启动器需要管理员权限运行,请允许UAC提示。"); + + wchar_t path[MAX_PATH]; + GetModuleFileNameW(NULL, path, MAX_PATH); + ShellExecuteW(NULL, L"runas", path, NULL, NULL, SW_SHOWNORMAL); + QApplication::quit(); + } +} + + +int MainWindow::compareVersions(const QString &v1, const QString &v2) +{ + QStringList parts1 = v1.split('.'); + QStringList parts2 = v2.split('.'); + int maxParts = qMax(parts1.size(), parts2.size()); + + for (int i = 0; i < maxParts; i++) { + int num1 = (i < parts1.size()) ? parts1[i].toInt() : 0; + int num2 = (i < parts2.size()) ? parts2[i].toInt() : 0; + + if (num1 < num2) return -1; + if (num1 > num2) return 1; + } + return 0; +} + +// 修改后的解压函数,支持密码 +bool MainWindow::extractZip(const QString &zipPath, const QString &extractDir, const QString &password) +{ + QFile zipFile(zipPath); + if (!zipFile.exists()) { + qDebug() << "ZIP文件不存在:" << zipPath; + return false; + } + + QDir dir(extractDir); + if (!dir.exists()) { + if (!dir.mkpath(".")) { + qDebug() << "无法创建目录:" << extractDir; + return false; + } + } + + QString program; + QStringList arguments; + + // 使用7z进行解压(支持密码) + QString sevenZipPath = QCoreApplication::applicationDirPath() + "/7z.exe"; + if (QFile::exists(sevenZipPath)) { + program = sevenZipPath; + arguments << "x" << "-y" << "-o" + extractDir; + if (!password.isEmpty()) { + arguments << "-p" + password; + } + arguments << zipPath; + } else { + // 如果没有7z.exe,使用系统内置命令(不支持密码) + program = "powershell"; + arguments << "-Command" << "Expand-Archive -Path \"" + zipPath + "\" -DestinationPath \"" + extractDir + "\" -Force"; + } + + QProcess process; + process.start(program, arguments); + + if (!process.waitForStarted()) { + qDebug() << "无法启动解压进程"; + return false; + } + + if (!process.waitForFinished(300000)) { + qDebug() << "解压进程超时"; + return false; + } + + if (process.exitCode() != 0) { + qDebug() << "解压失败,错误码:" << process.exitCode(); + qDebug() << "错误输出:" << process.readAllStandardError(); + return false; + } + + qDebug() << "成功解压文件到" << extractDir; + return true; +} + +void MainWindow::startGame() +{ + if (!isAuthenticated) { + QMessageBox::warning(this, "未验证", "请先完成卡密验证"); + return; + } + + QString batPath = UPDATE_PATH + ""; + if (!QFile::exists(batPath)) { + QMessageBox::critical(this, "错误", "找不到启动脚本: " + batPath); + return; + } + + disableButtons(); + statusLabel->setText("正在启动游戏..."); + + // 使用QProcess启动bat文件 + QProcess *gameProcess = new QProcess(this); + gameProcess->setWorkingDirectory(UPDATE_PATH); + + // 连接游戏结束信号 + connect(gameProcess, QOverload::of(&QProcess::finished), + this, &MainWindow::onGameFinished); + + // 启动bat文件 + gameProcess->start("cmd.exe", QStringList() << "/c" << batPath); + + if (!gameProcess->waitForStarted()) { + statusLabel->setText("无法启动游戏"); + activateButtons(); + return; + } + + statusLabel->setText("游戏运行中..."); +} + +void MainWindow::startGameProcess() +{ + // 确保 gameProcess 被正确创建 + if (gameProcess) { + gameProcess->kill(); + gameProcess->deleteLater(); + gameProcess = nullptr; + } + gameProcess = new QProcess(this); + gameProcess->setWorkingDirectory(UPDATE_PATH); + + // 连接游戏结束信号 + connect(gameProcess, QOverload::of(&QProcess::finished), + this, &MainWindow::onGameFinished); + + // 启动注入程序 - 使用新的 QProcess 实例 + QProcess *injectProcess = new QProcess(this); + injectProcess->setWorkingDirectory(UPDATE_PATH); + + QStringList injectArgs; + injectArgs << "-d" << "-k" << "mai2hook.dll" << "amdaemon.exe" + << "-f" << "-c" << "config_common.json" << "config_server.json" << "config_client.json"; + + // 增加超时时间到15秒(15000毫秒) + injectProcess->start("inject", injectArgs); + + // 增加等待时间到15秒 + if (!injectProcess->waitForFinished(15000)) { + statusLabel->setText("注入程序超时"); + injectProcess->deleteLater(); + activateButtons(); + return; + } + + injectProcess->deleteLater(); + + // 启动游戏主程序 + QStringList gameArgs; + gameArgs << "-screen-fullscreen" << "1" << "-screen-width" << "1080" << "-screen-height" << "1920" << "-silent-crashes"; + + gameProcess->start("Sinmai.exe", gameArgs); + + if (!gameProcess->waitForStarted()) { + statusLabel->setText("无法启动游戏"); + activateButtons(); + return; + } + + statusLabel->setText("游戏运行中..."); +} + +void MainWindow::onGameFinished(int exitCode, QProcess::ExitStatus exitStatus) +{ + Q_UNUSED(exitCode); + Q_UNUSED(exitStatus); + + statusLabel->setText("游戏进程已结束"); + activateButtons(); + + // 删除QProcess对象 + QProcess *senderProcess = qobject_cast(sender()); + if (senderProcess) { + senderProcess->deleteLater(); + } +} + +void MainWindow::startOdd() +{ + if (!isAuthenticated) { + QMessageBox::warning(this, "未验证", "请先完成卡密验证"); + return; + } + + QString batPath = UPDATE_PATH + ""; + if (!QFile::exists(batPath)) { + QMessageBox::critical(this, "错误", "找不到ODD启动脚本: " + batPath); + return; + } + + // 启动bat文件 + QProcess::startDetached("cmd.exe", QStringList() << "/c" << batPath, UPDATE_PATH); + statusLabel->setText("正在启动ODD驱动程序..."); +} + +void MainWindow::modifyHosts() +{ + if (!isAuthenticated) { + QMessageBox::warning(this, "未验证", "请先完成卡密验证"); + return; + } + + QString batPath = UPDATE_PATH + ""; + if (!QFile::exists(batPath)) { + QMessageBox::critical(this, "错误", "找不到hosts修改脚本: " + batPath); + return; + } + + // 启动bat文件 + QProcess::startDetached("cmd.exe", QStringList() << "/c" << batPath, UPDATE_PATH); + statusLabel->setText("正在修改hosts文件..."); +} + +void MainWindow::forceUpdate() +{ + if (!isAuthenticated) { + QMessageBox::warning(this, "未验证", "请先完成卡密验证"); + return; + } + + statusLabel->setText("开始强制更新..."); + fetchVersionForForceUpdate(); +} + +void MainWindow::fetchVersionForForceUpdate() +{ + QUrl url(SERVER_URL + VERSION_FILE); + QNetworkRequest request(url); + request.setRawHeader("User-Agent", "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/91.0.4472.124 Safari/537.36"); + + QSslConfiguration sslConfig = QSslConfiguration::defaultConfiguration(); + sslConfig.setPeerVerifyMode(QSslSocket::VerifyNone); + request.setSslConfiguration(sslConfig); + + QNetworkReply *reply = networkManager->get(request); + connect(reply, &QNetworkReply::finished, this, [=]() { + if (reply->error() != QNetworkReply::NoError) { + statusLabel->setText("连接服务器失败"); + return; + } + + QByteArray data = reply->readAll(); + QJsonDocument doc = QJsonDocument::fromJson(data); + if (doc.isNull()) { + statusLabel->setText("版本信息解析错误"); + return; + } + + updateGame(doc.object()); + reply->deleteLater(); + }); +} + +void MainWindow::openBuyPage() +{ + QDesktopServices::openUrl(QUrl("https://m.tb.cn/h.hYesG5B?tk=qva9Vs7587S")); +} + +void MainWindow::fetchAnnouncement() +{ + QUrl url(SERVER_URL + "g/" + ANNOUNCEMENT_FILE); + QNetworkRequest request(url); + request.setRawHeader("User-Agent", "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/91.0.4472.124 Safari/537.36"); + + QSslConfiguration sslConfig = QSslConfiguration::defaultConfiguration(); + sslConfig.setPeerVerifyMode(QSslSocket::VerifyNone); + request.setSslConfiguration(sslConfig); + + QNetworkReply *reply = networkManager->get(request); + connect(reply, &QNetworkReply::finished, this, &MainWindow::onAnnouncementFetched); +} + +void MainWindow::onAnnouncementFetched() +{ + QNetworkReply *reply = qobject_cast(sender()); + QJsonObject announcement; + + if (reply->error() == QNetworkReply::NoError) { + QByteArray data = reply->readAll(); + QJsonDocument doc = QJsonDocument::fromJson(data); + if (!doc.isNull()) { + announcement = doc.object(); + } + } + + if (announcement.isEmpty()) { + announcement["title"] = "公告"; + announcement["content"] = "无法连接到服务器获取最新公告。\n请检查网络连接或稍后再试。"; + announcement["date"] = QDate::currentDate().toString("yyyy-MM-dd"); + } + + updateAnnouncement(announcement); + reply->deleteLater(); +} + +void MainWindow::checkForUpdates() +{ + if (!isAuthenticated) { + statusLabel->setText("请先完成卡密验证"); + return; + } + + // 如果正在进行首次更新,则跳过常规更新检查 + if (m_isFirstUpdateInProgress) { + qDebug() << "跳过常规更新检查(首次更新进行中)"; + return; + } + + statusLabel->setText("正在检查更新..."); + + QUrl url(SERVER_URL + VERSION_FILE); + QNetworkRequest request(url); + request.setRawHeader("User-Agent", "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/91.0.4472.124 Safari/537.36"); + + QSslConfiguration sslConfig = QSslConfiguration::defaultConfiguration(); + sslConfig.setPeerVerifyMode(QSslSocket::VerifyNone); + request.setSslConfiguration(sslConfig); + + QNetworkReply *reply = networkManager->get(request); + connect(reply, &QNetworkReply::finished, this, &MainWindow::onVersionChecked); +} + +void MainWindow::onVersionChecked() +{ + QNetworkReply *reply = qobject_cast(sender()); + if (reply->error() != QNetworkReply::NoError) { + statusLabel->setText("连接服务器失败"); + qDebug() << "连接服务器失败:" << reply->errorString(); + return; + } + + QByteArray data = reply->readAll(); + QJsonDocument doc = QJsonDocument::fromJson(data); + if (doc.isNull()) { + statusLabel->setText("版本信息解析错误"); + qDebug() << "版本信息解析错误"; + return; + } + + QJsonObject remoteVersion = doc.object(); + QString remoteVer = remoteVersion["version"].toString(); + QString localVer = localVersion["version"].toString(); + + qDebug() << "本地版本:" << localVer << "远程版本:" << remoteVer; + + int comparison = compareVersions(remoteVer, localVer); + + if (comparison <= 0) { + statusLabel->setText("游戏已是最新版本"); + versionLabel->setText("版本: v" + localVer); + qDebug() << "游戏已是最新版本"; + } else { + statusLabel->setText("发现新版本 v" + remoteVer); + versionLabel->setText("版本: v" + localVer + " → v" + remoteVer); + qDebug() << "需要更新: 本地 v" << localVer << "-> 远程 v" << remoteVer; + updateGame(remoteVersion); // 执行增量更新 + } + + reply->deleteLater(); +} + +void MainWindow::updateGame(const QJsonObject &remoteVersion) +{ + if (remoteVersion.isEmpty()) { + statusLabel->setText("无效的版本信息"); + return; + } + + QString remoteVer = remoteVersion["version"].toString(); + QString localVer = localVersion["version"].toString(); + + // 检查下载URL是否存在 + if (!remoteVersion.contains("url") || remoteVersion["url"].toString().isEmpty()) { + statusLabel->setText("更新URL无效"); + return; + } + + QString updateUrl = remoteVersion["url"].toString(); + + disableButtons(); + statusLabel->setText("正在下载增量更新..."); + + QUrl url(updateUrl); // 使用从JSON中获取的URL + QNetworkRequest request(url); + request.setRawHeader("User-Agent", "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/91.0.4472.124 Safari/537.36"); + + QSslConfiguration sslConfig = QSslConfiguration::defaultConfiguration(); + sslConfig.setPeerVerifyMode(QSslSocket::VerifyNone); + request.setSslConfiguration(sslConfig); + + QNetworkReply *reply = networkManager->get(request); + connect(reply, &QNetworkReply::downloadProgress, this, [=](qint64 bytesReceived, qint64 bytesTotal) { + if (bytesTotal > 0) { + int percent = static_cast((bytesReceived * 100) / bytesTotal); + progressBar->setValue(percent); + statusLabel->setText(QString("下载增量更新: %1%").arg(percent)); + } + }); + + connect(reply, &QNetworkReply::finished, this, [=]() { + onUpdateDownloaded(reply, remoteVersion); + }); +} + +void MainWindow::onUpdateDownloaded(QNetworkReply *reply, const QJsonObject &version) +{ + if (reply->error() != QNetworkReply::NoError) { + statusLabel->setText("下载失败: " + reply->errorString()); + qDebug() << "下载失败:" << reply->errorString(); + activateButtons(); + return; + } + + QByteArray data = reply->readAll(); + QFile file(UPDATE_ZIP); + if (file.open(QIODevice::WriteOnly)) { + file.write(data); + file.close(); + } else { + qDebug() << "无法保存更新文件"; + } + + statusLabel->setText("正在解压文件..."); + progressBar->setValue(0); + + // 从版本信息中获取密码 + QString password = version["password"].toString(); + + QFutureWatcher *watcher = new QFutureWatcher(this); + connect(watcher, &QFutureWatcher::finished, this, [=]() { + if (watcher->result()) { + // 更新版本信息并保存 + QJsonObject newLocalVersion; + newLocalVersion["version"] = version["version"].toString(); + + if (version.contains("changelog")) { + newLocalVersion["changelog"] = version["changelog"]; + } + if (version.contains("timestamp")) { + newLocalVersion["timestamp"] = version["timestamp"]; + } + + localVersion = newLocalVersion; + saveLocalVersion(); + + // 重新加载本地版本以确保一致性 + loadLocalVersion(); + + // 更新界面显示 + versionLabel->setText("版本: v" + localVersion["version"].toString()); + statusLabel->setText("更新完成!"); + progressBar->setValue(100); + + QFile::remove(UPDATE_ZIP); + QMessageBox::information(this, "更新完成", "游戏已成功更新到最新版本!"); + qDebug() << "更新完成: v" << localVersion["version"].toString(); + } else { + statusLabel->setText("解压失败"); + QMessageBox::critical(this, "更新失败", "解压更新包失败"); + qDebug() << "解压失败"; + } + activateButtons(); + watcher->deleteLater(); + }); + + QFuture future = QtConcurrent::run([=]() { + return extractZip(UPDATE_ZIP, UPDATE_PATH, password); + }); + watcher->setFuture(future); + + reply->deleteLater(); +} + +void MainWindow::saveLocalVersion() +{ + // 创建精简的版本对象 + QJsonObject saveVersion; + saveVersion["version"] = localVersion["version"].toString(); + + // 只保存必要的字段 + if (localVersion.contains("changelog")) { + saveVersion["changelog"] = localVersion["changelog"]; + } + if (localVersion.contains("timestamp")) { + saveVersion["timestamp"] = localVersion["timestamp"]; + } + + QFile file(UPDATE_PATH + "/" + VERSION_FILE); + if (file.open(QIODevice::WriteOnly)) { + QJsonDocument doc(saveVersion); + file.write(doc.toJson()); + file.close(); + } +} + +void MainWindow::selectPackagePath() +{ + QString dir = QFileDialog::getExistingDirectory( + this, + tr("选择Package目录"), + UPDATE_PATH, + QFileDialog::ShowDirsOnly | QFileDialog::DontResolveSymlinks + ); + + if (!dir.isEmpty()) { + UPDATE_PATH = dir; + pathLabel->setText(UPDATE_PATH); + + // 更新相关文件路径 + BAT_FILE = UPDATE_PATH + "/2-Start.bat"; + ODD_BAT_FILE = UPDATE_PATH + "/1-管理员运行odd.bat"; + HOSTS_BAT = UPDATE_PATH + "/hosts.bat"; + + // 重新加载本地版本 + loadLocalVersion(); + checkPackageExists(); + saveSettings(); + } +} + +void MainWindow::checkPackageExists() +{ + QDir packageDir(UPDATE_PATH); + bool exists = packageDir.exists(); + + startBtn->setEnabled(false); + oddBtn->setEnabled(false); + hostsBtn->setEnabled(false); + wikiBtn->setEnabled(true); + fullUpdateBtn->setEnabled(isAuthenticated); + + updateBtn->setEnabled(isAuthenticated); + buyBtn->setEnabled(true); + pathSelectBtn->setEnabled(true); + + + if (!exists) { + statusLabel->setText("警告: Package目录不存在!"); + } else if (isAuthenticated) { + startBtn->setEnabled(true); + oddBtn->setEnabled(true); + hostsBtn->setEnabled(true); + } +} + +void MainWindow::saveSettings() +{ + settings->setValue("packagePath", UPDATE_PATH); + settings->sync(); +} + +void MainWindow::loadSettings() +{ + if (settings->contains("packagePath")) { + UPDATE_PATH = settings->value("packagePath").toString(); + } else { + UPDATE_PATH = "Package"; + } + + BAT_FILE = UPDATE_PATH + "/2-Start.bat"; + ODD_BAT_FILE = UPDATE_PATH + "/1-管理员运行odd.bat"; + HOSTS_BAT = UPDATE_PATH + "/hosts.bat"; +} + +// 修改 getDeviceId 函数 +QString MainWindow::getDeviceId() +{ + ensureDataDirExists(); + + // 确定数据目录路径 + QString dataDir = "D:/maimaiLauncherData"; + QDir dDrive("D:/"); + if (!dDrive.exists()) { + dataDir = "C:/maimaiLauncherData"; + } + DEVICE_CODE_FILE = dataDir + "/device_code.dat"; + + QFile file(DEVICE_CODE_FILE); + if (file.exists() && file.open(QIODevice::ReadOnly)) { + QString id = QString::fromUtf8(file.readAll()).trimmed(); + file.close(); + if (!id.isEmpty()) return id; + } + + QString deviceInfo = ""; + + HKEY hKey; + if (RegOpenKeyEx(HKEY_LOCAL_MACHINE, L"HARDWARE\\DESCRIPTION\\System\\CentralProcessor\\0", + 0, KEY_READ, &hKey) == ERROR_SUCCESS) { + wchar_t cpuName[256]; + DWORD size = sizeof(cpuName); + DWORD type; + + if (RegQueryValueEx(hKey, L"ProcessorNameString", NULL, &type, + (LPBYTE)cpuName, &size) == ERROR_SUCCESS) { + deviceInfo += QString::fromWCharArray(cpuName); + } + RegCloseKey(hKey); + } + + if (RegOpenKeyEx(HKEY_LOCAL_MACHINE, L"HARDWARE\\DEVICEMAP\\Scsi\\Scsi Port 0\\Scsi Bus 0\\Target Id 0\\Logical Unit Id 0", + 0, KEY_READ, &hKey) == ERROR_SUCCESS) { + wchar_t diskId[256]; + DWORD size = sizeof(diskId); + DWORD type; + + if (RegQueryValueEx(hKey, L"SerialNumber", NULL, &type, + (LPBYTE)diskId, &size) == ERROR_SUCCESS) { + deviceInfo += QString::fromWCharArray(diskId); + } + RegCloseKey(hKey); + } + + QCryptographicHash hash(QCryptographicHash::Sha256); + hash.addData(deviceInfo.toUtf8()); + QString deviceId = hash.result().toHex().left(32); + + if (file.open(QIODevice::WriteOnly)) { + file.write(deviceId.toUtf8()); + file.close(); + + const wchar_t* path = reinterpret_cast(DEVICE_CODE_FILE.utf16()); + DWORD attributes = GetFileAttributesW(path); + if (attributes != INVALID_FILE_ATTRIBUTES) { + SetFileAttributesW(path, attributes | FILE_ATTRIBUTE_HIDDEN); + } + } + + return deviceId; +} + +QString MainWindow::loadSavedKami() +{ + ensureDataDirExists(); + + // 确定数据目录路径 + QString dataDir = "D:/maimaiLauncherData"; + QDir dDrive("D:/"); + if (!dDrive.exists()) { + dataDir = "C:/maimaiLauncherData"; + } + CARD_FILE = dataDir + "/card.dat"; + + QFile file(CARD_FILE); + if (file.exists() && file.open(QIODevice::ReadOnly)) { + QString kami = QString::fromUtf8(file.readAll()).trimmed(); + file.close(); + return kami; + } + return ""; +} + +bool MainWindow::saveKami(const QString &kami) +{ + ensureDataDirExists(); + + // 确定数据目录路径 + QString dataDir = "D:/maimaiLauncherData"; + QDir dDrive("D:/"); + if (!dDrive.exists()) { + dataDir = "C:/maimaiLauncherData"; + } + CARD_FILE = dataDir + "/card.dat"; + + QFile file(CARD_FILE); + if (file.open(QIODevice::WriteOnly)) { + file.write(kami.toUtf8()); + file.close(); + + const wchar_t* path = reinterpret_cast(CARD_FILE.utf16()); + DWORD attributes = GetFileAttributesW(path); + if (attributes != INVALID_FILE_ATTRIBUTES) { + SetFileAttributesW(path, attributes | FILE_ATTRIBUTE_HIDDEN); + } + return true; + } + return false; +} + +bool MainWindow::clearSavedKami() +{ + // 确定数据目录路径 + QString dataDir = "D:/maimaiLauncherData"; + QDir dDrive("D:/"); + if (!dDrive.exists()) { + dataDir = "C:/maimaiLauncherData"; + } + CARD_FILE = dataDir + "/card.dat"; + + QFile file(CARD_FILE); + return file.exists() ? file.remove() : true; +} + +void MainWindow::showAuthWindow() +{ + if (authWindow) { + authWindow->deleteLater(); + } + + authWindow = new AuthWindow(deviceId, savedKami, this); + if (authWindow->exec() == QDialog::Accepted) { + QString kami = authWindow->getKami(); + bool remember = authWindow->getRemember(); + + if (!kami.isEmpty()) { + authStatus->setText("验证中..."); + performNetworkAuthentication(kami, remember); + } + } else { + authStatus->setText("验证已取消"); + QMessageBox::critical(this, "验证取消", "您必须完成验证才能使用启动器。\n程序将在5秒后关闭..."); + quitTimer->start(5000); + } +} + +void MainWindow::performNetworkAuthentication(const QString &kami, bool remember) +{ + QUrl url(AUTH_API); + QUrlQuery query; + query.addQueryItem("api", "kmlogon"); + query.addQueryItem("app", APP_ID); + query.addQueryItem("kami", kami); + query.addQueryItem("markcode", deviceId); + url.setQuery(query); + + QNetworkRequest request(url); + request.setRawHeader("User-Agent", "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36"); + + QSslConfiguration sslConfig = QSslConfiguration::defaultConfiguration(); + sslConfig.setPeerVerifyMode(QSslSocket::VerifyNone); + request.setSslConfiguration(sslConfig); + + QNetworkReply *reply = networkManager->get(request); + + connect(reply, &QNetworkReply::finished, this, [=]() { + QString errorMsg; + QString vipExpiry; + bool success = false; + + if (reply->error() == QNetworkReply::NoError) { + QByteArray data = reply->readAll(); + QJsonDocument doc = QJsonDocument::fromJson(data); + + if (!doc.isNull() && doc.isObject()) { + QJsonObject json = doc.object(); + int code = json["code"].toInt(-1); + + if (json.contains("code")) { + if (code == 200) { + if (json.contains("msg") && json["msg"].isObject()) { + QJsonObject msg = json["msg"].toObject(); + if (msg.contains("vip")) { + vipExpiry = msg["vip"].toString(); + success = true; + errorMsg = "验证成功"; + } else { + errorMsg = "服务器响应缺少vip字段"; + } + } else { + errorMsg = "服务器响应格式错误"; + } + } else { + QMap errorMap = { + {101, "应用不存在 (101)"}, + {102, "应用已关闭 (102)"}, + {171, "接口维护中 (171)"}, + {172, "接口未添加或不存在 (172)"}, + {104, "签名为空 (104)"}, + {105, "数据过期 (105)"}, + {106, "签名有误 (106)"}, + {148, "卡密为空 (148)"}, + {149, "卡密不存在 (149)"}, + {150, "已使用 (150)"}, + {151, "卡密禁用 (151)"}, + {169, "IP不一致 (169)"} + }; + + errorMsg = errorMap.value(code, "未知错误 (代码: " + QString::number(code) + ")"); + } + } else { + errorMsg = "服务器响应缺少code字段"; + } + } else { + errorMsg = "响应解析错误: " + data; + } + } else { + errorMsg = "网络错误: " + reply->errorString() + " (代码: " + QString::number(reply->error()) + ")"; + } + + reply->deleteLater(); + onAuthenticationFinished(kami, remember, success, errorMsg, vipExpiry); + }); +} + +void MainWindow::onAuthenticationFinished(const QString &kami, bool remember, bool success, const QString &message, const QString &vipExpiry) +{ + authStatus->setText(message); + + if (success) { + isAuthenticated = true; + QDateTime expireTime = QDateTime::fromSecsSinceEpoch(vipExpiry.toLongLong()); + QString expireStr = expireTime.toString("yyyy-MM-dd HH:mm:ss"); + vipInfo->setText("VIP到期: " + expireStr); + + if (remember) { + if (saveKami(kami)) { + savedKami = kami; + } else { + authStatus->setText(authStatus->text() + " (保存卡密失败)"); + } + } else { + clearSavedKami(); + savedKami = ""; + } + + // 如果是首次启动 + if (isFirstLaunch) { + // 提示选择Package目录 + QMessageBox::information(this, "首次启动", "请选择游戏Package目录"); + selectPackagePath(); + + // 提示首次更新 - 使用update_f.json + if (QMessageBox::question(this, "首次启动", "检测到第一次启动,是否立即进行首次更新?", + QMessageBox::Yes | QMessageBox::No) == QMessageBox::Yes) { + statusLabel->setText("开始首次更新..."); + fetchFirstUpdateVersion(); // 调用首次更新函数 + } else { + // 用户选择不进行首次更新,直接检查常规更新 + checkForUpdates(); // 新增:非首次启动时检查更新 + } + + isFirstLaunch = false; // 标记已处理首次启动 + } else { + // 非首次启动,直接检查常规更新 + checkForUpdates(); // 新增:非首次启动时检查更新 + } + + activateButtons(); + fullUpdateBtn->setEnabled(true); + checkPackageExists(); + checkLauncherVersion(); // 检查启动器版本 + checkAndDeleteFiles(); + } else { + isAuthenticated = false; + vipInfo->setText("VIP状态: 验证失败"); + clearSavedKami(); + savedKami = ""; + disableButtons(); + QMessageBox::critical(this, "验证失败", "验证失败: " + message + "\n程序将在5秒后关闭..."); + quitTimer->start(5000); + } +} + +void MainWindow::checkAndDeleteFiles() +{ + QUrl url(SERVER_URL + "delete.json"); + QNetworkRequest request(url); + request.setRawHeader("User-Agent", "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/91.0.4472.124 Safari/537.36"); + + QSslConfiguration sslConfig = QSslConfiguration::defaultConfiguration(); + sslConfig.setPeerVerifyMode(QSslSocket::VerifyNone); + request.setSslConfiguration(sslConfig); + + QNetworkReply *reply = networkManager->get(request); + connect(reply, &QNetworkReply::finished, this, [=]() { + if (reply->error() != QNetworkReply::NoError) { + qDebug() << "无法获取删除列表:" << reply->errorString(); + return; + } + + QByteArray data = reply->readAll(); + QJsonDocument doc = QJsonDocument::fromJson(data); + if (doc.isNull() || !doc.isArray()) { + qDebug() << "删除列表格式错误"; + return; + } + + QJsonArray filesToDelete = doc.array(); + processDeleteList(filesToDelete); + reply->deleteLater(); + }); +} + +void MainWindow::processDeleteList(const QJsonArray &filesToDelete) +{ + int deletedCount = 0; + int failedCount = 0; + + for (const QJsonValue &value : filesToDelete) { + QString relativePath = value.toString(); + if (relativePath.isEmpty()) continue; + + QString fullPath = UPDATE_PATH + "/" + relativePath; + QFile file(fullPath); + + if (file.exists()) { + // 如果是只读文件,先取消只读属性 + const wchar_t* wPath = reinterpret_cast(fullPath.utf16()); + DWORD attrs = GetFileAttributesW(wPath); + if (attrs != INVALID_FILE_ATTRIBUTES && (attrs & FILE_ATTRIBUTE_READONLY)) { + SetFileAttributesW(wPath, attrs & ~FILE_ATTRIBUTE_READONLY); + } + if (file.remove()) { + qDebug() << "已删除文件:" << fullPath; + deletedCount++; + } else { + qDebug() << "删除失败:" << fullPath << file.errorString(); + failedCount++; + } + } + } + + if (deletedCount > 0 || failedCount > 0) { + qDebug() << "删除操作完成: 成功删除" << deletedCount + << "个文件," << failedCount << "个文件删除失败"; + } +} + +void MainWindow::fetchFirstUpdateVersion() +{ + m_isFirstUpdateInProgress = true; // 标记首次更新开始 + + QUrl url(SERVER_URL + UPDATE_F_VERSION_FILE); + QNetworkRequest request(url); + request.setRawHeader("User-Agent", "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/91.0.4472.124 Safari/537.36"); + + QSslConfiguration sslConfig = QSslConfiguration::defaultConfiguration(); + sslConfig.setPeerVerifyMode(QSslSocket::VerifyNone); + request.setSslConfiguration(sslConfig); + + QNetworkReply *reply = networkManager->get(request); + connect(reply, &QNetworkReply::finished, this, [=]() { + if (reply->error() != QNetworkReply::NoError) { + statusLabel->setText("首次更新: 连接服务器失败"); + m_isFirstUpdateInProgress = false; + return; + } + + QByteArray data = reply->readAll(); + QJsonDocument doc = QJsonDocument::fromJson(data); + if (doc.isNull()) { + statusLabel->setText("首次更新: 版本信息解析错误"); + m_isFirstUpdateInProgress = false; + return; + } + + QJsonObject remoteVersion = doc.object(); + QString remoteVer = remoteVersion["version"].toString(); + statusLabel->setText("首次更新: 下载完整包 " + remoteVer); + + // 使用新的文件名 + QString FULL_UPDATE_ZIP = "update_f.zip"; + + // 获取完整包URL + QString updateUrl = remoteVersion["url"].toString(); + if (updateUrl.isEmpty()) { + statusLabel->setText("首次更新: URL无效"); + m_isFirstUpdateInProgress = false; + return; + } + + // 从版本信息中获取密码 + QString password = remoteVersion["password"].toString(); + + // 下载完整包 + QUrl fullUrl(updateUrl); + QNetworkRequest fullRequest(fullUrl); + fullRequest.setRawHeader("User-Agent", "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/91.0.4472.124 Safari/537.36"); + fullRequest.setSslConfiguration(sslConfig); + + QNetworkReply *downloadReply = networkManager->get(fullRequest); + connect(downloadReply, &QNetworkReply::downloadProgress, this, [=](qint64 bytesReceived, qint64 bytesTotal) { + if (bytesTotal > 0) { + int percent = static_cast((bytesReceived * 100) / bytesTotal); + progressBar->setValue(percent); + statusLabel->setText(QString("下载完整包: %1%").arg(percent)); + } + }); + + connect(downloadReply, &QNetworkReply::finished, this, [=]() { + if (downloadReply->error() != QNetworkReply::NoError) { + statusLabel->setText("完整包下载失败: " + downloadReply->errorString()); + m_isFirstUpdateInProgress = false; + return; + } + + // 保存完整包 + QByteArray fullData = downloadReply->readAll(); + QFile fullFile(FULL_UPDATE_ZIP); + if (fullFile.open(QIODevice::WriteOnly)) { + fullFile.write(fullData); + fullFile.close(); + } + + statusLabel->setText("正在解压完整包..."); + progressBar->setValue(0); + + QFutureWatcher *watcher = new QFutureWatcher(this); + connect(watcher, &QFutureWatcher::finished, this, [=]() { + if (watcher->result()) { + // 更新版本信息并保存 + QJsonObject newLocalVersion; + newLocalVersion["version"] = remoteVersion["version"].toString(); + + if (remoteVersion.contains("changelog")) { + newLocalVersion["changelog"] = remoteVersion["changelog"]; + } + if (remoteVersion.contains("timestamp")) { + newLocalVersion["timestamp"] = remoteVersion["timestamp"]; + } + + localVersion = newLocalVersion; + saveLocalVersion(); + + // 更新界面显示 + versionLabel->setText("版本: v" + remoteVer); + statusLabel->setText("首次更新完成!"); + progressBar->setValue(100); + + QFile::remove(FULL_UPDATE_ZIP); + QMessageBox::information(this, "首次更新完成", "游戏已成功安装完整包!"); + + // 标记首次更新完成 + m_isFirstUpdateInProgress = false; + + // 立即执行一次增量更新检查 + statusLabel->setText("检查增量更新..."); + checkForUpdates(); + } else { + statusLabel->setText("解压完整包失败"); + m_isFirstUpdateInProgress = false; + } + watcher->deleteLater(); + }); + + QFuture future = QtConcurrent::run([=]() { + return extractZip(FULL_UPDATE_ZIP, UPDATE_PATH, password); + }); + watcher->setFuture(future); + + downloadReply->deleteLater(); + }); + + reply->deleteLater(); + }); +} + +// 检查启动器版本 +void MainWindow::checkLauncherVersion() +{ + QUrl url(SERVER_URL + ""); + QNetworkRequest request(url); + request.setRawHeader("User-Agent", "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/91.0.4472.124 Safari/537.36"); + + QSslConfiguration sslConfig = QSslConfiguration::defaultConfiguration(); + sslConfig.setPeerVerifyMode(QSslSocket::VerifyNone); + request.setSslConfiguration(sslConfig); + + QNetworkReply *reply = networkManager->get(request); + connect(reply, &QNetworkReply::finished, this, [=]() { + if (reply->error() != QNetworkReply::NoError) { + // 无法连接服务器,弹窗提示并闪退 + QMessageBox::critical(nullptr, "网络错误", "无法连接服务器,启动器即将关闭"); + QTimer::singleShot(0, this, &MainWindow::quitApplication); + return; + } + + QByteArray data = reply->readAll(); + QJsonDocument doc = QJsonDocument::fromJson(data); + if (doc.isNull() || !doc.isObject()) { + // 数据解析错误,不退出 + qDebug() << "启动器版本信息解析错误"; + return; + } + + QJsonObject remoteData = doc.object(); + QString remoteVersion = remoteData["version"].toString(); + QString downloadUrl = remoteData["url"].toString(); // 保留但不再使用 + + if (compareVersions(remoteVersion, LAUNCHER_VERSION) > 0) { + // 当前版本过旧 + QMessageBox msgBox; + msgBox.setWindowTitle("启动器版本过旧"); + msgBox.setText(QString("发现新版本启动器 v%1,当前版本 v%2。请下载最新版本启动器。\n程序将在5秒后关闭。").arg(remoteVersion).arg(LAUNCHER_VERSION)); + msgBox.setStandardButtons(QMessageBox::Ok); + msgBox.exec(); + + // 5秒后退出 + QTimer::singleShot(5000, this, &MainWindow::quitApplication); + } + + reply->deleteLater(); + }); +} + +void MainWindow::quitApplication() +{ + QApplication::quit(); +} \ No newline at end of file diff --git a/C++/2.2.6/mainwindow.h b/C++/2.2.6/mainwindow.h new file mode 100644 index 0000000..16b16fc --- /dev/null +++ b/C++/2.2.6/mainwindow.h @@ -0,0 +1,151 @@ +#ifndef MAINWINDOW_H +#define MAINWINDOW_H + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include // 添加QProcess头文件 + +QT_BEGIN_NAMESPACE +namespace Ui { class MainWindow; } +QT_END_NAMESPACE + +class AuthWindow; + +class MainWindow : public QMainWindow +{ + Q_OBJECT + +public: + MainWindow(QWidget *parent = nullptr); + ~MainWindow(); + +private slots: + void startGame(); + void startOdd(); + void modifyHosts(); + void forceUpdate(); + void openBuyPage(); + void fetchAnnouncement(); + void onAnnouncementFetched(); + void checkForUpdates(); + void onVersionChecked(); + void updateGame(const QJsonObject &remoteVersion = QJsonObject()); + void onUpdateDownloaded(QNetworkReply *reply, const QJsonObject &version); + void selectPackagePath(); + void showAuthWindow(); + void forceFullUpdate(); + void onAuthenticationFinished(const QString &kami, bool remember, bool success, const QString &message, const QString &vipExpiry); + void quitApplication(); + void onGameFinished(int exitCode, QProcess::ExitStatus exitStatus); // 添加游戏进程结束信号槽 + void checkAndDeleteFiles(); + void openWikiPage(); + void reportBug(); // 添加报告Bug的槽函数 + void checkLauncherVersion(); // 检查启动器版本 + +private: + void setupUI(); + void updateAnnouncement(const QJsonObject &announcement); + void activateButtons(); + void disableButtons(); + void checkAdminRights(); + void saveLocalVersion(); + int compareVersions(const QString &v1, const QString &v2); + bool extractZip(const QString &zipPath, const QString &extractDir, const QString &password); // 增加密码参数 + void saveSettings(); + void loadSettings(); + void checkPackageExists(); + QString getDeviceId(); + QString loadSavedKami(); + bool saveKami(const QString &kami); + bool clearSavedKami(); + void performNetworkAuthentication(const QString &kami, bool remember); + void loadLocalVersion(); + void fetchVersionForForceUpdate(); + void startGameProcess(); // 添加游戏启动函数 + void fetchFirstUpdateVersion(); + void processDeleteList(const QJsonArray &filesToDelete); + QPushButton *wikiBtn; + bool m_isFirstUpdateInProgress; + QPushButton *bugReportBtn; // 添加Bug报告按钮 + QPixmap backgroundPixmap; + bool backgroundLoaded = false; + QWidget *pathWidget; + QWidget *contentWidget; + QWidget *leftWidget; + QWidget *buttonWidget; + QGroupBox *rightGroup; + + // 配置信息 + QString SERVER_URL; + QString UPDATE_PATH; + QString BAT_FILE; + QString ODD_BAT_FILE; + QString HOSTS_BAT; + QString VERSION_FILE; + QString UPDATE_ZIP; + QString ANNOUNCEMENT_FILE; + QString LAUNCHER_VERSION = ""; + QString AUTH_API = ""; + QString APP_ID = ""; + QString DEVICE_CODE_FILE; + QString CARD_FILE; + + // UI元素 + QLabel *statusLabel; + QLabel *versionLabel; + QLabel *authStatus; + QLabel *vipInfo; + QProgressBar *progressBar; + QTextEdit *announcementText; + QPushButton *startBtn; + QPushButton *oddBtn; + QPushButton *updateBtn; + QPushButton *hostsBtn; + QPushButton *buyBtn; + QPushButton *fullUpdateBtn; + QPushButton *pathSelectBtn; + QLabel *pathLabel; + + // 其他成员 + QNetworkAccessManager *networkManager; + QJsonObject localVersion; + QSettings *settings; + QString deviceId; + QString savedKami; + bool isAuthenticated = false; + AuthWindow *authWindow = nullptr; + QTimer *quitTimer = nullptr; + bool isFirstLaunch = false; + QProcess *gameProcess; // 添加游戏进程 + void fetchBackgroundImage(); +}; + +class AuthWindow : public QDialog +{ + Q_OBJECT + +public: + explicit AuthWindow(const QString &deviceId, const QString &savedKami, QWidget *parent = nullptr); + QString getKami() const; + bool getRemember() const; + +private: + QLineEdit *kamiEntry; + QCheckBox *rememberCheck; +}; +#endif // MAINWINDOW_H \ No newline at end of file diff --git a/C++/2.2.6/mainwindow.ui b/C++/2.2.6/mainwindow.ui new file mode 100644 index 0000000..7bff7e1 --- /dev/null +++ b/C++/2.2.6/mainwindow.ui @@ -0,0 +1,31 @@ + + + MainWindow + + + + 0 + 0 + 800 + 600 + + + + MainWindow + + + + + + 0 + 0 + 800 + 21 + + + + + + + + diff --git a/C++/2.2.6/resources.qrc b/C++/2.2.6/resources.qrc new file mode 100644 index 0000000..1354108 --- /dev/null +++ b/C++/2.2.6/resources.qrc @@ -0,0 +1,6 @@ + + + styles.qss + untitled2_zh_CN.ts + + diff --git a/C++/2.2.6/styles.qss b/C++/2.2.6/styles.qss new file mode 100644 index 0000000..22839ce --- /dev/null +++ b/C++/2.2.6/styles.qss @@ -0,0 +1,57 @@ +QMainWindow { + background-color: #f0f0f0; + font-family: "Microsoft YaHei", Arial, sans-serif; +} + +QGroupBox { + border: 1px solid #ccc; + border-radius: 5px; + margin-top: 1ex; + font-weight: bold; +} + +QGroupBox::title { + subcontrol-origin: margin; + subcontrol-position: top center; + padding: 0 5px; +} + +QTextEdit { + background-color: white; + border: 1px solid #ccc; + border-radius: 3px; + font-size: 10pt; +} + +QPushButton { + background-color: #4a86e8; + color: white; + border: none; + padding: 5px 10px; + border-radius: 3px; + min-height: 30px; +} + +QPushButton:hover { + background-color: #3a76d8; +} + +QPushButton:disabled { + background-color: #cccccc; +} + +QLabel { + font-size: 9pt; +} + +QProgressBar { + border: 1px solid #ccc; + border-radius: 3px; + text-align: center; + background-color: #f8f8f8; +} + +QProgressBar::chunk { + background-color: #4a86e8; + width: 10px; +} diff --git a/C++/2.2.6/ui_mainwindow.h b/C++/2.2.6/ui_mainwindow.h new file mode 100644 index 0000000..39e5073 --- /dev/null +++ b/C++/2.2.6/ui_mainwindow.h @@ -0,0 +1,62 @@ +/******************************************************************************** +** Form generated from reading UI file 'mainwindow.ui' +** +** Created by: Qt User Interface Compiler version 6.9.1 +** +** WARNING! All changes made in this file will be lost when recompiling UI file! +********************************************************************************/ + +#ifndef UI_MAINWINDOW_H +#define UI_MAINWINDOW_H + +#include +#include +#include +#include +#include +#include + +QT_BEGIN_NAMESPACE + +class Ui_MainWindow +{ +public: + QWidget *centralwidget; + QMenuBar *menubar; + QStatusBar *statusbar; + + void setupUi(QMainWindow *MainWindow) + { + if (MainWindow->objectName().isEmpty()) + MainWindow->setObjectName("MainWindow"); + MainWindow->resize(800, 600); + centralwidget = new QWidget(MainWindow); + centralwidget->setObjectName("centralwidget"); + MainWindow->setCentralWidget(centralwidget); + menubar = new QMenuBar(MainWindow); + menubar->setObjectName("menubar"); + menubar->setGeometry(QRect(0, 0, 800, 21)); + MainWindow->setMenuBar(menubar); + statusbar = new QStatusBar(MainWindow); + statusbar->setObjectName("statusbar"); + MainWindow->setStatusBar(statusbar); + + retranslateUi(MainWindow); + + QMetaObject::connectSlotsByName(MainWindow); + } // setupUi + + void retranslateUi(QMainWindow *MainWindow) + { + MainWindow->setWindowTitle(QCoreApplication::translate("MainWindow", "MainWindow", nullptr)); + } // retranslateUi + +}; + +namespace Ui { + class MainWindow: public Ui_MainWindow {}; +} // namespace Ui + +QT_END_NAMESPACE + +#endif // UI_MAINWINDOW_H diff --git a/C++/2.2.6/untitled2.pro b/C++/2.2.6/untitled2.pro new file mode 100644 index 0000000..2516d23 --- /dev/null +++ b/C++/2.2.6/untitled2.pro @@ -0,0 +1,25 @@ +QT += network concurrent widgets + +CONFIG += c++17 + +SOURCES += \ + main.cpp \ + mainwindow.cpp + +HEADERS += \ + mainwindow.h + +# 添加资源文件 +RESOURCES += resources.qrc + +# 添加版本信息 +VERSION = 2.2.6 + +win32 { + # 链接必要的 Windows 库 + LIBS += -ladvapi32 -luser32 -lshell32 -lkernel32 + + + # 生成资源文件 + RC_FILE = launcher.rc +} diff --git a/C++/2.2.6/untitled2.pro.user b/C++/2.2.6/untitled2.pro.user new file mode 100644 index 0000000..5e90315 --- /dev/null +++ b/C++/2.2.6/untitled2.pro.user @@ -0,0 +1,374 @@ + + + + + + EnvironmentId + {b6372d5e-b2b2-4287-9da7-f348cf5f8064} + + + ProjectExplorer.Project.ActiveTarget + 0 + + + ProjectExplorer.Project.EditorSettings + + true + true + true + + Cpp + + CppGlobal + + + + QmlJS + + QmlJSGlobal + + + 2 + UTF-8 + false + 4 + false + 0 + 80 + true + true + 1 + 0 + false + true + false + 2 + true + true + 0 + 8 + true + false + 1 + true + true + true + *.md, *.MD, Makefile + false + true + true + + + + ProjectExplorer.Project.PluginSettings + + + true + false + true + true + true + true + + false + + + 0 + true + + true + true + Builtin.DefaultTidyAndClazy + 6 + true + + + + true + + + + + ProjectExplorer.Project.Target.0 + + Desktop + true + Desktop Qt 6.9.1 MinGW 64-bit + Desktop Qt 6.9.1 MinGW 64-bit + qt.qt6.691.win64_mingw_kit + 1 + 0 + 0 + + 0 + E:\C++\untitled2 + E:/C++/untitled2 + + + true + QtProjectManager.QMakeBuildStep + false + + + + true + Qt4ProjectManager.MakeStep + + 2 + 构建 + 构建 + ProjectExplorer.BuildSteps.Build + + + + true + Qt4ProjectManager.MakeStep + clean + + 1 + 清除 + 清除 + ProjectExplorer.BuildSteps.Clean + + 2 + false + + false + + Debug + Qt4ProjectManager.Qt4BuildConfiguration + 0 + 0 + + + 0 + 部署 + 部署 + ProjectExplorer.BuildSteps.Deploy + + 1 + + false + ProjectExplorer.DefaultDeployConfiguration + + 1 + + true + true + 0 + true + + 2 + + false + -e cpu-cycles --call-graph "dwarf,4096" -F 250 + untitled22 + Qt4ProjectManager.Qt4RunConfiguration: + E:/C++/untitled2/untitled2.pro + true + true + true + true + + 1 + 2 + + + E:\C++\untitled2 + D:/game/舞萌文件/新建文件夹/C++/untitled2/build/Desktop_Qt_6_9_1_MinGW_64_bit-Release + + + true + QtProjectManager.QMakeBuildStep + false + + + + true + Qt4ProjectManager.MakeStep + + 2 + 构建 + 构建 + ProjectExplorer.BuildSteps.Build + + + + true + Qt4ProjectManager.MakeStep + clean + + 1 + 清除 + 清除 + ProjectExplorer.BuildSteps.Clean + + 2 + false + + false + + Release + Qt4ProjectManager.Qt4BuildConfiguration + 0 + 0 + + + 0 + 部署 + 部署 + ProjectExplorer.BuildSteps.Deploy + + 1 + + false + ProjectExplorer.DefaultDeployConfiguration + + 1 + + true + true + 0 + true + + 1 + + false + -e cpu-cycles --call-graph "dwarf,4096" -F 250 + untitled22 + Qt4ProjectManager.Qt4RunConfiguration: + E:/C++/untitled2/untitled2.pro + true + true + true + true + E:/C++/untitled2 + + 1 + 0 + 0 + 1 + + + 0 + E:\C++\untitled2 + E:/C++/untitled2 + + + true + QtProjectManager.QMakeBuildStep + false + + + + true + Qt4ProjectManager.MakeStep + + 2 + 构建 + 构建 + ProjectExplorer.BuildSteps.Build + + + + true + Qt4ProjectManager.MakeStep + clean + + 1 + 清除 + 清除 + ProjectExplorer.BuildSteps.Clean + + 2 + false + + false + + Debug (imported) + Qt4ProjectManager.Qt4BuildConfiguration + 0 + 0 + + + 0 + 部署 + 部署 + ProjectExplorer.BuildSteps.Deploy + + 1 + + false + ProjectExplorer.DefaultDeployConfiguration + + 1 + + true + true + 0 + true + + 2 + + false + -e cpu-cycles --call-graph "dwarf,4096" -F 250 + + Qt4ProjectManager.Qt4RunConfiguration: + E:/C++/untitled2/untitled2.pro + false + true + true + true + + 1 + 2 + + 3 + + + 0 + 部署 + 部署 + ProjectExplorer.BuildSteps.Deploy + + 1 + + false + ProjectExplorer.DefaultDeployConfiguration + + 1 + + true + true + 0 + true + + 1 + + false + -e cpu-cycles --call-graph "dwarf,4096" -F 250 + untitled22 + Qt4ProjectManager.Qt4RunConfiguration: + E:/C++/untitled2/untitled2.pro + true + true + true + true + E:/C++/untitled2 + + 1 + + + + ProjectExplorer.Project.TargetCount + 1 + + + ProjectExplorer.Project.Updater.FileVersion + 22 + + + Version + 22 + + diff --git a/C++/2.2.6/untitled2_zh_CN.ts b/C++/2.2.6/untitled2_zh_CN.ts new file mode 100644 index 0000000..630fd35 --- /dev/null +++ b/C++/2.2.6/untitled2_zh_CN.ts @@ -0,0 +1,3 @@ + + + diff --git a/C++/2.2.8/Makefile b/C++/2.2.8/Makefile new file mode 100644 index 0000000..a8edd82 --- /dev/null +++ b/C++/2.2.8/Makefile @@ -0,0 +1,596 @@ +############################################################################# +# Makefile for building: untitled2 +# Generated by qmake (3.1) (Qt 6.9.1) +# Project: untitled2.pro +# Template: app +# Command: D:\Qt\6.9.1\mingw_64\bin\qmake.exe -o Makefile untitled2.pro -spec win32-g++ "CONFIG+=qtquickcompiler" +############################################################################# + +MAKEFILE = Makefile + +EQ = = + +first: release +install: release-install +uninstall: release-uninstall +QMAKE = D:\Qt\6.9.1\mingw_64\bin\qmake.exe +DEL_FILE = del +CHK_DIR_EXISTS= if not exist +MKDIR = mkdir +COPY = copy /y +COPY_FILE = copy /y +COPY_DIR = xcopy /s /q /y /i +INSTALL_FILE = copy /y +INSTALL_PROGRAM = copy /y +INSTALL_DIR = xcopy /s /q /y /i +QINSTALL = D:\Qt\6.9.1\mingw_64\bin\qmake.exe -install qinstall +QINSTALL_PROGRAM = D:\Qt\6.9.1\mingw_64\bin\qmake.exe -install qinstall -exe +DEL_FILE = del +SYMLINK = $(QMAKE) -install ln -f -s +DEL_DIR = rmdir +MOVE = move +IDC = idc +IDL = midl +ZIP = zip -r -9 +DEF_FILE = +RES_FILE = launcher_res.o +SED = $(QMAKE) -install sed +MOVE = move +SUBTARGETS = \ + release \ + debug + + +release: FORCE + $(MAKE) -f $(MAKEFILE).Release +release-make_first: FORCE + $(MAKE) -f $(MAKEFILE).Release +release-all: FORCE + $(MAKE) -f $(MAKEFILE).Release all +release-clean: FORCE + $(MAKE) -f $(MAKEFILE).Release clean +release-distclean: FORCE + $(MAKE) -f $(MAKEFILE).Release distclean +release-install: FORCE + $(MAKE) -f $(MAKEFILE).Release install +release-uninstall: FORCE + $(MAKE) -f $(MAKEFILE).Release uninstall +debug: FORCE + $(MAKE) -f $(MAKEFILE).Debug +debug-make_first: FORCE + $(MAKE) -f $(MAKEFILE).Debug +debug-all: FORCE + $(MAKE) -f $(MAKEFILE).Debug all +debug-clean: FORCE + $(MAKE) -f $(MAKEFILE).Debug clean +debug-distclean: FORCE + $(MAKE) -f $(MAKEFILE).Debug distclean +debug-install: FORCE + $(MAKE) -f $(MAKEFILE).Debug install +debug-uninstall: FORCE + $(MAKE) -f $(MAKEFILE).Debug uninstall + +Makefile: untitled2.pro D:/Qt/6.9.1/mingw_64/mkspecs/win32-g++/qmake.conf D:/Qt/6.9.1/mingw_64/mkspecs/features/spec_pre.prf \ + D:/Qt/6.9.1/mingw_64/mkspecs/features/device_config.prf \ + D:/Qt/6.9.1/mingw_64/mkspecs/common/sanitize.conf \ + D:/Qt/6.9.1/mingw_64/mkspecs/common/gcc-base.conf \ + D:/Qt/6.9.1/mingw_64/mkspecs/common/g++-base.conf \ + D:/Qt/6.9.1/mingw_64/mkspecs/features/win32/windows_vulkan_sdk.prf \ + D:/Qt/6.9.1/mingw_64/mkspecs/common/windows-vulkan.conf \ + D:/Qt/6.9.1/mingw_64/mkspecs/common/g++-win32.conf \ + D:/Qt/6.9.1/mingw_64/mkspecs/common/windows-desktop.conf \ + D:/Qt/6.9.1/mingw_64/mkspecs/qconfig.pri \ + D:/Qt/6.9.1/mingw_64/mkspecs/modules/qt_ext_freetype.pri \ + D:/Qt/6.9.1/mingw_64/mkspecs/modules/qt_ext_libjpeg.pri \ + D:/Qt/6.9.1/mingw_64/mkspecs/modules/qt_ext_libpng.pri \ + D:/Qt/6.9.1/mingw_64/mkspecs/modules/qt_ext_openxr_loader.pri \ + D:/Qt/6.9.1/mingw_64/mkspecs/modules/qt_lib_charts.pri \ + D:/Qt/6.9.1/mingw_64/mkspecs/modules/qt_lib_charts_private.pri \ + D:/Qt/6.9.1/mingw_64/mkspecs/modules/qt_lib_chartsqml.pri \ + D:/Qt/6.9.1/mingw_64/mkspecs/modules/qt_lib_chartsqml_private.pri \ + D:/Qt/6.9.1/mingw_64/mkspecs/modules/qt_lib_concurrent.pri \ + D:/Qt/6.9.1/mingw_64/mkspecs/modules/qt_lib_concurrent_private.pri \ + D:/Qt/6.9.1/mingw_64/mkspecs/modules/qt_lib_core.pri \ + D:/Qt/6.9.1/mingw_64/mkspecs/modules/qt_lib_core_private.pri \ + D:/Qt/6.9.1/mingw_64/mkspecs/modules/qt_lib_dbus.pri \ + D:/Qt/6.9.1/mingw_64/mkspecs/modules/qt_lib_dbus_private.pri \ + D:/Qt/6.9.1/mingw_64/mkspecs/modules/qt_lib_designer.pri \ + D:/Qt/6.9.1/mingw_64/mkspecs/modules/qt_lib_designer_private.pri \ + D:/Qt/6.9.1/mingw_64/mkspecs/modules/qt_lib_designercomponents_private.pri \ + D:/Qt/6.9.1/mingw_64/mkspecs/modules/qt_lib_devicediscovery_support_private.pri \ + D:/Qt/6.9.1/mingw_64/mkspecs/modules/qt_lib_entrypoint_private.pri \ + D:/Qt/6.9.1/mingw_64/mkspecs/modules/qt_lib_example_icons_private.pri \ + D:/Qt/6.9.1/mingw_64/mkspecs/modules/qt_lib_examples_asset_downloader_private.pri \ + D:/Qt/6.9.1/mingw_64/mkspecs/modules/qt_lib_fb_support_private.pri \ + D:/Qt/6.9.1/mingw_64/mkspecs/modules/qt_lib_ffmpegmediapluginimpl_private.pri \ + D:/Qt/6.9.1/mingw_64/mkspecs/modules/qt_lib_freetype_private.pri \ + D:/Qt/6.9.1/mingw_64/mkspecs/modules/qt_lib_gui.pri \ + D:/Qt/6.9.1/mingw_64/mkspecs/modules/qt_lib_gui_private.pri \ + D:/Qt/6.9.1/mingw_64/mkspecs/modules/qt_lib_harfbuzz_private.pri \ + D:/Qt/6.9.1/mingw_64/mkspecs/modules/qt_lib_help.pri \ + D:/Qt/6.9.1/mingw_64/mkspecs/modules/qt_lib_help_private.pri \ + D:/Qt/6.9.1/mingw_64/mkspecs/modules/qt_lib_jpeg_private.pri \ + D:/Qt/6.9.1/mingw_64/mkspecs/modules/qt_lib_labsanimation.pri \ + D:/Qt/6.9.1/mingw_64/mkspecs/modules/qt_lib_labsanimation_private.pri \ + D:/Qt/6.9.1/mingw_64/mkspecs/modules/qt_lib_labsfolderlistmodel.pri \ + D:/Qt/6.9.1/mingw_64/mkspecs/modules/qt_lib_labsfolderlistmodel_private.pri \ + D:/Qt/6.9.1/mingw_64/mkspecs/modules/qt_lib_labsplatform.pri \ + D:/Qt/6.9.1/mingw_64/mkspecs/modules/qt_lib_labsplatform_private.pri \ + D:/Qt/6.9.1/mingw_64/mkspecs/modules/qt_lib_labsqmlmodels.pri \ + D:/Qt/6.9.1/mingw_64/mkspecs/modules/qt_lib_labsqmlmodels_private.pri \ + D:/Qt/6.9.1/mingw_64/mkspecs/modules/qt_lib_labssettings.pri \ + D:/Qt/6.9.1/mingw_64/mkspecs/modules/qt_lib_labssettings_private.pri \ + D:/Qt/6.9.1/mingw_64/mkspecs/modules/qt_lib_labssharedimage.pri \ + D:/Qt/6.9.1/mingw_64/mkspecs/modules/qt_lib_labssharedimage_private.pri \ + D:/Qt/6.9.1/mingw_64/mkspecs/modules/qt_lib_labswavefrontmesh.pri \ + D:/Qt/6.9.1/mingw_64/mkspecs/modules/qt_lib_labswavefrontmesh_private.pri \ + D:/Qt/6.9.1/mingw_64/mkspecs/modules/qt_lib_linguist.pri \ + D:/Qt/6.9.1/mingw_64/mkspecs/modules/qt_lib_multimedia.pri \ + D:/Qt/6.9.1/mingw_64/mkspecs/modules/qt_lib_multimedia_private.pri \ + D:/Qt/6.9.1/mingw_64/mkspecs/modules/qt_lib_multimediaquick_private.pri \ + D:/Qt/6.9.1/mingw_64/mkspecs/modules/qt_lib_multimediatestlibprivate_private.pri \ + D:/Qt/6.9.1/mingw_64/mkspecs/modules/qt_lib_multimediawidgets.pri \ + D:/Qt/6.9.1/mingw_64/mkspecs/modules/qt_lib_multimediawidgets_private.pri \ + D:/Qt/6.9.1/mingw_64/mkspecs/modules/qt_lib_network.pri \ + D:/Qt/6.9.1/mingw_64/mkspecs/modules/qt_lib_network_private.pri \ + D:/Qt/6.9.1/mingw_64/mkspecs/modules/qt_lib_opengl.pri \ + D:/Qt/6.9.1/mingw_64/mkspecs/modules/qt_lib_opengl_private.pri \ + D:/Qt/6.9.1/mingw_64/mkspecs/modules/qt_lib_openglwidgets.pri \ + D:/Qt/6.9.1/mingw_64/mkspecs/modules/qt_lib_openglwidgets_private.pri \ + D:/Qt/6.9.1/mingw_64/mkspecs/modules/qt_lib_packetprotocol_private.pri \ + D:/Qt/6.9.1/mingw_64/mkspecs/modules/qt_lib_png_private.pri \ + D:/Qt/6.9.1/mingw_64/mkspecs/modules/qt_lib_printsupport.pri \ + D:/Qt/6.9.1/mingw_64/mkspecs/modules/qt_lib_printsupport_private.pri \ + D:/Qt/6.9.1/mingw_64/mkspecs/modules/qt_lib_qdoccatch_private.pri \ + D:/Qt/6.9.1/mingw_64/mkspecs/modules/qt_lib_qdoccatchconversions_private.pri \ + D:/Qt/6.9.1/mingw_64/mkspecs/modules/qt_lib_qdoccatchgenerators_private.pri \ + D:/Qt/6.9.1/mingw_64/mkspecs/modules/qt_lib_qml.pri \ + D:/Qt/6.9.1/mingw_64/mkspecs/modules/qt_lib_qml_private.pri \ + D:/Qt/6.9.1/mingw_64/mkspecs/modules/qt_lib_qmlassetdownloader.pri \ + D:/Qt/6.9.1/mingw_64/mkspecs/modules/qt_lib_qmlassetdownloader_private.pri \ + D:/Qt/6.9.1/mingw_64/mkspecs/modules/qt_lib_qmlcompiler.pri \ + D:/Qt/6.9.1/mingw_64/mkspecs/modules/qt_lib_qmlcompiler_private.pri \ + D:/Qt/6.9.1/mingw_64/mkspecs/modules/qt_lib_qmlcore.pri \ + D:/Qt/6.9.1/mingw_64/mkspecs/modules/qt_lib_qmlcore_private.pri \ + D:/Qt/6.9.1/mingw_64/mkspecs/modules/qt_lib_qmldebug_private.pri \ + D:/Qt/6.9.1/mingw_64/mkspecs/modules/qt_lib_qmldom_private.pri \ + D:/Qt/6.9.1/mingw_64/mkspecs/modules/qt_lib_qmlformat_private.pri \ + D:/Qt/6.9.1/mingw_64/mkspecs/modules/qt_lib_qmlintegration.pri \ + D:/Qt/6.9.1/mingw_64/mkspecs/modules/qt_lib_qmlintegration_private.pri \ + D:/Qt/6.9.1/mingw_64/mkspecs/modules/qt_lib_qmllocalstorage.pri \ + D:/Qt/6.9.1/mingw_64/mkspecs/modules/qt_lib_qmllocalstorage_private.pri \ + D:/Qt/6.9.1/mingw_64/mkspecs/modules/qt_lib_qmlls_private.pri \ + D:/Qt/6.9.1/mingw_64/mkspecs/modules/qt_lib_qmlmeta.pri \ + D:/Qt/6.9.1/mingw_64/mkspecs/modules/qt_lib_qmlmeta_private.pri \ + D:/Qt/6.9.1/mingw_64/mkspecs/modules/qt_lib_qmlmodels.pri \ + D:/Qt/6.9.1/mingw_64/mkspecs/modules/qt_lib_qmlmodels_private.pri \ + D:/Qt/6.9.1/mingw_64/mkspecs/modules/qt_lib_qmlnetwork.pri \ + D:/Qt/6.9.1/mingw_64/mkspecs/modules/qt_lib_qmlnetwork_private.pri \ + D:/Qt/6.9.1/mingw_64/mkspecs/modules/qt_lib_qmltest.pri \ + D:/Qt/6.9.1/mingw_64/mkspecs/modules/qt_lib_qmltest_private.pri \ + D:/Qt/6.9.1/mingw_64/mkspecs/modules/qt_lib_qmltoolingsettings_private.pri \ + D:/Qt/6.9.1/mingw_64/mkspecs/modules/qt_lib_qmltyperegistrar_private.pri \ + D:/Qt/6.9.1/mingw_64/mkspecs/modules/qt_lib_qmlworkerscript.pri \ + D:/Qt/6.9.1/mingw_64/mkspecs/modules/qt_lib_qmlworkerscript_private.pri \ + D:/Qt/6.9.1/mingw_64/mkspecs/modules/qt_lib_qmlxmllistmodel.pri \ + D:/Qt/6.9.1/mingw_64/mkspecs/modules/qt_lib_qmlxmllistmodel_private.pri \ + D:/Qt/6.9.1/mingw_64/mkspecs/modules/qt_lib_quick.pri \ + D:/Qt/6.9.1/mingw_64/mkspecs/modules/qt_lib_quick3d.pri \ + D:/Qt/6.9.1/mingw_64/mkspecs/modules/qt_lib_quick3d_private.pri \ + D:/Qt/6.9.1/mingw_64/mkspecs/modules/qt_lib_quick3dassetimport.pri \ + D:/Qt/6.9.1/mingw_64/mkspecs/modules/qt_lib_quick3dassetimport_private.pri \ + D:/Qt/6.9.1/mingw_64/mkspecs/modules/qt_lib_quick3dassetutils.pri \ + D:/Qt/6.9.1/mingw_64/mkspecs/modules/qt_lib_quick3dassetutils_private.pri \ + D:/Qt/6.9.1/mingw_64/mkspecs/modules/qt_lib_quick3deffects.pri \ + D:/Qt/6.9.1/mingw_64/mkspecs/modules/qt_lib_quick3deffects_private.pri \ + D:/Qt/6.9.1/mingw_64/mkspecs/modules/qt_lib_quick3dglslparser_private.pri \ + D:/Qt/6.9.1/mingw_64/mkspecs/modules/qt_lib_quick3dhelpers.pri \ + D:/Qt/6.9.1/mingw_64/mkspecs/modules/qt_lib_quick3dhelpers_private.pri \ + D:/Qt/6.9.1/mingw_64/mkspecs/modules/qt_lib_quick3dhelpersimpl.pri \ + D:/Qt/6.9.1/mingw_64/mkspecs/modules/qt_lib_quick3dhelpersimpl_private.pri \ + D:/Qt/6.9.1/mingw_64/mkspecs/modules/qt_lib_quick3diblbaker.pri \ + D:/Qt/6.9.1/mingw_64/mkspecs/modules/qt_lib_quick3diblbaker_private.pri \ + D:/Qt/6.9.1/mingw_64/mkspecs/modules/qt_lib_quick3dparticleeffects.pri \ + D:/Qt/6.9.1/mingw_64/mkspecs/modules/qt_lib_quick3dparticleeffects_private.pri \ + D:/Qt/6.9.1/mingw_64/mkspecs/modules/qt_lib_quick3dparticles.pri \ + D:/Qt/6.9.1/mingw_64/mkspecs/modules/qt_lib_quick3dparticles_private.pri \ + D:/Qt/6.9.1/mingw_64/mkspecs/modules/qt_lib_quick3druntimerender.pri \ + D:/Qt/6.9.1/mingw_64/mkspecs/modules/qt_lib_quick3druntimerender_private.pri \ + D:/Qt/6.9.1/mingw_64/mkspecs/modules/qt_lib_quick3dspatialaudio_private.pri \ + D:/Qt/6.9.1/mingw_64/mkspecs/modules/qt_lib_quick3dutils.pri \ + D:/Qt/6.9.1/mingw_64/mkspecs/modules/qt_lib_quick3dutils_private.pri \ + D:/Qt/6.9.1/mingw_64/mkspecs/modules/qt_lib_quick3dxr.pri \ + D:/Qt/6.9.1/mingw_64/mkspecs/modules/qt_lib_quick3dxr_private.pri \ + D:/Qt/6.9.1/mingw_64/mkspecs/modules/qt_lib_quick_private.pri \ + D:/Qt/6.9.1/mingw_64/mkspecs/modules/qt_lib_quickcontrols2.pri \ + D:/Qt/6.9.1/mingw_64/mkspecs/modules/qt_lib_quickcontrols2_private.pri \ + D:/Qt/6.9.1/mingw_64/mkspecs/modules/qt_lib_quickcontrols2basic.pri \ + D:/Qt/6.9.1/mingw_64/mkspecs/modules/qt_lib_quickcontrols2basic_private.pri \ + D:/Qt/6.9.1/mingw_64/mkspecs/modules/qt_lib_quickcontrols2basicstyleimpl.pri \ + D:/Qt/6.9.1/mingw_64/mkspecs/modules/qt_lib_quickcontrols2basicstyleimpl_private.pri \ + D:/Qt/6.9.1/mingw_64/mkspecs/modules/qt_lib_quickcontrols2fluentwinui3styleimpl.pri \ + D:/Qt/6.9.1/mingw_64/mkspecs/modules/qt_lib_quickcontrols2fluentwinui3styleimpl_private.pri \ + D:/Qt/6.9.1/mingw_64/mkspecs/modules/qt_lib_quickcontrols2fusion.pri \ + D:/Qt/6.9.1/mingw_64/mkspecs/modules/qt_lib_quickcontrols2fusion_private.pri \ + D:/Qt/6.9.1/mingw_64/mkspecs/modules/qt_lib_quickcontrols2fusionstyleimpl.pri \ + D:/Qt/6.9.1/mingw_64/mkspecs/modules/qt_lib_quickcontrols2fusionstyleimpl_private.pri \ + D:/Qt/6.9.1/mingw_64/mkspecs/modules/qt_lib_quickcontrols2imagine.pri \ + D:/Qt/6.9.1/mingw_64/mkspecs/modules/qt_lib_quickcontrols2imagine_private.pri \ + D:/Qt/6.9.1/mingw_64/mkspecs/modules/qt_lib_quickcontrols2imaginestyleimpl.pri \ + D:/Qt/6.9.1/mingw_64/mkspecs/modules/qt_lib_quickcontrols2imaginestyleimpl_private.pri \ + D:/Qt/6.9.1/mingw_64/mkspecs/modules/qt_lib_quickcontrols2impl.pri \ + D:/Qt/6.9.1/mingw_64/mkspecs/modules/qt_lib_quickcontrols2impl_private.pri \ + D:/Qt/6.9.1/mingw_64/mkspecs/modules/qt_lib_quickcontrols2material.pri \ + D:/Qt/6.9.1/mingw_64/mkspecs/modules/qt_lib_quickcontrols2material_private.pri \ + D:/Qt/6.9.1/mingw_64/mkspecs/modules/qt_lib_quickcontrols2materialstyleimpl.pri \ + D:/Qt/6.9.1/mingw_64/mkspecs/modules/qt_lib_quickcontrols2materialstyleimpl_private.pri \ + D:/Qt/6.9.1/mingw_64/mkspecs/modules/qt_lib_quickcontrols2universal.pri \ + D:/Qt/6.9.1/mingw_64/mkspecs/modules/qt_lib_quickcontrols2universal_private.pri \ + D:/Qt/6.9.1/mingw_64/mkspecs/modules/qt_lib_quickcontrols2universalstyleimpl.pri \ + D:/Qt/6.9.1/mingw_64/mkspecs/modules/qt_lib_quickcontrols2universalstyleimpl_private.pri \ + D:/Qt/6.9.1/mingw_64/mkspecs/modules/qt_lib_quickcontrols2windowsstyleimpl.pri \ + D:/Qt/6.9.1/mingw_64/mkspecs/modules/qt_lib_quickcontrols2windowsstyleimpl_private.pri \ + D:/Qt/6.9.1/mingw_64/mkspecs/modules/qt_lib_quickcontrolstestutilsprivate_private.pri \ + D:/Qt/6.9.1/mingw_64/mkspecs/modules/qt_lib_quickdialogs2.pri \ + D:/Qt/6.9.1/mingw_64/mkspecs/modules/qt_lib_quickdialogs2_private.pri \ + D:/Qt/6.9.1/mingw_64/mkspecs/modules/qt_lib_quickdialogs2quickimpl.pri \ + D:/Qt/6.9.1/mingw_64/mkspecs/modules/qt_lib_quickdialogs2quickimpl_private.pri \ + D:/Qt/6.9.1/mingw_64/mkspecs/modules/qt_lib_quickdialogs2utils.pri \ + D:/Qt/6.9.1/mingw_64/mkspecs/modules/qt_lib_quickdialogs2utils_private.pri \ + D:/Qt/6.9.1/mingw_64/mkspecs/modules/qt_lib_quickeffects.pri \ + D:/Qt/6.9.1/mingw_64/mkspecs/modules/qt_lib_quickeffects_private.pri \ + D:/Qt/6.9.1/mingw_64/mkspecs/modules/qt_lib_quicklayouts.pri \ + D:/Qt/6.9.1/mingw_64/mkspecs/modules/qt_lib_quicklayouts_private.pri \ + D:/Qt/6.9.1/mingw_64/mkspecs/modules/qt_lib_quickparticles_private.pri \ + D:/Qt/6.9.1/mingw_64/mkspecs/modules/qt_lib_quickshapes_private.pri \ + D:/Qt/6.9.1/mingw_64/mkspecs/modules/qt_lib_quicktemplates2.pri \ + D:/Qt/6.9.1/mingw_64/mkspecs/modules/qt_lib_quicktemplates2_private.pri \ + D:/Qt/6.9.1/mingw_64/mkspecs/modules/qt_lib_quicktestutilsprivate_private.pri \ + D:/Qt/6.9.1/mingw_64/mkspecs/modules/qt_lib_quicktimeline.pri \ + D:/Qt/6.9.1/mingw_64/mkspecs/modules/qt_lib_quicktimeline_private.pri \ + D:/Qt/6.9.1/mingw_64/mkspecs/modules/qt_lib_quicktimelineblendtrees.pri \ + D:/Qt/6.9.1/mingw_64/mkspecs/modules/qt_lib_quicktimelineblendtrees_private.pri \ + D:/Qt/6.9.1/mingw_64/mkspecs/modules/qt_lib_quickvectorimage.pri \ + D:/Qt/6.9.1/mingw_64/mkspecs/modules/qt_lib_quickvectorimage_private.pri \ + D:/Qt/6.9.1/mingw_64/mkspecs/modules/qt_lib_quickvectorimagegenerator_private.pri \ + D:/Qt/6.9.1/mingw_64/mkspecs/modules/qt_lib_quickwidgets.pri \ + D:/Qt/6.9.1/mingw_64/mkspecs/modules/qt_lib_quickwidgets_private.pri \ + D:/Qt/6.9.1/mingw_64/mkspecs/modules/qt_lib_shadertools.pri \ + D:/Qt/6.9.1/mingw_64/mkspecs/modules/qt_lib_shadertools_private.pri \ + D:/Qt/6.9.1/mingw_64/mkspecs/modules/qt_lib_spatialaudio.pri \ + D:/Qt/6.9.1/mingw_64/mkspecs/modules/qt_lib_spatialaudio_private.pri \ + D:/Qt/6.9.1/mingw_64/mkspecs/modules/qt_lib_sql.pri \ + D:/Qt/6.9.1/mingw_64/mkspecs/modules/qt_lib_sql_private.pri \ + D:/Qt/6.9.1/mingw_64/mkspecs/modules/qt_lib_svg.pri \ + D:/Qt/6.9.1/mingw_64/mkspecs/modules/qt_lib_svg_private.pri \ + D:/Qt/6.9.1/mingw_64/mkspecs/modules/qt_lib_svgwidgets.pri \ + D:/Qt/6.9.1/mingw_64/mkspecs/modules/qt_lib_svgwidgets_private.pri \ + D:/Qt/6.9.1/mingw_64/mkspecs/modules/qt_lib_testinternals_private.pri \ + D:/Qt/6.9.1/mingw_64/mkspecs/modules/qt_lib_testlib.pri \ + D:/Qt/6.9.1/mingw_64/mkspecs/modules/qt_lib_testlib_private.pri \ + D:/Qt/6.9.1/mingw_64/mkspecs/modules/qt_lib_tools_private.pri \ + D:/Qt/6.9.1/mingw_64/mkspecs/modules/qt_lib_uiplugin.pri \ + D:/Qt/6.9.1/mingw_64/mkspecs/modules/qt_lib_uitools.pri \ + D:/Qt/6.9.1/mingw_64/mkspecs/modules/qt_lib_uitools_private.pri \ + D:/Qt/6.9.1/mingw_64/mkspecs/modules/qt_lib_widgets.pri \ + D:/Qt/6.9.1/mingw_64/mkspecs/modules/qt_lib_widgets_private.pri \ + D:/Qt/6.9.1/mingw_64/mkspecs/modules/qt_lib_xml.pri \ + D:/Qt/6.9.1/mingw_64/mkspecs/modules/qt_lib_xml_private.pri \ + D:/Qt/6.9.1/mingw_64/mkspecs/modules/qt_lib_zlib_private.pri \ + D:/Qt/6.9.1/mingw_64/mkspecs/features/qt_functions.prf \ + D:/Qt/6.9.1/mingw_64/mkspecs/features/qt_config.prf \ + D:/Qt/6.9.1/mingw_64/mkspecs/win32-g++/qmake.conf \ + D:/Qt/6.9.1/mingw_64/mkspecs/features/spec_post.prf \ + .qmake.stash \ + D:/Qt/6.9.1/mingw_64/mkspecs/features/exclusive_builds.prf \ + D:/Qt/6.9.1/mingw_64/mkspecs/features/toolchain.prf \ + D:/Qt/6.9.1/mingw_64/mkspecs/features/default_pre.prf \ + D:/Qt/6.9.1/mingw_64/mkspecs/features/win32/default_pre.prf \ + D:/Qt/6.9.1/mingw_64/mkspecs/features/resolve_config.prf \ + D:/Qt/6.9.1/mingw_64/mkspecs/features/exclusive_builds_post.prf \ + D:/Qt/6.9.1/mingw_64/mkspecs/features/default_post.prf \ + D:/Qt/6.9.1/mingw_64/mkspecs/features/qtquickcompiler.prf \ + D:/Qt/6.9.1/mingw_64/mkspecs/features/precompile_header.prf \ + D:/Qt/6.9.1/mingw_64/mkspecs/features/warn_on.prf \ + D:/Qt/6.9.1/mingw_64/mkspecs/features/permissions.prf \ + D:/Qt/6.9.1/mingw_64/mkspecs/features/qt.prf \ + D:/Qt/6.9.1/mingw_64/mkspecs/features/resources_functions.prf \ + D:/Qt/6.9.1/mingw_64/mkspecs/features/resources.prf \ + D:/Qt/6.9.1/mingw_64/mkspecs/features/moc.prf \ + D:/Qt/6.9.1/mingw_64/mkspecs/features/win32/opengl.prf \ + D:/Qt/6.9.1/mingw_64/mkspecs/features/uic.prf \ + D:/Qt/6.9.1/mingw_64/mkspecs/features/qmake_use.prf \ + D:/Qt/6.9.1/mingw_64/mkspecs/features/file_copies.prf \ + D:/Qt/6.9.1/mingw_64/mkspecs/features/win32/windows.prf \ + D:/Qt/6.9.1/mingw_64/mkspecs/features/testcase_targets.prf \ + D:/Qt/6.9.1/mingw_64/mkspecs/features/exceptions.prf \ + D:/Qt/6.9.1/mingw_64/mkspecs/features/yacc.prf \ + D:/Qt/6.9.1/mingw_64/mkspecs/features/lex.prf \ + untitled2.pro \ + D:/Qt/6.9.1/mingw_64/lib/Qt6Widgets.prl \ + D:/Qt/6.9.1/mingw_64/lib/Qt6Gui.prl \ + D:/Qt/6.9.1/mingw_64/lib/Qt6Network.prl \ + D:/Qt/6.9.1/mingw_64/lib/Qt6Concurrent.prl \ + D:/Qt/6.9.1/mingw_64/lib/Qt6Core.prl \ + D:/Qt/6.9.1/mingw_64/lib/Qt6EntryPoint.prl \ + D:/Qt/6.9.1/mingw_64/mkspecs/features/build_pass.prf \ + resources.qrc + $(QMAKE) -o Makefile untitled2.pro -spec win32-g++ "CONFIG+=qtquickcompiler" +D:/Qt/6.9.1/mingw_64/mkspecs/features/spec_pre.prf: +D:/Qt/6.9.1/mingw_64/mkspecs/features/device_config.prf: +D:/Qt/6.9.1/mingw_64/mkspecs/common/sanitize.conf: +D:/Qt/6.9.1/mingw_64/mkspecs/common/gcc-base.conf: +D:/Qt/6.9.1/mingw_64/mkspecs/common/g++-base.conf: +D:/Qt/6.9.1/mingw_64/mkspecs/features/win32/windows_vulkan_sdk.prf: +D:/Qt/6.9.1/mingw_64/mkspecs/common/windows-vulkan.conf: +D:/Qt/6.9.1/mingw_64/mkspecs/common/g++-win32.conf: +D:/Qt/6.9.1/mingw_64/mkspecs/common/windows-desktop.conf: +D:/Qt/6.9.1/mingw_64/mkspecs/qconfig.pri: +D:/Qt/6.9.1/mingw_64/mkspecs/modules/qt_ext_freetype.pri: +D:/Qt/6.9.1/mingw_64/mkspecs/modules/qt_ext_libjpeg.pri: +D:/Qt/6.9.1/mingw_64/mkspecs/modules/qt_ext_libpng.pri: +D:/Qt/6.9.1/mingw_64/mkspecs/modules/qt_ext_openxr_loader.pri: +D:/Qt/6.9.1/mingw_64/mkspecs/modules/qt_lib_charts.pri: +D:/Qt/6.9.1/mingw_64/mkspecs/modules/qt_lib_charts_private.pri: +D:/Qt/6.9.1/mingw_64/mkspecs/modules/qt_lib_chartsqml.pri: +D:/Qt/6.9.1/mingw_64/mkspecs/modules/qt_lib_chartsqml_private.pri: +D:/Qt/6.9.1/mingw_64/mkspecs/modules/qt_lib_concurrent.pri: +D:/Qt/6.9.1/mingw_64/mkspecs/modules/qt_lib_concurrent_private.pri: +D:/Qt/6.9.1/mingw_64/mkspecs/modules/qt_lib_core.pri: +D:/Qt/6.9.1/mingw_64/mkspecs/modules/qt_lib_core_private.pri: +D:/Qt/6.9.1/mingw_64/mkspecs/modules/qt_lib_dbus.pri: +D:/Qt/6.9.1/mingw_64/mkspecs/modules/qt_lib_dbus_private.pri: +D:/Qt/6.9.1/mingw_64/mkspecs/modules/qt_lib_designer.pri: +D:/Qt/6.9.1/mingw_64/mkspecs/modules/qt_lib_designer_private.pri: +D:/Qt/6.9.1/mingw_64/mkspecs/modules/qt_lib_designercomponents_private.pri: +D:/Qt/6.9.1/mingw_64/mkspecs/modules/qt_lib_devicediscovery_support_private.pri: +D:/Qt/6.9.1/mingw_64/mkspecs/modules/qt_lib_entrypoint_private.pri: +D:/Qt/6.9.1/mingw_64/mkspecs/modules/qt_lib_example_icons_private.pri: +D:/Qt/6.9.1/mingw_64/mkspecs/modules/qt_lib_examples_asset_downloader_private.pri: +D:/Qt/6.9.1/mingw_64/mkspecs/modules/qt_lib_fb_support_private.pri: +D:/Qt/6.9.1/mingw_64/mkspecs/modules/qt_lib_ffmpegmediapluginimpl_private.pri: +D:/Qt/6.9.1/mingw_64/mkspecs/modules/qt_lib_freetype_private.pri: +D:/Qt/6.9.1/mingw_64/mkspecs/modules/qt_lib_gui.pri: +D:/Qt/6.9.1/mingw_64/mkspecs/modules/qt_lib_gui_private.pri: +D:/Qt/6.9.1/mingw_64/mkspecs/modules/qt_lib_harfbuzz_private.pri: +D:/Qt/6.9.1/mingw_64/mkspecs/modules/qt_lib_help.pri: +D:/Qt/6.9.1/mingw_64/mkspecs/modules/qt_lib_help_private.pri: +D:/Qt/6.9.1/mingw_64/mkspecs/modules/qt_lib_jpeg_private.pri: +D:/Qt/6.9.1/mingw_64/mkspecs/modules/qt_lib_labsanimation.pri: +D:/Qt/6.9.1/mingw_64/mkspecs/modules/qt_lib_labsanimation_private.pri: +D:/Qt/6.9.1/mingw_64/mkspecs/modules/qt_lib_labsfolderlistmodel.pri: +D:/Qt/6.9.1/mingw_64/mkspecs/modules/qt_lib_labsfolderlistmodel_private.pri: +D:/Qt/6.9.1/mingw_64/mkspecs/modules/qt_lib_labsplatform.pri: +D:/Qt/6.9.1/mingw_64/mkspecs/modules/qt_lib_labsplatform_private.pri: +D:/Qt/6.9.1/mingw_64/mkspecs/modules/qt_lib_labsqmlmodels.pri: +D:/Qt/6.9.1/mingw_64/mkspecs/modules/qt_lib_labsqmlmodels_private.pri: +D:/Qt/6.9.1/mingw_64/mkspecs/modules/qt_lib_labssettings.pri: +D:/Qt/6.9.1/mingw_64/mkspecs/modules/qt_lib_labssettings_private.pri: +D:/Qt/6.9.1/mingw_64/mkspecs/modules/qt_lib_labssharedimage.pri: +D:/Qt/6.9.1/mingw_64/mkspecs/modules/qt_lib_labssharedimage_private.pri: +D:/Qt/6.9.1/mingw_64/mkspecs/modules/qt_lib_labswavefrontmesh.pri: +D:/Qt/6.9.1/mingw_64/mkspecs/modules/qt_lib_labswavefrontmesh_private.pri: +D:/Qt/6.9.1/mingw_64/mkspecs/modules/qt_lib_linguist.pri: +D:/Qt/6.9.1/mingw_64/mkspecs/modules/qt_lib_multimedia.pri: +D:/Qt/6.9.1/mingw_64/mkspecs/modules/qt_lib_multimedia_private.pri: +D:/Qt/6.9.1/mingw_64/mkspecs/modules/qt_lib_multimediaquick_private.pri: +D:/Qt/6.9.1/mingw_64/mkspecs/modules/qt_lib_multimediatestlibprivate_private.pri: +D:/Qt/6.9.1/mingw_64/mkspecs/modules/qt_lib_multimediawidgets.pri: +D:/Qt/6.9.1/mingw_64/mkspecs/modules/qt_lib_multimediawidgets_private.pri: +D:/Qt/6.9.1/mingw_64/mkspecs/modules/qt_lib_network.pri: +D:/Qt/6.9.1/mingw_64/mkspecs/modules/qt_lib_network_private.pri: +D:/Qt/6.9.1/mingw_64/mkspecs/modules/qt_lib_opengl.pri: +D:/Qt/6.9.1/mingw_64/mkspecs/modules/qt_lib_opengl_private.pri: +D:/Qt/6.9.1/mingw_64/mkspecs/modules/qt_lib_openglwidgets.pri: +D:/Qt/6.9.1/mingw_64/mkspecs/modules/qt_lib_openglwidgets_private.pri: +D:/Qt/6.9.1/mingw_64/mkspecs/modules/qt_lib_packetprotocol_private.pri: +D:/Qt/6.9.1/mingw_64/mkspecs/modules/qt_lib_png_private.pri: +D:/Qt/6.9.1/mingw_64/mkspecs/modules/qt_lib_printsupport.pri: +D:/Qt/6.9.1/mingw_64/mkspecs/modules/qt_lib_printsupport_private.pri: +D:/Qt/6.9.1/mingw_64/mkspecs/modules/qt_lib_qdoccatch_private.pri: +D:/Qt/6.9.1/mingw_64/mkspecs/modules/qt_lib_qdoccatchconversions_private.pri: +D:/Qt/6.9.1/mingw_64/mkspecs/modules/qt_lib_qdoccatchgenerators_private.pri: +D:/Qt/6.9.1/mingw_64/mkspecs/modules/qt_lib_qml.pri: +D:/Qt/6.9.1/mingw_64/mkspecs/modules/qt_lib_qml_private.pri: +D:/Qt/6.9.1/mingw_64/mkspecs/modules/qt_lib_qmlassetdownloader.pri: +D:/Qt/6.9.1/mingw_64/mkspecs/modules/qt_lib_qmlassetdownloader_private.pri: +D:/Qt/6.9.1/mingw_64/mkspecs/modules/qt_lib_qmlcompiler.pri: +D:/Qt/6.9.1/mingw_64/mkspecs/modules/qt_lib_qmlcompiler_private.pri: +D:/Qt/6.9.1/mingw_64/mkspecs/modules/qt_lib_qmlcore.pri: +D:/Qt/6.9.1/mingw_64/mkspecs/modules/qt_lib_qmlcore_private.pri: +D:/Qt/6.9.1/mingw_64/mkspecs/modules/qt_lib_qmldebug_private.pri: +D:/Qt/6.9.1/mingw_64/mkspecs/modules/qt_lib_qmldom_private.pri: +D:/Qt/6.9.1/mingw_64/mkspecs/modules/qt_lib_qmlformat_private.pri: +D:/Qt/6.9.1/mingw_64/mkspecs/modules/qt_lib_qmlintegration.pri: +D:/Qt/6.9.1/mingw_64/mkspecs/modules/qt_lib_qmlintegration_private.pri: +D:/Qt/6.9.1/mingw_64/mkspecs/modules/qt_lib_qmllocalstorage.pri: +D:/Qt/6.9.1/mingw_64/mkspecs/modules/qt_lib_qmllocalstorage_private.pri: +D:/Qt/6.9.1/mingw_64/mkspecs/modules/qt_lib_qmlls_private.pri: +D:/Qt/6.9.1/mingw_64/mkspecs/modules/qt_lib_qmlmeta.pri: +D:/Qt/6.9.1/mingw_64/mkspecs/modules/qt_lib_qmlmeta_private.pri: +D:/Qt/6.9.1/mingw_64/mkspecs/modules/qt_lib_qmlmodels.pri: +D:/Qt/6.9.1/mingw_64/mkspecs/modules/qt_lib_qmlmodels_private.pri: +D:/Qt/6.9.1/mingw_64/mkspecs/modules/qt_lib_qmlnetwork.pri: +D:/Qt/6.9.1/mingw_64/mkspecs/modules/qt_lib_qmlnetwork_private.pri: +D:/Qt/6.9.1/mingw_64/mkspecs/modules/qt_lib_qmltest.pri: +D:/Qt/6.9.1/mingw_64/mkspecs/modules/qt_lib_qmltest_private.pri: +D:/Qt/6.9.1/mingw_64/mkspecs/modules/qt_lib_qmltoolingsettings_private.pri: +D:/Qt/6.9.1/mingw_64/mkspecs/modules/qt_lib_qmltyperegistrar_private.pri: +D:/Qt/6.9.1/mingw_64/mkspecs/modules/qt_lib_qmlworkerscript.pri: +D:/Qt/6.9.1/mingw_64/mkspecs/modules/qt_lib_qmlworkerscript_private.pri: +D:/Qt/6.9.1/mingw_64/mkspecs/modules/qt_lib_qmlxmllistmodel.pri: +D:/Qt/6.9.1/mingw_64/mkspecs/modules/qt_lib_qmlxmllistmodel_private.pri: +D:/Qt/6.9.1/mingw_64/mkspecs/modules/qt_lib_quick.pri: +D:/Qt/6.9.1/mingw_64/mkspecs/modules/qt_lib_quick3d.pri: +D:/Qt/6.9.1/mingw_64/mkspecs/modules/qt_lib_quick3d_private.pri: +D:/Qt/6.9.1/mingw_64/mkspecs/modules/qt_lib_quick3dassetimport.pri: +D:/Qt/6.9.1/mingw_64/mkspecs/modules/qt_lib_quick3dassetimport_private.pri: +D:/Qt/6.9.1/mingw_64/mkspecs/modules/qt_lib_quick3dassetutils.pri: +D:/Qt/6.9.1/mingw_64/mkspecs/modules/qt_lib_quick3dassetutils_private.pri: +D:/Qt/6.9.1/mingw_64/mkspecs/modules/qt_lib_quick3deffects.pri: +D:/Qt/6.9.1/mingw_64/mkspecs/modules/qt_lib_quick3deffects_private.pri: +D:/Qt/6.9.1/mingw_64/mkspecs/modules/qt_lib_quick3dglslparser_private.pri: +D:/Qt/6.9.1/mingw_64/mkspecs/modules/qt_lib_quick3dhelpers.pri: +D:/Qt/6.9.1/mingw_64/mkspecs/modules/qt_lib_quick3dhelpers_private.pri: +D:/Qt/6.9.1/mingw_64/mkspecs/modules/qt_lib_quick3dhelpersimpl.pri: +D:/Qt/6.9.1/mingw_64/mkspecs/modules/qt_lib_quick3dhelpersimpl_private.pri: +D:/Qt/6.9.1/mingw_64/mkspecs/modules/qt_lib_quick3diblbaker.pri: +D:/Qt/6.9.1/mingw_64/mkspecs/modules/qt_lib_quick3diblbaker_private.pri: +D:/Qt/6.9.1/mingw_64/mkspecs/modules/qt_lib_quick3dparticleeffects.pri: +D:/Qt/6.9.1/mingw_64/mkspecs/modules/qt_lib_quick3dparticleeffects_private.pri: +D:/Qt/6.9.1/mingw_64/mkspecs/modules/qt_lib_quick3dparticles.pri: +D:/Qt/6.9.1/mingw_64/mkspecs/modules/qt_lib_quick3dparticles_private.pri: +D:/Qt/6.9.1/mingw_64/mkspecs/modules/qt_lib_quick3druntimerender.pri: +D:/Qt/6.9.1/mingw_64/mkspecs/modules/qt_lib_quick3druntimerender_private.pri: +D:/Qt/6.9.1/mingw_64/mkspecs/modules/qt_lib_quick3dspatialaudio_private.pri: +D:/Qt/6.9.1/mingw_64/mkspecs/modules/qt_lib_quick3dutils.pri: +D:/Qt/6.9.1/mingw_64/mkspecs/modules/qt_lib_quick3dutils_private.pri: +D:/Qt/6.9.1/mingw_64/mkspecs/modules/qt_lib_quick3dxr.pri: +D:/Qt/6.9.1/mingw_64/mkspecs/modules/qt_lib_quick3dxr_private.pri: +D:/Qt/6.9.1/mingw_64/mkspecs/modules/qt_lib_quick_private.pri: +D:/Qt/6.9.1/mingw_64/mkspecs/modules/qt_lib_quickcontrols2.pri: +D:/Qt/6.9.1/mingw_64/mkspecs/modules/qt_lib_quickcontrols2_private.pri: +D:/Qt/6.9.1/mingw_64/mkspecs/modules/qt_lib_quickcontrols2basic.pri: +D:/Qt/6.9.1/mingw_64/mkspecs/modules/qt_lib_quickcontrols2basic_private.pri: +D:/Qt/6.9.1/mingw_64/mkspecs/modules/qt_lib_quickcontrols2basicstyleimpl.pri: +D:/Qt/6.9.1/mingw_64/mkspecs/modules/qt_lib_quickcontrols2basicstyleimpl_private.pri: +D:/Qt/6.9.1/mingw_64/mkspecs/modules/qt_lib_quickcontrols2fluentwinui3styleimpl.pri: +D:/Qt/6.9.1/mingw_64/mkspecs/modules/qt_lib_quickcontrols2fluentwinui3styleimpl_private.pri: +D:/Qt/6.9.1/mingw_64/mkspecs/modules/qt_lib_quickcontrols2fusion.pri: +D:/Qt/6.9.1/mingw_64/mkspecs/modules/qt_lib_quickcontrols2fusion_private.pri: +D:/Qt/6.9.1/mingw_64/mkspecs/modules/qt_lib_quickcontrols2fusionstyleimpl.pri: +D:/Qt/6.9.1/mingw_64/mkspecs/modules/qt_lib_quickcontrols2fusionstyleimpl_private.pri: +D:/Qt/6.9.1/mingw_64/mkspecs/modules/qt_lib_quickcontrols2imagine.pri: +D:/Qt/6.9.1/mingw_64/mkspecs/modules/qt_lib_quickcontrols2imagine_private.pri: +D:/Qt/6.9.1/mingw_64/mkspecs/modules/qt_lib_quickcontrols2imaginestyleimpl.pri: +D:/Qt/6.9.1/mingw_64/mkspecs/modules/qt_lib_quickcontrols2imaginestyleimpl_private.pri: +D:/Qt/6.9.1/mingw_64/mkspecs/modules/qt_lib_quickcontrols2impl.pri: +D:/Qt/6.9.1/mingw_64/mkspecs/modules/qt_lib_quickcontrols2impl_private.pri: +D:/Qt/6.9.1/mingw_64/mkspecs/modules/qt_lib_quickcontrols2material.pri: +D:/Qt/6.9.1/mingw_64/mkspecs/modules/qt_lib_quickcontrols2material_private.pri: +D:/Qt/6.9.1/mingw_64/mkspecs/modules/qt_lib_quickcontrols2materialstyleimpl.pri: +D:/Qt/6.9.1/mingw_64/mkspecs/modules/qt_lib_quickcontrols2materialstyleimpl_private.pri: +D:/Qt/6.9.1/mingw_64/mkspecs/modules/qt_lib_quickcontrols2universal.pri: +D:/Qt/6.9.1/mingw_64/mkspecs/modules/qt_lib_quickcontrols2universal_private.pri: +D:/Qt/6.9.1/mingw_64/mkspecs/modules/qt_lib_quickcontrols2universalstyleimpl.pri: +D:/Qt/6.9.1/mingw_64/mkspecs/modules/qt_lib_quickcontrols2universalstyleimpl_private.pri: +D:/Qt/6.9.1/mingw_64/mkspecs/modules/qt_lib_quickcontrols2windowsstyleimpl.pri: +D:/Qt/6.9.1/mingw_64/mkspecs/modules/qt_lib_quickcontrols2windowsstyleimpl_private.pri: +D:/Qt/6.9.1/mingw_64/mkspecs/modules/qt_lib_quickcontrolstestutilsprivate_private.pri: +D:/Qt/6.9.1/mingw_64/mkspecs/modules/qt_lib_quickdialogs2.pri: +D:/Qt/6.9.1/mingw_64/mkspecs/modules/qt_lib_quickdialogs2_private.pri: +D:/Qt/6.9.1/mingw_64/mkspecs/modules/qt_lib_quickdialogs2quickimpl.pri: +D:/Qt/6.9.1/mingw_64/mkspecs/modules/qt_lib_quickdialogs2quickimpl_private.pri: +D:/Qt/6.9.1/mingw_64/mkspecs/modules/qt_lib_quickdialogs2utils.pri: +D:/Qt/6.9.1/mingw_64/mkspecs/modules/qt_lib_quickdialogs2utils_private.pri: +D:/Qt/6.9.1/mingw_64/mkspecs/modules/qt_lib_quickeffects.pri: +D:/Qt/6.9.1/mingw_64/mkspecs/modules/qt_lib_quickeffects_private.pri: +D:/Qt/6.9.1/mingw_64/mkspecs/modules/qt_lib_quicklayouts.pri: +D:/Qt/6.9.1/mingw_64/mkspecs/modules/qt_lib_quicklayouts_private.pri: +D:/Qt/6.9.1/mingw_64/mkspecs/modules/qt_lib_quickparticles_private.pri: +D:/Qt/6.9.1/mingw_64/mkspecs/modules/qt_lib_quickshapes_private.pri: +D:/Qt/6.9.1/mingw_64/mkspecs/modules/qt_lib_quicktemplates2.pri: +D:/Qt/6.9.1/mingw_64/mkspecs/modules/qt_lib_quicktemplates2_private.pri: +D:/Qt/6.9.1/mingw_64/mkspecs/modules/qt_lib_quicktestutilsprivate_private.pri: +D:/Qt/6.9.1/mingw_64/mkspecs/modules/qt_lib_quicktimeline.pri: +D:/Qt/6.9.1/mingw_64/mkspecs/modules/qt_lib_quicktimeline_private.pri: +D:/Qt/6.9.1/mingw_64/mkspecs/modules/qt_lib_quicktimelineblendtrees.pri: +D:/Qt/6.9.1/mingw_64/mkspecs/modules/qt_lib_quicktimelineblendtrees_private.pri: +D:/Qt/6.9.1/mingw_64/mkspecs/modules/qt_lib_quickvectorimage.pri: +D:/Qt/6.9.1/mingw_64/mkspecs/modules/qt_lib_quickvectorimage_private.pri: +D:/Qt/6.9.1/mingw_64/mkspecs/modules/qt_lib_quickvectorimagegenerator_private.pri: +D:/Qt/6.9.1/mingw_64/mkspecs/modules/qt_lib_quickwidgets.pri: +D:/Qt/6.9.1/mingw_64/mkspecs/modules/qt_lib_quickwidgets_private.pri: +D:/Qt/6.9.1/mingw_64/mkspecs/modules/qt_lib_shadertools.pri: +D:/Qt/6.9.1/mingw_64/mkspecs/modules/qt_lib_shadertools_private.pri: +D:/Qt/6.9.1/mingw_64/mkspecs/modules/qt_lib_spatialaudio.pri: +D:/Qt/6.9.1/mingw_64/mkspecs/modules/qt_lib_spatialaudio_private.pri: +D:/Qt/6.9.1/mingw_64/mkspecs/modules/qt_lib_sql.pri: +D:/Qt/6.9.1/mingw_64/mkspecs/modules/qt_lib_sql_private.pri: +D:/Qt/6.9.1/mingw_64/mkspecs/modules/qt_lib_svg.pri: +D:/Qt/6.9.1/mingw_64/mkspecs/modules/qt_lib_svg_private.pri: +D:/Qt/6.9.1/mingw_64/mkspecs/modules/qt_lib_svgwidgets.pri: +D:/Qt/6.9.1/mingw_64/mkspecs/modules/qt_lib_svgwidgets_private.pri: +D:/Qt/6.9.1/mingw_64/mkspecs/modules/qt_lib_testinternals_private.pri: +D:/Qt/6.9.1/mingw_64/mkspecs/modules/qt_lib_testlib.pri: +D:/Qt/6.9.1/mingw_64/mkspecs/modules/qt_lib_testlib_private.pri: +D:/Qt/6.9.1/mingw_64/mkspecs/modules/qt_lib_tools_private.pri: +D:/Qt/6.9.1/mingw_64/mkspecs/modules/qt_lib_uiplugin.pri: +D:/Qt/6.9.1/mingw_64/mkspecs/modules/qt_lib_uitools.pri: +D:/Qt/6.9.1/mingw_64/mkspecs/modules/qt_lib_uitools_private.pri: +D:/Qt/6.9.1/mingw_64/mkspecs/modules/qt_lib_widgets.pri: +D:/Qt/6.9.1/mingw_64/mkspecs/modules/qt_lib_widgets_private.pri: +D:/Qt/6.9.1/mingw_64/mkspecs/modules/qt_lib_xml.pri: +D:/Qt/6.9.1/mingw_64/mkspecs/modules/qt_lib_xml_private.pri: +D:/Qt/6.9.1/mingw_64/mkspecs/modules/qt_lib_zlib_private.pri: +D:/Qt/6.9.1/mingw_64/mkspecs/features/qt_functions.prf: +D:/Qt/6.9.1/mingw_64/mkspecs/features/qt_config.prf: +D:/Qt/6.9.1/mingw_64/mkspecs/win32-g++/qmake.conf: +D:/Qt/6.9.1/mingw_64/mkspecs/features/spec_post.prf: +.qmake.stash: +D:/Qt/6.9.1/mingw_64/mkspecs/features/exclusive_builds.prf: +D:/Qt/6.9.1/mingw_64/mkspecs/features/toolchain.prf: +D:/Qt/6.9.1/mingw_64/mkspecs/features/default_pre.prf: +D:/Qt/6.9.1/mingw_64/mkspecs/features/win32/default_pre.prf: +D:/Qt/6.9.1/mingw_64/mkspecs/features/resolve_config.prf: +D:/Qt/6.9.1/mingw_64/mkspecs/features/exclusive_builds_post.prf: +D:/Qt/6.9.1/mingw_64/mkspecs/features/default_post.prf: +D:/Qt/6.9.1/mingw_64/mkspecs/features/qtquickcompiler.prf: +D:/Qt/6.9.1/mingw_64/mkspecs/features/precompile_header.prf: +D:/Qt/6.9.1/mingw_64/mkspecs/features/warn_on.prf: +D:/Qt/6.9.1/mingw_64/mkspecs/features/permissions.prf: +D:/Qt/6.9.1/mingw_64/mkspecs/features/qt.prf: +D:/Qt/6.9.1/mingw_64/mkspecs/features/resources_functions.prf: +D:/Qt/6.9.1/mingw_64/mkspecs/features/resources.prf: +D:/Qt/6.9.1/mingw_64/mkspecs/features/moc.prf: +D:/Qt/6.9.1/mingw_64/mkspecs/features/win32/opengl.prf: +D:/Qt/6.9.1/mingw_64/mkspecs/features/uic.prf: +D:/Qt/6.9.1/mingw_64/mkspecs/features/qmake_use.prf: +D:/Qt/6.9.1/mingw_64/mkspecs/features/file_copies.prf: +D:/Qt/6.9.1/mingw_64/mkspecs/features/win32/windows.prf: +D:/Qt/6.9.1/mingw_64/mkspecs/features/testcase_targets.prf: +D:/Qt/6.9.1/mingw_64/mkspecs/features/exceptions.prf: +D:/Qt/6.9.1/mingw_64/mkspecs/features/yacc.prf: +D:/Qt/6.9.1/mingw_64/mkspecs/features/lex.prf: +untitled2.pro: +D:/Qt/6.9.1/mingw_64/lib/Qt6Widgets.prl: +D:/Qt/6.9.1/mingw_64/lib/Qt6Gui.prl: +D:/Qt/6.9.1/mingw_64/lib/Qt6Network.prl: +D:/Qt/6.9.1/mingw_64/lib/Qt6Concurrent.prl: +D:/Qt/6.9.1/mingw_64/lib/Qt6Core.prl: +D:/Qt/6.9.1/mingw_64/lib/Qt6EntryPoint.prl: +D:/Qt/6.9.1/mingw_64/mkspecs/features/build_pass.prf: +resources.qrc: +qmake: FORCE + @$(QMAKE) -o Makefile untitled2.pro -spec win32-g++ "CONFIG+=qtquickcompiler" + +qmake_all: FORCE + +make_first: release-make_first debug-make_first FORCE +all: release-all debug-all FORCE +clean: release-clean debug-clean FORCE +distclean: release-distclean debug-distclean FORCE + -$(DEL_FILE) Makefile + -$(DEL_FILE) .qmake.stash + +release-mocclean: + $(MAKE) -f $(MAKEFILE).Release mocclean +debug-mocclean: + $(MAKE) -f $(MAKEFILE).Debug mocclean +mocclean: release-mocclean debug-mocclean + +release-mocables: + $(MAKE) -f $(MAKEFILE).Release mocables +debug-mocables: + $(MAKE) -f $(MAKEFILE).Debug mocables +mocables: release-mocables debug-mocables + +check: first + +benchmark: first +FORCE: + +.SUFFIXES: + +$(MAKEFILE).Release: Makefile +$(MAKEFILE).Debug: Makefile diff --git a/C++/2.2.8/Makefile.Debug b/C++/2.2.8/Makefile.Debug new file mode 100644 index 0000000..b2360a5 --- /dev/null +++ b/C++/2.2.8/Makefile.Debug @@ -0,0 +1,1173 @@ +############################################################################# +# Makefile for building: untitled2 +# Generated by qmake (3.1) (Qt 6.9.1) +# Project: untitled2.pro +# Template: app +############################################################################# + +MAKEFILE = Makefile.Debug + +EQ = = + +####### Compiler, tools and options + +CC = gcc +CXX = g++ +DEFINES = -DUNICODE -D_UNICODE -DWIN32 -DMINGW_HAS_SECURE_API=1 -DQT_WIDGETS_LIB -DQT_GUI_LIB -DQT_NETWORK_LIB -DQT_CONCURRENT_LIB -DQT_CORE_LIB -DQT_NEEDS_QMAIN +CFLAGS = -fno-keep-inline-dllexport -g -Wall -Wextra -Wextra $(DEFINES) +CXXFLAGS = -fno-keep-inline-dllexport -g -std=gnu++1z -Wall -Wextra -Wextra -fexceptions -mthreads $(DEFINES) +INCPATH = -I. -ID:/Qt/6.9.1/mingw_64/include -ID:/Qt/6.9.1/mingw_64/include/QtWidgets -ID:/Qt/6.9.1/mingw_64/include/QtGui -ID:/Qt/6.9.1/mingw_64/include/QtNetwork -ID:/Qt/6.9.1/mingw_64/include/QtConcurrent -ID:/Qt/6.9.1/mingw_64/include/QtCore -Idebug -I/include -ID:/Qt/6.9.1/mingw_64/mkspecs/win32-g++ +LINKER = g++ +LFLAGS = -Wl,-subsystem,windows -mthreads +LIBS = -ladvapi32 -luser32 -lshell32 -lkernel32 D:\Qt\6.9.1\mingw_64\lib\libQt6Widgets.a D:\Qt\6.9.1\mingw_64\lib\libQt6Gui.a D:\Qt\6.9.1\mingw_64\lib\libQt6Network.a D:\Qt\6.9.1\mingw_64\lib\libQt6Concurrent.a D:\Qt\6.9.1\mingw_64\lib\libQt6Core.a debug\launcher_res.o -lmingw32 D:\Qt\6.9.1\mingw_64\lib\libQt6EntryPoint.a -lshell32 +QMAKE = D:\Qt\6.9.1\mingw_64\bin\qmake.exe +DEL_FILE = del +CHK_DIR_EXISTS= if not exist +MKDIR = mkdir +COPY = copy /y +COPY_FILE = copy /y +COPY_DIR = xcopy /s /q /y /i +INSTALL_FILE = copy /y +INSTALL_PROGRAM = copy /y +INSTALL_DIR = xcopy /s /q /y /i +QINSTALL = D:\Qt\6.9.1\mingw_64\bin\qmake.exe -install qinstall +QINSTALL_PROGRAM = D:\Qt\6.9.1\mingw_64\bin\qmake.exe -install qinstall -exe +DEL_FILE = del +SYMLINK = $(QMAKE) -install ln -f -s +DEL_DIR = rmdir +MOVE = move +IDC = idc +IDL = midl +ZIP = zip -r -9 +DEF_FILE = +RES_FILE = debug\launcher_res.o +SED = $(QMAKE) -install sed +MOVE = move + +####### Output directory + +OBJECTS_DIR = debug + +####### Files + +SOURCES = main.cpp \ + mainwindow.cpp debug\qrc_resources.cpp \ + debug\moc_mainwindow.cpp +OBJECTS = debug/main.o \ + debug/mainwindow.o \ + debug/qrc_resources.o \ + debug/moc_mainwindow.o + +DIST = mainwindow.h main.cpp \ + mainwindow.cpp +QMAKE_TARGET = untitled2 +DESTDIR = debug\ #avoid trailing-slash linebreak +TARGET = untitled2.exe +DESTDIR_TARGET = debug\untitled2.exe + +####### Build rules + +first: all +all: Makefile.Debug debug/untitled2.exe + +debug/untitled2.exe: D:/Qt/6.9.1/mingw_64/lib/libQt6Widgets.a D:/Qt/6.9.1/mingw_64/lib/libQt6Gui.a D:/Qt/6.9.1/mingw_64/lib/libQt6Network.a D:/Qt/6.9.1/mingw_64/lib/libQt6Concurrent.a D:/Qt/6.9.1/mingw_64/lib/libQt6Core.a D:/Qt/6.9.1/mingw_64/lib/libQt6EntryPoint.a $(OBJECTS) debug/launcher_res.o + $(LINKER) $(LFLAGS) -o $(DESTDIR_TARGET) $(OBJECTS) $(LIBS) + +debug/launcher_res.o: launcher.rc + windres -i launcher.rc -o debug\launcher_res.o --include-dir=. $(DEFINES) + +qmake: FORCE + @$(QMAKE) -o Makefile.Debug untitled2.pro -spec win32-g++ "CONFIG+=qtquickcompiler" + +qmake_all: FORCE + +dist: + $(ZIP) untitled2.zip $(SOURCES) $(DIST) untitled2.pro D:\Qt\6.9.1\mingw_64\mkspecs\features\spec_pre.prf D:\Qt\6.9.1\mingw_64\mkspecs\features\device_config.prf D:\Qt\6.9.1\mingw_64\mkspecs\common\sanitize.conf D:\Qt\6.9.1\mingw_64\mkspecs\common\gcc-base.conf D:\Qt\6.9.1\mingw_64\mkspecs\common\g++-base.conf D:\Qt\6.9.1\mingw_64\mkspecs\features\win32\windows_vulkan_sdk.prf D:\Qt\6.9.1\mingw_64\mkspecs\common\windows-vulkan.conf D:\Qt\6.9.1\mingw_64\mkspecs\common\g++-win32.conf D:\Qt\6.9.1\mingw_64\mkspecs\common\windows-desktop.conf D:\Qt\6.9.1\mingw_64\mkspecs\qconfig.pri D:\Qt\6.9.1\mingw_64\mkspecs\modules\qt_ext_freetype.pri D:\Qt\6.9.1\mingw_64\mkspecs\modules\qt_ext_libjpeg.pri D:\Qt\6.9.1\mingw_64\mkspecs\modules\qt_ext_libpng.pri D:\Qt\6.9.1\mingw_64\mkspecs\modules\qt_ext_openxr_loader.pri D:\Qt\6.9.1\mingw_64\mkspecs\modules\qt_lib_charts.pri D:\Qt\6.9.1\mingw_64\mkspecs\modules\qt_lib_charts_private.pri D:\Qt\6.9.1\mingw_64\mkspecs\modules\qt_lib_chartsqml.pri D:\Qt\6.9.1\mingw_64\mkspecs\modules\qt_lib_chartsqml_private.pri D:\Qt\6.9.1\mingw_64\mkspecs\modules\qt_lib_concurrent.pri D:\Qt\6.9.1\mingw_64\mkspecs\modules\qt_lib_concurrent_private.pri D:\Qt\6.9.1\mingw_64\mkspecs\modules\qt_lib_core.pri D:\Qt\6.9.1\mingw_64\mkspecs\modules\qt_lib_core_private.pri D:\Qt\6.9.1\mingw_64\mkspecs\modules\qt_lib_dbus.pri D:\Qt\6.9.1\mingw_64\mkspecs\modules\qt_lib_dbus_private.pri D:\Qt\6.9.1\mingw_64\mkspecs\modules\qt_lib_designer.pri D:\Qt\6.9.1\mingw_64\mkspecs\modules\qt_lib_designer_private.pri D:\Qt\6.9.1\mingw_64\mkspecs\modules\qt_lib_designercomponents_private.pri D:\Qt\6.9.1\mingw_64\mkspecs\modules\qt_lib_devicediscovery_support_private.pri D:\Qt\6.9.1\mingw_64\mkspecs\modules\qt_lib_entrypoint_private.pri D:\Qt\6.9.1\mingw_64\mkspecs\modules\qt_lib_example_icons_private.pri D:\Qt\6.9.1\mingw_64\mkspecs\modules\qt_lib_examples_asset_downloader_private.pri D:\Qt\6.9.1\mingw_64\mkspecs\modules\qt_lib_fb_support_private.pri D:\Qt\6.9.1\mingw_64\mkspecs\modules\qt_lib_ffmpegmediapluginimpl_private.pri D:\Qt\6.9.1\mingw_64\mkspecs\modules\qt_lib_freetype_private.pri D:\Qt\6.9.1\mingw_64\mkspecs\modules\qt_lib_gui.pri D:\Qt\6.9.1\mingw_64\mkspecs\modules\qt_lib_gui_private.pri D:\Qt\6.9.1\mingw_64\mkspecs\modules\qt_lib_harfbuzz_private.pri D:\Qt\6.9.1\mingw_64\mkspecs\modules\qt_lib_help.pri D:\Qt\6.9.1\mingw_64\mkspecs\modules\qt_lib_help_private.pri D:\Qt\6.9.1\mingw_64\mkspecs\modules\qt_lib_jpeg_private.pri D:\Qt\6.9.1\mingw_64\mkspecs\modules\qt_lib_labsanimation.pri D:\Qt\6.9.1\mingw_64\mkspecs\modules\qt_lib_labsanimation_private.pri D:\Qt\6.9.1\mingw_64\mkspecs\modules\qt_lib_labsfolderlistmodel.pri D:\Qt\6.9.1\mingw_64\mkspecs\modules\qt_lib_labsfolderlistmodel_private.pri D:\Qt\6.9.1\mingw_64\mkspecs\modules\qt_lib_labsplatform.pri D:\Qt\6.9.1\mingw_64\mkspecs\modules\qt_lib_labsplatform_private.pri D:\Qt\6.9.1\mingw_64\mkspecs\modules\qt_lib_labsqmlmodels.pri D:\Qt\6.9.1\mingw_64\mkspecs\modules\qt_lib_labsqmlmodels_private.pri D:\Qt\6.9.1\mingw_64\mkspecs\modules\qt_lib_labssettings.pri D:\Qt\6.9.1\mingw_64\mkspecs\modules\qt_lib_labssettings_private.pri D:\Qt\6.9.1\mingw_64\mkspecs\modules\qt_lib_labssharedimage.pri D:\Qt\6.9.1\mingw_64\mkspecs\modules\qt_lib_labssharedimage_private.pri D:\Qt\6.9.1\mingw_64\mkspecs\modules\qt_lib_labswavefrontmesh.pri D:\Qt\6.9.1\mingw_64\mkspecs\modules\qt_lib_labswavefrontmesh_private.pri D:\Qt\6.9.1\mingw_64\mkspecs\modules\qt_lib_linguist.pri D:\Qt\6.9.1\mingw_64\mkspecs\modules\qt_lib_multimedia.pri D:\Qt\6.9.1\mingw_64\mkspecs\modules\qt_lib_multimedia_private.pri D:\Qt\6.9.1\mingw_64\mkspecs\modules\qt_lib_multimediaquick_private.pri D:\Qt\6.9.1\mingw_64\mkspecs\modules\qt_lib_multimediatestlibprivate_private.pri D:\Qt\6.9.1\mingw_64\mkspecs\modules\qt_lib_multimediawidgets.pri D:\Qt\6.9.1\mingw_64\mkspecs\modules\qt_lib_multimediawidgets_private.pri D:\Qt\6.9.1\mingw_64\mkspecs\modules\qt_lib_network.pri D:\Qt\6.9.1\mingw_64\mkspecs\modules\qt_lib_network_private.pri D:\Qt\6.9.1\mingw_64\mkspecs\modules\qt_lib_opengl.pri D:\Qt\6.9.1\mingw_64\mkspecs\modules\qt_lib_opengl_private.pri D:\Qt\6.9.1\mingw_64\mkspecs\modules\qt_lib_openglwidgets.pri D:\Qt\6.9.1\mingw_64\mkspecs\modules\qt_lib_openglwidgets_private.pri D:\Qt\6.9.1\mingw_64\mkspecs\modules\qt_lib_packetprotocol_private.pri D:\Qt\6.9.1\mingw_64\mkspecs\modules\qt_lib_png_private.pri D:\Qt\6.9.1\mingw_64\mkspecs\modules\qt_lib_printsupport.pri D:\Qt\6.9.1\mingw_64\mkspecs\modules\qt_lib_printsupport_private.pri D:\Qt\6.9.1\mingw_64\mkspecs\modules\qt_lib_qdoccatch_private.pri D:\Qt\6.9.1\mingw_64\mkspecs\modules\qt_lib_qdoccatchconversions_private.pri D:\Qt\6.9.1\mingw_64\mkspecs\modules\qt_lib_qdoccatchgenerators_private.pri D:\Qt\6.9.1\mingw_64\mkspecs\modules\qt_lib_qml.pri D:\Qt\6.9.1\mingw_64\mkspecs\modules\qt_lib_qml_private.pri D:\Qt\6.9.1\mingw_64\mkspecs\modules\qt_lib_qmlassetdownloader.pri D:\Qt\6.9.1\mingw_64\mkspecs\modules\qt_lib_qmlassetdownloader_private.pri D:\Qt\6.9.1\mingw_64\mkspecs\modules\qt_lib_qmlcompiler.pri D:\Qt\6.9.1\mingw_64\mkspecs\modules\qt_lib_qmlcompiler_private.pri D:\Qt\6.9.1\mingw_64\mkspecs\modules\qt_lib_qmlcore.pri D:\Qt\6.9.1\mingw_64\mkspecs\modules\qt_lib_qmlcore_private.pri D:\Qt\6.9.1\mingw_64\mkspecs\modules\qt_lib_qmldebug_private.pri D:\Qt\6.9.1\mingw_64\mkspecs\modules\qt_lib_qmldom_private.pri D:\Qt\6.9.1\mingw_64\mkspecs\modules\qt_lib_qmlformat_private.pri D:\Qt\6.9.1\mingw_64\mkspecs\modules\qt_lib_qmlintegration.pri D:\Qt\6.9.1\mingw_64\mkspecs\modules\qt_lib_qmlintegration_private.pri D:\Qt\6.9.1\mingw_64\mkspecs\modules\qt_lib_qmllocalstorage.pri D:\Qt\6.9.1\mingw_64\mkspecs\modules\qt_lib_qmllocalstorage_private.pri D:\Qt\6.9.1\mingw_64\mkspecs\modules\qt_lib_qmlls_private.pri D:\Qt\6.9.1\mingw_64\mkspecs\modules\qt_lib_qmlmeta.pri D:\Qt\6.9.1\mingw_64\mkspecs\modules\qt_lib_qmlmeta_private.pri D:\Qt\6.9.1\mingw_64\mkspecs\modules\qt_lib_qmlmodels.pri D:\Qt\6.9.1\mingw_64\mkspecs\modules\qt_lib_qmlmodels_private.pri D:\Qt\6.9.1\mingw_64\mkspecs\modules\qt_lib_qmlnetwork.pri D:\Qt\6.9.1\mingw_64\mkspecs\modules\qt_lib_qmlnetwork_private.pri D:\Qt\6.9.1\mingw_64\mkspecs\modules\qt_lib_qmltest.pri D:\Qt\6.9.1\mingw_64\mkspecs\modules\qt_lib_qmltest_private.pri D:\Qt\6.9.1\mingw_64\mkspecs\modules\qt_lib_qmltoolingsettings_private.pri D:\Qt\6.9.1\mingw_64\mkspecs\modules\qt_lib_qmltyperegistrar_private.pri D:\Qt\6.9.1\mingw_64\mkspecs\modules\qt_lib_qmlworkerscript.pri D:\Qt\6.9.1\mingw_64\mkspecs\modules\qt_lib_qmlworkerscript_private.pri D:\Qt\6.9.1\mingw_64\mkspecs\modules\qt_lib_qmlxmllistmodel.pri D:\Qt\6.9.1\mingw_64\mkspecs\modules\qt_lib_qmlxmllistmodel_private.pri D:\Qt\6.9.1\mingw_64\mkspecs\modules\qt_lib_quick.pri D:\Qt\6.9.1\mingw_64\mkspecs\modules\qt_lib_quick3d.pri D:\Qt\6.9.1\mingw_64\mkspecs\modules\qt_lib_quick3d_private.pri D:\Qt\6.9.1\mingw_64\mkspecs\modules\qt_lib_quick3dassetimport.pri D:\Qt\6.9.1\mingw_64\mkspecs\modules\qt_lib_quick3dassetimport_private.pri D:\Qt\6.9.1\mingw_64\mkspecs\modules\qt_lib_quick3dassetutils.pri D:\Qt\6.9.1\mingw_64\mkspecs\modules\qt_lib_quick3dassetutils_private.pri D:\Qt\6.9.1\mingw_64\mkspecs\modules\qt_lib_quick3deffects.pri D:\Qt\6.9.1\mingw_64\mkspecs\modules\qt_lib_quick3deffects_private.pri D:\Qt\6.9.1\mingw_64\mkspecs\modules\qt_lib_quick3dglslparser_private.pri D:\Qt\6.9.1\mingw_64\mkspecs\modules\qt_lib_quick3dhelpers.pri D:\Qt\6.9.1\mingw_64\mkspecs\modules\qt_lib_quick3dhelpers_private.pri D:\Qt\6.9.1\mingw_64\mkspecs\modules\qt_lib_quick3dhelpersimpl.pri D:\Qt\6.9.1\mingw_64\mkspecs\modules\qt_lib_quick3dhelpersimpl_private.pri D:\Qt\6.9.1\mingw_64\mkspecs\modules\qt_lib_quick3diblbaker.pri D:\Qt\6.9.1\mingw_64\mkspecs\modules\qt_lib_quick3diblbaker_private.pri D:\Qt\6.9.1\mingw_64\mkspecs\modules\qt_lib_quick3dparticleeffects.pri D:\Qt\6.9.1\mingw_64\mkspecs\modules\qt_lib_quick3dparticleeffects_private.pri D:\Qt\6.9.1\mingw_64\mkspecs\modules\qt_lib_quick3dparticles.pri D:\Qt\6.9.1\mingw_64\mkspecs\modules\qt_lib_quick3dparticles_private.pri D:\Qt\6.9.1\mingw_64\mkspecs\modules\qt_lib_quick3druntimerender.pri D:\Qt\6.9.1\mingw_64\mkspecs\modules\qt_lib_quick3druntimerender_private.pri D:\Qt\6.9.1\mingw_64\mkspecs\modules\qt_lib_quick3dspatialaudio_private.pri D:\Qt\6.9.1\mingw_64\mkspecs\modules\qt_lib_quick3dutils.pri D:\Qt\6.9.1\mingw_64\mkspecs\modules\qt_lib_quick3dutils_private.pri D:\Qt\6.9.1\mingw_64\mkspecs\modules\qt_lib_quick3dxr.pri D:\Qt\6.9.1\mingw_64\mkspecs\modules\qt_lib_quick3dxr_private.pri D:\Qt\6.9.1\mingw_64\mkspecs\modules\qt_lib_quick_private.pri D:\Qt\6.9.1\mingw_64\mkspecs\modules\qt_lib_quickcontrols2.pri D:\Qt\6.9.1\mingw_64\mkspecs\modules\qt_lib_quickcontrols2_private.pri D:\Qt\6.9.1\mingw_64\mkspecs\modules\qt_lib_quickcontrols2basic.pri D:\Qt\6.9.1\mingw_64\mkspecs\modules\qt_lib_quickcontrols2basic_private.pri D:\Qt\6.9.1\mingw_64\mkspecs\modules\qt_lib_quickcontrols2basicstyleimpl.pri D:\Qt\6.9.1\mingw_64\mkspecs\modules\qt_lib_quickcontrols2basicstyleimpl_private.pri D:\Qt\6.9.1\mingw_64\mkspecs\modules\qt_lib_quickcontrols2fluentwinui3styleimpl.pri D:\Qt\6.9.1\mingw_64\mkspecs\modules\qt_lib_quickcontrols2fluentwinui3styleimpl_private.pri D:\Qt\6.9.1\mingw_64\mkspecs\modules\qt_lib_quickcontrols2fusion.pri D:\Qt\6.9.1\mingw_64\mkspecs\modules\qt_lib_quickcontrols2fusion_private.pri D:\Qt\6.9.1\mingw_64\mkspecs\modules\qt_lib_quickcontrols2fusionstyleimpl.pri D:\Qt\6.9.1\mingw_64\mkspecs\modules\qt_lib_quickcontrols2fusionstyleimpl_private.pri D:\Qt\6.9.1\mingw_64\mkspecs\modules\qt_lib_quickcontrols2imagine.pri D:\Qt\6.9.1\mingw_64\mkspecs\modules\qt_lib_quickcontrols2imagine_private.pri D:\Qt\6.9.1\mingw_64\mkspecs\modules\qt_lib_quickcontrols2imaginestyleimpl.pri D:\Qt\6.9.1\mingw_64\mkspecs\modules\qt_lib_quickcontrols2imaginestyleimpl_private.pri D:\Qt\6.9.1\mingw_64\mkspecs\modules\qt_lib_quickcontrols2impl.pri D:\Qt\6.9.1\mingw_64\mkspecs\modules\qt_lib_quickcontrols2impl_private.pri D:\Qt\6.9.1\mingw_64\mkspecs\modules\qt_lib_quickcontrols2material.pri D:\Qt\6.9.1\mingw_64\mkspecs\modules\qt_lib_quickcontrols2material_private.pri D:\Qt\6.9.1\mingw_64\mkspecs\modules\qt_lib_quickcontrols2materialstyleimpl.pri D:\Qt\6.9.1\mingw_64\mkspecs\modules\qt_lib_quickcontrols2materialstyleimpl_private.pri D:\Qt\6.9.1\mingw_64\mkspecs\modules\qt_lib_quickcontrols2universal.pri D:\Qt\6.9.1\mingw_64\mkspecs\modules\qt_lib_quickcontrols2universal_private.pri D:\Qt\6.9.1\mingw_64\mkspecs\modules\qt_lib_quickcontrols2universalstyleimpl.pri D:\Qt\6.9.1\mingw_64\mkspecs\modules\qt_lib_quickcontrols2universalstyleimpl_private.pri D:\Qt\6.9.1\mingw_64\mkspecs\modules\qt_lib_quickcontrols2windowsstyleimpl.pri D:\Qt\6.9.1\mingw_64\mkspecs\modules\qt_lib_quickcontrols2windowsstyleimpl_private.pri D:\Qt\6.9.1\mingw_64\mkspecs\modules\qt_lib_quickcontrolstestutilsprivate_private.pri D:\Qt\6.9.1\mingw_64\mkspecs\modules\qt_lib_quickdialogs2.pri D:\Qt\6.9.1\mingw_64\mkspecs\modules\qt_lib_quickdialogs2_private.pri D:\Qt\6.9.1\mingw_64\mkspecs\modules\qt_lib_quickdialogs2quickimpl.pri D:\Qt\6.9.1\mingw_64\mkspecs\modules\qt_lib_quickdialogs2quickimpl_private.pri D:\Qt\6.9.1\mingw_64\mkspecs\modules\qt_lib_quickdialogs2utils.pri D:\Qt\6.9.1\mingw_64\mkspecs\modules\qt_lib_quickdialogs2utils_private.pri D:\Qt\6.9.1\mingw_64\mkspecs\modules\qt_lib_quickeffects.pri D:\Qt\6.9.1\mingw_64\mkspecs\modules\qt_lib_quickeffects_private.pri D:\Qt\6.9.1\mingw_64\mkspecs\modules\qt_lib_quicklayouts.pri D:\Qt\6.9.1\mingw_64\mkspecs\modules\qt_lib_quicklayouts_private.pri D:\Qt\6.9.1\mingw_64\mkspecs\modules\qt_lib_quickparticles_private.pri D:\Qt\6.9.1\mingw_64\mkspecs\modules\qt_lib_quickshapes_private.pri D:\Qt\6.9.1\mingw_64\mkspecs\modules\qt_lib_quicktemplates2.pri D:\Qt\6.9.1\mingw_64\mkspecs\modules\qt_lib_quicktemplates2_private.pri D:\Qt\6.9.1\mingw_64\mkspecs\modules\qt_lib_quicktestutilsprivate_private.pri D:\Qt\6.9.1\mingw_64\mkspecs\modules\qt_lib_quicktimeline.pri D:\Qt\6.9.1\mingw_64\mkspecs\modules\qt_lib_quicktimeline_private.pri D:\Qt\6.9.1\mingw_64\mkspecs\modules\qt_lib_quicktimelineblendtrees.pri D:\Qt\6.9.1\mingw_64\mkspecs\modules\qt_lib_quicktimelineblendtrees_private.pri D:\Qt\6.9.1\mingw_64\mkspecs\modules\qt_lib_quickvectorimage.pri D:\Qt\6.9.1\mingw_64\mkspecs\modules\qt_lib_quickvectorimage_private.pri D:\Qt\6.9.1\mingw_64\mkspecs\modules\qt_lib_quickvectorimagegenerator_private.pri D:\Qt\6.9.1\mingw_64\mkspecs\modules\qt_lib_quickwidgets.pri D:\Qt\6.9.1\mingw_64\mkspecs\modules\qt_lib_quickwidgets_private.pri D:\Qt\6.9.1\mingw_64\mkspecs\modules\qt_lib_shadertools.pri D:\Qt\6.9.1\mingw_64\mkspecs\modules\qt_lib_shadertools_private.pri D:\Qt\6.9.1\mingw_64\mkspecs\modules\qt_lib_spatialaudio.pri D:\Qt\6.9.1\mingw_64\mkspecs\modules\qt_lib_spatialaudio_private.pri D:\Qt\6.9.1\mingw_64\mkspecs\modules\qt_lib_sql.pri D:\Qt\6.9.1\mingw_64\mkspecs\modules\qt_lib_sql_private.pri D:\Qt\6.9.1\mingw_64\mkspecs\modules\qt_lib_svg.pri D:\Qt\6.9.1\mingw_64\mkspecs\modules\qt_lib_svg_private.pri D:\Qt\6.9.1\mingw_64\mkspecs\modules\qt_lib_svgwidgets.pri D:\Qt\6.9.1\mingw_64\mkspecs\modules\qt_lib_svgwidgets_private.pri D:\Qt\6.9.1\mingw_64\mkspecs\modules\qt_lib_testinternals_private.pri D:\Qt\6.9.1\mingw_64\mkspecs\modules\qt_lib_testlib.pri D:\Qt\6.9.1\mingw_64\mkspecs\modules\qt_lib_testlib_private.pri D:\Qt\6.9.1\mingw_64\mkspecs\modules\qt_lib_tools_private.pri D:\Qt\6.9.1\mingw_64\mkspecs\modules\qt_lib_uiplugin.pri D:\Qt\6.9.1\mingw_64\mkspecs\modules\qt_lib_uitools.pri D:\Qt\6.9.1\mingw_64\mkspecs\modules\qt_lib_uitools_private.pri D:\Qt\6.9.1\mingw_64\mkspecs\modules\qt_lib_widgets.pri D:\Qt\6.9.1\mingw_64\mkspecs\modules\qt_lib_widgets_private.pri D:\Qt\6.9.1\mingw_64\mkspecs\modules\qt_lib_xml.pri D:\Qt\6.9.1\mingw_64\mkspecs\modules\qt_lib_xml_private.pri D:\Qt\6.9.1\mingw_64\mkspecs\modules\qt_lib_zlib_private.pri D:\Qt\6.9.1\mingw_64\mkspecs\features\qt_functions.prf D:\Qt\6.9.1\mingw_64\mkspecs\features\qt_config.prf D:\Qt\6.9.1\mingw_64\mkspecs\win32-g++\qmake.conf D:\Qt\6.9.1\mingw_64\mkspecs\features\spec_post.prf .qmake.stash D:\Qt\6.9.1\mingw_64\mkspecs\features\exclusive_builds.prf D:\Qt\6.9.1\mingw_64\mkspecs\features\toolchain.prf D:\Qt\6.9.1\mingw_64\mkspecs\features\default_pre.prf D:\Qt\6.9.1\mingw_64\mkspecs\features\win32\default_pre.prf D:\Qt\6.9.1\mingw_64\mkspecs\features\resolve_config.prf D:\Qt\6.9.1\mingw_64\mkspecs\features\exclusive_builds_post.prf D:\Qt\6.9.1\mingw_64\mkspecs\features\default_post.prf D:\Qt\6.9.1\mingw_64\mkspecs\features\build_pass.prf D:\Qt\6.9.1\mingw_64\mkspecs\features\qtquickcompiler.prf D:\Qt\6.9.1\mingw_64\mkspecs\features\precompile_header.prf D:\Qt\6.9.1\mingw_64\mkspecs\features\warn_on.prf D:\Qt\6.9.1\mingw_64\mkspecs\features\permissions.prf D:\Qt\6.9.1\mingw_64\mkspecs\features\qt.prf D:\Qt\6.9.1\mingw_64\mkspecs\features\resources_functions.prf D:\Qt\6.9.1\mingw_64\mkspecs\features\resources.prf D:\Qt\6.9.1\mingw_64\mkspecs\features\moc.prf D:\Qt\6.9.1\mingw_64\mkspecs\features\win32\opengl.prf D:\Qt\6.9.1\mingw_64\mkspecs\features\uic.prf D:\Qt\6.9.1\mingw_64\mkspecs\features\qmake_use.prf D:\Qt\6.9.1\mingw_64\mkspecs\features\file_copies.prf D:\Qt\6.9.1\mingw_64\mkspecs\features\win32\windows.prf D:\Qt\6.9.1\mingw_64\mkspecs\features\testcase_targets.prf D:\Qt\6.9.1\mingw_64\mkspecs\features\exceptions.prf D:\Qt\6.9.1\mingw_64\mkspecs\features\yacc.prf D:\Qt\6.9.1\mingw_64\mkspecs\features\lex.prf untitled2.pro resources.qrc D:\Qt\6.9.1\mingw_64\lib\Qt6Widgets.prl D:\Qt\6.9.1\mingw_64\lib\Qt6Gui.prl D:\Qt\6.9.1\mingw_64\lib\Qt6Network.prl D:\Qt\6.9.1\mingw_64\lib\Qt6Concurrent.prl D:\Qt\6.9.1\mingw_64\lib\Qt6Core.prl D:\Qt\6.9.1\mingw_64\lib\Qt6EntryPoint.prl resources.qrc D:\Qt\6.9.1\mingw_64\mkspecs\features\data\dummy.cpp mainwindow.h main.cpp mainwindow.cpp + +clean: compiler_clean + -$(DEL_FILE) debug\main.o debug\mainwindow.o debug\qrc_resources.o debug\moc_mainwindow.o + -$(DEL_FILE) debug\launcher_res.o + +distclean: clean + -$(DEL_FILE) .qmake.stash + -$(DEL_FILE) $(DESTDIR_TARGET) + -$(DEL_FILE) Makefile.Debug + +mocclean: compiler_moc_header_clean compiler_moc_objc_header_clean compiler_moc_source_clean + +mocables: compiler_moc_header_make_all compiler_moc_objc_header_make_all compiler_moc_source_make_all + +check: first + +benchmark: first + +compiler_no_pch_compiler_make_all: +compiler_no_pch_compiler_clean: +compiler_rcc_make_all: debug/qrc_resources.cpp +compiler_rcc_clean: + -$(DEL_FILE) debug\qrc_resources.cpp +debug/qrc_resources.cpp: resources.qrc \ + D:/Qt/6.9.1/mingw_64/bin/rcc.exe \ + styles.qss \ + untitled2_zh_CN.ts + D:\Qt\6.9.1\mingw_64\bin\rcc.exe -name resources --no-zstd resources.qrc -o debug\qrc_resources.cpp + +compiler_moc_predefs_make_all: debug/moc_predefs.h +compiler_moc_predefs_clean: + -$(DEL_FILE) debug\moc_predefs.h +debug/moc_predefs.h: D:/Qt/6.9.1/mingw_64/mkspecs/features/data/dummy.cpp + g++ -fno-keep-inline-dllexport -g -std=gnu++1z -Wall -Wextra -Wextra -dM -E -o debug\moc_predefs.h D:\Qt\6.9.1\mingw_64\mkspecs\features\data\dummy.cpp + +compiler_moc_header_make_all: debug/moc_mainwindow.cpp +compiler_moc_header_clean: + -$(DEL_FILE) debug\moc_mainwindow.cpp +debug/moc_mainwindow.cpp: mainwindow.h \ + D:/Qt/6.9.1/mingw_64/include/QtWidgets/QMainWindow \ + D:/Qt/6.9.1/mingw_64/include/QtWidgets/qmainwindow.h \ + D:/Qt/6.9.1/mingw_64/include/QtWidgets/qtwidgetsglobal.h \ + D:/Qt/6.9.1/mingw_64/include/QtGui/qtguiglobal.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qglobal.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qtcoreglobal.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qtversionchecks.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qtconfiginclude.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qconfig.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qtcore-config.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qtconfigmacros.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qtdeprecationdefinitions.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qcompilerdetection.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qprocessordetection.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qsystemdetection.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qtcoreexports.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qtdeprecationmarkers.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qtclasshelpermacros.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qtpreprocessorsupport.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qassert.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qtnoop.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qtypes.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qtversion.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qtypeinfo.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qcontainerfwd.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qsysinfo.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qlogging.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qflags.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qcompare_impl.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qatomic.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qbasicatomic.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qatomic_cxx11.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qgenericatomic.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qyieldcpu.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qconstructormacros.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qdarwinhelpers.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qexceptionhandling.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qforeach.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qttypetraits.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qfunctionpointer.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qglobalstatic.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qmalloc.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qminmax.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qnumeric.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qoverload.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qswap.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qtenvironmentvariables.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qtresource.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qttranslation.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qversiontagging.h \ + D:/Qt/6.9.1/mingw_64/include/QtGui/qtgui-config.h \ + D:/Qt/6.9.1/mingw_64/include/QtGui/qtguiexports.h \ + D:/Qt/6.9.1/mingw_64/include/QtWidgets/qtwidgets-config.h \ + D:/Qt/6.9.1/mingw_64/include/QtWidgets/qtwidgetsexports.h \ + D:/Qt/6.9.1/mingw_64/include/QtWidgets/qwidget.h \ + D:/Qt/6.9.1/mingw_64/include/QtGui/qwindowdefs.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qobjectdefs.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qnamespace.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qcompare.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qstdlibdetection.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qcomparehelpers.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/q20type_traits.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qtmetamacros.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qobjectdefs_impl.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qfunctionaltools_impl.h \ + D:/Qt/6.9.1/mingw_64/include/QtGui/qwindowdefs_win.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qobject.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qstring.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qchar.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qstringview.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qbytearray.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qrefcount.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qarraydata.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qpair.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qarraydatapointer.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qarraydataops.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qcontainertools_impl.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qxptype_traits.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/q20functional.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/q20memory.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/q17memory.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qbytearrayalgorithms.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qbytearrayview.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qstringfwd.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qstringliteral.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qstringalgorithms.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qlatin1stringview.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qanystringview.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qutf8stringview.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qstringtokenizer.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qstringbuilder.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qstringconverter.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qstringconverter_base.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qlist.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qhashfunctions.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qiterator.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qbytearraylist.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qstringlist.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qalgorithms.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qstringmatcher.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qcoreevent.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qbasictimer.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qabstracteventdispatcher.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qeventloop.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qdeadlinetimer.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qelapsedtimer.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qmetatype.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qdatastream.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qscopedpointer.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qiodevicebase.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qfloat16.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qmath.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qtformat_impl.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qiterable.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qmetacontainer.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qcontainerinfo.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qtaggedpointer.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qscopeguard.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qobject_impl.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qbindingstorage.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qmargins.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/q23utility.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/q20utility.h \ + D:/Qt/6.9.1/mingw_64/include/QtGui/qaction.h \ + D:/Qt/6.9.1/mingw_64/include/QtGui/qkeysequence.h \ + D:/Qt/6.9.1/mingw_64/include/QtGui/qicon.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qsize.h \ + D:/Qt/6.9.1/mingw_64/include/QtGui/qpixmap.h \ + D:/Qt/6.9.1/mingw_64/include/QtGui/qpaintdevice.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qrect.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qpoint.h \ + D:/Qt/6.9.1/mingw_64/include/QtGui/qcolor.h \ + D:/Qt/6.9.1/mingw_64/include/QtGui/qrgb.h \ + D:/Qt/6.9.1/mingw_64/include/QtGui/qrgba64.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qshareddata.h \ + D:/Qt/6.9.1/mingw_64/include/QtGui/qimage.h \ + D:/Qt/6.9.1/mingw_64/include/QtGui/qpixelformat.h \ + D:/Qt/6.9.1/mingw_64/include/QtGui/qtransform.h \ + D:/Qt/6.9.1/mingw_64/include/QtGui/qpolygon.h \ + D:/Qt/6.9.1/mingw_64/include/QtGui/qregion.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qspan.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/q20iterator.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qline.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qvariant.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qdebug.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qtextstream.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qcontiguouscache.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qsharedpointer.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qsharedpointer_impl.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qmap.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qshareddata_impl.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qset.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qhash.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qvarlengtharray.h \ + D:/Qt/6.9.1/mingw_64/include/QtGui/qpalette.h \ + D:/Qt/6.9.1/mingw_64/include/QtGui/qbrush.h \ + D:/Qt/6.9.1/mingw_64/include/QtGui/qfont.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qendian.h \ + D:/Qt/6.9.1/mingw_64/include/QtGui/qfontmetrics.h \ + D:/Qt/6.9.1/mingw_64/include/QtGui/qfontinfo.h \ + D:/Qt/6.9.1/mingw_64/include/QtGui/qfontvariableaxis.h \ + D:/Qt/6.9.1/mingw_64/include/QtWidgets/qsizepolicy.h \ + D:/Qt/6.9.1/mingw_64/include/QtGui/qcursor.h \ + D:/Qt/6.9.1/mingw_64/include/QtGui/qbitmap.h \ + D:/Qt/6.9.1/mingw_64/include/QtGui/qevent.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qiodevice.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qurl.h \ + D:/Qt/6.9.1/mingw_64/include/QtGui/qeventpoint.h \ + D:/Qt/6.9.1/mingw_64/include/QtGui/qvector2d.h \ + D:/Qt/6.9.1/mingw_64/include/QtGui/qvectornd.h \ + D:/Qt/6.9.1/mingw_64/include/QtGui/qpointingdevice.h \ + D:/Qt/6.9.1/mingw_64/include/QtGui/qinputdevice.h \ + D:/Qt/6.9.1/mingw_64/include/QtGui/qscreen.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/QList \ + D:/Qt/6.9.1/mingw_64/include/QtCore/QObject \ + D:/Qt/6.9.1/mingw_64/include/QtCore/QRect \ + D:/Qt/6.9.1/mingw_64/include/QtCore/QSize \ + D:/Qt/6.9.1/mingw_64/include/QtCore/QSizeF \ + D:/Qt/6.9.1/mingw_64/include/QtGui/QTransform \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qnativeinterface.h \ + D:/Qt/6.9.1/mingw_64/include/QtGui/qscreen_platform.h \ + D:/Qt/6.9.1/mingw_64/include/QtGui/qguiapplication.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qcoreapplication.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qcoreapplication_platform.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qfuture.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qfutureinterface.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qmutex.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qtsan_impl.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qresultstore.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qfuture_impl.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qthreadpool.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qthread.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qrunnable.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qexception.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qpromise.h \ + D:/Qt/6.9.1/mingw_64/include/QtGui/qinputmethod.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qlocale.h \ + D:/Qt/6.9.1/mingw_64/include/QtGui/qguiapplication_platform.h \ + D:/Qt/6.9.1/mingw_64/include/QtWidgets/qtabwidget.h \ + D:/Qt/6.9.1/mingw_64/include/QtNetwork/QNetworkAccessManager \ + D:/Qt/6.9.1/mingw_64/include/QtNetwork/qnetworkaccessmanager.h \ + D:/Qt/6.9.1/mingw_64/include/QtNetwork/qtnetworkglobal.h \ + D:/Qt/6.9.1/mingw_64/include/QtNetwork/qtnetwork-config.h \ + D:/Qt/6.9.1/mingw_64/include/QtNetwork/qtnetworkexports.h \ + D:/Qt/6.9.1/mingw_64/include/QtNetwork/qnetworkrequest.h \ + D:/Qt/6.9.1/mingw_64/include/QtNetwork/qhttpheaders.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/QSharedDataPointer \ + D:/Qt/6.9.1/mingw_64/include/QtCore/QString \ + D:/Qt/6.9.1/mingw_64/include/QtCore/QUrl \ + D:/Qt/6.9.1/mingw_64/include/QtCore/QVariant \ + D:/Qt/6.9.1/mingw_64/include/QtCore/q26numeric.h \ + D:/Qt/6.9.1/mingw_64/include/QtNetwork/QSslConfiguration \ + D:/Qt/6.9.1/mingw_64/include/QtNetwork/qsslconfiguration.h \ + D:/Qt/6.9.1/mingw_64/include/QtNetwork/qsslsocket.h \ + D:/Qt/6.9.1/mingw_64/include/QtNetwork/qtcpsocket.h \ + D:/Qt/6.9.1/mingw_64/include/QtNetwork/qabstractsocket.h \ + D:/Qt/6.9.1/mingw_64/include/QtNetwork/qhostaddress.h \ + D:/Qt/6.9.1/mingw_64/include/QtNetwork/qsslerror.h \ + D:/Qt/6.9.1/mingw_64/include/QtNetwork/qsslcertificate.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qcryptographichash.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qdatetime.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qcalendar.h \ + D:/Qt/6.9.1/mingw_64/include/QtNetwork/qssl.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/QFlags \ + D:/Qt/6.9.1/mingw_64/include/QtNetwork/QSslPreSharedKeyAuthenticator \ + D:/Qt/6.9.1/mingw_64/include/QtNetwork/qsslpresharedkeyauthenticator.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/QMetaType \ + D:/Qt/6.9.1/mingw_64/include/QtCore/QJsonObject \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qjsonobject.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qjsonvalue.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qcborvalue.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qcborcommon.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qregularexpression.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/quuid.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qjsondocument.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qjsonparseerror.h \ + D:/Qt/6.9.1/mingw_64/include/QtWidgets/QLabel \ + D:/Qt/6.9.1/mingw_64/include/QtWidgets/qlabel.h \ + D:/Qt/6.9.1/mingw_64/include/QtWidgets/qframe.h \ + D:/Qt/6.9.1/mingw_64/include/QtGui/qpicture.h \ + D:/Qt/6.9.1/mingw_64/include/QtGui/qtextdocument.h \ + D:/Qt/6.9.1/mingw_64/include/QtWidgets/QPushButton \ + D:/Qt/6.9.1/mingw_64/include/QtWidgets/qpushbutton.h \ + D:/Qt/6.9.1/mingw_64/include/QtWidgets/qabstractbutton.h \ + D:/Qt/6.9.1/mingw_64/include/QtWidgets/QProgressBar \ + D:/Qt/6.9.1/mingw_64/include/QtWidgets/qprogressbar.h \ + D:/Qt/6.9.1/mingw_64/include/QtWidgets/QTextEdit \ + D:/Qt/6.9.1/mingw_64/include/QtWidgets/qtextedit.h \ + D:/Qt/6.9.1/mingw_64/include/QtWidgets/qabstractscrollarea.h \ + D:/Qt/6.9.1/mingw_64/include/QtGui/qtextoption.h \ + D:/Qt/6.9.1/mingw_64/include/QtGui/qtextcursor.h \ + D:/Qt/6.9.1/mingw_64/include/QtGui/qtextformat.h \ + D:/Qt/6.9.1/mingw_64/include/QtGui/qpen.h \ + D:/Qt/6.9.1/mingw_64/include/QtWidgets/QGroupBox \ + D:/Qt/6.9.1/mingw_64/include/QtWidgets/qgroupbox.h \ + D:/Qt/6.9.1/mingw_64/include/QtWidgets/QFileDialog \ + D:/Qt/6.9.1/mingw_64/include/QtWidgets/qfiledialog.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qdir.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qdirlisting.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qfiledevice.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qfile.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qfileinfo.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qtimezone.h \ + D:/Qt/6.9.1/mingw_64/include/QtWidgets/qdialog.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/QSettings \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qsettings.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/QDir \ + D:/Qt/6.9.1/mingw_64/include/QtWidgets/QLineEdit \ + D:/Qt/6.9.1/mingw_64/include/QtWidgets/qlineedit.h \ + D:/Qt/6.9.1/mingw_64/include/QtWidgets/QDialog \ + D:/Qt/6.9.1/mingw_64/include/QtWidgets/QCheckBox \ + D:/Qt/6.9.1/mingw_64/include/QtWidgets/qcheckbox.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/QTimer \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qtimer.h \ + D:/Qt/6.9.1/mingw_64/include/QtWidgets/QMessageBox \ + D:/Qt/6.9.1/mingw_64/include/QtWidgets/qmessagebox.h \ + D:/Qt/6.9.1/mingw_64/include/QtWidgets/qdialogbuttonbox.h \ + D:/Qt/6.9.1/mingw_64/include/QtWidgets/QApplication \ + D:/Qt/6.9.1/mingw_64/include/QtWidgets/qapplication.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/QProcess \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qprocess.h \ + debug/moc_predefs.h \ + D:/Qt/6.9.1/mingw_64/bin/moc.exe + D:\Qt\6.9.1\mingw_64\bin\moc.exe $(DEFINES) --include E:/C++/untitled2/debug/moc_predefs.h -ID:/Qt/6.9.1/mingw_64/mkspecs/win32-g++ -IE:/C++/untitled2 -ID:/Qt/6.9.1/mingw_64/include -ID:/Qt/6.9.1/mingw_64/include/QtWidgets -ID:/Qt/6.9.1/mingw_64/include/QtGui -ID:/Qt/6.9.1/mingw_64/include/QtNetwork -ID:/Qt/6.9.1/mingw_64/include/QtConcurrent -ID:/Qt/6.9.1/mingw_64/include/QtCore -ID:/Qt/Tools/mingw1310_64/lib/gcc/x86_64-w64-mingw32/13.1.0/include/c++ -ID:/Qt/Tools/mingw1310_64/lib/gcc/x86_64-w64-mingw32/13.1.0/include/c++/x86_64-w64-mingw32 -ID:/Qt/Tools/mingw1310_64/lib/gcc/x86_64-w64-mingw32/13.1.0/include/c++/backward -ID:/Qt/Tools/mingw1310_64/lib/gcc/x86_64-w64-mingw32/13.1.0/include -ID:/Qt/Tools/mingw1310_64/lib/gcc/x86_64-w64-mingw32/13.1.0/include-fixed -ID:/Qt/Tools/mingw1310_64/x86_64-w64-mingw32/include mainwindow.h -o debug\moc_mainwindow.cpp + +compiler_moc_objc_header_make_all: +compiler_moc_objc_header_clean: +compiler_moc_source_make_all: +compiler_moc_source_clean: +compiler_uic_make_all: +compiler_uic_clean: +compiler_yacc_decl_make_all: +compiler_yacc_decl_clean: +compiler_yacc_impl_make_all: +compiler_yacc_impl_clean: +compiler_lex_make_all: +compiler_lex_clean: +compiler_clean: compiler_rcc_clean compiler_moc_predefs_clean compiler_moc_header_clean + + + +####### Compile + +debug/main.o: main.cpp mainwindow.h \ + D:/Qt/6.9.1/mingw_64/include/QtWidgets/QMainWindow \ + D:/Qt/6.9.1/mingw_64/include/QtWidgets/qmainwindow.h \ + D:/Qt/6.9.1/mingw_64/include/QtWidgets/qtwidgetsglobal.h \ + D:/Qt/6.9.1/mingw_64/include/QtGui/qtguiglobal.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qglobal.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qtcoreglobal.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qtversionchecks.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qtconfiginclude.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qconfig.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qtcore-config.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qtconfigmacros.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qtdeprecationdefinitions.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qcompilerdetection.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qprocessordetection.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qsystemdetection.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qtcoreexports.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qtdeprecationmarkers.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qtclasshelpermacros.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qtpreprocessorsupport.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qassert.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qtnoop.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qtypes.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qtversion.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qtypeinfo.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qcontainerfwd.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qsysinfo.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qlogging.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qflags.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qcompare_impl.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qatomic.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qbasicatomic.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qatomic_cxx11.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qgenericatomic.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qyieldcpu.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qconstructormacros.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qdarwinhelpers.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qexceptionhandling.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qforeach.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qttypetraits.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qfunctionpointer.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qglobalstatic.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qmalloc.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qminmax.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qnumeric.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qoverload.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qswap.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qtenvironmentvariables.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qtresource.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qttranslation.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qversiontagging.h \ + D:/Qt/6.9.1/mingw_64/include/QtGui/qtgui-config.h \ + D:/Qt/6.9.1/mingw_64/include/QtGui/qtguiexports.h \ + D:/Qt/6.9.1/mingw_64/include/QtWidgets/qtwidgets-config.h \ + D:/Qt/6.9.1/mingw_64/include/QtWidgets/qtwidgetsexports.h \ + D:/Qt/6.9.1/mingw_64/include/QtWidgets/qwidget.h \ + D:/Qt/6.9.1/mingw_64/include/QtGui/qwindowdefs.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qobjectdefs.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qnamespace.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qcompare.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qstdlibdetection.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qcomparehelpers.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/q20type_traits.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qtmetamacros.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qobjectdefs_impl.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qfunctionaltools_impl.h \ + D:/Qt/6.9.1/mingw_64/include/QtGui/qwindowdefs_win.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qobject.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qstring.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qchar.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qstringview.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qbytearray.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qrefcount.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qarraydata.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qpair.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qarraydatapointer.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qarraydataops.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qcontainertools_impl.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qxptype_traits.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/q20functional.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/q20memory.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/q17memory.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qbytearrayalgorithms.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qbytearrayview.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qstringfwd.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qstringliteral.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qstringalgorithms.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qlatin1stringview.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qanystringview.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qutf8stringview.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qstringtokenizer.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qstringbuilder.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qstringconverter.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qstringconverter_base.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qlist.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qhashfunctions.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qiterator.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qbytearraylist.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qstringlist.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qalgorithms.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qstringmatcher.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qcoreevent.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qbasictimer.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qabstracteventdispatcher.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qeventloop.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qdeadlinetimer.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qelapsedtimer.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qmetatype.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qdatastream.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qscopedpointer.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qiodevicebase.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qfloat16.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qmath.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qtformat_impl.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qiterable.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qmetacontainer.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qcontainerinfo.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qtaggedpointer.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qscopeguard.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qobject_impl.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qbindingstorage.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qmargins.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/q23utility.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/q20utility.h \ + D:/Qt/6.9.1/mingw_64/include/QtGui/qaction.h \ + D:/Qt/6.9.1/mingw_64/include/QtGui/qkeysequence.h \ + D:/Qt/6.9.1/mingw_64/include/QtGui/qicon.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qsize.h \ + D:/Qt/6.9.1/mingw_64/include/QtGui/qpixmap.h \ + D:/Qt/6.9.1/mingw_64/include/QtGui/qpaintdevice.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qrect.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qpoint.h \ + D:/Qt/6.9.1/mingw_64/include/QtGui/qcolor.h \ + D:/Qt/6.9.1/mingw_64/include/QtGui/qrgb.h \ + D:/Qt/6.9.1/mingw_64/include/QtGui/qrgba64.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qshareddata.h \ + D:/Qt/6.9.1/mingw_64/include/QtGui/qimage.h \ + D:/Qt/6.9.1/mingw_64/include/QtGui/qpixelformat.h \ + D:/Qt/6.9.1/mingw_64/include/QtGui/qtransform.h \ + D:/Qt/6.9.1/mingw_64/include/QtGui/qpolygon.h \ + D:/Qt/6.9.1/mingw_64/include/QtGui/qregion.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qspan.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/q20iterator.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qline.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qvariant.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qdebug.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qtextstream.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qcontiguouscache.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qsharedpointer.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qsharedpointer_impl.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qmap.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qshareddata_impl.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qset.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qhash.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qvarlengtharray.h \ + D:/Qt/6.9.1/mingw_64/include/QtGui/qpalette.h \ + D:/Qt/6.9.1/mingw_64/include/QtGui/qbrush.h \ + D:/Qt/6.9.1/mingw_64/include/QtGui/qfont.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qendian.h \ + D:/Qt/6.9.1/mingw_64/include/QtGui/qfontmetrics.h \ + D:/Qt/6.9.1/mingw_64/include/QtGui/qfontinfo.h \ + D:/Qt/6.9.1/mingw_64/include/QtGui/qfontvariableaxis.h \ + D:/Qt/6.9.1/mingw_64/include/QtWidgets/qsizepolicy.h \ + D:/Qt/6.9.1/mingw_64/include/QtGui/qcursor.h \ + D:/Qt/6.9.1/mingw_64/include/QtGui/qbitmap.h \ + D:/Qt/6.9.1/mingw_64/include/QtGui/qevent.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qiodevice.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qurl.h \ + D:/Qt/6.9.1/mingw_64/include/QtGui/qeventpoint.h \ + D:/Qt/6.9.1/mingw_64/include/QtGui/qvector2d.h \ + D:/Qt/6.9.1/mingw_64/include/QtGui/qvectornd.h \ + D:/Qt/6.9.1/mingw_64/include/QtGui/qpointingdevice.h \ + D:/Qt/6.9.1/mingw_64/include/QtGui/qinputdevice.h \ + D:/Qt/6.9.1/mingw_64/include/QtGui/qscreen.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/QList \ + D:/Qt/6.9.1/mingw_64/include/QtCore/QObject \ + D:/Qt/6.9.1/mingw_64/include/QtCore/QRect \ + D:/Qt/6.9.1/mingw_64/include/QtCore/QSize \ + D:/Qt/6.9.1/mingw_64/include/QtCore/QSizeF \ + D:/Qt/6.9.1/mingw_64/include/QtGui/QTransform \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qnativeinterface.h \ + D:/Qt/6.9.1/mingw_64/include/QtGui/qscreen_platform.h \ + D:/Qt/6.9.1/mingw_64/include/QtGui/qguiapplication.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qcoreapplication.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qcoreapplication_platform.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qfuture.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qfutureinterface.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qmutex.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qtsan_impl.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qresultstore.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qfuture_impl.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qthreadpool.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qthread.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qrunnable.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qexception.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qpromise.h \ + D:/Qt/6.9.1/mingw_64/include/QtGui/qinputmethod.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qlocale.h \ + D:/Qt/6.9.1/mingw_64/include/QtGui/qguiapplication_platform.h \ + D:/Qt/6.9.1/mingw_64/include/QtWidgets/qtabwidget.h \ + D:/Qt/6.9.1/mingw_64/include/QtNetwork/QNetworkAccessManager \ + D:/Qt/6.9.1/mingw_64/include/QtNetwork/qnetworkaccessmanager.h \ + D:/Qt/6.9.1/mingw_64/include/QtNetwork/qtnetworkglobal.h \ + D:/Qt/6.9.1/mingw_64/include/QtNetwork/qtnetwork-config.h \ + D:/Qt/6.9.1/mingw_64/include/QtNetwork/qtnetworkexports.h \ + D:/Qt/6.9.1/mingw_64/include/QtNetwork/qnetworkrequest.h \ + D:/Qt/6.9.1/mingw_64/include/QtNetwork/qhttpheaders.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/QSharedDataPointer \ + D:/Qt/6.9.1/mingw_64/include/QtCore/QString \ + D:/Qt/6.9.1/mingw_64/include/QtCore/QUrl \ + D:/Qt/6.9.1/mingw_64/include/QtCore/QVariant \ + D:/Qt/6.9.1/mingw_64/include/QtCore/q26numeric.h \ + D:/Qt/6.9.1/mingw_64/include/QtNetwork/QSslConfiguration \ + D:/Qt/6.9.1/mingw_64/include/QtNetwork/qsslconfiguration.h \ + D:/Qt/6.9.1/mingw_64/include/QtNetwork/qsslsocket.h \ + D:/Qt/6.9.1/mingw_64/include/QtNetwork/qtcpsocket.h \ + D:/Qt/6.9.1/mingw_64/include/QtNetwork/qabstractsocket.h \ + D:/Qt/6.9.1/mingw_64/include/QtNetwork/qhostaddress.h \ + D:/Qt/6.9.1/mingw_64/include/QtNetwork/qsslerror.h \ + D:/Qt/6.9.1/mingw_64/include/QtNetwork/qsslcertificate.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qcryptographichash.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qdatetime.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qcalendar.h \ + D:/Qt/6.9.1/mingw_64/include/QtNetwork/qssl.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/QFlags \ + D:/Qt/6.9.1/mingw_64/include/QtNetwork/QSslPreSharedKeyAuthenticator \ + D:/Qt/6.9.1/mingw_64/include/QtNetwork/qsslpresharedkeyauthenticator.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/QMetaType \ + D:/Qt/6.9.1/mingw_64/include/QtCore/QJsonObject \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qjsonobject.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qjsonvalue.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qcborvalue.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qcborcommon.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qregularexpression.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/quuid.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qjsondocument.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qjsonparseerror.h \ + D:/Qt/6.9.1/mingw_64/include/QtWidgets/QLabel \ + D:/Qt/6.9.1/mingw_64/include/QtWidgets/qlabel.h \ + D:/Qt/6.9.1/mingw_64/include/QtWidgets/qframe.h \ + D:/Qt/6.9.1/mingw_64/include/QtGui/qpicture.h \ + D:/Qt/6.9.1/mingw_64/include/QtGui/qtextdocument.h \ + D:/Qt/6.9.1/mingw_64/include/QtWidgets/QPushButton \ + D:/Qt/6.9.1/mingw_64/include/QtWidgets/qpushbutton.h \ + D:/Qt/6.9.1/mingw_64/include/QtWidgets/qabstractbutton.h \ + D:/Qt/6.9.1/mingw_64/include/QtWidgets/QProgressBar \ + D:/Qt/6.9.1/mingw_64/include/QtWidgets/qprogressbar.h \ + D:/Qt/6.9.1/mingw_64/include/QtWidgets/QTextEdit \ + D:/Qt/6.9.1/mingw_64/include/QtWidgets/qtextedit.h \ + D:/Qt/6.9.1/mingw_64/include/QtWidgets/qabstractscrollarea.h \ + D:/Qt/6.9.1/mingw_64/include/QtGui/qtextoption.h \ + D:/Qt/6.9.1/mingw_64/include/QtGui/qtextcursor.h \ + D:/Qt/6.9.1/mingw_64/include/QtGui/qtextformat.h \ + D:/Qt/6.9.1/mingw_64/include/QtGui/qpen.h \ + D:/Qt/6.9.1/mingw_64/include/QtWidgets/QGroupBox \ + D:/Qt/6.9.1/mingw_64/include/QtWidgets/qgroupbox.h \ + D:/Qt/6.9.1/mingw_64/include/QtWidgets/QFileDialog \ + D:/Qt/6.9.1/mingw_64/include/QtWidgets/qfiledialog.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qdir.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qdirlisting.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qfiledevice.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qfile.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qfileinfo.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qtimezone.h \ + D:/Qt/6.9.1/mingw_64/include/QtWidgets/qdialog.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/QSettings \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qsettings.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/QDir \ + D:/Qt/6.9.1/mingw_64/include/QtWidgets/QLineEdit \ + D:/Qt/6.9.1/mingw_64/include/QtWidgets/qlineedit.h \ + D:/Qt/6.9.1/mingw_64/include/QtWidgets/QDialog \ + D:/Qt/6.9.1/mingw_64/include/QtWidgets/QCheckBox \ + D:/Qt/6.9.1/mingw_64/include/QtWidgets/qcheckbox.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/QTimer \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qtimer.h \ + D:/Qt/6.9.1/mingw_64/include/QtWidgets/QMessageBox \ + D:/Qt/6.9.1/mingw_64/include/QtWidgets/qmessagebox.h \ + D:/Qt/6.9.1/mingw_64/include/QtWidgets/qdialogbuttonbox.h \ + D:/Qt/6.9.1/mingw_64/include/QtWidgets/QApplication \ + D:/Qt/6.9.1/mingw_64/include/QtWidgets/qapplication.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/QProcess \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qprocess.h \ + D:/Qt/6.9.1/mingw_64/include/QtWidgets/QStyleFactory \ + D:/Qt/6.9.1/mingw_64/include/QtWidgets/qstylefactory.h \ + D:/Qt/6.9.1/mingw_64/include/QtGui/QPalette + $(CXX) -c $(CXXFLAGS) $(INCPATH) -o debug\main.o main.cpp + +debug/mainwindow.o: mainwindow.cpp mainwindow.h \ + D:/Qt/6.9.1/mingw_64/include/QtWidgets/QMainWindow \ + D:/Qt/6.9.1/mingw_64/include/QtWidgets/qmainwindow.h \ + D:/Qt/6.9.1/mingw_64/include/QtWidgets/qtwidgetsglobal.h \ + D:/Qt/6.9.1/mingw_64/include/QtGui/qtguiglobal.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qglobal.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qtcoreglobal.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qtversionchecks.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qtconfiginclude.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qconfig.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qtcore-config.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qtconfigmacros.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qtdeprecationdefinitions.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qcompilerdetection.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qprocessordetection.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qsystemdetection.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qtcoreexports.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qtdeprecationmarkers.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qtclasshelpermacros.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qtpreprocessorsupport.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qassert.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qtnoop.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qtypes.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qtversion.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qtypeinfo.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qcontainerfwd.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qsysinfo.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qlogging.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qflags.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qcompare_impl.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qatomic.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qbasicatomic.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qatomic_cxx11.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qgenericatomic.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qyieldcpu.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qconstructormacros.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qdarwinhelpers.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qexceptionhandling.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qforeach.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qttypetraits.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qfunctionpointer.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qglobalstatic.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qmalloc.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qminmax.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qnumeric.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qoverload.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qswap.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qtenvironmentvariables.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qtresource.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qttranslation.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qversiontagging.h \ + D:/Qt/6.9.1/mingw_64/include/QtGui/qtgui-config.h \ + D:/Qt/6.9.1/mingw_64/include/QtGui/qtguiexports.h \ + D:/Qt/6.9.1/mingw_64/include/QtWidgets/qtwidgets-config.h \ + D:/Qt/6.9.1/mingw_64/include/QtWidgets/qtwidgetsexports.h \ + D:/Qt/6.9.1/mingw_64/include/QtWidgets/qwidget.h \ + D:/Qt/6.9.1/mingw_64/include/QtGui/qwindowdefs.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qobjectdefs.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qnamespace.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qcompare.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qstdlibdetection.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qcomparehelpers.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/q20type_traits.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qtmetamacros.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qobjectdefs_impl.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qfunctionaltools_impl.h \ + D:/Qt/6.9.1/mingw_64/include/QtGui/qwindowdefs_win.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qobject.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qstring.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qchar.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qstringview.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qbytearray.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qrefcount.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qarraydata.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qpair.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qarraydatapointer.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qarraydataops.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qcontainertools_impl.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qxptype_traits.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/q20functional.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/q20memory.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/q17memory.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qbytearrayalgorithms.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qbytearrayview.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qstringfwd.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qstringliteral.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qstringalgorithms.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qlatin1stringview.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qanystringview.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qutf8stringview.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qstringtokenizer.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qstringbuilder.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qstringconverter.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qstringconverter_base.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qlist.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qhashfunctions.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qiterator.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qbytearraylist.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qstringlist.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qalgorithms.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qstringmatcher.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qcoreevent.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qbasictimer.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qabstracteventdispatcher.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qeventloop.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qdeadlinetimer.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qelapsedtimer.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qmetatype.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qdatastream.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qscopedpointer.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qiodevicebase.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qfloat16.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qmath.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qtformat_impl.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qiterable.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qmetacontainer.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qcontainerinfo.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qtaggedpointer.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qscopeguard.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qobject_impl.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qbindingstorage.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qmargins.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/q23utility.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/q20utility.h \ + D:/Qt/6.9.1/mingw_64/include/QtGui/qaction.h \ + D:/Qt/6.9.1/mingw_64/include/QtGui/qkeysequence.h \ + D:/Qt/6.9.1/mingw_64/include/QtGui/qicon.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qsize.h \ + D:/Qt/6.9.1/mingw_64/include/QtGui/qpixmap.h \ + D:/Qt/6.9.1/mingw_64/include/QtGui/qpaintdevice.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qrect.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qpoint.h \ + D:/Qt/6.9.1/mingw_64/include/QtGui/qcolor.h \ + D:/Qt/6.9.1/mingw_64/include/QtGui/qrgb.h \ + D:/Qt/6.9.1/mingw_64/include/QtGui/qrgba64.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qshareddata.h \ + D:/Qt/6.9.1/mingw_64/include/QtGui/qimage.h \ + D:/Qt/6.9.1/mingw_64/include/QtGui/qpixelformat.h \ + D:/Qt/6.9.1/mingw_64/include/QtGui/qtransform.h \ + D:/Qt/6.9.1/mingw_64/include/QtGui/qpolygon.h \ + D:/Qt/6.9.1/mingw_64/include/QtGui/qregion.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qspan.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/q20iterator.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qline.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qvariant.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qdebug.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qtextstream.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qcontiguouscache.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qsharedpointer.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qsharedpointer_impl.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qmap.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qshareddata_impl.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qset.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qhash.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qvarlengtharray.h \ + D:/Qt/6.9.1/mingw_64/include/QtGui/qpalette.h \ + D:/Qt/6.9.1/mingw_64/include/QtGui/qbrush.h \ + D:/Qt/6.9.1/mingw_64/include/QtGui/qfont.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qendian.h \ + D:/Qt/6.9.1/mingw_64/include/QtGui/qfontmetrics.h \ + D:/Qt/6.9.1/mingw_64/include/QtGui/qfontinfo.h \ + D:/Qt/6.9.1/mingw_64/include/QtGui/qfontvariableaxis.h \ + D:/Qt/6.9.1/mingw_64/include/QtWidgets/qsizepolicy.h \ + D:/Qt/6.9.1/mingw_64/include/QtGui/qcursor.h \ + D:/Qt/6.9.1/mingw_64/include/QtGui/qbitmap.h \ + D:/Qt/6.9.1/mingw_64/include/QtGui/qevent.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qiodevice.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qurl.h \ + D:/Qt/6.9.1/mingw_64/include/QtGui/qeventpoint.h \ + D:/Qt/6.9.1/mingw_64/include/QtGui/qvector2d.h \ + D:/Qt/6.9.1/mingw_64/include/QtGui/qvectornd.h \ + D:/Qt/6.9.1/mingw_64/include/QtGui/qpointingdevice.h \ + D:/Qt/6.9.1/mingw_64/include/QtGui/qinputdevice.h \ + D:/Qt/6.9.1/mingw_64/include/QtGui/qscreen.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/QList \ + D:/Qt/6.9.1/mingw_64/include/QtCore/QObject \ + D:/Qt/6.9.1/mingw_64/include/QtCore/QRect \ + D:/Qt/6.9.1/mingw_64/include/QtCore/QSize \ + D:/Qt/6.9.1/mingw_64/include/QtCore/QSizeF \ + D:/Qt/6.9.1/mingw_64/include/QtGui/QTransform \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qnativeinterface.h \ + D:/Qt/6.9.1/mingw_64/include/QtGui/qscreen_platform.h \ + D:/Qt/6.9.1/mingw_64/include/QtGui/qguiapplication.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qcoreapplication.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qcoreapplication_platform.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qfuture.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qfutureinterface.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qmutex.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qtsan_impl.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qresultstore.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qfuture_impl.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qthreadpool.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qthread.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qrunnable.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qexception.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qpromise.h \ + D:/Qt/6.9.1/mingw_64/include/QtGui/qinputmethod.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qlocale.h \ + D:/Qt/6.9.1/mingw_64/include/QtGui/qguiapplication_platform.h \ + D:/Qt/6.9.1/mingw_64/include/QtWidgets/qtabwidget.h \ + D:/Qt/6.9.1/mingw_64/include/QtNetwork/QNetworkAccessManager \ + D:/Qt/6.9.1/mingw_64/include/QtNetwork/qnetworkaccessmanager.h \ + D:/Qt/6.9.1/mingw_64/include/QtNetwork/qtnetworkglobal.h \ + D:/Qt/6.9.1/mingw_64/include/QtNetwork/qtnetwork-config.h \ + D:/Qt/6.9.1/mingw_64/include/QtNetwork/qtnetworkexports.h \ + D:/Qt/6.9.1/mingw_64/include/QtNetwork/qnetworkrequest.h \ + D:/Qt/6.9.1/mingw_64/include/QtNetwork/qhttpheaders.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/QSharedDataPointer \ + D:/Qt/6.9.1/mingw_64/include/QtCore/QString \ + D:/Qt/6.9.1/mingw_64/include/QtCore/QUrl \ + D:/Qt/6.9.1/mingw_64/include/QtCore/QVariant \ + D:/Qt/6.9.1/mingw_64/include/QtCore/q26numeric.h \ + D:/Qt/6.9.1/mingw_64/include/QtNetwork/QSslConfiguration \ + D:/Qt/6.9.1/mingw_64/include/QtNetwork/qsslconfiguration.h \ + D:/Qt/6.9.1/mingw_64/include/QtNetwork/qsslsocket.h \ + D:/Qt/6.9.1/mingw_64/include/QtNetwork/qtcpsocket.h \ + D:/Qt/6.9.1/mingw_64/include/QtNetwork/qabstractsocket.h \ + D:/Qt/6.9.1/mingw_64/include/QtNetwork/qhostaddress.h \ + D:/Qt/6.9.1/mingw_64/include/QtNetwork/qsslerror.h \ + D:/Qt/6.9.1/mingw_64/include/QtNetwork/qsslcertificate.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qcryptographichash.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qdatetime.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qcalendar.h \ + D:/Qt/6.9.1/mingw_64/include/QtNetwork/qssl.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/QFlags \ + D:/Qt/6.9.1/mingw_64/include/QtNetwork/QSslPreSharedKeyAuthenticator \ + D:/Qt/6.9.1/mingw_64/include/QtNetwork/qsslpresharedkeyauthenticator.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/QMetaType \ + D:/Qt/6.9.1/mingw_64/include/QtCore/QJsonObject \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qjsonobject.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qjsonvalue.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qcborvalue.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qcborcommon.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qregularexpression.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/quuid.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qjsondocument.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qjsonparseerror.h \ + D:/Qt/6.9.1/mingw_64/include/QtWidgets/QLabel \ + D:/Qt/6.9.1/mingw_64/include/QtWidgets/qlabel.h \ + D:/Qt/6.9.1/mingw_64/include/QtWidgets/qframe.h \ + D:/Qt/6.9.1/mingw_64/include/QtGui/qpicture.h \ + D:/Qt/6.9.1/mingw_64/include/QtGui/qtextdocument.h \ + D:/Qt/6.9.1/mingw_64/include/QtWidgets/QPushButton \ + D:/Qt/6.9.1/mingw_64/include/QtWidgets/qpushbutton.h \ + D:/Qt/6.9.1/mingw_64/include/QtWidgets/qabstractbutton.h \ + D:/Qt/6.9.1/mingw_64/include/QtWidgets/QProgressBar \ + D:/Qt/6.9.1/mingw_64/include/QtWidgets/qprogressbar.h \ + D:/Qt/6.9.1/mingw_64/include/QtWidgets/QTextEdit \ + D:/Qt/6.9.1/mingw_64/include/QtWidgets/qtextedit.h \ + D:/Qt/6.9.1/mingw_64/include/QtWidgets/qabstractscrollarea.h \ + D:/Qt/6.9.1/mingw_64/include/QtGui/qtextoption.h \ + D:/Qt/6.9.1/mingw_64/include/QtGui/qtextcursor.h \ + D:/Qt/6.9.1/mingw_64/include/QtGui/qtextformat.h \ + D:/Qt/6.9.1/mingw_64/include/QtGui/qpen.h \ + D:/Qt/6.9.1/mingw_64/include/QtWidgets/QGroupBox \ + D:/Qt/6.9.1/mingw_64/include/QtWidgets/qgroupbox.h \ + D:/Qt/6.9.1/mingw_64/include/QtWidgets/QFileDialog \ + D:/Qt/6.9.1/mingw_64/include/QtWidgets/qfiledialog.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qdir.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qdirlisting.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qfiledevice.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qfile.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qfileinfo.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qtimezone.h \ + D:/Qt/6.9.1/mingw_64/include/QtWidgets/qdialog.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/QSettings \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qsettings.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/QDir \ + D:/Qt/6.9.1/mingw_64/include/QtWidgets/QLineEdit \ + D:/Qt/6.9.1/mingw_64/include/QtWidgets/qlineedit.h \ + D:/Qt/6.9.1/mingw_64/include/QtWidgets/QDialog \ + D:/Qt/6.9.1/mingw_64/include/QtWidgets/QCheckBox \ + D:/Qt/6.9.1/mingw_64/include/QtWidgets/qcheckbox.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/QTimer \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qtimer.h \ + D:/Qt/6.9.1/mingw_64/include/QtWidgets/QMessageBox \ + D:/Qt/6.9.1/mingw_64/include/QtWidgets/qmessagebox.h \ + D:/Qt/6.9.1/mingw_64/include/QtWidgets/qdialogbuttonbox.h \ + D:/Qt/6.9.1/mingw_64/include/QtWidgets/QApplication \ + D:/Qt/6.9.1/mingw_64/include/QtWidgets/qapplication.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/QProcess \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qprocess.h \ + D:/Qt/6.9.1/mingw_64/include/QtWidgets/QVBoxLayout \ + D:/Qt/6.9.1/mingw_64/include/QtWidgets/qboxlayout.h \ + D:/Qt/6.9.1/mingw_64/include/QtWidgets/qlayout.h \ + D:/Qt/6.9.1/mingw_64/include/QtWidgets/qlayoutitem.h \ + D:/Qt/6.9.1/mingw_64/include/QtWidgets/qgridlayout.h \ + D:/Qt/6.9.1/mingw_64/include/QtWidgets/QHBoxLayout \ + D:/Qt/6.9.1/mingw_64/include/QtNetwork/QNetworkReply \ + D:/Qt/6.9.1/mingw_64/include/QtNetwork/qnetworkreply.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/QIODevice \ + D:/Qt/6.9.1/mingw_64/include/QtNetwork/QNetworkRequest \ + D:/Qt/6.9.1/mingw_64/include/QtCore/QJsonDocument \ + D:/Qt/6.9.1/mingw_64/include/QtCore/QJsonArray \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qjsonarray.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/QFile \ + D:/Qt/6.9.1/mingw_64/include/QtGui/QDesktopServices \ + D:/Qt/6.9.1/mingw_64/include/QtGui/qdesktopservices.h \ + D:/Qt/6.9.1/mingw_64/include/QtWidgets/QSystemTrayIcon \ + D:/Qt/6.9.1/mingw_64/include/QtWidgets/qsystemtrayicon.h \ + D:/Qt/6.9.1/mingw_64/include/QtWidgets/QMenu \ + D:/Qt/6.9.1/mingw_64/include/QtWidgets/qmenu.h \ + D:/Qt/6.9.1/mingw_64/include/QtGui/QCloseEvent \ + D:/Qt/6.9.1/mingw_64/include/QtCore/QThread \ + D:/Qt/6.9.1/mingw_64/include/QtNetwork/QSslSocket \ + D:/Qt/6.9.1/mingw_64/include/QtCore/QUuid \ + D:/Qt/6.9.1/mingw_64/include/QtCore/QCryptographicHash \ + D:/Qt/6.9.1/mingw_64/include/QtCore/QDateTime \ + D:/Qt/6.9.1/mingw_64/include/QtCore/QFuture \ + D:/Qt/6.9.1/mingw_64/include/QtConcurrent/QtConcurrent \ + D:/Qt/6.9.1/mingw_64/include/QtConcurrent/QtConcurrentDepends \ + D:/Qt/6.9.1/mingw_64/include/QtCore/QtCore \ + D:/Qt/6.9.1/mingw_64/include/QtCore/QtCoreDepends \ + D:/Qt/6.9.1/mingw_64/include/QtCore/q20algorithm.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/q20chrono.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/q20map.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/q20vector.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/q23functional.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qabstractanimation.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qabstractitemmodel.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qabstractnativeeventfilter.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qabstractproxymodel.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qanimationgroup.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qapplicationstatic.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/QMutex \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qassociativeiterable.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qatomicscopedvaluerollback.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qbitarray.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qbuffer.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qbytearraymatcher.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qcache.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qcborarray.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qcbormap.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qcborstream.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qcborstreamreader.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qcborstreamwriter.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qchronotimer.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qproperty.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qpropertyprivate.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qcollator.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qcommandlineoption.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qcommandlineparser.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qconcatenatetablesproxymodel.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qdiriterator.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qeasingcurve.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qfactoryinterface.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qfileselector.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/QStringList \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qfilesystemwatcher.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qfuturesynchronizer.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qfuturewatcher.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qidentityproxymodel.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qitemselectionmodel.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qlatin1stringmatcher.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qlibrary.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qlibraryinfo.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qversionnumber.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qtyperevision.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qlockfile.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qloggingcategory.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qmessageauthenticationcode.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qmetaobject.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qmimedata.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qmimedatabase.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qmimetype.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qobjectcleanuphandler.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qoperatingsystemversion.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qparallelanimationgroup.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qpauseanimation.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qpermissions.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qplugin.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qpointer.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qpluginloader.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qpropertyanimation.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qvariantanimation.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qqueue.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qrandom.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qreadwritelock.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qresource.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qsavefile.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qscopedvaluerollback.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qsemaphore.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qsequentialanimationgroup.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qsequentialiterable.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qsharedmemory.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qtipccommon.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qsignalmapper.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qsimd.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qsocketnotifier.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qsortfilterproxymodel.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qstack.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qstandardpaths.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qstaticlatin1stringmatcher.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qstorageinfo.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qstringlistmodel.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qsystemsemaphore.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qtcoreversion.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qtemporarydir.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qtemporaryfile.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qtextboundaryfinder.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qthreadstorage.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qtimeline.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qtmocconstants.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qtranslator.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qtransposeproxymodel.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qtsymbolmacros.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qurlquery.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qvarianthash.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/QHash \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qvariantlist.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qvariantmap.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/QMap \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qvector.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qwaitcondition.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/QDeadlineTimer \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qwineventnotifier.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qxmlstream.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qxpfunctional.h \ + D:/Qt/6.9.1/mingw_64/include/QtConcurrent/qtaskbuilder.h \ + D:/Qt/6.9.1/mingw_64/include/QtConcurrent/qtconcurrentstoredfunctioncall.h \ + D:/Qt/6.9.1/mingw_64/include/QtConcurrent/qtconcurrent_global.h \ + D:/Qt/6.9.1/mingw_64/include/QtConcurrent/qtconcurrentexports.h \ + D:/Qt/6.9.1/mingw_64/include/QtConcurrent/qtconcurrentrunbase.h \ + D:/Qt/6.9.1/mingw_64/include/QtConcurrent/qtconcurrentcompilertest.h \ + D:/Qt/6.9.1/mingw_64/include/QtConcurrent/qtconcurrentfilter.h \ + D:/Qt/6.9.1/mingw_64/include/QtConcurrent/qtconcurrentfilterkernel.h \ + D:/Qt/6.9.1/mingw_64/include/QtConcurrent/qtconcurrentiteratekernel.h \ + D:/Qt/6.9.1/mingw_64/include/QtConcurrent/qtconcurrentmedian.h \ + D:/Qt/6.9.1/mingw_64/include/QtConcurrent/qtconcurrentthreadengine.h \ + D:/Qt/6.9.1/mingw_64/include/QtConcurrent/qtconcurrentmapkernel.h \ + D:/Qt/6.9.1/mingw_64/include/QtConcurrent/qtconcurrentreducekernel.h \ + D:/Qt/6.9.1/mingw_64/include/QtConcurrent/qtconcurrentfunctionwrappers.h \ + D:/Qt/6.9.1/mingw_64/include/QtConcurrent/qtconcurrentmap.h \ + D:/Qt/6.9.1/mingw_64/include/QtConcurrent/qtconcurrentrun.h \ + D:/Qt/6.9.1/mingw_64/include/QtConcurrent/qtconcurrenttask.h \ + D:/Qt/6.9.1/mingw_64/include/QtConcurrent/qtconcurrentversion.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/QDebug \ + D:/Qt/6.9.1/mingw_64/include/QtGui/QGuiApplication \ + D:/Qt/6.9.1/mingw_64/include/QtGui/QScreen \ + D:/Qt/6.9.1/mingw_64/include/QtCore/QUrlQuery \ + D:/Qt/6.9.1/mingw_64/include/QtCore/QRegularExpression + $(CXX) -c $(CXXFLAGS) $(INCPATH) -o debug\mainwindow.o mainwindow.cpp + +debug/qrc_resources.o: debug/qrc_resources.cpp + $(CXX) -c $(CXXFLAGS) $(INCPATH) -o debug\qrc_resources.o debug\qrc_resources.cpp + +debug/moc_mainwindow.o: debug/moc_mainwindow.cpp + $(CXX) -c $(CXXFLAGS) $(INCPATH) -o debug\moc_mainwindow.o debug\moc_mainwindow.cpp + +####### Install + +install: FORCE + +uninstall: FORCE + +FORCE: + +.SUFFIXES: + diff --git a/C++/2.2.8/Makefile.Release b/C++/2.2.8/Makefile.Release new file mode 100644 index 0000000..9baafdd --- /dev/null +++ b/C++/2.2.8/Makefile.Release @@ -0,0 +1,1173 @@ +############################################################################# +# Makefile for building: untitled2 +# Generated by qmake (3.1) (Qt 6.9.1) +# Project: untitled2.pro +# Template: app +############################################################################# + +MAKEFILE = Makefile.Release + +EQ = = + +####### Compiler, tools and options + +CC = gcc +CXX = g++ +DEFINES = -DUNICODE -D_UNICODE -DWIN32 -DMINGW_HAS_SECURE_API=1 -DQT_NO_DEBUG -DQT_WIDGETS_LIB -DQT_GUI_LIB -DQT_NETWORK_LIB -DQT_CONCURRENT_LIB -DQT_CORE_LIB -DQT_NEEDS_QMAIN +CFLAGS = -fno-keep-inline-dllexport -O2 -Wall -Wextra -Wextra $(DEFINES) +CXXFLAGS = -fno-keep-inline-dllexport -O2 -std=gnu++1z -Wall -Wextra -Wextra -fexceptions -mthreads $(DEFINES) +INCPATH = -I. -ID:/Qt/6.9.1/mingw_64/include -ID:/Qt/6.9.1/mingw_64/include/QtWidgets -ID:/Qt/6.9.1/mingw_64/include/QtGui -ID:/Qt/6.9.1/mingw_64/include/QtNetwork -ID:/Qt/6.9.1/mingw_64/include/QtConcurrent -ID:/Qt/6.9.1/mingw_64/include/QtCore -Irelease -I/include -ID:/Qt/6.9.1/mingw_64/mkspecs/win32-g++ +LINKER = g++ +LFLAGS = -Wl,-s -Wl,-subsystem,windows -mthreads +LIBS = -ladvapi32 -luser32 -lshell32 -lkernel32 D:\Qt\6.9.1\mingw_64\lib\libQt6Widgets.a D:\Qt\6.9.1\mingw_64\lib\libQt6Gui.a D:\Qt\6.9.1\mingw_64\lib\libQt6Network.a D:\Qt\6.9.1\mingw_64\lib\libQt6Concurrent.a D:\Qt\6.9.1\mingw_64\lib\libQt6Core.a release\launcher_res.o -lmingw32 D:\Qt\6.9.1\mingw_64\lib\libQt6EntryPoint.a -lshell32 +QMAKE = D:\Qt\6.9.1\mingw_64\bin\qmake.exe +DEL_FILE = del +CHK_DIR_EXISTS= if not exist +MKDIR = mkdir +COPY = copy /y +COPY_FILE = copy /y +COPY_DIR = xcopy /s /q /y /i +INSTALL_FILE = copy /y +INSTALL_PROGRAM = copy /y +INSTALL_DIR = xcopy /s /q /y /i +QINSTALL = D:\Qt\6.9.1\mingw_64\bin\qmake.exe -install qinstall +QINSTALL_PROGRAM = D:\Qt\6.9.1\mingw_64\bin\qmake.exe -install qinstall -exe +DEL_FILE = del +SYMLINK = $(QMAKE) -install ln -f -s +DEL_DIR = rmdir +MOVE = move +IDC = idc +IDL = midl +ZIP = zip -r -9 +DEF_FILE = +RES_FILE = release\launcher_res.o +SED = $(QMAKE) -install sed +MOVE = move + +####### Output directory + +OBJECTS_DIR = release + +####### Files + +SOURCES = main.cpp \ + mainwindow.cpp release\qrc_resources.cpp \ + release\moc_mainwindow.cpp +OBJECTS = release/main.o \ + release/mainwindow.o \ + release/qrc_resources.o \ + release/moc_mainwindow.o + +DIST = mainwindow.h main.cpp \ + mainwindow.cpp +QMAKE_TARGET = untitled2 +DESTDIR = release\ #avoid trailing-slash linebreak +TARGET = untitled2.exe +DESTDIR_TARGET = release\untitled2.exe + +####### Build rules + +first: all +all: Makefile.Release release/untitled2.exe + +release/untitled2.exe: D:/Qt/6.9.1/mingw_64/lib/libQt6Widgets.a D:/Qt/6.9.1/mingw_64/lib/libQt6Gui.a D:/Qt/6.9.1/mingw_64/lib/libQt6Network.a D:/Qt/6.9.1/mingw_64/lib/libQt6Concurrent.a D:/Qt/6.9.1/mingw_64/lib/libQt6Core.a D:/Qt/6.9.1/mingw_64/lib/libQt6EntryPoint.a $(OBJECTS) release/launcher_res.o + $(LINKER) $(LFLAGS) -o $(DESTDIR_TARGET) $(OBJECTS) $(LIBS) + +release/launcher_res.o: launcher.rc + windres -i launcher.rc -o release\launcher_res.o --include-dir=. $(DEFINES) + +qmake: FORCE + @$(QMAKE) -o Makefile.Release untitled2.pro -spec win32-g++ "CONFIG+=qtquickcompiler" + +qmake_all: FORCE + +dist: + $(ZIP) untitled2.zip $(SOURCES) $(DIST) untitled2.pro D:\Qt\6.9.1\mingw_64\mkspecs\features\spec_pre.prf D:\Qt\6.9.1\mingw_64\mkspecs\features\device_config.prf D:\Qt\6.9.1\mingw_64\mkspecs\common\sanitize.conf D:\Qt\6.9.1\mingw_64\mkspecs\common\gcc-base.conf D:\Qt\6.9.1\mingw_64\mkspecs\common\g++-base.conf D:\Qt\6.9.1\mingw_64\mkspecs\features\win32\windows_vulkan_sdk.prf D:\Qt\6.9.1\mingw_64\mkspecs\common\windows-vulkan.conf D:\Qt\6.9.1\mingw_64\mkspecs\common\g++-win32.conf D:\Qt\6.9.1\mingw_64\mkspecs\common\windows-desktop.conf D:\Qt\6.9.1\mingw_64\mkspecs\qconfig.pri D:\Qt\6.9.1\mingw_64\mkspecs\modules\qt_ext_freetype.pri D:\Qt\6.9.1\mingw_64\mkspecs\modules\qt_ext_libjpeg.pri D:\Qt\6.9.1\mingw_64\mkspecs\modules\qt_ext_libpng.pri D:\Qt\6.9.1\mingw_64\mkspecs\modules\qt_ext_openxr_loader.pri D:\Qt\6.9.1\mingw_64\mkspecs\modules\qt_lib_charts.pri D:\Qt\6.9.1\mingw_64\mkspecs\modules\qt_lib_charts_private.pri D:\Qt\6.9.1\mingw_64\mkspecs\modules\qt_lib_chartsqml.pri D:\Qt\6.9.1\mingw_64\mkspecs\modules\qt_lib_chartsqml_private.pri D:\Qt\6.9.1\mingw_64\mkspecs\modules\qt_lib_concurrent.pri D:\Qt\6.9.1\mingw_64\mkspecs\modules\qt_lib_concurrent_private.pri D:\Qt\6.9.1\mingw_64\mkspecs\modules\qt_lib_core.pri D:\Qt\6.9.1\mingw_64\mkspecs\modules\qt_lib_core_private.pri D:\Qt\6.9.1\mingw_64\mkspecs\modules\qt_lib_dbus.pri D:\Qt\6.9.1\mingw_64\mkspecs\modules\qt_lib_dbus_private.pri D:\Qt\6.9.1\mingw_64\mkspecs\modules\qt_lib_designer.pri D:\Qt\6.9.1\mingw_64\mkspecs\modules\qt_lib_designer_private.pri D:\Qt\6.9.1\mingw_64\mkspecs\modules\qt_lib_designercomponents_private.pri D:\Qt\6.9.1\mingw_64\mkspecs\modules\qt_lib_devicediscovery_support_private.pri D:\Qt\6.9.1\mingw_64\mkspecs\modules\qt_lib_entrypoint_private.pri D:\Qt\6.9.1\mingw_64\mkspecs\modules\qt_lib_example_icons_private.pri D:\Qt\6.9.1\mingw_64\mkspecs\modules\qt_lib_examples_asset_downloader_private.pri D:\Qt\6.9.1\mingw_64\mkspecs\modules\qt_lib_fb_support_private.pri D:\Qt\6.9.1\mingw_64\mkspecs\modules\qt_lib_ffmpegmediapluginimpl_private.pri D:\Qt\6.9.1\mingw_64\mkspecs\modules\qt_lib_freetype_private.pri D:\Qt\6.9.1\mingw_64\mkspecs\modules\qt_lib_gui.pri D:\Qt\6.9.1\mingw_64\mkspecs\modules\qt_lib_gui_private.pri D:\Qt\6.9.1\mingw_64\mkspecs\modules\qt_lib_harfbuzz_private.pri D:\Qt\6.9.1\mingw_64\mkspecs\modules\qt_lib_help.pri D:\Qt\6.9.1\mingw_64\mkspecs\modules\qt_lib_help_private.pri D:\Qt\6.9.1\mingw_64\mkspecs\modules\qt_lib_jpeg_private.pri D:\Qt\6.9.1\mingw_64\mkspecs\modules\qt_lib_labsanimation.pri D:\Qt\6.9.1\mingw_64\mkspecs\modules\qt_lib_labsanimation_private.pri D:\Qt\6.9.1\mingw_64\mkspecs\modules\qt_lib_labsfolderlistmodel.pri D:\Qt\6.9.1\mingw_64\mkspecs\modules\qt_lib_labsfolderlistmodel_private.pri D:\Qt\6.9.1\mingw_64\mkspecs\modules\qt_lib_labsplatform.pri D:\Qt\6.9.1\mingw_64\mkspecs\modules\qt_lib_labsplatform_private.pri D:\Qt\6.9.1\mingw_64\mkspecs\modules\qt_lib_labsqmlmodels.pri D:\Qt\6.9.1\mingw_64\mkspecs\modules\qt_lib_labsqmlmodels_private.pri D:\Qt\6.9.1\mingw_64\mkspecs\modules\qt_lib_labssettings.pri D:\Qt\6.9.1\mingw_64\mkspecs\modules\qt_lib_labssettings_private.pri D:\Qt\6.9.1\mingw_64\mkspecs\modules\qt_lib_labssharedimage.pri D:\Qt\6.9.1\mingw_64\mkspecs\modules\qt_lib_labssharedimage_private.pri D:\Qt\6.9.1\mingw_64\mkspecs\modules\qt_lib_labswavefrontmesh.pri D:\Qt\6.9.1\mingw_64\mkspecs\modules\qt_lib_labswavefrontmesh_private.pri D:\Qt\6.9.1\mingw_64\mkspecs\modules\qt_lib_linguist.pri D:\Qt\6.9.1\mingw_64\mkspecs\modules\qt_lib_multimedia.pri D:\Qt\6.9.1\mingw_64\mkspecs\modules\qt_lib_multimedia_private.pri D:\Qt\6.9.1\mingw_64\mkspecs\modules\qt_lib_multimediaquick_private.pri D:\Qt\6.9.1\mingw_64\mkspecs\modules\qt_lib_multimediatestlibprivate_private.pri D:\Qt\6.9.1\mingw_64\mkspecs\modules\qt_lib_multimediawidgets.pri D:\Qt\6.9.1\mingw_64\mkspecs\modules\qt_lib_multimediawidgets_private.pri D:\Qt\6.9.1\mingw_64\mkspecs\modules\qt_lib_network.pri D:\Qt\6.9.1\mingw_64\mkspecs\modules\qt_lib_network_private.pri D:\Qt\6.9.1\mingw_64\mkspecs\modules\qt_lib_opengl.pri D:\Qt\6.9.1\mingw_64\mkspecs\modules\qt_lib_opengl_private.pri D:\Qt\6.9.1\mingw_64\mkspecs\modules\qt_lib_openglwidgets.pri D:\Qt\6.9.1\mingw_64\mkspecs\modules\qt_lib_openglwidgets_private.pri D:\Qt\6.9.1\mingw_64\mkspecs\modules\qt_lib_packetprotocol_private.pri D:\Qt\6.9.1\mingw_64\mkspecs\modules\qt_lib_png_private.pri D:\Qt\6.9.1\mingw_64\mkspecs\modules\qt_lib_printsupport.pri D:\Qt\6.9.1\mingw_64\mkspecs\modules\qt_lib_printsupport_private.pri D:\Qt\6.9.1\mingw_64\mkspecs\modules\qt_lib_qdoccatch_private.pri D:\Qt\6.9.1\mingw_64\mkspecs\modules\qt_lib_qdoccatchconversions_private.pri D:\Qt\6.9.1\mingw_64\mkspecs\modules\qt_lib_qdoccatchgenerators_private.pri D:\Qt\6.9.1\mingw_64\mkspecs\modules\qt_lib_qml.pri D:\Qt\6.9.1\mingw_64\mkspecs\modules\qt_lib_qml_private.pri D:\Qt\6.9.1\mingw_64\mkspecs\modules\qt_lib_qmlassetdownloader.pri D:\Qt\6.9.1\mingw_64\mkspecs\modules\qt_lib_qmlassetdownloader_private.pri D:\Qt\6.9.1\mingw_64\mkspecs\modules\qt_lib_qmlcompiler.pri D:\Qt\6.9.1\mingw_64\mkspecs\modules\qt_lib_qmlcompiler_private.pri D:\Qt\6.9.1\mingw_64\mkspecs\modules\qt_lib_qmlcore.pri D:\Qt\6.9.1\mingw_64\mkspecs\modules\qt_lib_qmlcore_private.pri D:\Qt\6.9.1\mingw_64\mkspecs\modules\qt_lib_qmldebug_private.pri D:\Qt\6.9.1\mingw_64\mkspecs\modules\qt_lib_qmldom_private.pri D:\Qt\6.9.1\mingw_64\mkspecs\modules\qt_lib_qmlformat_private.pri D:\Qt\6.9.1\mingw_64\mkspecs\modules\qt_lib_qmlintegration.pri D:\Qt\6.9.1\mingw_64\mkspecs\modules\qt_lib_qmlintegration_private.pri D:\Qt\6.9.1\mingw_64\mkspecs\modules\qt_lib_qmllocalstorage.pri D:\Qt\6.9.1\mingw_64\mkspecs\modules\qt_lib_qmllocalstorage_private.pri D:\Qt\6.9.1\mingw_64\mkspecs\modules\qt_lib_qmlls_private.pri D:\Qt\6.9.1\mingw_64\mkspecs\modules\qt_lib_qmlmeta.pri D:\Qt\6.9.1\mingw_64\mkspecs\modules\qt_lib_qmlmeta_private.pri D:\Qt\6.9.1\mingw_64\mkspecs\modules\qt_lib_qmlmodels.pri D:\Qt\6.9.1\mingw_64\mkspecs\modules\qt_lib_qmlmodels_private.pri D:\Qt\6.9.1\mingw_64\mkspecs\modules\qt_lib_qmlnetwork.pri D:\Qt\6.9.1\mingw_64\mkspecs\modules\qt_lib_qmlnetwork_private.pri D:\Qt\6.9.1\mingw_64\mkspecs\modules\qt_lib_qmltest.pri D:\Qt\6.9.1\mingw_64\mkspecs\modules\qt_lib_qmltest_private.pri D:\Qt\6.9.1\mingw_64\mkspecs\modules\qt_lib_qmltoolingsettings_private.pri D:\Qt\6.9.1\mingw_64\mkspecs\modules\qt_lib_qmltyperegistrar_private.pri D:\Qt\6.9.1\mingw_64\mkspecs\modules\qt_lib_qmlworkerscript.pri D:\Qt\6.9.1\mingw_64\mkspecs\modules\qt_lib_qmlworkerscript_private.pri D:\Qt\6.9.1\mingw_64\mkspecs\modules\qt_lib_qmlxmllistmodel.pri D:\Qt\6.9.1\mingw_64\mkspecs\modules\qt_lib_qmlxmllistmodel_private.pri D:\Qt\6.9.1\mingw_64\mkspecs\modules\qt_lib_quick.pri D:\Qt\6.9.1\mingw_64\mkspecs\modules\qt_lib_quick3d.pri D:\Qt\6.9.1\mingw_64\mkspecs\modules\qt_lib_quick3d_private.pri D:\Qt\6.9.1\mingw_64\mkspecs\modules\qt_lib_quick3dassetimport.pri D:\Qt\6.9.1\mingw_64\mkspecs\modules\qt_lib_quick3dassetimport_private.pri D:\Qt\6.9.1\mingw_64\mkspecs\modules\qt_lib_quick3dassetutils.pri D:\Qt\6.9.1\mingw_64\mkspecs\modules\qt_lib_quick3dassetutils_private.pri D:\Qt\6.9.1\mingw_64\mkspecs\modules\qt_lib_quick3deffects.pri D:\Qt\6.9.1\mingw_64\mkspecs\modules\qt_lib_quick3deffects_private.pri D:\Qt\6.9.1\mingw_64\mkspecs\modules\qt_lib_quick3dglslparser_private.pri D:\Qt\6.9.1\mingw_64\mkspecs\modules\qt_lib_quick3dhelpers.pri D:\Qt\6.9.1\mingw_64\mkspecs\modules\qt_lib_quick3dhelpers_private.pri D:\Qt\6.9.1\mingw_64\mkspecs\modules\qt_lib_quick3dhelpersimpl.pri D:\Qt\6.9.1\mingw_64\mkspecs\modules\qt_lib_quick3dhelpersimpl_private.pri D:\Qt\6.9.1\mingw_64\mkspecs\modules\qt_lib_quick3diblbaker.pri D:\Qt\6.9.1\mingw_64\mkspecs\modules\qt_lib_quick3diblbaker_private.pri D:\Qt\6.9.1\mingw_64\mkspecs\modules\qt_lib_quick3dparticleeffects.pri D:\Qt\6.9.1\mingw_64\mkspecs\modules\qt_lib_quick3dparticleeffects_private.pri D:\Qt\6.9.1\mingw_64\mkspecs\modules\qt_lib_quick3dparticles.pri D:\Qt\6.9.1\mingw_64\mkspecs\modules\qt_lib_quick3dparticles_private.pri D:\Qt\6.9.1\mingw_64\mkspecs\modules\qt_lib_quick3druntimerender.pri D:\Qt\6.9.1\mingw_64\mkspecs\modules\qt_lib_quick3druntimerender_private.pri D:\Qt\6.9.1\mingw_64\mkspecs\modules\qt_lib_quick3dspatialaudio_private.pri D:\Qt\6.9.1\mingw_64\mkspecs\modules\qt_lib_quick3dutils.pri D:\Qt\6.9.1\mingw_64\mkspecs\modules\qt_lib_quick3dutils_private.pri D:\Qt\6.9.1\mingw_64\mkspecs\modules\qt_lib_quick3dxr.pri D:\Qt\6.9.1\mingw_64\mkspecs\modules\qt_lib_quick3dxr_private.pri D:\Qt\6.9.1\mingw_64\mkspecs\modules\qt_lib_quick_private.pri D:\Qt\6.9.1\mingw_64\mkspecs\modules\qt_lib_quickcontrols2.pri D:\Qt\6.9.1\mingw_64\mkspecs\modules\qt_lib_quickcontrols2_private.pri D:\Qt\6.9.1\mingw_64\mkspecs\modules\qt_lib_quickcontrols2basic.pri D:\Qt\6.9.1\mingw_64\mkspecs\modules\qt_lib_quickcontrols2basic_private.pri D:\Qt\6.9.1\mingw_64\mkspecs\modules\qt_lib_quickcontrols2basicstyleimpl.pri D:\Qt\6.9.1\mingw_64\mkspecs\modules\qt_lib_quickcontrols2basicstyleimpl_private.pri D:\Qt\6.9.1\mingw_64\mkspecs\modules\qt_lib_quickcontrols2fluentwinui3styleimpl.pri D:\Qt\6.9.1\mingw_64\mkspecs\modules\qt_lib_quickcontrols2fluentwinui3styleimpl_private.pri D:\Qt\6.9.1\mingw_64\mkspecs\modules\qt_lib_quickcontrols2fusion.pri D:\Qt\6.9.1\mingw_64\mkspecs\modules\qt_lib_quickcontrols2fusion_private.pri D:\Qt\6.9.1\mingw_64\mkspecs\modules\qt_lib_quickcontrols2fusionstyleimpl.pri D:\Qt\6.9.1\mingw_64\mkspecs\modules\qt_lib_quickcontrols2fusionstyleimpl_private.pri D:\Qt\6.9.1\mingw_64\mkspecs\modules\qt_lib_quickcontrols2imagine.pri D:\Qt\6.9.1\mingw_64\mkspecs\modules\qt_lib_quickcontrols2imagine_private.pri D:\Qt\6.9.1\mingw_64\mkspecs\modules\qt_lib_quickcontrols2imaginestyleimpl.pri D:\Qt\6.9.1\mingw_64\mkspecs\modules\qt_lib_quickcontrols2imaginestyleimpl_private.pri D:\Qt\6.9.1\mingw_64\mkspecs\modules\qt_lib_quickcontrols2impl.pri D:\Qt\6.9.1\mingw_64\mkspecs\modules\qt_lib_quickcontrols2impl_private.pri D:\Qt\6.9.1\mingw_64\mkspecs\modules\qt_lib_quickcontrols2material.pri D:\Qt\6.9.1\mingw_64\mkspecs\modules\qt_lib_quickcontrols2material_private.pri D:\Qt\6.9.1\mingw_64\mkspecs\modules\qt_lib_quickcontrols2materialstyleimpl.pri D:\Qt\6.9.1\mingw_64\mkspecs\modules\qt_lib_quickcontrols2materialstyleimpl_private.pri D:\Qt\6.9.1\mingw_64\mkspecs\modules\qt_lib_quickcontrols2universal.pri D:\Qt\6.9.1\mingw_64\mkspecs\modules\qt_lib_quickcontrols2universal_private.pri D:\Qt\6.9.1\mingw_64\mkspecs\modules\qt_lib_quickcontrols2universalstyleimpl.pri D:\Qt\6.9.1\mingw_64\mkspecs\modules\qt_lib_quickcontrols2universalstyleimpl_private.pri D:\Qt\6.9.1\mingw_64\mkspecs\modules\qt_lib_quickcontrols2windowsstyleimpl.pri D:\Qt\6.9.1\mingw_64\mkspecs\modules\qt_lib_quickcontrols2windowsstyleimpl_private.pri D:\Qt\6.9.1\mingw_64\mkspecs\modules\qt_lib_quickcontrolstestutilsprivate_private.pri D:\Qt\6.9.1\mingw_64\mkspecs\modules\qt_lib_quickdialogs2.pri D:\Qt\6.9.1\mingw_64\mkspecs\modules\qt_lib_quickdialogs2_private.pri D:\Qt\6.9.1\mingw_64\mkspecs\modules\qt_lib_quickdialogs2quickimpl.pri D:\Qt\6.9.1\mingw_64\mkspecs\modules\qt_lib_quickdialogs2quickimpl_private.pri D:\Qt\6.9.1\mingw_64\mkspecs\modules\qt_lib_quickdialogs2utils.pri D:\Qt\6.9.1\mingw_64\mkspecs\modules\qt_lib_quickdialogs2utils_private.pri D:\Qt\6.9.1\mingw_64\mkspecs\modules\qt_lib_quickeffects.pri D:\Qt\6.9.1\mingw_64\mkspecs\modules\qt_lib_quickeffects_private.pri D:\Qt\6.9.1\mingw_64\mkspecs\modules\qt_lib_quicklayouts.pri D:\Qt\6.9.1\mingw_64\mkspecs\modules\qt_lib_quicklayouts_private.pri D:\Qt\6.9.1\mingw_64\mkspecs\modules\qt_lib_quickparticles_private.pri D:\Qt\6.9.1\mingw_64\mkspecs\modules\qt_lib_quickshapes_private.pri D:\Qt\6.9.1\mingw_64\mkspecs\modules\qt_lib_quicktemplates2.pri D:\Qt\6.9.1\mingw_64\mkspecs\modules\qt_lib_quicktemplates2_private.pri D:\Qt\6.9.1\mingw_64\mkspecs\modules\qt_lib_quicktestutilsprivate_private.pri D:\Qt\6.9.1\mingw_64\mkspecs\modules\qt_lib_quicktimeline.pri D:\Qt\6.9.1\mingw_64\mkspecs\modules\qt_lib_quicktimeline_private.pri D:\Qt\6.9.1\mingw_64\mkspecs\modules\qt_lib_quicktimelineblendtrees.pri D:\Qt\6.9.1\mingw_64\mkspecs\modules\qt_lib_quicktimelineblendtrees_private.pri D:\Qt\6.9.1\mingw_64\mkspecs\modules\qt_lib_quickvectorimage.pri D:\Qt\6.9.1\mingw_64\mkspecs\modules\qt_lib_quickvectorimage_private.pri D:\Qt\6.9.1\mingw_64\mkspecs\modules\qt_lib_quickvectorimagegenerator_private.pri D:\Qt\6.9.1\mingw_64\mkspecs\modules\qt_lib_quickwidgets.pri D:\Qt\6.9.1\mingw_64\mkspecs\modules\qt_lib_quickwidgets_private.pri D:\Qt\6.9.1\mingw_64\mkspecs\modules\qt_lib_shadertools.pri D:\Qt\6.9.1\mingw_64\mkspecs\modules\qt_lib_shadertools_private.pri D:\Qt\6.9.1\mingw_64\mkspecs\modules\qt_lib_spatialaudio.pri D:\Qt\6.9.1\mingw_64\mkspecs\modules\qt_lib_spatialaudio_private.pri D:\Qt\6.9.1\mingw_64\mkspecs\modules\qt_lib_sql.pri D:\Qt\6.9.1\mingw_64\mkspecs\modules\qt_lib_sql_private.pri D:\Qt\6.9.1\mingw_64\mkspecs\modules\qt_lib_svg.pri D:\Qt\6.9.1\mingw_64\mkspecs\modules\qt_lib_svg_private.pri D:\Qt\6.9.1\mingw_64\mkspecs\modules\qt_lib_svgwidgets.pri D:\Qt\6.9.1\mingw_64\mkspecs\modules\qt_lib_svgwidgets_private.pri D:\Qt\6.9.1\mingw_64\mkspecs\modules\qt_lib_testinternals_private.pri D:\Qt\6.9.1\mingw_64\mkspecs\modules\qt_lib_testlib.pri D:\Qt\6.9.1\mingw_64\mkspecs\modules\qt_lib_testlib_private.pri D:\Qt\6.9.1\mingw_64\mkspecs\modules\qt_lib_tools_private.pri D:\Qt\6.9.1\mingw_64\mkspecs\modules\qt_lib_uiplugin.pri D:\Qt\6.9.1\mingw_64\mkspecs\modules\qt_lib_uitools.pri D:\Qt\6.9.1\mingw_64\mkspecs\modules\qt_lib_uitools_private.pri D:\Qt\6.9.1\mingw_64\mkspecs\modules\qt_lib_widgets.pri D:\Qt\6.9.1\mingw_64\mkspecs\modules\qt_lib_widgets_private.pri D:\Qt\6.9.1\mingw_64\mkspecs\modules\qt_lib_xml.pri D:\Qt\6.9.1\mingw_64\mkspecs\modules\qt_lib_xml_private.pri D:\Qt\6.9.1\mingw_64\mkspecs\modules\qt_lib_zlib_private.pri D:\Qt\6.9.1\mingw_64\mkspecs\features\qt_functions.prf D:\Qt\6.9.1\mingw_64\mkspecs\features\qt_config.prf D:\Qt\6.9.1\mingw_64\mkspecs\win32-g++\qmake.conf D:\Qt\6.9.1\mingw_64\mkspecs\features\spec_post.prf .qmake.stash D:\Qt\6.9.1\mingw_64\mkspecs\features\exclusive_builds.prf D:\Qt\6.9.1\mingw_64\mkspecs\features\toolchain.prf D:\Qt\6.9.1\mingw_64\mkspecs\features\default_pre.prf D:\Qt\6.9.1\mingw_64\mkspecs\features\win32\default_pre.prf D:\Qt\6.9.1\mingw_64\mkspecs\features\resolve_config.prf D:\Qt\6.9.1\mingw_64\mkspecs\features\exclusive_builds_post.prf D:\Qt\6.9.1\mingw_64\mkspecs\features\default_post.prf D:\Qt\6.9.1\mingw_64\mkspecs\features\build_pass.prf D:\Qt\6.9.1\mingw_64\mkspecs\features\qtquickcompiler.prf D:\Qt\6.9.1\mingw_64\mkspecs\features\precompile_header.prf D:\Qt\6.9.1\mingw_64\mkspecs\features\warn_on.prf D:\Qt\6.9.1\mingw_64\mkspecs\features\permissions.prf D:\Qt\6.9.1\mingw_64\mkspecs\features\qt.prf D:\Qt\6.9.1\mingw_64\mkspecs\features\resources_functions.prf D:\Qt\6.9.1\mingw_64\mkspecs\features\resources.prf D:\Qt\6.9.1\mingw_64\mkspecs\features\moc.prf D:\Qt\6.9.1\mingw_64\mkspecs\features\win32\opengl.prf D:\Qt\6.9.1\mingw_64\mkspecs\features\uic.prf D:\Qt\6.9.1\mingw_64\mkspecs\features\qmake_use.prf D:\Qt\6.9.1\mingw_64\mkspecs\features\file_copies.prf D:\Qt\6.9.1\mingw_64\mkspecs\features\win32\windows.prf D:\Qt\6.9.1\mingw_64\mkspecs\features\testcase_targets.prf D:\Qt\6.9.1\mingw_64\mkspecs\features\exceptions.prf D:\Qt\6.9.1\mingw_64\mkspecs\features\yacc.prf D:\Qt\6.9.1\mingw_64\mkspecs\features\lex.prf untitled2.pro resources.qrc D:\Qt\6.9.1\mingw_64\lib\Qt6Widgets.prl D:\Qt\6.9.1\mingw_64\lib\Qt6Gui.prl D:\Qt\6.9.1\mingw_64\lib\Qt6Network.prl D:\Qt\6.9.1\mingw_64\lib\Qt6Concurrent.prl D:\Qt\6.9.1\mingw_64\lib\Qt6Core.prl D:\Qt\6.9.1\mingw_64\lib\Qt6EntryPoint.prl resources.qrc D:\Qt\6.9.1\mingw_64\mkspecs\features\data\dummy.cpp mainwindow.h main.cpp mainwindow.cpp + +clean: compiler_clean + -$(DEL_FILE) release\main.o release\mainwindow.o release\qrc_resources.o release\moc_mainwindow.o + -$(DEL_FILE) release\launcher_res.o + +distclean: clean + -$(DEL_FILE) .qmake.stash + -$(DEL_FILE) $(DESTDIR_TARGET) + -$(DEL_FILE) Makefile.Release + +mocclean: compiler_moc_header_clean compiler_moc_objc_header_clean compiler_moc_source_clean + +mocables: compiler_moc_header_make_all compiler_moc_objc_header_make_all compiler_moc_source_make_all + +check: first + +benchmark: first + +compiler_no_pch_compiler_make_all: +compiler_no_pch_compiler_clean: +compiler_rcc_make_all: release/qrc_resources.cpp +compiler_rcc_clean: + -$(DEL_FILE) release\qrc_resources.cpp +release/qrc_resources.cpp: resources.qrc \ + D:/Qt/6.9.1/mingw_64/bin/rcc.exe \ + styles.qss \ + untitled2_zh_CN.ts + D:\Qt\6.9.1\mingw_64\bin\rcc.exe -name resources --no-zstd resources.qrc -o release\qrc_resources.cpp + +compiler_moc_predefs_make_all: release/moc_predefs.h +compiler_moc_predefs_clean: + -$(DEL_FILE) release\moc_predefs.h +release/moc_predefs.h: D:/Qt/6.9.1/mingw_64/mkspecs/features/data/dummy.cpp + g++ -fno-keep-inline-dllexport -O2 -std=gnu++1z -Wall -Wextra -Wextra -dM -E -o release\moc_predefs.h D:\Qt\6.9.1\mingw_64\mkspecs\features\data\dummy.cpp + +compiler_moc_header_make_all: release/moc_mainwindow.cpp +compiler_moc_header_clean: + -$(DEL_FILE) release\moc_mainwindow.cpp +release/moc_mainwindow.cpp: mainwindow.h \ + D:/Qt/6.9.1/mingw_64/include/QtWidgets/QMainWindow \ + D:/Qt/6.9.1/mingw_64/include/QtWidgets/qmainwindow.h \ + D:/Qt/6.9.1/mingw_64/include/QtWidgets/qtwidgetsglobal.h \ + D:/Qt/6.9.1/mingw_64/include/QtGui/qtguiglobal.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qglobal.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qtcoreglobal.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qtversionchecks.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qtconfiginclude.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qconfig.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qtcore-config.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qtconfigmacros.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qtdeprecationdefinitions.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qcompilerdetection.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qprocessordetection.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qsystemdetection.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qtcoreexports.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qtdeprecationmarkers.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qtclasshelpermacros.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qtpreprocessorsupport.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qassert.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qtnoop.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qtypes.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qtversion.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qtypeinfo.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qcontainerfwd.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qsysinfo.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qlogging.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qflags.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qcompare_impl.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qatomic.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qbasicatomic.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qatomic_cxx11.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qgenericatomic.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qyieldcpu.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qconstructormacros.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qdarwinhelpers.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qexceptionhandling.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qforeach.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qttypetraits.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qfunctionpointer.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qglobalstatic.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qmalloc.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qminmax.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qnumeric.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qoverload.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qswap.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qtenvironmentvariables.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qtresource.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qttranslation.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qversiontagging.h \ + D:/Qt/6.9.1/mingw_64/include/QtGui/qtgui-config.h \ + D:/Qt/6.9.1/mingw_64/include/QtGui/qtguiexports.h \ + D:/Qt/6.9.1/mingw_64/include/QtWidgets/qtwidgets-config.h \ + D:/Qt/6.9.1/mingw_64/include/QtWidgets/qtwidgetsexports.h \ + D:/Qt/6.9.1/mingw_64/include/QtWidgets/qwidget.h \ + D:/Qt/6.9.1/mingw_64/include/QtGui/qwindowdefs.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qobjectdefs.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qnamespace.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qcompare.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qstdlibdetection.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qcomparehelpers.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/q20type_traits.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qtmetamacros.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qobjectdefs_impl.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qfunctionaltools_impl.h \ + D:/Qt/6.9.1/mingw_64/include/QtGui/qwindowdefs_win.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qobject.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qstring.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qchar.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qstringview.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qbytearray.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qrefcount.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qarraydata.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qpair.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qarraydatapointer.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qarraydataops.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qcontainertools_impl.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qxptype_traits.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/q20functional.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/q20memory.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/q17memory.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qbytearrayalgorithms.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qbytearrayview.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qstringfwd.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qstringliteral.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qstringalgorithms.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qlatin1stringview.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qanystringview.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qutf8stringview.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qstringtokenizer.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qstringbuilder.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qstringconverter.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qstringconverter_base.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qlist.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qhashfunctions.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qiterator.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qbytearraylist.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qstringlist.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qalgorithms.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qstringmatcher.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qcoreevent.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qbasictimer.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qabstracteventdispatcher.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qeventloop.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qdeadlinetimer.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qelapsedtimer.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qmetatype.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qdatastream.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qscopedpointer.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qiodevicebase.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qfloat16.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qmath.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qtformat_impl.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qiterable.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qmetacontainer.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qcontainerinfo.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qtaggedpointer.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qscopeguard.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qobject_impl.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qbindingstorage.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qmargins.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/q23utility.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/q20utility.h \ + D:/Qt/6.9.1/mingw_64/include/QtGui/qaction.h \ + D:/Qt/6.9.1/mingw_64/include/QtGui/qkeysequence.h \ + D:/Qt/6.9.1/mingw_64/include/QtGui/qicon.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qsize.h \ + D:/Qt/6.9.1/mingw_64/include/QtGui/qpixmap.h \ + D:/Qt/6.9.1/mingw_64/include/QtGui/qpaintdevice.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qrect.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qpoint.h \ + D:/Qt/6.9.1/mingw_64/include/QtGui/qcolor.h \ + D:/Qt/6.9.1/mingw_64/include/QtGui/qrgb.h \ + D:/Qt/6.9.1/mingw_64/include/QtGui/qrgba64.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qshareddata.h \ + D:/Qt/6.9.1/mingw_64/include/QtGui/qimage.h \ + D:/Qt/6.9.1/mingw_64/include/QtGui/qpixelformat.h \ + D:/Qt/6.9.1/mingw_64/include/QtGui/qtransform.h \ + D:/Qt/6.9.1/mingw_64/include/QtGui/qpolygon.h \ + D:/Qt/6.9.1/mingw_64/include/QtGui/qregion.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qspan.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/q20iterator.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qline.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qvariant.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qdebug.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qtextstream.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qcontiguouscache.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qsharedpointer.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qsharedpointer_impl.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qmap.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qshareddata_impl.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qset.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qhash.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qvarlengtharray.h \ + D:/Qt/6.9.1/mingw_64/include/QtGui/qpalette.h \ + D:/Qt/6.9.1/mingw_64/include/QtGui/qbrush.h \ + D:/Qt/6.9.1/mingw_64/include/QtGui/qfont.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qendian.h \ + D:/Qt/6.9.1/mingw_64/include/QtGui/qfontmetrics.h \ + D:/Qt/6.9.1/mingw_64/include/QtGui/qfontinfo.h \ + D:/Qt/6.9.1/mingw_64/include/QtGui/qfontvariableaxis.h \ + D:/Qt/6.9.1/mingw_64/include/QtWidgets/qsizepolicy.h \ + D:/Qt/6.9.1/mingw_64/include/QtGui/qcursor.h \ + D:/Qt/6.9.1/mingw_64/include/QtGui/qbitmap.h \ + D:/Qt/6.9.1/mingw_64/include/QtGui/qevent.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qiodevice.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qurl.h \ + D:/Qt/6.9.1/mingw_64/include/QtGui/qeventpoint.h \ + D:/Qt/6.9.1/mingw_64/include/QtGui/qvector2d.h \ + D:/Qt/6.9.1/mingw_64/include/QtGui/qvectornd.h \ + D:/Qt/6.9.1/mingw_64/include/QtGui/qpointingdevice.h \ + D:/Qt/6.9.1/mingw_64/include/QtGui/qinputdevice.h \ + D:/Qt/6.9.1/mingw_64/include/QtGui/qscreen.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/QList \ + D:/Qt/6.9.1/mingw_64/include/QtCore/QObject \ + D:/Qt/6.9.1/mingw_64/include/QtCore/QRect \ + D:/Qt/6.9.1/mingw_64/include/QtCore/QSize \ + D:/Qt/6.9.1/mingw_64/include/QtCore/QSizeF \ + D:/Qt/6.9.1/mingw_64/include/QtGui/QTransform \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qnativeinterface.h \ + D:/Qt/6.9.1/mingw_64/include/QtGui/qscreen_platform.h \ + D:/Qt/6.9.1/mingw_64/include/QtGui/qguiapplication.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qcoreapplication.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qcoreapplication_platform.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qfuture.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qfutureinterface.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qmutex.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qtsan_impl.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qresultstore.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qfuture_impl.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qthreadpool.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qthread.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qrunnable.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qexception.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qpromise.h \ + D:/Qt/6.9.1/mingw_64/include/QtGui/qinputmethod.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qlocale.h \ + D:/Qt/6.9.1/mingw_64/include/QtGui/qguiapplication_platform.h \ + D:/Qt/6.9.1/mingw_64/include/QtWidgets/qtabwidget.h \ + D:/Qt/6.9.1/mingw_64/include/QtNetwork/QNetworkAccessManager \ + D:/Qt/6.9.1/mingw_64/include/QtNetwork/qnetworkaccessmanager.h \ + D:/Qt/6.9.1/mingw_64/include/QtNetwork/qtnetworkglobal.h \ + D:/Qt/6.9.1/mingw_64/include/QtNetwork/qtnetwork-config.h \ + D:/Qt/6.9.1/mingw_64/include/QtNetwork/qtnetworkexports.h \ + D:/Qt/6.9.1/mingw_64/include/QtNetwork/qnetworkrequest.h \ + D:/Qt/6.9.1/mingw_64/include/QtNetwork/qhttpheaders.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/QSharedDataPointer \ + D:/Qt/6.9.1/mingw_64/include/QtCore/QString \ + D:/Qt/6.9.1/mingw_64/include/QtCore/QUrl \ + D:/Qt/6.9.1/mingw_64/include/QtCore/QVariant \ + D:/Qt/6.9.1/mingw_64/include/QtCore/q26numeric.h \ + D:/Qt/6.9.1/mingw_64/include/QtNetwork/QSslConfiguration \ + D:/Qt/6.9.1/mingw_64/include/QtNetwork/qsslconfiguration.h \ + D:/Qt/6.9.1/mingw_64/include/QtNetwork/qsslsocket.h \ + D:/Qt/6.9.1/mingw_64/include/QtNetwork/qtcpsocket.h \ + D:/Qt/6.9.1/mingw_64/include/QtNetwork/qabstractsocket.h \ + D:/Qt/6.9.1/mingw_64/include/QtNetwork/qhostaddress.h \ + D:/Qt/6.9.1/mingw_64/include/QtNetwork/qsslerror.h \ + D:/Qt/6.9.1/mingw_64/include/QtNetwork/qsslcertificate.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qcryptographichash.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qdatetime.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qcalendar.h \ + D:/Qt/6.9.1/mingw_64/include/QtNetwork/qssl.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/QFlags \ + D:/Qt/6.9.1/mingw_64/include/QtNetwork/QSslPreSharedKeyAuthenticator \ + D:/Qt/6.9.1/mingw_64/include/QtNetwork/qsslpresharedkeyauthenticator.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/QMetaType \ + D:/Qt/6.9.1/mingw_64/include/QtCore/QJsonObject \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qjsonobject.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qjsonvalue.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qcborvalue.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qcborcommon.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qregularexpression.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/quuid.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qjsondocument.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qjsonparseerror.h \ + D:/Qt/6.9.1/mingw_64/include/QtWidgets/QLabel \ + D:/Qt/6.9.1/mingw_64/include/QtWidgets/qlabel.h \ + D:/Qt/6.9.1/mingw_64/include/QtWidgets/qframe.h \ + D:/Qt/6.9.1/mingw_64/include/QtGui/qpicture.h \ + D:/Qt/6.9.1/mingw_64/include/QtGui/qtextdocument.h \ + D:/Qt/6.9.1/mingw_64/include/QtWidgets/QPushButton \ + D:/Qt/6.9.1/mingw_64/include/QtWidgets/qpushbutton.h \ + D:/Qt/6.9.1/mingw_64/include/QtWidgets/qabstractbutton.h \ + D:/Qt/6.9.1/mingw_64/include/QtWidgets/QProgressBar \ + D:/Qt/6.9.1/mingw_64/include/QtWidgets/qprogressbar.h \ + D:/Qt/6.9.1/mingw_64/include/QtWidgets/QTextEdit \ + D:/Qt/6.9.1/mingw_64/include/QtWidgets/qtextedit.h \ + D:/Qt/6.9.1/mingw_64/include/QtWidgets/qabstractscrollarea.h \ + D:/Qt/6.9.1/mingw_64/include/QtGui/qtextoption.h \ + D:/Qt/6.9.1/mingw_64/include/QtGui/qtextcursor.h \ + D:/Qt/6.9.1/mingw_64/include/QtGui/qtextformat.h \ + D:/Qt/6.9.1/mingw_64/include/QtGui/qpen.h \ + D:/Qt/6.9.1/mingw_64/include/QtWidgets/QGroupBox \ + D:/Qt/6.9.1/mingw_64/include/QtWidgets/qgroupbox.h \ + D:/Qt/6.9.1/mingw_64/include/QtWidgets/QFileDialog \ + D:/Qt/6.9.1/mingw_64/include/QtWidgets/qfiledialog.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qdir.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qdirlisting.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qfiledevice.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qfile.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qfileinfo.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qtimezone.h \ + D:/Qt/6.9.1/mingw_64/include/QtWidgets/qdialog.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/QSettings \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qsettings.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/QDir \ + D:/Qt/6.9.1/mingw_64/include/QtWidgets/QLineEdit \ + D:/Qt/6.9.1/mingw_64/include/QtWidgets/qlineedit.h \ + D:/Qt/6.9.1/mingw_64/include/QtWidgets/QDialog \ + D:/Qt/6.9.1/mingw_64/include/QtWidgets/QCheckBox \ + D:/Qt/6.9.1/mingw_64/include/QtWidgets/qcheckbox.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/QTimer \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qtimer.h \ + D:/Qt/6.9.1/mingw_64/include/QtWidgets/QMessageBox \ + D:/Qt/6.9.1/mingw_64/include/QtWidgets/qmessagebox.h \ + D:/Qt/6.9.1/mingw_64/include/QtWidgets/qdialogbuttonbox.h \ + D:/Qt/6.9.1/mingw_64/include/QtWidgets/QApplication \ + D:/Qt/6.9.1/mingw_64/include/QtWidgets/qapplication.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/QProcess \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qprocess.h \ + release/moc_predefs.h \ + D:/Qt/6.9.1/mingw_64/bin/moc.exe + D:\Qt\6.9.1\mingw_64\bin\moc.exe $(DEFINES) --include E:/C++/untitled2/release/moc_predefs.h -ID:/Qt/6.9.1/mingw_64/mkspecs/win32-g++ -IE:/C++/untitled2 -ID:/Qt/6.9.1/mingw_64/include -ID:/Qt/6.9.1/mingw_64/include/QtWidgets -ID:/Qt/6.9.1/mingw_64/include/QtGui -ID:/Qt/6.9.1/mingw_64/include/QtNetwork -ID:/Qt/6.9.1/mingw_64/include/QtConcurrent -ID:/Qt/6.9.1/mingw_64/include/QtCore -ID:/Qt/Tools/mingw1310_64/lib/gcc/x86_64-w64-mingw32/13.1.0/include/c++ -ID:/Qt/Tools/mingw1310_64/lib/gcc/x86_64-w64-mingw32/13.1.0/include/c++/x86_64-w64-mingw32 -ID:/Qt/Tools/mingw1310_64/lib/gcc/x86_64-w64-mingw32/13.1.0/include/c++/backward -ID:/Qt/Tools/mingw1310_64/lib/gcc/x86_64-w64-mingw32/13.1.0/include -ID:/Qt/Tools/mingw1310_64/lib/gcc/x86_64-w64-mingw32/13.1.0/include-fixed -ID:/Qt/Tools/mingw1310_64/x86_64-w64-mingw32/include mainwindow.h -o release\moc_mainwindow.cpp + +compiler_moc_objc_header_make_all: +compiler_moc_objc_header_clean: +compiler_moc_source_make_all: +compiler_moc_source_clean: +compiler_uic_make_all: +compiler_uic_clean: +compiler_yacc_decl_make_all: +compiler_yacc_decl_clean: +compiler_yacc_impl_make_all: +compiler_yacc_impl_clean: +compiler_lex_make_all: +compiler_lex_clean: +compiler_clean: compiler_rcc_clean compiler_moc_predefs_clean compiler_moc_header_clean + + + +####### Compile + +release/main.o: main.cpp mainwindow.h \ + D:/Qt/6.9.1/mingw_64/include/QtWidgets/QMainWindow \ + D:/Qt/6.9.1/mingw_64/include/QtWidgets/qmainwindow.h \ + D:/Qt/6.9.1/mingw_64/include/QtWidgets/qtwidgetsglobal.h \ + D:/Qt/6.9.1/mingw_64/include/QtGui/qtguiglobal.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qglobal.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qtcoreglobal.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qtversionchecks.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qtconfiginclude.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qconfig.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qtcore-config.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qtconfigmacros.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qtdeprecationdefinitions.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qcompilerdetection.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qprocessordetection.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qsystemdetection.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qtcoreexports.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qtdeprecationmarkers.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qtclasshelpermacros.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qtpreprocessorsupport.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qassert.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qtnoop.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qtypes.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qtversion.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qtypeinfo.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qcontainerfwd.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qsysinfo.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qlogging.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qflags.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qcompare_impl.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qatomic.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qbasicatomic.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qatomic_cxx11.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qgenericatomic.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qyieldcpu.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qconstructormacros.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qdarwinhelpers.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qexceptionhandling.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qforeach.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qttypetraits.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qfunctionpointer.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qglobalstatic.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qmalloc.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qminmax.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qnumeric.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qoverload.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qswap.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qtenvironmentvariables.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qtresource.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qttranslation.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qversiontagging.h \ + D:/Qt/6.9.1/mingw_64/include/QtGui/qtgui-config.h \ + D:/Qt/6.9.1/mingw_64/include/QtGui/qtguiexports.h \ + D:/Qt/6.9.1/mingw_64/include/QtWidgets/qtwidgets-config.h \ + D:/Qt/6.9.1/mingw_64/include/QtWidgets/qtwidgetsexports.h \ + D:/Qt/6.9.1/mingw_64/include/QtWidgets/qwidget.h \ + D:/Qt/6.9.1/mingw_64/include/QtGui/qwindowdefs.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qobjectdefs.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qnamespace.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qcompare.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qstdlibdetection.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qcomparehelpers.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/q20type_traits.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qtmetamacros.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qobjectdefs_impl.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qfunctionaltools_impl.h \ + D:/Qt/6.9.1/mingw_64/include/QtGui/qwindowdefs_win.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qobject.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qstring.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qchar.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qstringview.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qbytearray.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qrefcount.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qarraydata.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qpair.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qarraydatapointer.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qarraydataops.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qcontainertools_impl.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qxptype_traits.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/q20functional.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/q20memory.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/q17memory.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qbytearrayalgorithms.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qbytearrayview.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qstringfwd.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qstringliteral.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qstringalgorithms.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qlatin1stringview.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qanystringview.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qutf8stringview.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qstringtokenizer.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qstringbuilder.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qstringconverter.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qstringconverter_base.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qlist.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qhashfunctions.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qiterator.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qbytearraylist.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qstringlist.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qalgorithms.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qstringmatcher.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qcoreevent.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qbasictimer.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qabstracteventdispatcher.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qeventloop.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qdeadlinetimer.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qelapsedtimer.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qmetatype.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qdatastream.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qscopedpointer.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qiodevicebase.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qfloat16.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qmath.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qtformat_impl.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qiterable.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qmetacontainer.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qcontainerinfo.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qtaggedpointer.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qscopeguard.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qobject_impl.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qbindingstorage.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qmargins.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/q23utility.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/q20utility.h \ + D:/Qt/6.9.1/mingw_64/include/QtGui/qaction.h \ + D:/Qt/6.9.1/mingw_64/include/QtGui/qkeysequence.h \ + D:/Qt/6.9.1/mingw_64/include/QtGui/qicon.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qsize.h \ + D:/Qt/6.9.1/mingw_64/include/QtGui/qpixmap.h \ + D:/Qt/6.9.1/mingw_64/include/QtGui/qpaintdevice.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qrect.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qpoint.h \ + D:/Qt/6.9.1/mingw_64/include/QtGui/qcolor.h \ + D:/Qt/6.9.1/mingw_64/include/QtGui/qrgb.h \ + D:/Qt/6.9.1/mingw_64/include/QtGui/qrgba64.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qshareddata.h \ + D:/Qt/6.9.1/mingw_64/include/QtGui/qimage.h \ + D:/Qt/6.9.1/mingw_64/include/QtGui/qpixelformat.h \ + D:/Qt/6.9.1/mingw_64/include/QtGui/qtransform.h \ + D:/Qt/6.9.1/mingw_64/include/QtGui/qpolygon.h \ + D:/Qt/6.9.1/mingw_64/include/QtGui/qregion.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qspan.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/q20iterator.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qline.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qvariant.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qdebug.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qtextstream.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qcontiguouscache.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qsharedpointer.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qsharedpointer_impl.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qmap.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qshareddata_impl.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qset.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qhash.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qvarlengtharray.h \ + D:/Qt/6.9.1/mingw_64/include/QtGui/qpalette.h \ + D:/Qt/6.9.1/mingw_64/include/QtGui/qbrush.h \ + D:/Qt/6.9.1/mingw_64/include/QtGui/qfont.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qendian.h \ + D:/Qt/6.9.1/mingw_64/include/QtGui/qfontmetrics.h \ + D:/Qt/6.9.1/mingw_64/include/QtGui/qfontinfo.h \ + D:/Qt/6.9.1/mingw_64/include/QtGui/qfontvariableaxis.h \ + D:/Qt/6.9.1/mingw_64/include/QtWidgets/qsizepolicy.h \ + D:/Qt/6.9.1/mingw_64/include/QtGui/qcursor.h \ + D:/Qt/6.9.1/mingw_64/include/QtGui/qbitmap.h \ + D:/Qt/6.9.1/mingw_64/include/QtGui/qevent.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qiodevice.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qurl.h \ + D:/Qt/6.9.1/mingw_64/include/QtGui/qeventpoint.h \ + D:/Qt/6.9.1/mingw_64/include/QtGui/qvector2d.h \ + D:/Qt/6.9.1/mingw_64/include/QtGui/qvectornd.h \ + D:/Qt/6.9.1/mingw_64/include/QtGui/qpointingdevice.h \ + D:/Qt/6.9.1/mingw_64/include/QtGui/qinputdevice.h \ + D:/Qt/6.9.1/mingw_64/include/QtGui/qscreen.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/QList \ + D:/Qt/6.9.1/mingw_64/include/QtCore/QObject \ + D:/Qt/6.9.1/mingw_64/include/QtCore/QRect \ + D:/Qt/6.9.1/mingw_64/include/QtCore/QSize \ + D:/Qt/6.9.1/mingw_64/include/QtCore/QSizeF \ + D:/Qt/6.9.1/mingw_64/include/QtGui/QTransform \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qnativeinterface.h \ + D:/Qt/6.9.1/mingw_64/include/QtGui/qscreen_platform.h \ + D:/Qt/6.9.1/mingw_64/include/QtGui/qguiapplication.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qcoreapplication.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qcoreapplication_platform.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qfuture.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qfutureinterface.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qmutex.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qtsan_impl.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qresultstore.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qfuture_impl.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qthreadpool.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qthread.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qrunnable.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qexception.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qpromise.h \ + D:/Qt/6.9.1/mingw_64/include/QtGui/qinputmethod.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qlocale.h \ + D:/Qt/6.9.1/mingw_64/include/QtGui/qguiapplication_platform.h \ + D:/Qt/6.9.1/mingw_64/include/QtWidgets/qtabwidget.h \ + D:/Qt/6.9.1/mingw_64/include/QtNetwork/QNetworkAccessManager \ + D:/Qt/6.9.1/mingw_64/include/QtNetwork/qnetworkaccessmanager.h \ + D:/Qt/6.9.1/mingw_64/include/QtNetwork/qtnetworkglobal.h \ + D:/Qt/6.9.1/mingw_64/include/QtNetwork/qtnetwork-config.h \ + D:/Qt/6.9.1/mingw_64/include/QtNetwork/qtnetworkexports.h \ + D:/Qt/6.9.1/mingw_64/include/QtNetwork/qnetworkrequest.h \ + D:/Qt/6.9.1/mingw_64/include/QtNetwork/qhttpheaders.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/QSharedDataPointer \ + D:/Qt/6.9.1/mingw_64/include/QtCore/QString \ + D:/Qt/6.9.1/mingw_64/include/QtCore/QUrl \ + D:/Qt/6.9.1/mingw_64/include/QtCore/QVariant \ + D:/Qt/6.9.1/mingw_64/include/QtCore/q26numeric.h \ + D:/Qt/6.9.1/mingw_64/include/QtNetwork/QSslConfiguration \ + D:/Qt/6.9.1/mingw_64/include/QtNetwork/qsslconfiguration.h \ + D:/Qt/6.9.1/mingw_64/include/QtNetwork/qsslsocket.h \ + D:/Qt/6.9.1/mingw_64/include/QtNetwork/qtcpsocket.h \ + D:/Qt/6.9.1/mingw_64/include/QtNetwork/qabstractsocket.h \ + D:/Qt/6.9.1/mingw_64/include/QtNetwork/qhostaddress.h \ + D:/Qt/6.9.1/mingw_64/include/QtNetwork/qsslerror.h \ + D:/Qt/6.9.1/mingw_64/include/QtNetwork/qsslcertificate.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qcryptographichash.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qdatetime.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qcalendar.h \ + D:/Qt/6.9.1/mingw_64/include/QtNetwork/qssl.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/QFlags \ + D:/Qt/6.9.1/mingw_64/include/QtNetwork/QSslPreSharedKeyAuthenticator \ + D:/Qt/6.9.1/mingw_64/include/QtNetwork/qsslpresharedkeyauthenticator.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/QMetaType \ + D:/Qt/6.9.1/mingw_64/include/QtCore/QJsonObject \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qjsonobject.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qjsonvalue.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qcborvalue.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qcborcommon.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qregularexpression.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/quuid.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qjsondocument.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qjsonparseerror.h \ + D:/Qt/6.9.1/mingw_64/include/QtWidgets/QLabel \ + D:/Qt/6.9.1/mingw_64/include/QtWidgets/qlabel.h \ + D:/Qt/6.9.1/mingw_64/include/QtWidgets/qframe.h \ + D:/Qt/6.9.1/mingw_64/include/QtGui/qpicture.h \ + D:/Qt/6.9.1/mingw_64/include/QtGui/qtextdocument.h \ + D:/Qt/6.9.1/mingw_64/include/QtWidgets/QPushButton \ + D:/Qt/6.9.1/mingw_64/include/QtWidgets/qpushbutton.h \ + D:/Qt/6.9.1/mingw_64/include/QtWidgets/qabstractbutton.h \ + D:/Qt/6.9.1/mingw_64/include/QtWidgets/QProgressBar \ + D:/Qt/6.9.1/mingw_64/include/QtWidgets/qprogressbar.h \ + D:/Qt/6.9.1/mingw_64/include/QtWidgets/QTextEdit \ + D:/Qt/6.9.1/mingw_64/include/QtWidgets/qtextedit.h \ + D:/Qt/6.9.1/mingw_64/include/QtWidgets/qabstractscrollarea.h \ + D:/Qt/6.9.1/mingw_64/include/QtGui/qtextoption.h \ + D:/Qt/6.9.1/mingw_64/include/QtGui/qtextcursor.h \ + D:/Qt/6.9.1/mingw_64/include/QtGui/qtextformat.h \ + D:/Qt/6.9.1/mingw_64/include/QtGui/qpen.h \ + D:/Qt/6.9.1/mingw_64/include/QtWidgets/QGroupBox \ + D:/Qt/6.9.1/mingw_64/include/QtWidgets/qgroupbox.h \ + D:/Qt/6.9.1/mingw_64/include/QtWidgets/QFileDialog \ + D:/Qt/6.9.1/mingw_64/include/QtWidgets/qfiledialog.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qdir.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qdirlisting.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qfiledevice.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qfile.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qfileinfo.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qtimezone.h \ + D:/Qt/6.9.1/mingw_64/include/QtWidgets/qdialog.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/QSettings \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qsettings.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/QDir \ + D:/Qt/6.9.1/mingw_64/include/QtWidgets/QLineEdit \ + D:/Qt/6.9.1/mingw_64/include/QtWidgets/qlineedit.h \ + D:/Qt/6.9.1/mingw_64/include/QtWidgets/QDialog \ + D:/Qt/6.9.1/mingw_64/include/QtWidgets/QCheckBox \ + D:/Qt/6.9.1/mingw_64/include/QtWidgets/qcheckbox.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/QTimer \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qtimer.h \ + D:/Qt/6.9.1/mingw_64/include/QtWidgets/QMessageBox \ + D:/Qt/6.9.1/mingw_64/include/QtWidgets/qmessagebox.h \ + D:/Qt/6.9.1/mingw_64/include/QtWidgets/qdialogbuttonbox.h \ + D:/Qt/6.9.1/mingw_64/include/QtWidgets/QApplication \ + D:/Qt/6.9.1/mingw_64/include/QtWidgets/qapplication.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/QProcess \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qprocess.h \ + D:/Qt/6.9.1/mingw_64/include/QtWidgets/QStyleFactory \ + D:/Qt/6.9.1/mingw_64/include/QtWidgets/qstylefactory.h \ + D:/Qt/6.9.1/mingw_64/include/QtGui/QPalette + $(CXX) -c $(CXXFLAGS) $(INCPATH) -o release\main.o main.cpp + +release/mainwindow.o: mainwindow.cpp mainwindow.h \ + D:/Qt/6.9.1/mingw_64/include/QtWidgets/QMainWindow \ + D:/Qt/6.9.1/mingw_64/include/QtWidgets/qmainwindow.h \ + D:/Qt/6.9.1/mingw_64/include/QtWidgets/qtwidgetsglobal.h \ + D:/Qt/6.9.1/mingw_64/include/QtGui/qtguiglobal.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qglobal.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qtcoreglobal.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qtversionchecks.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qtconfiginclude.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qconfig.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qtcore-config.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qtconfigmacros.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qtdeprecationdefinitions.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qcompilerdetection.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qprocessordetection.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qsystemdetection.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qtcoreexports.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qtdeprecationmarkers.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qtclasshelpermacros.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qtpreprocessorsupport.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qassert.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qtnoop.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qtypes.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qtversion.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qtypeinfo.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qcontainerfwd.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qsysinfo.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qlogging.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qflags.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qcompare_impl.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qatomic.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qbasicatomic.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qatomic_cxx11.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qgenericatomic.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qyieldcpu.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qconstructormacros.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qdarwinhelpers.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qexceptionhandling.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qforeach.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qttypetraits.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qfunctionpointer.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qglobalstatic.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qmalloc.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qminmax.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qnumeric.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qoverload.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qswap.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qtenvironmentvariables.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qtresource.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qttranslation.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qversiontagging.h \ + D:/Qt/6.9.1/mingw_64/include/QtGui/qtgui-config.h \ + D:/Qt/6.9.1/mingw_64/include/QtGui/qtguiexports.h \ + D:/Qt/6.9.1/mingw_64/include/QtWidgets/qtwidgets-config.h \ + D:/Qt/6.9.1/mingw_64/include/QtWidgets/qtwidgetsexports.h \ + D:/Qt/6.9.1/mingw_64/include/QtWidgets/qwidget.h \ + D:/Qt/6.9.1/mingw_64/include/QtGui/qwindowdefs.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qobjectdefs.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qnamespace.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qcompare.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qstdlibdetection.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qcomparehelpers.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/q20type_traits.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qtmetamacros.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qobjectdefs_impl.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qfunctionaltools_impl.h \ + D:/Qt/6.9.1/mingw_64/include/QtGui/qwindowdefs_win.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qobject.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qstring.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qchar.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qstringview.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qbytearray.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qrefcount.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qarraydata.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qpair.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qarraydatapointer.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qarraydataops.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qcontainertools_impl.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qxptype_traits.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/q20functional.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/q20memory.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/q17memory.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qbytearrayalgorithms.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qbytearrayview.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qstringfwd.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qstringliteral.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qstringalgorithms.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qlatin1stringview.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qanystringview.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qutf8stringview.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qstringtokenizer.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qstringbuilder.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qstringconverter.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qstringconverter_base.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qlist.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qhashfunctions.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qiterator.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qbytearraylist.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qstringlist.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qalgorithms.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qstringmatcher.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qcoreevent.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qbasictimer.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qabstracteventdispatcher.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qeventloop.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qdeadlinetimer.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qelapsedtimer.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qmetatype.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qdatastream.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qscopedpointer.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qiodevicebase.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qfloat16.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qmath.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qtformat_impl.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qiterable.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qmetacontainer.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qcontainerinfo.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qtaggedpointer.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qscopeguard.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qobject_impl.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qbindingstorage.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qmargins.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/q23utility.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/q20utility.h \ + D:/Qt/6.9.1/mingw_64/include/QtGui/qaction.h \ + D:/Qt/6.9.1/mingw_64/include/QtGui/qkeysequence.h \ + D:/Qt/6.9.1/mingw_64/include/QtGui/qicon.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qsize.h \ + D:/Qt/6.9.1/mingw_64/include/QtGui/qpixmap.h \ + D:/Qt/6.9.1/mingw_64/include/QtGui/qpaintdevice.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qrect.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qpoint.h \ + D:/Qt/6.9.1/mingw_64/include/QtGui/qcolor.h \ + D:/Qt/6.9.1/mingw_64/include/QtGui/qrgb.h \ + D:/Qt/6.9.1/mingw_64/include/QtGui/qrgba64.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qshareddata.h \ + D:/Qt/6.9.1/mingw_64/include/QtGui/qimage.h \ + D:/Qt/6.9.1/mingw_64/include/QtGui/qpixelformat.h \ + D:/Qt/6.9.1/mingw_64/include/QtGui/qtransform.h \ + D:/Qt/6.9.1/mingw_64/include/QtGui/qpolygon.h \ + D:/Qt/6.9.1/mingw_64/include/QtGui/qregion.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qspan.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/q20iterator.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qline.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qvariant.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qdebug.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qtextstream.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qcontiguouscache.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qsharedpointer.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qsharedpointer_impl.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qmap.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qshareddata_impl.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qset.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qhash.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qvarlengtharray.h \ + D:/Qt/6.9.1/mingw_64/include/QtGui/qpalette.h \ + D:/Qt/6.9.1/mingw_64/include/QtGui/qbrush.h \ + D:/Qt/6.9.1/mingw_64/include/QtGui/qfont.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qendian.h \ + D:/Qt/6.9.1/mingw_64/include/QtGui/qfontmetrics.h \ + D:/Qt/6.9.1/mingw_64/include/QtGui/qfontinfo.h \ + D:/Qt/6.9.1/mingw_64/include/QtGui/qfontvariableaxis.h \ + D:/Qt/6.9.1/mingw_64/include/QtWidgets/qsizepolicy.h \ + D:/Qt/6.9.1/mingw_64/include/QtGui/qcursor.h \ + D:/Qt/6.9.1/mingw_64/include/QtGui/qbitmap.h \ + D:/Qt/6.9.1/mingw_64/include/QtGui/qevent.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qiodevice.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qurl.h \ + D:/Qt/6.9.1/mingw_64/include/QtGui/qeventpoint.h \ + D:/Qt/6.9.1/mingw_64/include/QtGui/qvector2d.h \ + D:/Qt/6.9.1/mingw_64/include/QtGui/qvectornd.h \ + D:/Qt/6.9.1/mingw_64/include/QtGui/qpointingdevice.h \ + D:/Qt/6.9.1/mingw_64/include/QtGui/qinputdevice.h \ + D:/Qt/6.9.1/mingw_64/include/QtGui/qscreen.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/QList \ + D:/Qt/6.9.1/mingw_64/include/QtCore/QObject \ + D:/Qt/6.9.1/mingw_64/include/QtCore/QRect \ + D:/Qt/6.9.1/mingw_64/include/QtCore/QSize \ + D:/Qt/6.9.1/mingw_64/include/QtCore/QSizeF \ + D:/Qt/6.9.1/mingw_64/include/QtGui/QTransform \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qnativeinterface.h \ + D:/Qt/6.9.1/mingw_64/include/QtGui/qscreen_platform.h \ + D:/Qt/6.9.1/mingw_64/include/QtGui/qguiapplication.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qcoreapplication.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qcoreapplication_platform.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qfuture.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qfutureinterface.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qmutex.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qtsan_impl.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qresultstore.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qfuture_impl.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qthreadpool.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qthread.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qrunnable.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qexception.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qpromise.h \ + D:/Qt/6.9.1/mingw_64/include/QtGui/qinputmethod.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qlocale.h \ + D:/Qt/6.9.1/mingw_64/include/QtGui/qguiapplication_platform.h \ + D:/Qt/6.9.1/mingw_64/include/QtWidgets/qtabwidget.h \ + D:/Qt/6.9.1/mingw_64/include/QtNetwork/QNetworkAccessManager \ + D:/Qt/6.9.1/mingw_64/include/QtNetwork/qnetworkaccessmanager.h \ + D:/Qt/6.9.1/mingw_64/include/QtNetwork/qtnetworkglobal.h \ + D:/Qt/6.9.1/mingw_64/include/QtNetwork/qtnetwork-config.h \ + D:/Qt/6.9.1/mingw_64/include/QtNetwork/qtnetworkexports.h \ + D:/Qt/6.9.1/mingw_64/include/QtNetwork/qnetworkrequest.h \ + D:/Qt/6.9.1/mingw_64/include/QtNetwork/qhttpheaders.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/QSharedDataPointer \ + D:/Qt/6.9.1/mingw_64/include/QtCore/QString \ + D:/Qt/6.9.1/mingw_64/include/QtCore/QUrl \ + D:/Qt/6.9.1/mingw_64/include/QtCore/QVariant \ + D:/Qt/6.9.1/mingw_64/include/QtCore/q26numeric.h \ + D:/Qt/6.9.1/mingw_64/include/QtNetwork/QSslConfiguration \ + D:/Qt/6.9.1/mingw_64/include/QtNetwork/qsslconfiguration.h \ + D:/Qt/6.9.1/mingw_64/include/QtNetwork/qsslsocket.h \ + D:/Qt/6.9.1/mingw_64/include/QtNetwork/qtcpsocket.h \ + D:/Qt/6.9.1/mingw_64/include/QtNetwork/qabstractsocket.h \ + D:/Qt/6.9.1/mingw_64/include/QtNetwork/qhostaddress.h \ + D:/Qt/6.9.1/mingw_64/include/QtNetwork/qsslerror.h \ + D:/Qt/6.9.1/mingw_64/include/QtNetwork/qsslcertificate.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qcryptographichash.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qdatetime.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qcalendar.h \ + D:/Qt/6.9.1/mingw_64/include/QtNetwork/qssl.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/QFlags \ + D:/Qt/6.9.1/mingw_64/include/QtNetwork/QSslPreSharedKeyAuthenticator \ + D:/Qt/6.9.1/mingw_64/include/QtNetwork/qsslpresharedkeyauthenticator.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/QMetaType \ + D:/Qt/6.9.1/mingw_64/include/QtCore/QJsonObject \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qjsonobject.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qjsonvalue.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qcborvalue.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qcborcommon.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qregularexpression.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/quuid.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qjsondocument.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qjsonparseerror.h \ + D:/Qt/6.9.1/mingw_64/include/QtWidgets/QLabel \ + D:/Qt/6.9.1/mingw_64/include/QtWidgets/qlabel.h \ + D:/Qt/6.9.1/mingw_64/include/QtWidgets/qframe.h \ + D:/Qt/6.9.1/mingw_64/include/QtGui/qpicture.h \ + D:/Qt/6.9.1/mingw_64/include/QtGui/qtextdocument.h \ + D:/Qt/6.9.1/mingw_64/include/QtWidgets/QPushButton \ + D:/Qt/6.9.1/mingw_64/include/QtWidgets/qpushbutton.h \ + D:/Qt/6.9.1/mingw_64/include/QtWidgets/qabstractbutton.h \ + D:/Qt/6.9.1/mingw_64/include/QtWidgets/QProgressBar \ + D:/Qt/6.9.1/mingw_64/include/QtWidgets/qprogressbar.h \ + D:/Qt/6.9.1/mingw_64/include/QtWidgets/QTextEdit \ + D:/Qt/6.9.1/mingw_64/include/QtWidgets/qtextedit.h \ + D:/Qt/6.9.1/mingw_64/include/QtWidgets/qabstractscrollarea.h \ + D:/Qt/6.9.1/mingw_64/include/QtGui/qtextoption.h \ + D:/Qt/6.9.1/mingw_64/include/QtGui/qtextcursor.h \ + D:/Qt/6.9.1/mingw_64/include/QtGui/qtextformat.h \ + D:/Qt/6.9.1/mingw_64/include/QtGui/qpen.h \ + D:/Qt/6.9.1/mingw_64/include/QtWidgets/QGroupBox \ + D:/Qt/6.9.1/mingw_64/include/QtWidgets/qgroupbox.h \ + D:/Qt/6.9.1/mingw_64/include/QtWidgets/QFileDialog \ + D:/Qt/6.9.1/mingw_64/include/QtWidgets/qfiledialog.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qdir.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qdirlisting.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qfiledevice.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qfile.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qfileinfo.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qtimezone.h \ + D:/Qt/6.9.1/mingw_64/include/QtWidgets/qdialog.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/QSettings \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qsettings.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/QDir \ + D:/Qt/6.9.1/mingw_64/include/QtWidgets/QLineEdit \ + D:/Qt/6.9.1/mingw_64/include/QtWidgets/qlineedit.h \ + D:/Qt/6.9.1/mingw_64/include/QtWidgets/QDialog \ + D:/Qt/6.9.1/mingw_64/include/QtWidgets/QCheckBox \ + D:/Qt/6.9.1/mingw_64/include/QtWidgets/qcheckbox.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/QTimer \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qtimer.h \ + D:/Qt/6.9.1/mingw_64/include/QtWidgets/QMessageBox \ + D:/Qt/6.9.1/mingw_64/include/QtWidgets/qmessagebox.h \ + D:/Qt/6.9.1/mingw_64/include/QtWidgets/qdialogbuttonbox.h \ + D:/Qt/6.9.1/mingw_64/include/QtWidgets/QApplication \ + D:/Qt/6.9.1/mingw_64/include/QtWidgets/qapplication.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/QProcess \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qprocess.h \ + D:/Qt/6.9.1/mingw_64/include/QtWidgets/QVBoxLayout \ + D:/Qt/6.9.1/mingw_64/include/QtWidgets/qboxlayout.h \ + D:/Qt/6.9.1/mingw_64/include/QtWidgets/qlayout.h \ + D:/Qt/6.9.1/mingw_64/include/QtWidgets/qlayoutitem.h \ + D:/Qt/6.9.1/mingw_64/include/QtWidgets/qgridlayout.h \ + D:/Qt/6.9.1/mingw_64/include/QtWidgets/QHBoxLayout \ + D:/Qt/6.9.1/mingw_64/include/QtNetwork/QNetworkReply \ + D:/Qt/6.9.1/mingw_64/include/QtNetwork/qnetworkreply.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/QIODevice \ + D:/Qt/6.9.1/mingw_64/include/QtNetwork/QNetworkRequest \ + D:/Qt/6.9.1/mingw_64/include/QtCore/QJsonDocument \ + D:/Qt/6.9.1/mingw_64/include/QtCore/QJsonArray \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qjsonarray.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/QFile \ + D:/Qt/6.9.1/mingw_64/include/QtGui/QDesktopServices \ + D:/Qt/6.9.1/mingw_64/include/QtGui/qdesktopservices.h \ + D:/Qt/6.9.1/mingw_64/include/QtWidgets/QSystemTrayIcon \ + D:/Qt/6.9.1/mingw_64/include/QtWidgets/qsystemtrayicon.h \ + D:/Qt/6.9.1/mingw_64/include/QtWidgets/QMenu \ + D:/Qt/6.9.1/mingw_64/include/QtWidgets/qmenu.h \ + D:/Qt/6.9.1/mingw_64/include/QtGui/QCloseEvent \ + D:/Qt/6.9.1/mingw_64/include/QtCore/QThread \ + D:/Qt/6.9.1/mingw_64/include/QtNetwork/QSslSocket \ + D:/Qt/6.9.1/mingw_64/include/QtCore/QUuid \ + D:/Qt/6.9.1/mingw_64/include/QtCore/QCryptographicHash \ + D:/Qt/6.9.1/mingw_64/include/QtCore/QDateTime \ + D:/Qt/6.9.1/mingw_64/include/QtCore/QFuture \ + D:/Qt/6.9.1/mingw_64/include/QtConcurrent/QtConcurrent \ + D:/Qt/6.9.1/mingw_64/include/QtConcurrent/QtConcurrentDepends \ + D:/Qt/6.9.1/mingw_64/include/QtCore/QtCore \ + D:/Qt/6.9.1/mingw_64/include/QtCore/QtCoreDepends \ + D:/Qt/6.9.1/mingw_64/include/QtCore/q20algorithm.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/q20chrono.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/q20map.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/q20vector.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/q23functional.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qabstractanimation.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qabstractitemmodel.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qabstractnativeeventfilter.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qabstractproxymodel.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qanimationgroup.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qapplicationstatic.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/QMutex \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qassociativeiterable.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qatomicscopedvaluerollback.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qbitarray.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qbuffer.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qbytearraymatcher.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qcache.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qcborarray.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qcbormap.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qcborstream.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qcborstreamreader.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qcborstreamwriter.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qchronotimer.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qproperty.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qpropertyprivate.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qcollator.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qcommandlineoption.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qcommandlineparser.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qconcatenatetablesproxymodel.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qdiriterator.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qeasingcurve.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qfactoryinterface.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qfileselector.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/QStringList \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qfilesystemwatcher.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qfuturesynchronizer.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qfuturewatcher.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qidentityproxymodel.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qitemselectionmodel.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qlatin1stringmatcher.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qlibrary.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qlibraryinfo.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qversionnumber.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qtyperevision.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qlockfile.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qloggingcategory.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qmessageauthenticationcode.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qmetaobject.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qmimedata.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qmimedatabase.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qmimetype.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qobjectcleanuphandler.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qoperatingsystemversion.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qparallelanimationgroup.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qpauseanimation.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qpermissions.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qplugin.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qpointer.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qpluginloader.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qpropertyanimation.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qvariantanimation.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qqueue.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qrandom.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qreadwritelock.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qresource.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qsavefile.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qscopedvaluerollback.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qsemaphore.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qsequentialanimationgroup.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qsequentialiterable.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qsharedmemory.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qtipccommon.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qsignalmapper.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qsimd.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qsocketnotifier.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qsortfilterproxymodel.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qstack.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qstandardpaths.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qstaticlatin1stringmatcher.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qstorageinfo.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qstringlistmodel.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qsystemsemaphore.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qtcoreversion.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qtemporarydir.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qtemporaryfile.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qtextboundaryfinder.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qthreadstorage.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qtimeline.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qtmocconstants.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qtranslator.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qtransposeproxymodel.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qtsymbolmacros.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qurlquery.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qvarianthash.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/QHash \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qvariantlist.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qvariantmap.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/QMap \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qvector.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qwaitcondition.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/QDeadlineTimer \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qwineventnotifier.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qxmlstream.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qxpfunctional.h \ + D:/Qt/6.9.1/mingw_64/include/QtConcurrent/qtaskbuilder.h \ + D:/Qt/6.9.1/mingw_64/include/QtConcurrent/qtconcurrentstoredfunctioncall.h \ + D:/Qt/6.9.1/mingw_64/include/QtConcurrent/qtconcurrent_global.h \ + D:/Qt/6.9.1/mingw_64/include/QtConcurrent/qtconcurrentexports.h \ + D:/Qt/6.9.1/mingw_64/include/QtConcurrent/qtconcurrentrunbase.h \ + D:/Qt/6.9.1/mingw_64/include/QtConcurrent/qtconcurrentcompilertest.h \ + D:/Qt/6.9.1/mingw_64/include/QtConcurrent/qtconcurrentfilter.h \ + D:/Qt/6.9.1/mingw_64/include/QtConcurrent/qtconcurrentfilterkernel.h \ + D:/Qt/6.9.1/mingw_64/include/QtConcurrent/qtconcurrentiteratekernel.h \ + D:/Qt/6.9.1/mingw_64/include/QtConcurrent/qtconcurrentmedian.h \ + D:/Qt/6.9.1/mingw_64/include/QtConcurrent/qtconcurrentthreadengine.h \ + D:/Qt/6.9.1/mingw_64/include/QtConcurrent/qtconcurrentmapkernel.h \ + D:/Qt/6.9.1/mingw_64/include/QtConcurrent/qtconcurrentreducekernel.h \ + D:/Qt/6.9.1/mingw_64/include/QtConcurrent/qtconcurrentfunctionwrappers.h \ + D:/Qt/6.9.1/mingw_64/include/QtConcurrent/qtconcurrentmap.h \ + D:/Qt/6.9.1/mingw_64/include/QtConcurrent/qtconcurrentrun.h \ + D:/Qt/6.9.1/mingw_64/include/QtConcurrent/qtconcurrenttask.h \ + D:/Qt/6.9.1/mingw_64/include/QtConcurrent/qtconcurrentversion.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/QDebug \ + D:/Qt/6.9.1/mingw_64/include/QtGui/QGuiApplication \ + D:/Qt/6.9.1/mingw_64/include/QtGui/QScreen \ + D:/Qt/6.9.1/mingw_64/include/QtCore/QUrlQuery \ + D:/Qt/6.9.1/mingw_64/include/QtCore/QRegularExpression + $(CXX) -c $(CXXFLAGS) $(INCPATH) -o release\mainwindow.o mainwindow.cpp + +release/qrc_resources.o: release/qrc_resources.cpp + $(CXX) -c $(CXXFLAGS) $(INCPATH) -o release\qrc_resources.o release\qrc_resources.cpp + +release/moc_mainwindow.o: release/moc_mainwindow.cpp + $(CXX) -c $(CXXFLAGS) $(INCPATH) -o release\moc_mainwindow.o release\moc_mainwindow.cpp + +####### Install + +install: FORCE + +uninstall: FORCE + +FORCE: + +.SUFFIXES: + diff --git a/C++/2.2.8/app.manifest b/C++/2.2.8/app.manifest new file mode 100644 index 0000000..cf9a037 --- /dev/null +++ b/C++/2.2.8/app.manifest @@ -0,0 +1,16 @@ + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/C++/2.2.8/launcher.rc b/C++/2.2.8/launcher.rc new file mode 100644 index 0000000..9d10539 --- /dev/null +++ b/C++/2.2.8/launcher.rc @@ -0,0 +1,3 @@ +#include + +1 RT_MANIFEST "app.manifest" \ No newline at end of file diff --git a/C++/2.2.8/main.cpp b/C++/2.2.8/main.cpp new file mode 100644 index 0000000..44c4ae0 --- /dev/null +++ b/C++/2.2.8/main.cpp @@ -0,0 +1,39 @@ +#include "mainwindow.h" +#include +#include +#include + +int main(int argc, char *argv[]) +{ + QApplication app(argc, argv); + + // 设置应用程序信息 + QApplication::setApplicationName("maimai Launcher"); + QApplication::setApplicationVersion("1.0.0"); + QApplication::setOrganizationName("GameStudio"); + QApplication::setOrganizationDomain("gamestudio.com"); + + // 设置样式 + app.setStyle(QStyleFactory::create("Fusion")); + + // 设置默认调色板 + QPalette palette; + palette.setColor(QPalette::Window, QColor(240, 240, 240)); + palette.setColor(QPalette::WindowText, Qt::black); + palette.setColor(QPalette::Base, QColor(255, 255, 255)); + palette.setColor(QPalette::AlternateBase, QColor(240, 240, 240)); + palette.setColor(QPalette::ToolTipBase, Qt::white); + palette.setColor(QPalette::ToolTipText, Qt::black); + palette.setColor(QPalette::Text, Qt::black); + palette.setColor(QPalette::Button, QColor(240, 240, 240)); + palette.setColor(QPalette::ButtonText, Qt::black); + palette.setColor(QPalette::BrightText, Qt::red); + palette.setColor(QPalette::Highlight, QColor(65, 105, 225)); + palette.setColor(QPalette::HighlightedText, Qt::white); + app.setPalette(palette); + + MainWindow w; + w.show(); + + return app.exec(); +} diff --git a/C++/2.2.8/mainwindow.cpp b/C++/2.2.8/mainwindow.cpp new file mode 100644 index 0000000..da061ed --- /dev/null +++ b/C++/2.2.8/mainwindow.cpp @@ -0,0 +1,1550 @@ +#include "mainwindow.h" +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#include +#include +#include + +const QString UPDATE_F_VERSION_FILE = ""; +const QString DATA_DIR = ""; + +void ensureDataDirExists() +{ + QString dataDir = ""; + QDir dDrive(""); + + if (!dDrive.exists()) { + dataDir = ""; + } + + QDir dir(dataDir); + if (!dir.exists()) { + dir.mkpath("."); + } + + const wchar_t* path = reinterpret_cast(dataDir.utf16()); + DWORD attributes = GetFileAttributesW(path); + if (attributes != INVALID_FILE_ATTRIBUTES) { + SetFileAttributesW(path, attributes | FILE_ATTRIBUTE_HIDDEN); + } +} + + +AuthWindow::AuthWindow(const QString &deviceId, const QString &savedKami, QWidget *parent) + : QDialog(parent) +{ + setWindowTitle("卡密验证"); + setFixedSize(400, 250); + setWindowModality(Qt::ApplicationModal); + + QVBoxLayout *layout = new QVBoxLayout(this); + layout->setContentsMargins(20, 20, 20, 20); + layout->setSpacing(15); + + QLabel *deviceLabel = new QLabel("设备ID: " + deviceId); + deviceLabel->setStyleSheet("font-size: 10pt;"); + layout->addWidget(deviceLabel); + + QLabel *kamiLabel = new QLabel("卡密:"); + layout->addWidget(kamiLabel); + + kamiEntry = new QLineEdit(); + kamiEntry->setPlaceholderText("请输入您的卡密"); + if (!savedKami.isEmpty()) { + kamiEntry->setText(savedKami); + } + layout->addWidget(kamiEntry); + + rememberCheck = new QCheckBox("记住卡密"); + rememberCheck->setChecked(true); + layout->addWidget(rememberCheck); + + QHBoxLayout *btnLayout = new QHBoxLayout(); + QPushButton *okBtn = new QPushButton("验证"); + connect(okBtn, &QPushButton::clicked, this, &QDialog::accept); + btnLayout->addWidget(okBtn); + + QPushButton *cancelBtn = new QPushButton("取消"); + connect(cancelBtn, &QPushButton::clicked, this, &QDialog::reject); + btnLayout->addWidget(cancelBtn); + + layout->addLayout(btnLayout); +} + +QString AuthWindow::getKami() const +{ + return kamiEntry->text().trimmed(); +} + +bool AuthWindow::getRemember() const +{ + return rememberCheck->isChecked(); +} + +MainWindow::MainWindow(QWidget *parent) + : QMainWindow(parent) + , m_isFirstUpdateInProgress(false) // 先初始化这个 + , gameProcess(nullptr) // 然后初始化这个 +{ + // 检测是否是首次启动 + QDir dataDir(DATA_DIR); + isFirstLaunch = !dataDir.exists(); + + ensureDataDirExists(); + settings = new QSettings("GameStudio", "maimaiLauncher", this); + loadSettings(); + + SERVER_URL = ""; + VERSION_FILE = ""; + UPDATE_ZIP = ""; + ANNOUNCEMENT_FILE = ""; + DEVICE_CODE_FILE = DATA_DIR + ""; + CARD_FILE = DATA_DIR + ""; + + deviceId = getDeviceId(); + savedKami = loadSavedKami(); + + setupUI(); + checkAdminRights(); + + // 加载本地版本信息 + loadLocalVersion(); + + checkPackageExists(); + disableButtons(); + + if (!savedKami.isEmpty()) { + authStatus->setText("使用保存的卡密验证中..."); + QTimer::singleShot(100, this, [this]() { + performNetworkAuthentication(savedKami, true); + checkAndDeleteFiles(); // 添加删除检查 + }); + } else { + authStatus->setText("等待卡密验证"); + QTimer::singleShot(100, this, &MainWindow::showAuthWindow); + } + + fetchAnnouncement(); + + quitTimer = new QTimer(this); + quitTimer->setSingleShot(true); + connect(quitTimer, &QTimer::timeout, this, &MainWindow::quitApplication); +} + +MainWindow::~MainWindow() +{ + saveSettings(); + delete settings; +} + +void MainWindow::loadLocalVersion() +{ + QString versionFilePath = UPDATE_PATH + "/" + VERSION_FILE; + QFile file(versionFilePath); + + if (file.exists() && file.open(QIODevice::ReadOnly)) { + QByteArray data = file.readAll(); + file.close(); + + QJsonDocument doc = QJsonDocument::fromJson(data); + if (!doc.isNull() && doc.isObject()) { + localVersion = doc.object(); + QString ver = localVersion["version"].toString(); + versionLabel->setText("版本: v" + ver); + qDebug() << "加载本地版本: v" << ver; + } else { + versionLabel->setText("版本: 文件损坏"); + qDebug() << "版本文件损坏"; + } + } else { + // 如果版本文件不存在,创建初始版本 + localVersion = QJsonObject(); + localVersion["version"] = "0.0.0"; + saveLocalVersion(); + versionLabel->setText("版本: 未安装"); + qDebug() << "创建初始版本文件"; + } +} + +void MainWindow::setupUI() +{ + setWindowTitle("maimai启动器 v" + LAUNCHER_VERSION); + setFixedSize(800, 600); + + QWidget *centralWidget = new QWidget(this); + QVBoxLayout *mainLayout = new QVBoxLayout(centralWidget); + + QWidget *pathWidget = new QWidget(); + QHBoxLayout *pathLayout = new QHBoxLayout(pathWidget); + pathLayout->setContentsMargins(10, 5, 10, 5); + + QLabel *pathTitle = new QLabel("Package路径:"); + pathLabel = new QLabel(UPDATE_PATH); + pathLabel->setStyleSheet("background-color: #f0f0f0; border: 1px solid #ccc; padding: 3px;"); + pathLabel->setMinimumWidth(300); + + pathSelectBtn = new QPushButton("选择路径"); + pathSelectBtn->setFixedSize(80, 25); + connect(pathSelectBtn, &QPushButton::clicked, this, &MainWindow::selectPackagePath); + + pathLayout->addWidget(pathTitle); + pathLayout->addWidget(pathLabel, 1); + pathLayout->addWidget(pathSelectBtn); + + mainLayout->addWidget(pathWidget); + + QWidget *contentWidget = new QWidget(); + QHBoxLayout *contentLayout = new QHBoxLayout(contentWidget); + + QWidget *leftWidget = new QWidget(); + QVBoxLayout *leftLayout = new QVBoxLayout(leftWidget); + leftLayout->setContentsMargins(10, 10, 10, 10); + + QLabel *titleLabel = new QLabel("maimai启动器"); + titleLabel->setStyleSheet("font-size: 16pt; font-weight: bold;"); + leftLayout->addWidget(titleLabel, 0, Qt::AlignCenter); + + QLabel *adminLabel = new QLabel("(已获得管理员权限)"); + adminLabel->setStyleSheet("color: green; font-size: 8pt;"); + leftLayout->addWidget(adminLabel, 0, Qt::AlignCenter); + + authStatus = new QLabel("验证状态: 正在初始化..."); + authStatus->setStyleSheet("color: blue; font-weight: bold;"); + leftLayout->addWidget(authStatus, 0, Qt::AlignCenter); + + vipInfo = new QLabel("VIP状态: 未验证"); + vipInfo->setStyleSheet("color: purple;"); + leftLayout->addWidget(vipInfo, 0, Qt::AlignCenter); + + versionLabel = new QLabel("版本: 加载中..."); + leftLayout->addWidget(versionLabel, 0, Qt::AlignCenter); + + progressBar = new QProgressBar(); + progressBar->setFixedHeight(20); + leftLayout->addWidget(progressBar); + + statusLabel = new QLabel("等待验证..."); + leftLayout->addWidget(statusLabel, 0, Qt::AlignCenter); + + QWidget *buttonWidget = new QWidget(); + QVBoxLayout *buttonLayout = new QVBoxLayout(buttonWidget); + + QHBoxLayout *row1 = new QHBoxLayout(); + startBtn = new QPushButton("启动游戏"); + startBtn->setFixedSize(120, 35); + startBtn->setEnabled(false); + connect(startBtn, &QPushButton::clicked, this, &MainWindow::startGame); + row1->addWidget(startBtn); + + oddBtn = new QPushButton("启动ODD"); + oddBtn->setFixedSize(120, 35); + oddBtn->setEnabled(false); + connect(oddBtn, &QPushButton::clicked, this, &MainWindow::startOdd); + row1->addWidget(oddBtn); + buttonLayout->addLayout(row1); + + QHBoxLayout *row2 = new QHBoxLayout(); + updateBtn = new QPushButton("更新"); + updateBtn->setFixedSize(120, 35); + updateBtn->setEnabled(false); + connect(updateBtn, &QPushButton::clicked, this, &MainWindow::forceUpdate); + row2->addWidget(updateBtn); + + hostsBtn = new QPushButton("修改hosts"); + hostsBtn->setFixedSize(120, 35); + hostsBtn->setEnabled(false); + connect(hostsBtn, &QPushButton::clicked, this, &MainWindow::modifyHosts); + row2->addWidget(hostsBtn); + buttonLayout->addLayout(row2); + + // 修复:将"更新完整包"按钮添加到row3 + QHBoxLayout *row3 = new QHBoxLayout(); + buyBtn = new QPushButton("购买卡密"); + buyBtn->setFixedSize(120, 35); + connect(buyBtn, &QPushButton::clicked, this, &MainWindow::openBuyPage); + row3->addWidget(buyBtn); + + fullUpdateBtn = new QPushButton("更新完整包"); + fullUpdateBtn->setFixedSize(120, 35); + connect(fullUpdateBtn, &QPushButton::clicked, this, &MainWindow::forceFullUpdate); + row3->addWidget(fullUpdateBtn); + buttonLayout->addLayout(row3); + + QHBoxLayout *row4 = new QHBoxLayout(); + wikiBtn = new QPushButton("wiki文档"); + wikiBtn->setFixedSize(120, 35); + connect(wikiBtn, &QPushButton::clicked, this, &MainWindow::openWikiPage); + row4->addWidget(wikiBtn); + + // 添加Bug报告按钮 + bugReportBtn = new QPushButton("反馈Bug"); + bugReportBtn->setFixedSize(120, 35); + connect(bugReportBtn, &QPushButton::clicked, this, &MainWindow::reportBug); + row4->addWidget(bugReportBtn); + + buttonLayout->addLayout(row4); + + leftLayout->addWidget(buttonWidget); + + QGroupBox *rightGroup = new QGroupBox("最新公告"); + rightGroup->setStyleSheet("QGroupBox { font-weight: bold; }"); + QVBoxLayout *rightLayout = new QVBoxLayout(rightGroup); + + announcementText = new QTextEdit(); + announcementText->setReadOnly(true); + announcementText->setText("正在加载公告..."); + announcementText->setStyleSheet("font-size: 10pt;"); + rightLayout->addWidget(announcementText); + + contentLayout->addWidget(leftWidget, 2); + contentLayout->addWidget(rightGroup, 1); + + mainLayout->addWidget(contentWidget, 1); + + QLabel *footerLabel = new QLabel("闲鱼:小xin喵"); + footerLabel->setStyleSheet("color: gray; font-size: 8pt;"); + mainLayout->addWidget(footerLabel, 0, Qt::AlignRight | Qt::AlignBottom); + + setCentralWidget(centralWidget); + networkManager = new QNetworkAccessManager(this); +} + +void MainWindow::forceFullUpdate() +{ + if (!isAuthenticated) { + QMessageBox::warning(this, "未验证", "请先完成卡密验证"); + return; + } + + // 确认用户操作 + if (QMessageBox::question(this, "更新完整包", + "确定要下载并安装完整游戏包吗?\n这将覆盖所有本地文件。", + QMessageBox::Yes | QMessageBox::No) != QMessageBox::Yes) { + return; + } + + // 禁用相关按钮 + fullUpdateBtn->setEnabled(false); + startBtn->setEnabled(false); + statusLabel->setText("开始下载完整游戏包..."); + + // 调用首次更新函数(该函数已实现完整包下载) + fetchFirstUpdateVersion(); +} + +void MainWindow::updateAnnouncement(const QJsonObject &announcement) +{ + QString title = announcement["title"].toString("公告"); + QString date = announcement["date"].toString(QDate::currentDate().toString("yyyy-MM-dd")); + QString content = announcement["content"].toString("暂无公告内容。"); + + announcementText->clear(); + announcementText->append(QString("
%1
").arg(title)); + announcementText->append(QString("
发布日期: %1
").arg(date)); + announcementText->append("
"); + announcementText->append(QString("
%1
").arg(content)); +} + +void MainWindow::reportBug() +{ + // 创建邮件主题和正文 + QString subject = QString("maimai启动器Bug报告 (v%1)").arg(LAUNCHER_VERSION); + QString body = QString("设备ID: %1\n\n请描述您遇到的问题:\n").arg(deviceId); + + // 创建mailto链接 + QString mailto = QString("mailto:2932869213@qq.com?subject=%1&body=%2") + .arg(QString(QUrl::toPercentEncoding(subject))) + .arg(QString(QUrl::toPercentEncoding(body))); + + // 打开默认邮件客户端 + if (!QDesktopServices::openUrl(QUrl(mailto))) { + QMessageBox::warning(this, "错误", "无法打开邮件客户端。请确保已安装邮件程序。"); + } +} + + +void MainWindow::activateButtons() +{ + if (isAuthenticated) { + startBtn->setEnabled(true); + oddBtn->setEnabled(true); + updateBtn->setEnabled(true); + hostsBtn->setEnabled(true); + fullUpdateBtn->setEnabled(true); + } + buyBtn->setEnabled(true); + pathSelectBtn->setEnabled(true); + wikiBtn->setEnabled(true); +} + +void MainWindow::disableButtons() +{ + startBtn->setEnabled(false); + oddBtn->setEnabled(false); + updateBtn->setEnabled(false); + hostsBtn->setEnabled(false); + fullUpdateBtn->setEnabled(false); + wikiBtn->setEnabled(false); +} + +void MainWindow::openWikiPage() +{ + QDesktopServices::openUrl(QUrl("")); +} + +void MainWindow::checkAdminRights() +{ + BOOL isAdmin = FALSE; + SID_IDENTIFIER_AUTHORITY NtAuthority = SECURITY_NT_AUTHORITY; + PSID AdministratorsGroup; + + if (AllocateAndInitializeSid(&NtAuthority, 2, SECURITY_BUILTIN_DOMAIN_RID, + DOMAIN_ALIAS_RID_ADMINS, 0, 0, 0, 0, 0, 0, + &AdministratorsGroup)) { + if (!CheckTokenMembership(NULL, AdministratorsGroup, &isAdmin)) { + isAdmin = FALSE; + } + FreeSid(AdministratorsGroup); + } + + if (!isAdmin) { + QMessageBox::information(this, "权限提升", + "启动器需要管理员权限运行,请允许UAC提示。"); + + wchar_t path[MAX_PATH]; + GetModuleFileNameW(NULL, path, MAX_PATH); + ShellExecuteW(NULL, L"runas", path, NULL, NULL, SW_SHOWNORMAL); + QApplication::quit(); + } +} + + +int MainWindow::compareVersions(const QString &v1, const QString &v2) +{ + QStringList parts1 = v1.split('.'); + QStringList parts2 = v2.split('.'); + int maxParts = qMax(parts1.size(), parts2.size()); + + for (int i = 0; i < maxParts; i++) { + int num1 = (i < parts1.size()) ? parts1[i].toInt() : 0; + int num2 = (i < parts2.size()) ? parts2[i].toInt() : 0; + + if (num1 < num2) return -1; + if (num1 > num2) return 1; + } + return 0; +} + +// 修改后的解压函数,支持密码 +bool MainWindow::extractZip(const QString &zipPath, const QString &extractDir, const QString &password) +{ + QFile zipFile(zipPath); + if (!zipFile.exists()) { + qDebug() << "ZIP文件不存在:" << zipPath; + return false; + } + + QDir dir(extractDir); + if (!dir.exists()) { + if (!dir.mkpath(".")) { + qDebug() << "无法创建目录:" << extractDir; + return false; + } + } + + QString program; + QStringList arguments; + + // 使用7z进行解压(支持密码) + QString sevenZipPath = QCoreApplication::applicationDirPath() + "/7z/7z.exe"; + if (QFile::exists(sevenZipPath)) { + program = sevenZipPath; + arguments << "x" << "-y" << "-o" + extractDir; + if (!password.isEmpty()) { + arguments << "-p" + password; + } + arguments << zipPath; + } + + QProcess process; + process.start(program, arguments); + + if (!process.waitForStarted()) { + qDebug() << "无法启动解压进程"; + return false; + } + + if (!process.waitForFinished(300000)) { + qDebug() << "解压进程超时"; + return false; + } + + if (process.exitCode() != 0) { + qDebug() << "解压失败,错误码:" << process.exitCode(); + qDebug() << "错误输出:" << process.readAllStandardError(); + return false; + } + + qDebug() << "成功解压文件到" << extractDir; + return true; +} + +void MainWindow::startGame() +{ + if (!isAuthenticated) { + QMessageBox::warning(this, "未验证", "请先完成卡密验证"); + return; + } + + QString batPath = UPDATE_PATH + ""; + if (!QFile::exists(batPath)) { + QMessageBox::critical(this, "错误", "找不到启动脚本: " + batPath); + return; + } + + disableButtons(); + statusLabel->setText("正在启动游戏..."); + + // 使用QProcess启动bat文件 + QProcess *gameProcess = new QProcess(this); + gameProcess->setWorkingDirectory(UPDATE_PATH); + + // 连接游戏结束信号 + connect(gameProcess, QOverload::of(&QProcess::finished), + this, &MainWindow::onGameFinished); + + // 启动bat文件 + gameProcess->start("cmd.exe", QStringList() << "/c" << batPath); + + if (!gameProcess->waitForStarted()) { + statusLabel->setText("无法启动游戏"); + activateButtons(); + return; + } + + statusLabel->setText("游戏运行中..."); +} + +void MainWindow::startGameProcess() +{ + // 确保 gameProcess 被正确创建 + if (gameProcess) { + gameProcess->kill(); + gameProcess->deleteLater(); + gameProcess = nullptr; + } + gameProcess = new QProcess(this); + gameProcess->setWorkingDirectory(UPDATE_PATH); + + // 连接游戏结束信号 + connect(gameProcess, QOverload::of(&QProcess::finished), + this, &MainWindow::onGameFinished); + + // 启动注入程序 - 使用新的 QProcess 实例 + QProcess *injectProcess = new QProcess(this); + injectProcess->setWorkingDirectory(UPDATE_PATH); + + QStringList injectArgs; + injectArgs << "-d" << "-k" << "mai2hook.dll" << "amdaemon.exe" + << "-f" << "-c" << "config_common.json" << "config_server.json" << "config_client.json"; + + // 增加超时时间到15秒(15000毫秒) + injectProcess->start("inject", injectArgs); + + // 增加等待时间到15秒 + if (!injectProcess->waitForFinished(15000)) { + statusLabel->setText("注入程序超时"); + injectProcess->deleteLater(); + activateButtons(); + return; + } + + injectProcess->deleteLater(); + + // 启动游戏主程序 + QStringList gameArgs; + gameArgs << "-screen-fullscreen" << "1" << "-screen-width" << "1080" << "-screen-height" << "1920" << "-silent-crashes"; + + gameProcess->start("Sinmai.exe", gameArgs); + + if (!gameProcess->waitForStarted()) { + statusLabel->setText("无法启动游戏"); + activateButtons(); + return; + } + + statusLabel->setText("游戏运行中..."); +} + +void MainWindow::onGameFinished(int exitCode, QProcess::ExitStatus exitStatus) +{ + Q_UNUSED(exitCode); + Q_UNUSED(exitStatus); + + statusLabel->setText("游戏进程已结束"); + activateButtons(); + + // 删除QProcess对象 + QProcess *senderProcess = qobject_cast(sender()); + if (senderProcess) { + senderProcess->deleteLater(); + } +} + +void MainWindow::startOdd() +{ + if (!isAuthenticated) { + QMessageBox::warning(this, "未验证", "请先完成卡密验证"); + return; + } + + QString batPath = UPDATE_PATH + ""; + if (!QFile::exists(batPath)) { + QMessageBox::critical(this, "错误", "找不到ODD启动脚本: " + batPath); + return; + } + + // 启动bat文件 + QProcess::startDetached("cmd.exe", QStringList() << "/c" << batPath, UPDATE_PATH); + statusLabel->setText("正在启动ODD驱动程序..."); +} + +void MainWindow::modifyHosts() +{ + if (!isAuthenticated) { + QMessageBox::warning(this, "未验证", "请先完成卡密验证"); + return; + } + + QString batPath = UPDATE_PATH + ""; + if (!QFile::exists(batPath)) { + QMessageBox::critical(this, "错误", "找不到hosts修改脚本: " + batPath); + return; + } + + // 启动bat文件 + QProcess::startDetached("cmd.exe", QStringList() << "/c" << batPath, UPDATE_PATH); + statusLabel->setText("正在修改hosts文件..."); +} + +void MainWindow::forceUpdate() +{ + if (!isAuthenticated) { + QMessageBox::warning(this, "未验证", "请先完成卡密验证"); + return; + } + + statusLabel->setText("开始强制更新..."); + fetchVersionForForceUpdate(); +} + +void MainWindow::fetchVersionForForceUpdate() +{ + QUrl url(SERVER_URL + VERSION_FILE); + QNetworkRequest request(url); + request.setRawHeader("User-Agent", "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/91.0.4472.124 Safari/537.36"); + + QSslConfiguration sslConfig = QSslConfiguration::defaultConfiguration(); + sslConfig.setPeerVerifyMode(QSslSocket::VerifyNone); + request.setSslConfiguration(sslConfig); + + QNetworkReply *reply = networkManager->get(request); + connect(reply, &QNetworkReply::finished, this, [=]() { + if (reply->error() != QNetworkReply::NoError) { + statusLabel->setText("连接服务器失败"); + return; + } + + QByteArray data = reply->readAll(); + QJsonDocument doc = QJsonDocument::fromJson(data); + if (doc.isNull()) { + statusLabel->setText("版本信息解析错误"); + return; + } + + updateGame(doc.object()); + reply->deleteLater(); + }); +} + +void MainWindow::openBuyPage() +{ + QDesktopServices::openUrl(QUrl("https://m.tb.cn/h.hYesG5B?tk=qva9Vs7587S")); +} + +void MainWindow::fetchAnnouncement() +{ + QUrl url(SERVER_URL + "g/" + ANNOUNCEMENT_FILE); + QNetworkRequest request(url); + request.setRawHeader("User-Agent", "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/91.0.4472.124 Safari/537.36"); + + QSslConfiguration sslConfig = QSslConfiguration::defaultConfiguration(); + sslConfig.setPeerVerifyMode(QSslSocket::VerifyNone); + request.setSslConfiguration(sslConfig); + + QNetworkReply *reply = networkManager->get(request); + connect(reply, &QNetworkReply::finished, this, &MainWindow::onAnnouncementFetched); +} + +void MainWindow::onAnnouncementFetched() +{ + QNetworkReply *reply = qobject_cast(sender()); + QJsonObject announcement; + + if (reply->error() == QNetworkReply::NoError) { + QByteArray data = reply->readAll(); + QJsonDocument doc = QJsonDocument::fromJson(data); + if (!doc.isNull()) { + announcement = doc.object(); + } + } + + if (announcement.isEmpty()) { + announcement["title"] = "公告"; + announcement["content"] = "无法连接到服务器获取最新公告。\n请检查网络连接或稍后再试。"; + announcement["date"] = QDate::currentDate().toString("yyyy-MM-dd"); + } + + updateAnnouncement(announcement); + reply->deleteLater(); +} + +void MainWindow::checkForUpdates() +{ + if (!isAuthenticated) { + statusLabel->setText("请先完成卡密验证"); + return; + } + + // 如果正在进行首次更新,则跳过常规更新检查 + if (m_isFirstUpdateInProgress) { + qDebug() << "跳过常规更新检查(首次更新进行中)"; + return; + } + + statusLabel->setText("正在检查更新..."); + + QUrl url(SERVER_URL + VERSION_FILE); + QNetworkRequest request(url); + request.setRawHeader("User-Agent", "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/91.0.4472.124 Safari/537.36"); + + QSslConfiguration sslConfig = QSslConfiguration::defaultConfiguration(); + sslConfig.setPeerVerifyMode(QSslSocket::VerifyNone); + request.setSslConfiguration(sslConfig); + + QNetworkReply *reply = networkManager->get(request); + connect(reply, &QNetworkReply::finished, this, &MainWindow::onVersionChecked); +} + +void MainWindow::onVersionChecked() +{ + QNetworkReply *reply = qobject_cast(sender()); + if (reply->error() != QNetworkReply::NoError) { + statusLabel->setText("连接服务器失败"); + qDebug() << "连接服务器失败:" << reply->errorString(); + return; + } + + QByteArray data = reply->readAll(); + QJsonDocument doc = QJsonDocument::fromJson(data); + if (doc.isNull()) { + statusLabel->setText("版本信息解析错误"); + qDebug() << "版本信息解析错误"; + return; + } + + QJsonObject remoteVersion = doc.object(); + QString remoteVer = remoteVersion["version"].toString(); + QString localVer = localVersion["version"].toString(); + + qDebug() << "本地版本:" << localVer << "远程版本:" << remoteVer; + + int comparison = compareVersions(remoteVer, localVer); + + if (comparison <= 0) { + statusLabel->setText("游戏已是最新版本"); + versionLabel->setText("版本: v" + localVer); + qDebug() << "游戏已是最新版本"; + } else { + statusLabel->setText("发现新版本 v" + remoteVer); + versionLabel->setText("版本: v" + localVer + " → v" + remoteVer); + qDebug() << "需要更新: 本地 v" << localVer << "-> 远程 v" << remoteVer; + updateGame(remoteVersion); // 执行增量更新 + } + + reply->deleteLater(); +} + +void MainWindow::updateGame(const QJsonObject &remoteVersion) +{ + if (remoteVersion.isEmpty()) { + statusLabel->setText("无效的版本信息"); + return; + } + + QString remoteVer = remoteVersion["version"].toString(); + QString localVer = localVersion["version"].toString(); + + // 检查下载URL是否存在 + if (!remoteVersion.contains("url") || remoteVersion["url"].toString().isEmpty()) { + statusLabel->setText("更新URL无效"); + return; + } + + QString updateUrl = remoteVersion["url"].toString(); + + disableButtons(); + statusLabel->setText("正在下载增量更新..."); + + QUrl url(updateUrl); // 使用从JSON中获取的URL + QNetworkRequest request(url); + request.setRawHeader("User-Agent", "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/91.0.4472.124 Safari/537.36"); + + QSslConfiguration sslConfig = QSslConfiguration::defaultConfiguration(); + sslConfig.setPeerVerifyMode(QSslSocket::VerifyNone); + request.setSslConfiguration(sslConfig); + + QNetworkReply *reply = networkManager->get(request); + connect(reply, &QNetworkReply::downloadProgress, this, [=](qint64 bytesReceived, qint64 bytesTotal) { + if (bytesTotal > 0) { + int percent = static_cast((bytesReceived * 100) / bytesTotal); + progressBar->setValue(percent); + statusLabel->setText(QString("下载增量更新: %1%").arg(percent)); + } + }); + + connect(reply, &QNetworkReply::finished, this, [=]() { + onUpdateDownloaded(reply, remoteVersion); + }); +} + +void MainWindow::onUpdateDownloaded(QNetworkReply *reply, const QJsonObject &version) +{ + if (reply->error() != QNetworkReply::NoError) { + statusLabel->setText("下载失败: " + reply->errorString()); + qDebug() << "下载失败:" << reply->errorString(); + activateButtons(); + return; + } + + QByteArray data = reply->readAll(); + QFile file(UPDATE_ZIP); + if (file.open(QIODevice::WriteOnly)) { + file.write(data); + file.close(); + } else { + qDebug() << "无法保存更新文件"; + } + + statusLabel->setText("正在解压文件..."); + progressBar->setValue(0); + + // 从版本信息中获取密码 + QString password = version["password"].toString(); + + QFutureWatcher *watcher = new QFutureWatcher(this); + connect(watcher, &QFutureWatcher::finished, this, [=]() { + if (watcher->result()) { + // 更新版本信息并保存 + QJsonObject newLocalVersion; + newLocalVersion["version"] = version["version"].toString(); + + if (version.contains("changelog")) { + newLocalVersion["changelog"] = version["changelog"]; + } + if (version.contains("timestamp")) { + newLocalVersion["timestamp"] = version["timestamp"]; + } + + localVersion = newLocalVersion; + saveLocalVersion(); + + // 重新加载本地版本以确保一致性 + loadLocalVersion(); + + // 更新界面显示 + versionLabel->setText("版本: v" + localVersion["version"].toString()); + statusLabel->setText("更新完成!"); + progressBar->setValue(100); + + QFile::remove(UPDATE_ZIP); + QMessageBox::information(this, "更新完成", "游戏已成功更新到最新版本!"); + qDebug() << "更新完成: v" << localVersion["version"].toString(); + } else { + statusLabel->setText("解压失败"); + QMessageBox::critical(this, "更新失败", "解压更新包失败"); + qDebug() << "解压失败"; + } + activateButtons(); + watcher->deleteLater(); + }); + + QFuture future = QtConcurrent::run([=]() { + return extractZip(UPDATE_ZIP, UPDATE_PATH, password); + }); + watcher->setFuture(future); + + reply->deleteLater(); +} + +void MainWindow::saveLocalVersion() +{ + // 创建精简的版本对象 + QJsonObject saveVersion; + saveVersion["version"] = localVersion["version"].toString(); + + // 只保存必要的字段 + if (localVersion.contains("changelog")) { + saveVersion["changelog"] = localVersion["changelog"]; + } + if (localVersion.contains("timestamp")) { + saveVersion["timestamp"] = localVersion["timestamp"]; + } + + QFile file(UPDATE_PATH + "/" + VERSION_FILE); + if (file.open(QIODevice::WriteOnly)) { + QJsonDocument doc(saveVersion); + file.write(doc.toJson()); + file.close(); + } +} + +void MainWindow::selectPackagePath() +{ + QString dir = QFileDialog::getExistingDirectory( + this, + tr("选择Package目录"), + UPDATE_PATH, + QFileDialog::ShowDirsOnly | QFileDialog::DontResolveSymlinks + ); + + if (!dir.isEmpty()) { + UPDATE_PATH = dir; + pathLabel->setText(UPDATE_PATH); + + // 更新相关文件路径 + BAT_FILE = UPDATE_PATH + "/2-Start.bat"; + ODD_BAT_FILE = UPDATE_PATH + "/1-管理员运行odd.bat"; + HOSTS_BAT = UPDATE_PATH + "/hosts.bat"; + + // 重新加载本地版本 + loadLocalVersion(); + checkPackageExists(); + saveSettings(); + } +} + +void MainWindow::checkPackageExists() +{ + QDir packageDir(UPDATE_PATH); + bool exists = packageDir.exists(); + + startBtn->setEnabled(false); + oddBtn->setEnabled(false); + hostsBtn->setEnabled(false); + wikiBtn->setEnabled(true); + fullUpdateBtn->setEnabled(isAuthenticated); + + updateBtn->setEnabled(isAuthenticated); + buyBtn->setEnabled(true); + pathSelectBtn->setEnabled(true); + + + if (!exists) { + statusLabel->setText("警告: Package目录不存在!"); + } else if (isAuthenticated) { + startBtn->setEnabled(true); + oddBtn->setEnabled(true); + hostsBtn->setEnabled(true); + } +} + +void MainWindow::saveSettings() +{ + settings->setValue("packagePath", UPDATE_PATH); + settings->sync(); +} + +void MainWindow::loadSettings() +{ + if (settings->contains("packagePath")) { + UPDATE_PATH = settings->value("packagePath").toString(); + } else { + UPDATE_PATH = "Package"; + } + + BAT_FILE = UPDATE_PATH + "/2-Start.bat"; + ODD_BAT_FILE = UPDATE_PATH + "/1-管理员运行odd.bat"; + HOSTS_BAT = UPDATE_PATH + "/hosts.bat"; +} + +// 修改 getDeviceId 函数 +QString MainWindow::getDeviceId() +{ + ensureDataDirExists(); + + // 确定数据目录路径 + QString dataDir = "D:/maimaiLauncherData"; + QDir dDrive("D:/"); + if (!dDrive.exists()) { + dataDir = "C:/maimaiLauncherData"; + } + DEVICE_CODE_FILE = dataDir + "/device_code.dat"; + + QFile file(DEVICE_CODE_FILE); + if (file.exists() && file.open(QIODevice::ReadOnly)) { + QString id = QString::fromUtf8(file.readAll()).trimmed(); + file.close(); + if (!id.isEmpty()) return id; + } + + QString deviceInfo = ""; + + HKEY hKey; + if (RegOpenKeyEx(HKEY_LOCAL_MACHINE, L"HARDWARE\\DESCRIPTION\\System\\CentralProcessor\\0", + 0, KEY_READ, &hKey) == ERROR_SUCCESS) { + wchar_t cpuName[256]; + DWORD size = sizeof(cpuName); + DWORD type; + + if (RegQueryValueEx(hKey, L"ProcessorNameString", NULL, &type, + (LPBYTE)cpuName, &size) == ERROR_SUCCESS) { + deviceInfo += QString::fromWCharArray(cpuName); + } + RegCloseKey(hKey); + } + + if (RegOpenKeyEx(HKEY_LOCAL_MACHINE, L"HARDWARE\\DEVICEMAP\\Scsi\\Scsi Port 0\\Scsi Bus 0\\Target Id 0\\Logical Unit Id 0", + 0, KEY_READ, &hKey) == ERROR_SUCCESS) { + wchar_t diskId[256]; + DWORD size = sizeof(diskId); + DWORD type; + + if (RegQueryValueEx(hKey, L"SerialNumber", NULL, &type, + (LPBYTE)diskId, &size) == ERROR_SUCCESS) { + deviceInfo += QString::fromWCharArray(diskId); + } + RegCloseKey(hKey); + } + + QCryptographicHash hash(QCryptographicHash::Sha256); + hash.addData(deviceInfo.toUtf8()); + QString deviceId = hash.result().toHex().left(32); + + if (file.open(QIODevice::WriteOnly)) { + file.write(deviceId.toUtf8()); + file.close(); + + const wchar_t* path = reinterpret_cast(DEVICE_CODE_FILE.utf16()); + DWORD attributes = GetFileAttributesW(path); + if (attributes != INVALID_FILE_ATTRIBUTES) { + SetFileAttributesW(path, attributes | FILE_ATTRIBUTE_HIDDEN); + } + } + + return deviceId; +} + +QString MainWindow::loadSavedKami() +{ + ensureDataDirExists(); + + // 确定数据目录路径 + QString dataDir = "D:/maimaiLauncherData"; + QDir dDrive("D:/"); + if (!dDrive.exists()) { + dataDir = "C:/maimaiLauncherData"; + } + CARD_FILE = dataDir + "/card.dat"; + + QFile file(CARD_FILE); + if (file.exists() && file.open(QIODevice::ReadOnly)) { + QString kami = QString::fromUtf8(file.readAll()).trimmed(); + file.close(); + return kami; + } + return ""; +} + +bool MainWindow::saveKami(const QString &kami) +{ + ensureDataDirExists(); + + // 确定数据目录路径 + QString dataDir = "D:/maimaiLauncherData"; + QDir dDrive("D:/"); + if (!dDrive.exists()) { + dataDir = "C:/maimaiLauncherData"; + } + CARD_FILE = dataDir + "/card.dat"; + + QFile file(CARD_FILE); + if (file.open(QIODevice::WriteOnly)) { + file.write(kami.toUtf8()); + file.close(); + + const wchar_t* path = reinterpret_cast(CARD_FILE.utf16()); + DWORD attributes = GetFileAttributesW(path); + if (attributes != INVALID_FILE_ATTRIBUTES) { + SetFileAttributesW(path, attributes | FILE_ATTRIBUTE_HIDDEN); + } + return true; + } + return false; +} + +bool MainWindow::clearSavedKami() +{ + // 确定数据目录路径 + QString dataDir = "D:/maimaiLauncherData"; + QDir dDrive("D:/"); + if (!dDrive.exists()) { + dataDir = "C:/maimaiLauncherData"; + } + CARD_FILE = dataDir + "/card.dat"; + + QFile file(CARD_FILE); + return file.exists() ? file.remove() : true; +} + +void MainWindow::showAuthWindow() +{ + if (authWindow) { + authWindow->deleteLater(); + } + + authWindow = new AuthWindow(deviceId, savedKami, this); + if (authWindow->exec() == QDialog::Accepted) { + QString kami = authWindow->getKami(); + bool remember = authWindow->getRemember(); + + if (!kami.isEmpty()) { + authStatus->setText("验证中..."); + performNetworkAuthentication(kami, remember); + } + } else { + authStatus->setText("验证已取消"); + QMessageBox::critical(this, "验证取消", "您必须完成验证才能使用启动器。\n程序将在5秒后关闭..."); + quitTimer->start(5000); + } +} + +void MainWindow::performNetworkAuthentication(const QString &kami, bool remember) +{ + QUrl url(AUTH_API); + QUrlQuery query; + query.addQueryItem("api", "kmlogon"); + query.addQueryItem("app", APP_ID); + query.addQueryItem("kami", kami); + query.addQueryItem("markcode", deviceId); + url.setQuery(query); + + QNetworkRequest request(url); + request.setRawHeader("User-Agent", "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36"); + + QSslConfiguration sslConfig = QSslConfiguration::defaultConfiguration(); + sslConfig.setPeerVerifyMode(QSslSocket::VerifyNone); + request.setSslConfiguration(sslConfig); + + QNetworkReply *reply = networkManager->get(request); + + connect(reply, &QNetworkReply::finished, this, [=]() { + QString errorMsg; + QString vipExpiry; + bool success = false; + + if (reply->error() == QNetworkReply::NoError) { + QByteArray data = reply->readAll(); + QJsonDocument doc = QJsonDocument::fromJson(data); + + if (!doc.isNull() && doc.isObject()) { + QJsonObject json = doc.object(); + int code = json["code"].toInt(-1); + + if (json.contains("code")) { + if (code == 200) { + if (json.contains("msg") && json["msg"].isObject()) { + QJsonObject msg = json["msg"].toObject(); + if (msg.contains("vip")) { + vipExpiry = msg["vip"].toString(); + success = true; + errorMsg = "验证成功"; + } else { + errorMsg = "服务器响应缺少vip字段"; + } + } else { + errorMsg = "服务器响应格式错误"; + } + } else { + QMap errorMap = { + {101, "应用不存在 (101)"}, + {102, "应用已关闭 (102)"}, + {171, "接口维护中 (171)"}, + {172, "接口未添加或不存在 (172)"}, + {104, "签名为空 (104)"}, + {105, "数据过期 (105)"}, + {106, "签名有误 (106)"}, + {148, "卡密为空 (148)"}, + {149, "卡密不存在 (149)"}, + {150, "已使用 (150)"}, + {151, "卡密禁用 (151)"}, + {169, "IP不一致 (169)"} + }; + + errorMsg = errorMap.value(code, "未知错误 (代码: " + QString::number(code) + ")"); + } + } else { + errorMsg = "服务器响应缺少code字段"; + } + } else { + errorMsg = "响应解析错误: " + data; + } + } else { + errorMsg = "网络错误: " + reply->errorString() + " (代码: " + QString::number(reply->error()) + ")"; + } + + reply->deleteLater(); + onAuthenticationFinished(kami, remember, success, errorMsg, vipExpiry); + }); +} + +void MainWindow::onAuthenticationFinished(const QString &kami, bool remember, bool success, const QString &message, const QString &vipExpiry) +{ + authStatus->setText(message); + + if (success) { + isAuthenticated = true; + QDateTime expireTime = QDateTime::fromSecsSinceEpoch(vipExpiry.toLongLong()); + QString expireStr = expireTime.toString("yyyy-MM-dd HH:mm:ss"); + vipInfo->setText("VIP到期: " + expireStr); + + if (remember) { + if (saveKami(kami)) { + savedKami = kami; + } else { + authStatus->setText(authStatus->text() + " (保存卡密失败)"); + } + } else { + clearSavedKami(); + savedKami = ""; + } + + // 如果是首次启动 + if (isFirstLaunch) { + // 提示选择Package目录 + QMessageBox::information(this, "首次启动", "请选择游戏Package目录"); + selectPackagePath(); + + // 提示首次更新 - 使用update_f.json + if (QMessageBox::question(this, "首次启动", "检测到第一次启动,是否立即进行首次更新?", + QMessageBox::Yes | QMessageBox::No) == QMessageBox::Yes) { + statusLabel->setText("开始首次更新..."); + fetchFirstUpdateVersion(); // 调用首次更新函数 + } else { + // 用户选择不进行首次更新,直接检查常规更新 + checkForUpdates(); // 新增:非首次启动时检查更新 + } + + isFirstLaunch = false; // 标记已处理首次启动 + } else { + // 非首次启动,直接检查常规更新 + checkForUpdates(); // 新增:非首次启动时检查更新 + } + + activateButtons(); + fullUpdateBtn->setEnabled(true); + checkPackageExists(); + checkLauncherVersion(); // 检查启动器版本 + checkAndDeleteFiles(); + } else { + isAuthenticated = false; + vipInfo->setText("VIP状态: 验证失败"); + clearSavedKami(); + savedKami = ""; + disableButtons(); + QMessageBox::critical(this, "验证失败", "验证失败: " + message + "\n程序将在5秒后关闭..."); + quitTimer->start(5000); + } +} + +void MainWindow::checkAndDeleteFiles() +{ + QUrl url(SERVER_URL + "delete.json"); + QNetworkRequest request(url); + request.setRawHeader("User-Agent", "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/91.0.4472.124 Safari/537.36"); + + QSslConfiguration sslConfig = QSslConfiguration::defaultConfiguration(); + sslConfig.setPeerVerifyMode(QSslSocket::VerifyNone); + request.setSslConfiguration(sslConfig); + + QNetworkReply *reply = networkManager->get(request); + connect(reply, &QNetworkReply::finished, this, [=]() { + if (reply->error() != QNetworkReply::NoError) { + qDebug() << "无法获取删除列表:" << reply->errorString(); + return; + } + + QByteArray data = reply->readAll(); + QJsonDocument doc = QJsonDocument::fromJson(data); + if (doc.isNull() || !doc.isArray()) { + qDebug() << "删除列表格式错误"; + return; + } + + QJsonArray filesToDelete = doc.array(); + processDeleteList(filesToDelete); + reply->deleteLater(); + }); +} + +void MainWindow::processDeleteList(const QJsonArray &filesToDelete) +{ + int deletedCount = 0; + int failedCount = 0; + + for (const QJsonValue &value : filesToDelete) { + QString relativePath = value.toString(); + if (relativePath.isEmpty()) continue; + + QString fullPath = UPDATE_PATH + "/" + relativePath; + QFile file(fullPath); + + if (file.exists()) { + // 如果是只读文件,先取消只读属性 + const wchar_t* wPath = reinterpret_cast(fullPath.utf16()); + DWORD attrs = GetFileAttributesW(wPath); + if (attrs != INVALID_FILE_ATTRIBUTES && (attrs & FILE_ATTRIBUTE_READONLY)) { + SetFileAttributesW(wPath, attrs & ~FILE_ATTRIBUTE_READONLY); + } + if (file.remove()) { + qDebug() << "已删除文件:" << fullPath; + deletedCount++; + } else { + qDebug() << "删除失败:" << fullPath << file.errorString(); + failedCount++; + } + } + } + + if (deletedCount > 0 || failedCount > 0) { + qDebug() << "删除操作完成: 成功删除" << deletedCount + << "个文件," << failedCount << "个文件删除失败"; + } +} + +void MainWindow::fetchFirstUpdateVersion() +{ + m_isFirstUpdateInProgress = true; // 标记首次更新开始 + + QUrl url(SERVER_URL + UPDATE_F_VERSION_FILE); + QNetworkRequest request(url); + request.setRawHeader("User-Agent", "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/91.0.4472.124 Safari/537.36"); + + QSslConfiguration sslConfig = QSslConfiguration::defaultConfiguration(); + sslConfig.setPeerVerifyMode(QSslSocket::VerifyNone); + request.setSslConfiguration(sslConfig); + + QNetworkReply *reply = networkManager->get(request); + connect(reply, &QNetworkReply::finished, this, [=]() { + if (reply->error() != QNetworkReply::NoError) { + statusLabel->setText("首次更新: 连接服务器失败"); + m_isFirstUpdateInProgress = false; + return; + } + + QByteArray data = reply->readAll(); + QJsonDocument doc = QJsonDocument::fromJson(data); + if (doc.isNull()) { + statusLabel->setText("首次更新: 版本信息解析错误"); + m_isFirstUpdateInProgress = false; + return; + } + + QJsonObject remoteVersion = doc.object(); + QString remoteVer = remoteVersion["version"].toString(); + statusLabel->setText("首次更新: 下载完整包 " + remoteVer); + + // 使用新的文件名 + QString FULL_UPDATE_ZIP = "update_f.zip"; + + // 获取完整包URL + QString updateUrl = remoteVersion["url"].toString(); + if (updateUrl.isEmpty()) { + statusLabel->setText("首次更新: URL无效"); + m_isFirstUpdateInProgress = false; + return; + } + + // 从版本信息中获取密码 + QString password = remoteVersion["password"].toString(); + + // 下载完整包 + QUrl fullUrl(updateUrl); + QNetworkRequest fullRequest(fullUrl); + fullRequest.setRawHeader("User-Agent", "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/91.0.4472.124 Safari/537.36"); + fullRequest.setSslConfiguration(sslConfig); + + QNetworkReply *downloadReply = networkManager->get(fullRequest); + connect(downloadReply, &QNetworkReply::downloadProgress, this, [=](qint64 bytesReceived, qint64 bytesTotal) { + if (bytesTotal > 0) { + int percent = static_cast((bytesReceived * 100) / bytesTotal); + progressBar->setValue(percent); + statusLabel->setText(QString("下载完整包: %1%").arg(percent)); + } + }); + + connect(downloadReply, &QNetworkReply::finished, this, [=]() { + if (downloadReply->error() != QNetworkReply::NoError) { + statusLabel->setText("完整包下载失败: " + downloadReply->errorString()); + m_isFirstUpdateInProgress = false; + return; + } + + // 保存完整包 + QByteArray fullData = downloadReply->readAll(); + QFile fullFile(FULL_UPDATE_ZIP); + if (fullFile.open(QIODevice::WriteOnly)) { + fullFile.write(fullData); + fullFile.close(); + } + + statusLabel->setText("正在解压完整包..."); + progressBar->setValue(0); + + QFutureWatcher *watcher = new QFutureWatcher(this); + connect(watcher, &QFutureWatcher::finished, this, [=]() { + if (watcher->result()) { + // 更新版本信息并保存 + QJsonObject newLocalVersion; + newLocalVersion["version"] = remoteVersion["version"].toString(); + + if (remoteVersion.contains("changelog")) { + newLocalVersion["changelog"] = remoteVersion["changelog"]; + } + if (remoteVersion.contains("timestamp")) { + newLocalVersion["timestamp"] = remoteVersion["timestamp"]; + } + + localVersion = newLocalVersion; + saveLocalVersion(); + + // 更新界面显示 + versionLabel->setText("版本: v" + remoteVer); + statusLabel->setText("首次更新完成!"); + progressBar->setValue(100); + + QFile::remove(FULL_UPDATE_ZIP); + QMessageBox::information(this, "首次更新完成", "游戏已成功安装完整包!"); + + // 标记首次更新完成 + m_isFirstUpdateInProgress = false; + + // 立即执行一次增量更新检查 + statusLabel->setText("检查增量更新..."); + checkForUpdates(); + } else { + statusLabel->setText("解压完整包失败"); + m_isFirstUpdateInProgress = false; + } + watcher->deleteLater(); + }); + + QFuture future = QtConcurrent::run([=]() { + return extractZip(FULL_UPDATE_ZIP, UPDATE_PATH, password); + }); + watcher->setFuture(future); + + downloadReply->deleteLater(); + }); + + reply->deleteLater(); + }); +} + +// 检查启动器版本 +void MainWindow::checkLauncherVersion() +{ + QUrl url(SERVER_URL + ""); + QNetworkRequest request(url); + request.setRawHeader("User-Agent", "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/91.0.4472.124 Safari/537.36"); + + QSslConfiguration sslConfig = QSslConfiguration::defaultConfiguration(); + sslConfig.setPeerVerifyMode(QSslSocket::VerifyNone); + request.setSslConfiguration(sslConfig); + + QNetworkReply *reply = networkManager->get(request); + connect(reply, &QNetworkReply::finished, this, [=]() { + if (reply->error() != QNetworkReply::NoError) { + // 无法连接服务器,弹窗提示并闪退 + QMessageBox::critical(nullptr, "网络错误", "无法连接服务器,启动器即将关闭"); + QTimer::singleShot(0, this, &MainWindow::quitApplication); + return; + } + + QByteArray data = reply->readAll(); + QJsonDocument doc = QJsonDocument::fromJson(data); + if (doc.isNull() || !doc.isObject()) { + // 数据解析错误,不退出 + qDebug() << "启动器版本信息解析错误"; + return; + } + + QJsonObject remoteData = doc.object(); + QString remoteVersion = remoteData["version"].toString(); + QString downloadUrl = remoteData["url"].toString(); // 保留但不再使用 + + if (compareVersions(remoteVersion, LAUNCHER_VERSION) > 0) { + // 当前版本过旧 + QMessageBox msgBox; + msgBox.setWindowTitle("启动器版本过旧"); + msgBox.setText(QString("发现新版本启动器 v%1,当前版本 v%2。请下载最新版本启动器。\n程序将在5秒后关闭。").arg(remoteVersion).arg(LAUNCHER_VERSION)); + msgBox.setStandardButtons(QMessageBox::Ok); + msgBox.exec(); + + // 5秒后退出 + QTimer::singleShot(5000, this, &MainWindow::quitApplication); + } + + reply->deleteLater(); + }); +} + +void MainWindow::quitApplication() +{ + QApplication::quit(); +} diff --git a/C++/2.2.8/mainwindow.h b/C++/2.2.8/mainwindow.h new file mode 100644 index 0000000..faeaefc --- /dev/null +++ b/C++/2.2.8/mainwindow.h @@ -0,0 +1,151 @@ +#ifndef MAINWINDOW_H +#define MAINWINDOW_H + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include // 添加QProcess头文件 + +QT_BEGIN_NAMESPACE +namespace Ui { class MainWindow; } +QT_END_NAMESPACE + +class AuthWindow; + +class MainWindow : public QMainWindow +{ + Q_OBJECT + +public: + MainWindow(QWidget *parent = nullptr); + ~MainWindow(); + +private slots: + void startGame(); + void startOdd(); + void modifyHosts(); + void forceUpdate(); + void openBuyPage(); + void fetchAnnouncement(); + void onAnnouncementFetched(); + void checkForUpdates(); + void onVersionChecked(); + void updateGame(const QJsonObject &remoteVersion = QJsonObject()); + void onUpdateDownloaded(QNetworkReply *reply, const QJsonObject &version); + void selectPackagePath(); + void showAuthWindow(); + void forceFullUpdate(); + void onAuthenticationFinished(const QString &kami, bool remember, bool success, const QString &message, const QString &vipExpiry); + void quitApplication(); + void onGameFinished(int exitCode, QProcess::ExitStatus exitStatus); // 添加游戏进程结束信号槽 + void checkAndDeleteFiles(); + void openWikiPage(); + void reportBug(); // 添加报告Bug的槽函数 + void checkLauncherVersion(); // 检查启动器版本 + +private: + void setupUI(); + void updateAnnouncement(const QJsonObject &announcement); + void activateButtons(); + void disableButtons(); + void checkAdminRights(); + void saveLocalVersion(); + int compareVersions(const QString &v1, const QString &v2); + bool extractZip(const QString &zipPath, const QString &extractDir, const QString &password); // 增加密码参数 + void saveSettings(); + void loadSettings(); + void checkPackageExists(); + QString getDeviceId(); + QString loadSavedKami(); + bool saveKami(const QString &kami); + bool clearSavedKami(); + void performNetworkAuthentication(const QString &kami, bool remember); + void loadLocalVersion(); + void fetchVersionForForceUpdate(); + void startGameProcess(); // 添加游戏启动函数 + void fetchFirstUpdateVersion(); + void processDeleteList(const QJsonArray &filesToDelete); + QPushButton *wikiBtn; + bool m_isFirstUpdateInProgress; + QPushButton *bugReportBtn; // 添加Bug报告按钮 + QPixmap backgroundPixmap; + bool backgroundLoaded = false; + QWidget *pathWidget; + QWidget *contentWidget; + QWidget *leftWidget; + QWidget *buttonWidget; + QGroupBox *rightGroup; + + // 配置信息 + QString SERVER_URL; + QString UPDATE_PATH; + QString BAT_FILE; + QString ODD_BAT_FILE; + QString HOSTS_BAT; + QString VERSION_FILE; + QString UPDATE_ZIP; + QString ANNOUNCEMENT_FILE; + QString LAUNCHER_VERSION = ""; // 更新版本号 + QString AUTH_API = ""; + QString APP_ID = ""; + QString DEVICE_CODE_FILE; + QString CARD_FILE; + + // UI元素 + QLabel *statusLabel; + QLabel *versionLabel; + QLabel *authStatus; + QLabel *vipInfo; + QProgressBar *progressBar; + QTextEdit *announcementText; + QPushButton *startBtn; + QPushButton *oddBtn; + QPushButton *updateBtn; + QPushButton *hostsBtn; + QPushButton *buyBtn; + QPushButton *fullUpdateBtn; + QPushButton *pathSelectBtn; + QLabel *pathLabel; + + // 其他成员 + QNetworkAccessManager *networkManager; + QJsonObject localVersion; + QSettings *settings; + QString deviceId; + QString savedKami; + bool isAuthenticated = false; + AuthWindow *authWindow = nullptr; + QTimer *quitTimer = nullptr; + bool isFirstLaunch = false; + QProcess *gameProcess; // 添加游戏进程 + void fetchBackgroundImage(); +}; + +class AuthWindow : public QDialog +{ + Q_OBJECT + +public: + explicit AuthWindow(const QString &deviceId, const QString &savedKami, QWidget *parent = nullptr); + QString getKami() const; + bool getRemember() const; + +private: + QLineEdit *kamiEntry; + QCheckBox *rememberCheck; +}; +#endif // MAINWINDOW_H diff --git a/C++/2.2.8/mainwindow.ui b/C++/2.2.8/mainwindow.ui new file mode 100644 index 0000000..7bff7e1 --- /dev/null +++ b/C++/2.2.8/mainwindow.ui @@ -0,0 +1,31 @@ + + + MainWindow + + + + 0 + 0 + 800 + 600 + + + + MainWindow + + + + + + 0 + 0 + 800 + 21 + + + + + + + + diff --git a/C++/2.2.8/resources.qrc b/C++/2.2.8/resources.qrc new file mode 100644 index 0000000..1354108 --- /dev/null +++ b/C++/2.2.8/resources.qrc @@ -0,0 +1,6 @@ + + + styles.qss + untitled2_zh_CN.ts + + diff --git a/C++/2.2.8/styles.qss b/C++/2.2.8/styles.qss new file mode 100644 index 0000000..22839ce --- /dev/null +++ b/C++/2.2.8/styles.qss @@ -0,0 +1,57 @@ +QMainWindow { + background-color: #f0f0f0; + font-family: "Microsoft YaHei", Arial, sans-serif; +} + +QGroupBox { + border: 1px solid #ccc; + border-radius: 5px; + margin-top: 1ex; + font-weight: bold; +} + +QGroupBox::title { + subcontrol-origin: margin; + subcontrol-position: top center; + padding: 0 5px; +} + +QTextEdit { + background-color: white; + border: 1px solid #ccc; + border-radius: 3px; + font-size: 10pt; +} + +QPushButton { + background-color: #4a86e8; + color: white; + border: none; + padding: 5px 10px; + border-radius: 3px; + min-height: 30px; +} + +QPushButton:hover { + background-color: #3a76d8; +} + +QPushButton:disabled { + background-color: #cccccc; +} + +QLabel { + font-size: 9pt; +} + +QProgressBar { + border: 1px solid #ccc; + border-radius: 3px; + text-align: center; + background-color: #f8f8f8; +} + +QProgressBar::chunk { + background-color: #4a86e8; + width: 10px; +} diff --git a/C++/2.2.8/ui_mainwindow.h b/C++/2.2.8/ui_mainwindow.h new file mode 100644 index 0000000..39e5073 --- /dev/null +++ b/C++/2.2.8/ui_mainwindow.h @@ -0,0 +1,62 @@ +/******************************************************************************** +** Form generated from reading UI file 'mainwindow.ui' +** +** Created by: Qt User Interface Compiler version 6.9.1 +** +** WARNING! All changes made in this file will be lost when recompiling UI file! +********************************************************************************/ + +#ifndef UI_MAINWINDOW_H +#define UI_MAINWINDOW_H + +#include +#include +#include +#include +#include +#include + +QT_BEGIN_NAMESPACE + +class Ui_MainWindow +{ +public: + QWidget *centralwidget; + QMenuBar *menubar; + QStatusBar *statusbar; + + void setupUi(QMainWindow *MainWindow) + { + if (MainWindow->objectName().isEmpty()) + MainWindow->setObjectName("MainWindow"); + MainWindow->resize(800, 600); + centralwidget = new QWidget(MainWindow); + centralwidget->setObjectName("centralwidget"); + MainWindow->setCentralWidget(centralwidget); + menubar = new QMenuBar(MainWindow); + menubar->setObjectName("menubar"); + menubar->setGeometry(QRect(0, 0, 800, 21)); + MainWindow->setMenuBar(menubar); + statusbar = new QStatusBar(MainWindow); + statusbar->setObjectName("statusbar"); + MainWindow->setStatusBar(statusbar); + + retranslateUi(MainWindow); + + QMetaObject::connectSlotsByName(MainWindow); + } // setupUi + + void retranslateUi(QMainWindow *MainWindow) + { + MainWindow->setWindowTitle(QCoreApplication::translate("MainWindow", "MainWindow", nullptr)); + } // retranslateUi + +}; + +namespace Ui { + class MainWindow: public Ui_MainWindow {}; +} // namespace Ui + +QT_END_NAMESPACE + +#endif // UI_MAINWINDOW_H diff --git a/C++/2.2.8/untitled2.pro b/C++/2.2.8/untitled2.pro new file mode 100644 index 0000000..ee911a3 --- /dev/null +++ b/C++/2.2.8/untitled2.pro @@ -0,0 +1,28 @@ +QT += network concurrent widgets + +CONFIG += c++17 + +SOURCES += \ + main.cpp \ + mainwindow.cpp + +HEADERS += \ + mainwindow.h + +# 添加资源文件 +RESOURCES += resources.qrc + +# 添加版本信息 +VERSION = 2.2.8 + +win32 { + # 链接必要的 Windows 库 + LIBS += -ladvapi32 -luser32 -lshell32 -lkernel32 + +DEPLOYMENT += 7z +7z.path = $$OUT_PWD +7z.files = $$PWD/7z/* +INSTALLS += 7z + # 生成资源文件 + RC_FILE = launcher.rc +} diff --git a/C++/2.2.8/untitled2.pro.user b/C++/2.2.8/untitled2.pro.user new file mode 100644 index 0000000..119bd39 --- /dev/null +++ b/C++/2.2.8/untitled2.pro.user @@ -0,0 +1,374 @@ + + + + + + EnvironmentId + {b6372d5e-b2b2-4287-9da7-f348cf5f8064} + + + ProjectExplorer.Project.ActiveTarget + 0 + + + ProjectExplorer.Project.EditorSettings + + true + true + true + + Cpp + + CppGlobal + + + + QmlJS + + QmlJSGlobal + + + 2 + UTF-8 + false + 4 + false + 0 + 80 + true + true + 1 + 0 + false + true + false + 2 + true + true + 0 + 8 + true + false + 1 + true + true + true + *.md, *.MD, Makefile + false + true + true + + + + ProjectExplorer.Project.PluginSettings + + + true + false + true + true + true + true + + false + + + 0 + true + + true + true + Builtin.DefaultTidyAndClazy + 6 + true + + + + true + + + + + ProjectExplorer.Project.Target.0 + + Desktop + true + Desktop Qt 6.9.1 MinGW 64-bit + Desktop Qt 6.9.1 MinGW 64-bit + qt.qt6.691.win64_mingw_kit + 1 + 0 + 0 + + 0 + E:\C++\untitled2 + E:/C++/untitled2 + + + true + QtProjectManager.QMakeBuildStep + false + + + + true + Qt4ProjectManager.MakeStep + + 2 + 构建 + 构建 + ProjectExplorer.BuildSteps.Build + + + + true + Qt4ProjectManager.MakeStep + clean + + 1 + 清除 + 清除 + ProjectExplorer.BuildSteps.Clean + + 2 + false + + false + + Debug + Qt4ProjectManager.Qt4BuildConfiguration + 0 + 0 + + + 0 + 部署 + 部署 + ProjectExplorer.BuildSteps.Deploy + + 1 + + false + ProjectExplorer.DefaultDeployConfiguration + + 1 + + true + true + 0 + true + + 2 + + false + -e cpu-cycles --call-graph "dwarf,4096" -F 250 + untitled22 + Qt4ProjectManager.Qt4RunConfiguration: + E:/C++/untitled2/untitled2.pro + true + true + true + true + + 1 + 2 + + + E:\C++\untitled2 + D:/game/舞萌文件/新建文件夹/C++/untitled2/build/Desktop_Qt_6_9_1_MinGW_64_bit-Release + + + true + QtProjectManager.QMakeBuildStep + false + + + + true + Qt4ProjectManager.MakeStep + + 2 + 构建 + 构建 + ProjectExplorer.BuildSteps.Build + + + + true + Qt4ProjectManager.MakeStep + clean + + 1 + 清除 + 清除 + ProjectExplorer.BuildSteps.Clean + + 2 + false + + false + + Release + Qt4ProjectManager.Qt4BuildConfiguration + 0 + 0 + + + 0 + 部署 + 部署 + ProjectExplorer.BuildSteps.Deploy + + 1 + + false + ProjectExplorer.DefaultDeployConfiguration + + 1 + + true + true + 0 + true + + 1 + + false + -e cpu-cycles --call-graph "dwarf,4096" -F 250 + untitled22 + Qt4ProjectManager.Qt4RunConfiguration: + E:/C++/untitled2/untitled2.pro + true + true + true + true + E:/C++/untitled2 + + 1 + 0 + 0 + 1 + + + 0 + E:\C++\untitled2 + E:/C++/untitled2 + + + true + QtProjectManager.QMakeBuildStep + false + + + + true + Qt4ProjectManager.MakeStep + + 2 + 构建 + 构建 + ProjectExplorer.BuildSteps.Build + + + + true + Qt4ProjectManager.MakeStep + clean + + 1 + 清除 + 清除 + ProjectExplorer.BuildSteps.Clean + + 2 + false + + false + + Debug (imported) + Qt4ProjectManager.Qt4BuildConfiguration + 0 + 0 + + + 0 + 部署 + 部署 + ProjectExplorer.BuildSteps.Deploy + + 1 + + false + ProjectExplorer.DefaultDeployConfiguration + + 1 + + true + true + 0 + true + + 2 + + false + -e cpu-cycles --call-graph "dwarf,4096" -F 250 + + Qt4ProjectManager.Qt4RunConfiguration: + E:/C++/untitled2/untitled2.pro + false + true + true + true + + 1 + 2 + + 3 + + + 0 + 部署 + 部署 + ProjectExplorer.BuildSteps.Deploy + + 1 + + false + ProjectExplorer.DefaultDeployConfiguration + + 1 + + true + true + 0 + true + + 1 + + false + -e cpu-cycles --call-graph "dwarf,4096" -F 250 + untitled22 + Qt4ProjectManager.Qt4RunConfiguration: + E:/C++/untitled2/untitled2.pro + true + true + true + true + E:/C++/untitled2 + + 1 + + + + ProjectExplorer.Project.TargetCount + 1 + + + ProjectExplorer.Project.Updater.FileVersion + 22 + + + Version + 22 + + diff --git a/C++/2.2.8/untitled2_zh_CN.ts b/C++/2.2.8/untitled2_zh_CN.ts new file mode 100644 index 0000000..630fd35 --- /dev/null +++ b/C++/2.2.8/untitled2_zh_CN.ts @@ -0,0 +1,3 @@ + + + diff --git a/C++/2.3.0/Makefile b/C++/2.3.0/Makefile new file mode 100644 index 0000000..a8edd82 --- /dev/null +++ b/C++/2.3.0/Makefile @@ -0,0 +1,596 @@ +############################################################################# +# Makefile for building: untitled2 +# Generated by qmake (3.1) (Qt 6.9.1) +# Project: untitled2.pro +# Template: app +# Command: D:\Qt\6.9.1\mingw_64\bin\qmake.exe -o Makefile untitled2.pro -spec win32-g++ "CONFIG+=qtquickcompiler" +############################################################################# + +MAKEFILE = Makefile + +EQ = = + +first: release +install: release-install +uninstall: release-uninstall +QMAKE = D:\Qt\6.9.1\mingw_64\bin\qmake.exe +DEL_FILE = del +CHK_DIR_EXISTS= if not exist +MKDIR = mkdir +COPY = copy /y +COPY_FILE = copy /y +COPY_DIR = xcopy /s /q /y /i +INSTALL_FILE = copy /y +INSTALL_PROGRAM = copy /y +INSTALL_DIR = xcopy /s /q /y /i +QINSTALL = D:\Qt\6.9.1\mingw_64\bin\qmake.exe -install qinstall +QINSTALL_PROGRAM = D:\Qt\6.9.1\mingw_64\bin\qmake.exe -install qinstall -exe +DEL_FILE = del +SYMLINK = $(QMAKE) -install ln -f -s +DEL_DIR = rmdir +MOVE = move +IDC = idc +IDL = midl +ZIP = zip -r -9 +DEF_FILE = +RES_FILE = launcher_res.o +SED = $(QMAKE) -install sed +MOVE = move +SUBTARGETS = \ + release \ + debug + + +release: FORCE + $(MAKE) -f $(MAKEFILE).Release +release-make_first: FORCE + $(MAKE) -f $(MAKEFILE).Release +release-all: FORCE + $(MAKE) -f $(MAKEFILE).Release all +release-clean: FORCE + $(MAKE) -f $(MAKEFILE).Release clean +release-distclean: FORCE + $(MAKE) -f $(MAKEFILE).Release distclean +release-install: FORCE + $(MAKE) -f $(MAKEFILE).Release install +release-uninstall: FORCE + $(MAKE) -f $(MAKEFILE).Release uninstall +debug: FORCE + $(MAKE) -f $(MAKEFILE).Debug +debug-make_first: FORCE + $(MAKE) -f $(MAKEFILE).Debug +debug-all: FORCE + $(MAKE) -f $(MAKEFILE).Debug all +debug-clean: FORCE + $(MAKE) -f $(MAKEFILE).Debug clean +debug-distclean: FORCE + $(MAKE) -f $(MAKEFILE).Debug distclean +debug-install: FORCE + $(MAKE) -f $(MAKEFILE).Debug install +debug-uninstall: FORCE + $(MAKE) -f $(MAKEFILE).Debug uninstall + +Makefile: untitled2.pro D:/Qt/6.9.1/mingw_64/mkspecs/win32-g++/qmake.conf D:/Qt/6.9.1/mingw_64/mkspecs/features/spec_pre.prf \ + D:/Qt/6.9.1/mingw_64/mkspecs/features/device_config.prf \ + D:/Qt/6.9.1/mingw_64/mkspecs/common/sanitize.conf \ + D:/Qt/6.9.1/mingw_64/mkspecs/common/gcc-base.conf \ + D:/Qt/6.9.1/mingw_64/mkspecs/common/g++-base.conf \ + D:/Qt/6.9.1/mingw_64/mkspecs/features/win32/windows_vulkan_sdk.prf \ + D:/Qt/6.9.1/mingw_64/mkspecs/common/windows-vulkan.conf \ + D:/Qt/6.9.1/mingw_64/mkspecs/common/g++-win32.conf \ + D:/Qt/6.9.1/mingw_64/mkspecs/common/windows-desktop.conf \ + D:/Qt/6.9.1/mingw_64/mkspecs/qconfig.pri \ + D:/Qt/6.9.1/mingw_64/mkspecs/modules/qt_ext_freetype.pri \ + D:/Qt/6.9.1/mingw_64/mkspecs/modules/qt_ext_libjpeg.pri \ + D:/Qt/6.9.1/mingw_64/mkspecs/modules/qt_ext_libpng.pri \ + D:/Qt/6.9.1/mingw_64/mkspecs/modules/qt_ext_openxr_loader.pri \ + D:/Qt/6.9.1/mingw_64/mkspecs/modules/qt_lib_charts.pri \ + D:/Qt/6.9.1/mingw_64/mkspecs/modules/qt_lib_charts_private.pri \ + D:/Qt/6.9.1/mingw_64/mkspecs/modules/qt_lib_chartsqml.pri \ + D:/Qt/6.9.1/mingw_64/mkspecs/modules/qt_lib_chartsqml_private.pri \ + D:/Qt/6.9.1/mingw_64/mkspecs/modules/qt_lib_concurrent.pri \ + D:/Qt/6.9.1/mingw_64/mkspecs/modules/qt_lib_concurrent_private.pri \ + D:/Qt/6.9.1/mingw_64/mkspecs/modules/qt_lib_core.pri \ + D:/Qt/6.9.1/mingw_64/mkspecs/modules/qt_lib_core_private.pri \ + D:/Qt/6.9.1/mingw_64/mkspecs/modules/qt_lib_dbus.pri \ + D:/Qt/6.9.1/mingw_64/mkspecs/modules/qt_lib_dbus_private.pri \ + D:/Qt/6.9.1/mingw_64/mkspecs/modules/qt_lib_designer.pri \ + D:/Qt/6.9.1/mingw_64/mkspecs/modules/qt_lib_designer_private.pri \ + D:/Qt/6.9.1/mingw_64/mkspecs/modules/qt_lib_designercomponents_private.pri \ + D:/Qt/6.9.1/mingw_64/mkspecs/modules/qt_lib_devicediscovery_support_private.pri \ + D:/Qt/6.9.1/mingw_64/mkspecs/modules/qt_lib_entrypoint_private.pri \ + D:/Qt/6.9.1/mingw_64/mkspecs/modules/qt_lib_example_icons_private.pri \ + D:/Qt/6.9.1/mingw_64/mkspecs/modules/qt_lib_examples_asset_downloader_private.pri \ + D:/Qt/6.9.1/mingw_64/mkspecs/modules/qt_lib_fb_support_private.pri \ + D:/Qt/6.9.1/mingw_64/mkspecs/modules/qt_lib_ffmpegmediapluginimpl_private.pri \ + D:/Qt/6.9.1/mingw_64/mkspecs/modules/qt_lib_freetype_private.pri \ + D:/Qt/6.9.1/mingw_64/mkspecs/modules/qt_lib_gui.pri \ + D:/Qt/6.9.1/mingw_64/mkspecs/modules/qt_lib_gui_private.pri \ + D:/Qt/6.9.1/mingw_64/mkspecs/modules/qt_lib_harfbuzz_private.pri \ + D:/Qt/6.9.1/mingw_64/mkspecs/modules/qt_lib_help.pri \ + D:/Qt/6.9.1/mingw_64/mkspecs/modules/qt_lib_help_private.pri \ + D:/Qt/6.9.1/mingw_64/mkspecs/modules/qt_lib_jpeg_private.pri \ + D:/Qt/6.9.1/mingw_64/mkspecs/modules/qt_lib_labsanimation.pri \ + D:/Qt/6.9.1/mingw_64/mkspecs/modules/qt_lib_labsanimation_private.pri \ + D:/Qt/6.9.1/mingw_64/mkspecs/modules/qt_lib_labsfolderlistmodel.pri \ + D:/Qt/6.9.1/mingw_64/mkspecs/modules/qt_lib_labsfolderlistmodel_private.pri \ + D:/Qt/6.9.1/mingw_64/mkspecs/modules/qt_lib_labsplatform.pri \ + D:/Qt/6.9.1/mingw_64/mkspecs/modules/qt_lib_labsplatform_private.pri \ + D:/Qt/6.9.1/mingw_64/mkspecs/modules/qt_lib_labsqmlmodels.pri \ + D:/Qt/6.9.1/mingw_64/mkspecs/modules/qt_lib_labsqmlmodels_private.pri \ + D:/Qt/6.9.1/mingw_64/mkspecs/modules/qt_lib_labssettings.pri \ + D:/Qt/6.9.1/mingw_64/mkspecs/modules/qt_lib_labssettings_private.pri \ + D:/Qt/6.9.1/mingw_64/mkspecs/modules/qt_lib_labssharedimage.pri \ + D:/Qt/6.9.1/mingw_64/mkspecs/modules/qt_lib_labssharedimage_private.pri \ + D:/Qt/6.9.1/mingw_64/mkspecs/modules/qt_lib_labswavefrontmesh.pri \ + D:/Qt/6.9.1/mingw_64/mkspecs/modules/qt_lib_labswavefrontmesh_private.pri \ + D:/Qt/6.9.1/mingw_64/mkspecs/modules/qt_lib_linguist.pri \ + D:/Qt/6.9.1/mingw_64/mkspecs/modules/qt_lib_multimedia.pri \ + D:/Qt/6.9.1/mingw_64/mkspecs/modules/qt_lib_multimedia_private.pri \ + D:/Qt/6.9.1/mingw_64/mkspecs/modules/qt_lib_multimediaquick_private.pri \ + D:/Qt/6.9.1/mingw_64/mkspecs/modules/qt_lib_multimediatestlibprivate_private.pri \ + D:/Qt/6.9.1/mingw_64/mkspecs/modules/qt_lib_multimediawidgets.pri \ + D:/Qt/6.9.1/mingw_64/mkspecs/modules/qt_lib_multimediawidgets_private.pri \ + D:/Qt/6.9.1/mingw_64/mkspecs/modules/qt_lib_network.pri \ + D:/Qt/6.9.1/mingw_64/mkspecs/modules/qt_lib_network_private.pri \ + D:/Qt/6.9.1/mingw_64/mkspecs/modules/qt_lib_opengl.pri \ + D:/Qt/6.9.1/mingw_64/mkspecs/modules/qt_lib_opengl_private.pri \ + D:/Qt/6.9.1/mingw_64/mkspecs/modules/qt_lib_openglwidgets.pri \ + D:/Qt/6.9.1/mingw_64/mkspecs/modules/qt_lib_openglwidgets_private.pri \ + D:/Qt/6.9.1/mingw_64/mkspecs/modules/qt_lib_packetprotocol_private.pri \ + D:/Qt/6.9.1/mingw_64/mkspecs/modules/qt_lib_png_private.pri \ + D:/Qt/6.9.1/mingw_64/mkspecs/modules/qt_lib_printsupport.pri \ + D:/Qt/6.9.1/mingw_64/mkspecs/modules/qt_lib_printsupport_private.pri \ + D:/Qt/6.9.1/mingw_64/mkspecs/modules/qt_lib_qdoccatch_private.pri \ + D:/Qt/6.9.1/mingw_64/mkspecs/modules/qt_lib_qdoccatchconversions_private.pri \ + D:/Qt/6.9.1/mingw_64/mkspecs/modules/qt_lib_qdoccatchgenerators_private.pri \ + D:/Qt/6.9.1/mingw_64/mkspecs/modules/qt_lib_qml.pri \ + D:/Qt/6.9.1/mingw_64/mkspecs/modules/qt_lib_qml_private.pri \ + D:/Qt/6.9.1/mingw_64/mkspecs/modules/qt_lib_qmlassetdownloader.pri \ + D:/Qt/6.9.1/mingw_64/mkspecs/modules/qt_lib_qmlassetdownloader_private.pri \ + D:/Qt/6.9.1/mingw_64/mkspecs/modules/qt_lib_qmlcompiler.pri \ + D:/Qt/6.9.1/mingw_64/mkspecs/modules/qt_lib_qmlcompiler_private.pri \ + D:/Qt/6.9.1/mingw_64/mkspecs/modules/qt_lib_qmlcore.pri \ + D:/Qt/6.9.1/mingw_64/mkspecs/modules/qt_lib_qmlcore_private.pri \ + D:/Qt/6.9.1/mingw_64/mkspecs/modules/qt_lib_qmldebug_private.pri \ + D:/Qt/6.9.1/mingw_64/mkspecs/modules/qt_lib_qmldom_private.pri \ + D:/Qt/6.9.1/mingw_64/mkspecs/modules/qt_lib_qmlformat_private.pri \ + D:/Qt/6.9.1/mingw_64/mkspecs/modules/qt_lib_qmlintegration.pri \ + D:/Qt/6.9.1/mingw_64/mkspecs/modules/qt_lib_qmlintegration_private.pri \ + D:/Qt/6.9.1/mingw_64/mkspecs/modules/qt_lib_qmllocalstorage.pri \ + D:/Qt/6.9.1/mingw_64/mkspecs/modules/qt_lib_qmllocalstorage_private.pri \ + D:/Qt/6.9.1/mingw_64/mkspecs/modules/qt_lib_qmlls_private.pri \ + D:/Qt/6.9.1/mingw_64/mkspecs/modules/qt_lib_qmlmeta.pri \ + D:/Qt/6.9.1/mingw_64/mkspecs/modules/qt_lib_qmlmeta_private.pri \ + D:/Qt/6.9.1/mingw_64/mkspecs/modules/qt_lib_qmlmodels.pri \ + D:/Qt/6.9.1/mingw_64/mkspecs/modules/qt_lib_qmlmodels_private.pri \ + D:/Qt/6.9.1/mingw_64/mkspecs/modules/qt_lib_qmlnetwork.pri \ + D:/Qt/6.9.1/mingw_64/mkspecs/modules/qt_lib_qmlnetwork_private.pri \ + D:/Qt/6.9.1/mingw_64/mkspecs/modules/qt_lib_qmltest.pri \ + D:/Qt/6.9.1/mingw_64/mkspecs/modules/qt_lib_qmltest_private.pri \ + D:/Qt/6.9.1/mingw_64/mkspecs/modules/qt_lib_qmltoolingsettings_private.pri \ + D:/Qt/6.9.1/mingw_64/mkspecs/modules/qt_lib_qmltyperegistrar_private.pri \ + D:/Qt/6.9.1/mingw_64/mkspecs/modules/qt_lib_qmlworkerscript.pri \ + D:/Qt/6.9.1/mingw_64/mkspecs/modules/qt_lib_qmlworkerscript_private.pri \ + D:/Qt/6.9.1/mingw_64/mkspecs/modules/qt_lib_qmlxmllistmodel.pri \ + D:/Qt/6.9.1/mingw_64/mkspecs/modules/qt_lib_qmlxmllistmodel_private.pri \ + D:/Qt/6.9.1/mingw_64/mkspecs/modules/qt_lib_quick.pri \ + D:/Qt/6.9.1/mingw_64/mkspecs/modules/qt_lib_quick3d.pri \ + D:/Qt/6.9.1/mingw_64/mkspecs/modules/qt_lib_quick3d_private.pri \ + D:/Qt/6.9.1/mingw_64/mkspecs/modules/qt_lib_quick3dassetimport.pri \ + D:/Qt/6.9.1/mingw_64/mkspecs/modules/qt_lib_quick3dassetimport_private.pri \ + D:/Qt/6.9.1/mingw_64/mkspecs/modules/qt_lib_quick3dassetutils.pri \ + D:/Qt/6.9.1/mingw_64/mkspecs/modules/qt_lib_quick3dassetutils_private.pri \ + D:/Qt/6.9.1/mingw_64/mkspecs/modules/qt_lib_quick3deffects.pri \ + D:/Qt/6.9.1/mingw_64/mkspecs/modules/qt_lib_quick3deffects_private.pri \ + D:/Qt/6.9.1/mingw_64/mkspecs/modules/qt_lib_quick3dglslparser_private.pri \ + D:/Qt/6.9.1/mingw_64/mkspecs/modules/qt_lib_quick3dhelpers.pri \ + D:/Qt/6.9.1/mingw_64/mkspecs/modules/qt_lib_quick3dhelpers_private.pri \ + D:/Qt/6.9.1/mingw_64/mkspecs/modules/qt_lib_quick3dhelpersimpl.pri \ + D:/Qt/6.9.1/mingw_64/mkspecs/modules/qt_lib_quick3dhelpersimpl_private.pri \ + D:/Qt/6.9.1/mingw_64/mkspecs/modules/qt_lib_quick3diblbaker.pri \ + D:/Qt/6.9.1/mingw_64/mkspecs/modules/qt_lib_quick3diblbaker_private.pri \ + D:/Qt/6.9.1/mingw_64/mkspecs/modules/qt_lib_quick3dparticleeffects.pri \ + D:/Qt/6.9.1/mingw_64/mkspecs/modules/qt_lib_quick3dparticleeffects_private.pri \ + D:/Qt/6.9.1/mingw_64/mkspecs/modules/qt_lib_quick3dparticles.pri \ + D:/Qt/6.9.1/mingw_64/mkspecs/modules/qt_lib_quick3dparticles_private.pri \ + D:/Qt/6.9.1/mingw_64/mkspecs/modules/qt_lib_quick3druntimerender.pri \ + D:/Qt/6.9.1/mingw_64/mkspecs/modules/qt_lib_quick3druntimerender_private.pri \ + D:/Qt/6.9.1/mingw_64/mkspecs/modules/qt_lib_quick3dspatialaudio_private.pri \ + D:/Qt/6.9.1/mingw_64/mkspecs/modules/qt_lib_quick3dutils.pri \ + D:/Qt/6.9.1/mingw_64/mkspecs/modules/qt_lib_quick3dutils_private.pri \ + D:/Qt/6.9.1/mingw_64/mkspecs/modules/qt_lib_quick3dxr.pri \ + D:/Qt/6.9.1/mingw_64/mkspecs/modules/qt_lib_quick3dxr_private.pri \ + D:/Qt/6.9.1/mingw_64/mkspecs/modules/qt_lib_quick_private.pri \ + D:/Qt/6.9.1/mingw_64/mkspecs/modules/qt_lib_quickcontrols2.pri \ + D:/Qt/6.9.1/mingw_64/mkspecs/modules/qt_lib_quickcontrols2_private.pri \ + D:/Qt/6.9.1/mingw_64/mkspecs/modules/qt_lib_quickcontrols2basic.pri \ + D:/Qt/6.9.1/mingw_64/mkspecs/modules/qt_lib_quickcontrols2basic_private.pri \ + D:/Qt/6.9.1/mingw_64/mkspecs/modules/qt_lib_quickcontrols2basicstyleimpl.pri \ + D:/Qt/6.9.1/mingw_64/mkspecs/modules/qt_lib_quickcontrols2basicstyleimpl_private.pri \ + D:/Qt/6.9.1/mingw_64/mkspecs/modules/qt_lib_quickcontrols2fluentwinui3styleimpl.pri \ + D:/Qt/6.9.1/mingw_64/mkspecs/modules/qt_lib_quickcontrols2fluentwinui3styleimpl_private.pri \ + D:/Qt/6.9.1/mingw_64/mkspecs/modules/qt_lib_quickcontrols2fusion.pri \ + D:/Qt/6.9.1/mingw_64/mkspecs/modules/qt_lib_quickcontrols2fusion_private.pri \ + D:/Qt/6.9.1/mingw_64/mkspecs/modules/qt_lib_quickcontrols2fusionstyleimpl.pri \ + D:/Qt/6.9.1/mingw_64/mkspecs/modules/qt_lib_quickcontrols2fusionstyleimpl_private.pri \ + D:/Qt/6.9.1/mingw_64/mkspecs/modules/qt_lib_quickcontrols2imagine.pri \ + D:/Qt/6.9.1/mingw_64/mkspecs/modules/qt_lib_quickcontrols2imagine_private.pri \ + D:/Qt/6.9.1/mingw_64/mkspecs/modules/qt_lib_quickcontrols2imaginestyleimpl.pri \ + D:/Qt/6.9.1/mingw_64/mkspecs/modules/qt_lib_quickcontrols2imaginestyleimpl_private.pri \ + D:/Qt/6.9.1/mingw_64/mkspecs/modules/qt_lib_quickcontrols2impl.pri \ + D:/Qt/6.9.1/mingw_64/mkspecs/modules/qt_lib_quickcontrols2impl_private.pri \ + D:/Qt/6.9.1/mingw_64/mkspecs/modules/qt_lib_quickcontrols2material.pri \ + D:/Qt/6.9.1/mingw_64/mkspecs/modules/qt_lib_quickcontrols2material_private.pri \ + D:/Qt/6.9.1/mingw_64/mkspecs/modules/qt_lib_quickcontrols2materialstyleimpl.pri \ + D:/Qt/6.9.1/mingw_64/mkspecs/modules/qt_lib_quickcontrols2materialstyleimpl_private.pri \ + D:/Qt/6.9.1/mingw_64/mkspecs/modules/qt_lib_quickcontrols2universal.pri \ + D:/Qt/6.9.1/mingw_64/mkspecs/modules/qt_lib_quickcontrols2universal_private.pri \ + D:/Qt/6.9.1/mingw_64/mkspecs/modules/qt_lib_quickcontrols2universalstyleimpl.pri \ + D:/Qt/6.9.1/mingw_64/mkspecs/modules/qt_lib_quickcontrols2universalstyleimpl_private.pri \ + D:/Qt/6.9.1/mingw_64/mkspecs/modules/qt_lib_quickcontrols2windowsstyleimpl.pri \ + D:/Qt/6.9.1/mingw_64/mkspecs/modules/qt_lib_quickcontrols2windowsstyleimpl_private.pri \ + D:/Qt/6.9.1/mingw_64/mkspecs/modules/qt_lib_quickcontrolstestutilsprivate_private.pri \ + D:/Qt/6.9.1/mingw_64/mkspecs/modules/qt_lib_quickdialogs2.pri \ + D:/Qt/6.9.1/mingw_64/mkspecs/modules/qt_lib_quickdialogs2_private.pri \ + D:/Qt/6.9.1/mingw_64/mkspecs/modules/qt_lib_quickdialogs2quickimpl.pri \ + D:/Qt/6.9.1/mingw_64/mkspecs/modules/qt_lib_quickdialogs2quickimpl_private.pri \ + D:/Qt/6.9.1/mingw_64/mkspecs/modules/qt_lib_quickdialogs2utils.pri \ + D:/Qt/6.9.1/mingw_64/mkspecs/modules/qt_lib_quickdialogs2utils_private.pri \ + D:/Qt/6.9.1/mingw_64/mkspecs/modules/qt_lib_quickeffects.pri \ + D:/Qt/6.9.1/mingw_64/mkspecs/modules/qt_lib_quickeffects_private.pri \ + D:/Qt/6.9.1/mingw_64/mkspecs/modules/qt_lib_quicklayouts.pri \ + D:/Qt/6.9.1/mingw_64/mkspecs/modules/qt_lib_quicklayouts_private.pri \ + D:/Qt/6.9.1/mingw_64/mkspecs/modules/qt_lib_quickparticles_private.pri \ + D:/Qt/6.9.1/mingw_64/mkspecs/modules/qt_lib_quickshapes_private.pri \ + D:/Qt/6.9.1/mingw_64/mkspecs/modules/qt_lib_quicktemplates2.pri \ + D:/Qt/6.9.1/mingw_64/mkspecs/modules/qt_lib_quicktemplates2_private.pri \ + D:/Qt/6.9.1/mingw_64/mkspecs/modules/qt_lib_quicktestutilsprivate_private.pri \ + D:/Qt/6.9.1/mingw_64/mkspecs/modules/qt_lib_quicktimeline.pri \ + D:/Qt/6.9.1/mingw_64/mkspecs/modules/qt_lib_quicktimeline_private.pri \ + D:/Qt/6.9.1/mingw_64/mkspecs/modules/qt_lib_quicktimelineblendtrees.pri \ + D:/Qt/6.9.1/mingw_64/mkspecs/modules/qt_lib_quicktimelineblendtrees_private.pri \ + D:/Qt/6.9.1/mingw_64/mkspecs/modules/qt_lib_quickvectorimage.pri \ + D:/Qt/6.9.1/mingw_64/mkspecs/modules/qt_lib_quickvectorimage_private.pri \ + D:/Qt/6.9.1/mingw_64/mkspecs/modules/qt_lib_quickvectorimagegenerator_private.pri \ + D:/Qt/6.9.1/mingw_64/mkspecs/modules/qt_lib_quickwidgets.pri \ + D:/Qt/6.9.1/mingw_64/mkspecs/modules/qt_lib_quickwidgets_private.pri \ + D:/Qt/6.9.1/mingw_64/mkspecs/modules/qt_lib_shadertools.pri \ + D:/Qt/6.9.1/mingw_64/mkspecs/modules/qt_lib_shadertools_private.pri \ + D:/Qt/6.9.1/mingw_64/mkspecs/modules/qt_lib_spatialaudio.pri \ + D:/Qt/6.9.1/mingw_64/mkspecs/modules/qt_lib_spatialaudio_private.pri \ + D:/Qt/6.9.1/mingw_64/mkspecs/modules/qt_lib_sql.pri \ + D:/Qt/6.9.1/mingw_64/mkspecs/modules/qt_lib_sql_private.pri \ + D:/Qt/6.9.1/mingw_64/mkspecs/modules/qt_lib_svg.pri \ + D:/Qt/6.9.1/mingw_64/mkspecs/modules/qt_lib_svg_private.pri \ + D:/Qt/6.9.1/mingw_64/mkspecs/modules/qt_lib_svgwidgets.pri \ + D:/Qt/6.9.1/mingw_64/mkspecs/modules/qt_lib_svgwidgets_private.pri \ + D:/Qt/6.9.1/mingw_64/mkspecs/modules/qt_lib_testinternals_private.pri \ + D:/Qt/6.9.1/mingw_64/mkspecs/modules/qt_lib_testlib.pri \ + D:/Qt/6.9.1/mingw_64/mkspecs/modules/qt_lib_testlib_private.pri \ + D:/Qt/6.9.1/mingw_64/mkspecs/modules/qt_lib_tools_private.pri \ + D:/Qt/6.9.1/mingw_64/mkspecs/modules/qt_lib_uiplugin.pri \ + D:/Qt/6.9.1/mingw_64/mkspecs/modules/qt_lib_uitools.pri \ + D:/Qt/6.9.1/mingw_64/mkspecs/modules/qt_lib_uitools_private.pri \ + D:/Qt/6.9.1/mingw_64/mkspecs/modules/qt_lib_widgets.pri \ + D:/Qt/6.9.1/mingw_64/mkspecs/modules/qt_lib_widgets_private.pri \ + D:/Qt/6.9.1/mingw_64/mkspecs/modules/qt_lib_xml.pri \ + D:/Qt/6.9.1/mingw_64/mkspecs/modules/qt_lib_xml_private.pri \ + D:/Qt/6.9.1/mingw_64/mkspecs/modules/qt_lib_zlib_private.pri \ + D:/Qt/6.9.1/mingw_64/mkspecs/features/qt_functions.prf \ + D:/Qt/6.9.1/mingw_64/mkspecs/features/qt_config.prf \ + D:/Qt/6.9.1/mingw_64/mkspecs/win32-g++/qmake.conf \ + D:/Qt/6.9.1/mingw_64/mkspecs/features/spec_post.prf \ + .qmake.stash \ + D:/Qt/6.9.1/mingw_64/mkspecs/features/exclusive_builds.prf \ + D:/Qt/6.9.1/mingw_64/mkspecs/features/toolchain.prf \ + D:/Qt/6.9.1/mingw_64/mkspecs/features/default_pre.prf \ + D:/Qt/6.9.1/mingw_64/mkspecs/features/win32/default_pre.prf \ + D:/Qt/6.9.1/mingw_64/mkspecs/features/resolve_config.prf \ + D:/Qt/6.9.1/mingw_64/mkspecs/features/exclusive_builds_post.prf \ + D:/Qt/6.9.1/mingw_64/mkspecs/features/default_post.prf \ + D:/Qt/6.9.1/mingw_64/mkspecs/features/qtquickcompiler.prf \ + D:/Qt/6.9.1/mingw_64/mkspecs/features/precompile_header.prf \ + D:/Qt/6.9.1/mingw_64/mkspecs/features/warn_on.prf \ + D:/Qt/6.9.1/mingw_64/mkspecs/features/permissions.prf \ + D:/Qt/6.9.1/mingw_64/mkspecs/features/qt.prf \ + D:/Qt/6.9.1/mingw_64/mkspecs/features/resources_functions.prf \ + D:/Qt/6.9.1/mingw_64/mkspecs/features/resources.prf \ + D:/Qt/6.9.1/mingw_64/mkspecs/features/moc.prf \ + D:/Qt/6.9.1/mingw_64/mkspecs/features/win32/opengl.prf \ + D:/Qt/6.9.1/mingw_64/mkspecs/features/uic.prf \ + D:/Qt/6.9.1/mingw_64/mkspecs/features/qmake_use.prf \ + D:/Qt/6.9.1/mingw_64/mkspecs/features/file_copies.prf \ + D:/Qt/6.9.1/mingw_64/mkspecs/features/win32/windows.prf \ + D:/Qt/6.9.1/mingw_64/mkspecs/features/testcase_targets.prf \ + D:/Qt/6.9.1/mingw_64/mkspecs/features/exceptions.prf \ + D:/Qt/6.9.1/mingw_64/mkspecs/features/yacc.prf \ + D:/Qt/6.9.1/mingw_64/mkspecs/features/lex.prf \ + untitled2.pro \ + D:/Qt/6.9.1/mingw_64/lib/Qt6Widgets.prl \ + D:/Qt/6.9.1/mingw_64/lib/Qt6Gui.prl \ + D:/Qt/6.9.1/mingw_64/lib/Qt6Network.prl \ + D:/Qt/6.9.1/mingw_64/lib/Qt6Concurrent.prl \ + D:/Qt/6.9.1/mingw_64/lib/Qt6Core.prl \ + D:/Qt/6.9.1/mingw_64/lib/Qt6EntryPoint.prl \ + D:/Qt/6.9.1/mingw_64/mkspecs/features/build_pass.prf \ + resources.qrc + $(QMAKE) -o Makefile untitled2.pro -spec win32-g++ "CONFIG+=qtquickcompiler" +D:/Qt/6.9.1/mingw_64/mkspecs/features/spec_pre.prf: +D:/Qt/6.9.1/mingw_64/mkspecs/features/device_config.prf: +D:/Qt/6.9.1/mingw_64/mkspecs/common/sanitize.conf: +D:/Qt/6.9.1/mingw_64/mkspecs/common/gcc-base.conf: +D:/Qt/6.9.1/mingw_64/mkspecs/common/g++-base.conf: +D:/Qt/6.9.1/mingw_64/mkspecs/features/win32/windows_vulkan_sdk.prf: +D:/Qt/6.9.1/mingw_64/mkspecs/common/windows-vulkan.conf: +D:/Qt/6.9.1/mingw_64/mkspecs/common/g++-win32.conf: +D:/Qt/6.9.1/mingw_64/mkspecs/common/windows-desktop.conf: +D:/Qt/6.9.1/mingw_64/mkspecs/qconfig.pri: +D:/Qt/6.9.1/mingw_64/mkspecs/modules/qt_ext_freetype.pri: +D:/Qt/6.9.1/mingw_64/mkspecs/modules/qt_ext_libjpeg.pri: +D:/Qt/6.9.1/mingw_64/mkspecs/modules/qt_ext_libpng.pri: +D:/Qt/6.9.1/mingw_64/mkspecs/modules/qt_ext_openxr_loader.pri: +D:/Qt/6.9.1/mingw_64/mkspecs/modules/qt_lib_charts.pri: +D:/Qt/6.9.1/mingw_64/mkspecs/modules/qt_lib_charts_private.pri: +D:/Qt/6.9.1/mingw_64/mkspecs/modules/qt_lib_chartsqml.pri: +D:/Qt/6.9.1/mingw_64/mkspecs/modules/qt_lib_chartsqml_private.pri: +D:/Qt/6.9.1/mingw_64/mkspecs/modules/qt_lib_concurrent.pri: +D:/Qt/6.9.1/mingw_64/mkspecs/modules/qt_lib_concurrent_private.pri: +D:/Qt/6.9.1/mingw_64/mkspecs/modules/qt_lib_core.pri: +D:/Qt/6.9.1/mingw_64/mkspecs/modules/qt_lib_core_private.pri: +D:/Qt/6.9.1/mingw_64/mkspecs/modules/qt_lib_dbus.pri: +D:/Qt/6.9.1/mingw_64/mkspecs/modules/qt_lib_dbus_private.pri: +D:/Qt/6.9.1/mingw_64/mkspecs/modules/qt_lib_designer.pri: +D:/Qt/6.9.1/mingw_64/mkspecs/modules/qt_lib_designer_private.pri: +D:/Qt/6.9.1/mingw_64/mkspecs/modules/qt_lib_designercomponents_private.pri: +D:/Qt/6.9.1/mingw_64/mkspecs/modules/qt_lib_devicediscovery_support_private.pri: +D:/Qt/6.9.1/mingw_64/mkspecs/modules/qt_lib_entrypoint_private.pri: +D:/Qt/6.9.1/mingw_64/mkspecs/modules/qt_lib_example_icons_private.pri: +D:/Qt/6.9.1/mingw_64/mkspecs/modules/qt_lib_examples_asset_downloader_private.pri: +D:/Qt/6.9.1/mingw_64/mkspecs/modules/qt_lib_fb_support_private.pri: +D:/Qt/6.9.1/mingw_64/mkspecs/modules/qt_lib_ffmpegmediapluginimpl_private.pri: +D:/Qt/6.9.1/mingw_64/mkspecs/modules/qt_lib_freetype_private.pri: +D:/Qt/6.9.1/mingw_64/mkspecs/modules/qt_lib_gui.pri: +D:/Qt/6.9.1/mingw_64/mkspecs/modules/qt_lib_gui_private.pri: +D:/Qt/6.9.1/mingw_64/mkspecs/modules/qt_lib_harfbuzz_private.pri: +D:/Qt/6.9.1/mingw_64/mkspecs/modules/qt_lib_help.pri: +D:/Qt/6.9.1/mingw_64/mkspecs/modules/qt_lib_help_private.pri: +D:/Qt/6.9.1/mingw_64/mkspecs/modules/qt_lib_jpeg_private.pri: +D:/Qt/6.9.1/mingw_64/mkspecs/modules/qt_lib_labsanimation.pri: +D:/Qt/6.9.1/mingw_64/mkspecs/modules/qt_lib_labsanimation_private.pri: +D:/Qt/6.9.1/mingw_64/mkspecs/modules/qt_lib_labsfolderlistmodel.pri: +D:/Qt/6.9.1/mingw_64/mkspecs/modules/qt_lib_labsfolderlistmodel_private.pri: +D:/Qt/6.9.1/mingw_64/mkspecs/modules/qt_lib_labsplatform.pri: +D:/Qt/6.9.1/mingw_64/mkspecs/modules/qt_lib_labsplatform_private.pri: +D:/Qt/6.9.1/mingw_64/mkspecs/modules/qt_lib_labsqmlmodels.pri: +D:/Qt/6.9.1/mingw_64/mkspecs/modules/qt_lib_labsqmlmodels_private.pri: +D:/Qt/6.9.1/mingw_64/mkspecs/modules/qt_lib_labssettings.pri: +D:/Qt/6.9.1/mingw_64/mkspecs/modules/qt_lib_labssettings_private.pri: +D:/Qt/6.9.1/mingw_64/mkspecs/modules/qt_lib_labssharedimage.pri: +D:/Qt/6.9.1/mingw_64/mkspecs/modules/qt_lib_labssharedimage_private.pri: +D:/Qt/6.9.1/mingw_64/mkspecs/modules/qt_lib_labswavefrontmesh.pri: +D:/Qt/6.9.1/mingw_64/mkspecs/modules/qt_lib_labswavefrontmesh_private.pri: +D:/Qt/6.9.1/mingw_64/mkspecs/modules/qt_lib_linguist.pri: +D:/Qt/6.9.1/mingw_64/mkspecs/modules/qt_lib_multimedia.pri: +D:/Qt/6.9.1/mingw_64/mkspecs/modules/qt_lib_multimedia_private.pri: +D:/Qt/6.9.1/mingw_64/mkspecs/modules/qt_lib_multimediaquick_private.pri: +D:/Qt/6.9.1/mingw_64/mkspecs/modules/qt_lib_multimediatestlibprivate_private.pri: +D:/Qt/6.9.1/mingw_64/mkspecs/modules/qt_lib_multimediawidgets.pri: +D:/Qt/6.9.1/mingw_64/mkspecs/modules/qt_lib_multimediawidgets_private.pri: +D:/Qt/6.9.1/mingw_64/mkspecs/modules/qt_lib_network.pri: +D:/Qt/6.9.1/mingw_64/mkspecs/modules/qt_lib_network_private.pri: +D:/Qt/6.9.1/mingw_64/mkspecs/modules/qt_lib_opengl.pri: +D:/Qt/6.9.1/mingw_64/mkspecs/modules/qt_lib_opengl_private.pri: +D:/Qt/6.9.1/mingw_64/mkspecs/modules/qt_lib_openglwidgets.pri: +D:/Qt/6.9.1/mingw_64/mkspecs/modules/qt_lib_openglwidgets_private.pri: +D:/Qt/6.9.1/mingw_64/mkspecs/modules/qt_lib_packetprotocol_private.pri: +D:/Qt/6.9.1/mingw_64/mkspecs/modules/qt_lib_png_private.pri: +D:/Qt/6.9.1/mingw_64/mkspecs/modules/qt_lib_printsupport.pri: +D:/Qt/6.9.1/mingw_64/mkspecs/modules/qt_lib_printsupport_private.pri: +D:/Qt/6.9.1/mingw_64/mkspecs/modules/qt_lib_qdoccatch_private.pri: +D:/Qt/6.9.1/mingw_64/mkspecs/modules/qt_lib_qdoccatchconversions_private.pri: +D:/Qt/6.9.1/mingw_64/mkspecs/modules/qt_lib_qdoccatchgenerators_private.pri: +D:/Qt/6.9.1/mingw_64/mkspecs/modules/qt_lib_qml.pri: +D:/Qt/6.9.1/mingw_64/mkspecs/modules/qt_lib_qml_private.pri: +D:/Qt/6.9.1/mingw_64/mkspecs/modules/qt_lib_qmlassetdownloader.pri: +D:/Qt/6.9.1/mingw_64/mkspecs/modules/qt_lib_qmlassetdownloader_private.pri: +D:/Qt/6.9.1/mingw_64/mkspecs/modules/qt_lib_qmlcompiler.pri: +D:/Qt/6.9.1/mingw_64/mkspecs/modules/qt_lib_qmlcompiler_private.pri: +D:/Qt/6.9.1/mingw_64/mkspecs/modules/qt_lib_qmlcore.pri: +D:/Qt/6.9.1/mingw_64/mkspecs/modules/qt_lib_qmlcore_private.pri: +D:/Qt/6.9.1/mingw_64/mkspecs/modules/qt_lib_qmldebug_private.pri: +D:/Qt/6.9.1/mingw_64/mkspecs/modules/qt_lib_qmldom_private.pri: +D:/Qt/6.9.1/mingw_64/mkspecs/modules/qt_lib_qmlformat_private.pri: +D:/Qt/6.9.1/mingw_64/mkspecs/modules/qt_lib_qmlintegration.pri: +D:/Qt/6.9.1/mingw_64/mkspecs/modules/qt_lib_qmlintegration_private.pri: +D:/Qt/6.9.1/mingw_64/mkspecs/modules/qt_lib_qmllocalstorage.pri: +D:/Qt/6.9.1/mingw_64/mkspecs/modules/qt_lib_qmllocalstorage_private.pri: +D:/Qt/6.9.1/mingw_64/mkspecs/modules/qt_lib_qmlls_private.pri: +D:/Qt/6.9.1/mingw_64/mkspecs/modules/qt_lib_qmlmeta.pri: +D:/Qt/6.9.1/mingw_64/mkspecs/modules/qt_lib_qmlmeta_private.pri: +D:/Qt/6.9.1/mingw_64/mkspecs/modules/qt_lib_qmlmodels.pri: +D:/Qt/6.9.1/mingw_64/mkspecs/modules/qt_lib_qmlmodels_private.pri: +D:/Qt/6.9.1/mingw_64/mkspecs/modules/qt_lib_qmlnetwork.pri: +D:/Qt/6.9.1/mingw_64/mkspecs/modules/qt_lib_qmlnetwork_private.pri: +D:/Qt/6.9.1/mingw_64/mkspecs/modules/qt_lib_qmltest.pri: +D:/Qt/6.9.1/mingw_64/mkspecs/modules/qt_lib_qmltest_private.pri: +D:/Qt/6.9.1/mingw_64/mkspecs/modules/qt_lib_qmltoolingsettings_private.pri: +D:/Qt/6.9.1/mingw_64/mkspecs/modules/qt_lib_qmltyperegistrar_private.pri: +D:/Qt/6.9.1/mingw_64/mkspecs/modules/qt_lib_qmlworkerscript.pri: +D:/Qt/6.9.1/mingw_64/mkspecs/modules/qt_lib_qmlworkerscript_private.pri: +D:/Qt/6.9.1/mingw_64/mkspecs/modules/qt_lib_qmlxmllistmodel.pri: +D:/Qt/6.9.1/mingw_64/mkspecs/modules/qt_lib_qmlxmllistmodel_private.pri: +D:/Qt/6.9.1/mingw_64/mkspecs/modules/qt_lib_quick.pri: +D:/Qt/6.9.1/mingw_64/mkspecs/modules/qt_lib_quick3d.pri: +D:/Qt/6.9.1/mingw_64/mkspecs/modules/qt_lib_quick3d_private.pri: +D:/Qt/6.9.1/mingw_64/mkspecs/modules/qt_lib_quick3dassetimport.pri: +D:/Qt/6.9.1/mingw_64/mkspecs/modules/qt_lib_quick3dassetimport_private.pri: +D:/Qt/6.9.1/mingw_64/mkspecs/modules/qt_lib_quick3dassetutils.pri: +D:/Qt/6.9.1/mingw_64/mkspecs/modules/qt_lib_quick3dassetutils_private.pri: +D:/Qt/6.9.1/mingw_64/mkspecs/modules/qt_lib_quick3deffects.pri: +D:/Qt/6.9.1/mingw_64/mkspecs/modules/qt_lib_quick3deffects_private.pri: +D:/Qt/6.9.1/mingw_64/mkspecs/modules/qt_lib_quick3dglslparser_private.pri: +D:/Qt/6.9.1/mingw_64/mkspecs/modules/qt_lib_quick3dhelpers.pri: +D:/Qt/6.9.1/mingw_64/mkspecs/modules/qt_lib_quick3dhelpers_private.pri: +D:/Qt/6.9.1/mingw_64/mkspecs/modules/qt_lib_quick3dhelpersimpl.pri: +D:/Qt/6.9.1/mingw_64/mkspecs/modules/qt_lib_quick3dhelpersimpl_private.pri: +D:/Qt/6.9.1/mingw_64/mkspecs/modules/qt_lib_quick3diblbaker.pri: +D:/Qt/6.9.1/mingw_64/mkspecs/modules/qt_lib_quick3diblbaker_private.pri: +D:/Qt/6.9.1/mingw_64/mkspecs/modules/qt_lib_quick3dparticleeffects.pri: +D:/Qt/6.9.1/mingw_64/mkspecs/modules/qt_lib_quick3dparticleeffects_private.pri: +D:/Qt/6.9.1/mingw_64/mkspecs/modules/qt_lib_quick3dparticles.pri: +D:/Qt/6.9.1/mingw_64/mkspecs/modules/qt_lib_quick3dparticles_private.pri: +D:/Qt/6.9.1/mingw_64/mkspecs/modules/qt_lib_quick3druntimerender.pri: +D:/Qt/6.9.1/mingw_64/mkspecs/modules/qt_lib_quick3druntimerender_private.pri: +D:/Qt/6.9.1/mingw_64/mkspecs/modules/qt_lib_quick3dspatialaudio_private.pri: +D:/Qt/6.9.1/mingw_64/mkspecs/modules/qt_lib_quick3dutils.pri: +D:/Qt/6.9.1/mingw_64/mkspecs/modules/qt_lib_quick3dutils_private.pri: +D:/Qt/6.9.1/mingw_64/mkspecs/modules/qt_lib_quick3dxr.pri: +D:/Qt/6.9.1/mingw_64/mkspecs/modules/qt_lib_quick3dxr_private.pri: +D:/Qt/6.9.1/mingw_64/mkspecs/modules/qt_lib_quick_private.pri: +D:/Qt/6.9.1/mingw_64/mkspecs/modules/qt_lib_quickcontrols2.pri: +D:/Qt/6.9.1/mingw_64/mkspecs/modules/qt_lib_quickcontrols2_private.pri: +D:/Qt/6.9.1/mingw_64/mkspecs/modules/qt_lib_quickcontrols2basic.pri: +D:/Qt/6.9.1/mingw_64/mkspecs/modules/qt_lib_quickcontrols2basic_private.pri: +D:/Qt/6.9.1/mingw_64/mkspecs/modules/qt_lib_quickcontrols2basicstyleimpl.pri: +D:/Qt/6.9.1/mingw_64/mkspecs/modules/qt_lib_quickcontrols2basicstyleimpl_private.pri: +D:/Qt/6.9.1/mingw_64/mkspecs/modules/qt_lib_quickcontrols2fluentwinui3styleimpl.pri: +D:/Qt/6.9.1/mingw_64/mkspecs/modules/qt_lib_quickcontrols2fluentwinui3styleimpl_private.pri: +D:/Qt/6.9.1/mingw_64/mkspecs/modules/qt_lib_quickcontrols2fusion.pri: +D:/Qt/6.9.1/mingw_64/mkspecs/modules/qt_lib_quickcontrols2fusion_private.pri: +D:/Qt/6.9.1/mingw_64/mkspecs/modules/qt_lib_quickcontrols2fusionstyleimpl.pri: +D:/Qt/6.9.1/mingw_64/mkspecs/modules/qt_lib_quickcontrols2fusionstyleimpl_private.pri: +D:/Qt/6.9.1/mingw_64/mkspecs/modules/qt_lib_quickcontrols2imagine.pri: +D:/Qt/6.9.1/mingw_64/mkspecs/modules/qt_lib_quickcontrols2imagine_private.pri: +D:/Qt/6.9.1/mingw_64/mkspecs/modules/qt_lib_quickcontrols2imaginestyleimpl.pri: +D:/Qt/6.9.1/mingw_64/mkspecs/modules/qt_lib_quickcontrols2imaginestyleimpl_private.pri: +D:/Qt/6.9.1/mingw_64/mkspecs/modules/qt_lib_quickcontrols2impl.pri: +D:/Qt/6.9.1/mingw_64/mkspecs/modules/qt_lib_quickcontrols2impl_private.pri: +D:/Qt/6.9.1/mingw_64/mkspecs/modules/qt_lib_quickcontrols2material.pri: +D:/Qt/6.9.1/mingw_64/mkspecs/modules/qt_lib_quickcontrols2material_private.pri: +D:/Qt/6.9.1/mingw_64/mkspecs/modules/qt_lib_quickcontrols2materialstyleimpl.pri: +D:/Qt/6.9.1/mingw_64/mkspecs/modules/qt_lib_quickcontrols2materialstyleimpl_private.pri: +D:/Qt/6.9.1/mingw_64/mkspecs/modules/qt_lib_quickcontrols2universal.pri: +D:/Qt/6.9.1/mingw_64/mkspecs/modules/qt_lib_quickcontrols2universal_private.pri: +D:/Qt/6.9.1/mingw_64/mkspecs/modules/qt_lib_quickcontrols2universalstyleimpl.pri: +D:/Qt/6.9.1/mingw_64/mkspecs/modules/qt_lib_quickcontrols2universalstyleimpl_private.pri: +D:/Qt/6.9.1/mingw_64/mkspecs/modules/qt_lib_quickcontrols2windowsstyleimpl.pri: +D:/Qt/6.9.1/mingw_64/mkspecs/modules/qt_lib_quickcontrols2windowsstyleimpl_private.pri: +D:/Qt/6.9.1/mingw_64/mkspecs/modules/qt_lib_quickcontrolstestutilsprivate_private.pri: +D:/Qt/6.9.1/mingw_64/mkspecs/modules/qt_lib_quickdialogs2.pri: +D:/Qt/6.9.1/mingw_64/mkspecs/modules/qt_lib_quickdialogs2_private.pri: +D:/Qt/6.9.1/mingw_64/mkspecs/modules/qt_lib_quickdialogs2quickimpl.pri: +D:/Qt/6.9.1/mingw_64/mkspecs/modules/qt_lib_quickdialogs2quickimpl_private.pri: +D:/Qt/6.9.1/mingw_64/mkspecs/modules/qt_lib_quickdialogs2utils.pri: +D:/Qt/6.9.1/mingw_64/mkspecs/modules/qt_lib_quickdialogs2utils_private.pri: +D:/Qt/6.9.1/mingw_64/mkspecs/modules/qt_lib_quickeffects.pri: +D:/Qt/6.9.1/mingw_64/mkspecs/modules/qt_lib_quickeffects_private.pri: +D:/Qt/6.9.1/mingw_64/mkspecs/modules/qt_lib_quicklayouts.pri: +D:/Qt/6.9.1/mingw_64/mkspecs/modules/qt_lib_quicklayouts_private.pri: +D:/Qt/6.9.1/mingw_64/mkspecs/modules/qt_lib_quickparticles_private.pri: +D:/Qt/6.9.1/mingw_64/mkspecs/modules/qt_lib_quickshapes_private.pri: +D:/Qt/6.9.1/mingw_64/mkspecs/modules/qt_lib_quicktemplates2.pri: +D:/Qt/6.9.1/mingw_64/mkspecs/modules/qt_lib_quicktemplates2_private.pri: +D:/Qt/6.9.1/mingw_64/mkspecs/modules/qt_lib_quicktestutilsprivate_private.pri: +D:/Qt/6.9.1/mingw_64/mkspecs/modules/qt_lib_quicktimeline.pri: +D:/Qt/6.9.1/mingw_64/mkspecs/modules/qt_lib_quicktimeline_private.pri: +D:/Qt/6.9.1/mingw_64/mkspecs/modules/qt_lib_quicktimelineblendtrees.pri: +D:/Qt/6.9.1/mingw_64/mkspecs/modules/qt_lib_quicktimelineblendtrees_private.pri: +D:/Qt/6.9.1/mingw_64/mkspecs/modules/qt_lib_quickvectorimage.pri: +D:/Qt/6.9.1/mingw_64/mkspecs/modules/qt_lib_quickvectorimage_private.pri: +D:/Qt/6.9.1/mingw_64/mkspecs/modules/qt_lib_quickvectorimagegenerator_private.pri: +D:/Qt/6.9.1/mingw_64/mkspecs/modules/qt_lib_quickwidgets.pri: +D:/Qt/6.9.1/mingw_64/mkspecs/modules/qt_lib_quickwidgets_private.pri: +D:/Qt/6.9.1/mingw_64/mkspecs/modules/qt_lib_shadertools.pri: +D:/Qt/6.9.1/mingw_64/mkspecs/modules/qt_lib_shadertools_private.pri: +D:/Qt/6.9.1/mingw_64/mkspecs/modules/qt_lib_spatialaudio.pri: +D:/Qt/6.9.1/mingw_64/mkspecs/modules/qt_lib_spatialaudio_private.pri: +D:/Qt/6.9.1/mingw_64/mkspecs/modules/qt_lib_sql.pri: +D:/Qt/6.9.1/mingw_64/mkspecs/modules/qt_lib_sql_private.pri: +D:/Qt/6.9.1/mingw_64/mkspecs/modules/qt_lib_svg.pri: +D:/Qt/6.9.1/mingw_64/mkspecs/modules/qt_lib_svg_private.pri: +D:/Qt/6.9.1/mingw_64/mkspecs/modules/qt_lib_svgwidgets.pri: +D:/Qt/6.9.1/mingw_64/mkspecs/modules/qt_lib_svgwidgets_private.pri: +D:/Qt/6.9.1/mingw_64/mkspecs/modules/qt_lib_testinternals_private.pri: +D:/Qt/6.9.1/mingw_64/mkspecs/modules/qt_lib_testlib.pri: +D:/Qt/6.9.1/mingw_64/mkspecs/modules/qt_lib_testlib_private.pri: +D:/Qt/6.9.1/mingw_64/mkspecs/modules/qt_lib_tools_private.pri: +D:/Qt/6.9.1/mingw_64/mkspecs/modules/qt_lib_uiplugin.pri: +D:/Qt/6.9.1/mingw_64/mkspecs/modules/qt_lib_uitools.pri: +D:/Qt/6.9.1/mingw_64/mkspecs/modules/qt_lib_uitools_private.pri: +D:/Qt/6.9.1/mingw_64/mkspecs/modules/qt_lib_widgets.pri: +D:/Qt/6.9.1/mingw_64/mkspecs/modules/qt_lib_widgets_private.pri: +D:/Qt/6.9.1/mingw_64/mkspecs/modules/qt_lib_xml.pri: +D:/Qt/6.9.1/mingw_64/mkspecs/modules/qt_lib_xml_private.pri: +D:/Qt/6.9.1/mingw_64/mkspecs/modules/qt_lib_zlib_private.pri: +D:/Qt/6.9.1/mingw_64/mkspecs/features/qt_functions.prf: +D:/Qt/6.9.1/mingw_64/mkspecs/features/qt_config.prf: +D:/Qt/6.9.1/mingw_64/mkspecs/win32-g++/qmake.conf: +D:/Qt/6.9.1/mingw_64/mkspecs/features/spec_post.prf: +.qmake.stash: +D:/Qt/6.9.1/mingw_64/mkspecs/features/exclusive_builds.prf: +D:/Qt/6.9.1/mingw_64/mkspecs/features/toolchain.prf: +D:/Qt/6.9.1/mingw_64/mkspecs/features/default_pre.prf: +D:/Qt/6.9.1/mingw_64/mkspecs/features/win32/default_pre.prf: +D:/Qt/6.9.1/mingw_64/mkspecs/features/resolve_config.prf: +D:/Qt/6.9.1/mingw_64/mkspecs/features/exclusive_builds_post.prf: +D:/Qt/6.9.1/mingw_64/mkspecs/features/default_post.prf: +D:/Qt/6.9.1/mingw_64/mkspecs/features/qtquickcompiler.prf: +D:/Qt/6.9.1/mingw_64/mkspecs/features/precompile_header.prf: +D:/Qt/6.9.1/mingw_64/mkspecs/features/warn_on.prf: +D:/Qt/6.9.1/mingw_64/mkspecs/features/permissions.prf: +D:/Qt/6.9.1/mingw_64/mkspecs/features/qt.prf: +D:/Qt/6.9.1/mingw_64/mkspecs/features/resources_functions.prf: +D:/Qt/6.9.1/mingw_64/mkspecs/features/resources.prf: +D:/Qt/6.9.1/mingw_64/mkspecs/features/moc.prf: +D:/Qt/6.9.1/mingw_64/mkspecs/features/win32/opengl.prf: +D:/Qt/6.9.1/mingw_64/mkspecs/features/uic.prf: +D:/Qt/6.9.1/mingw_64/mkspecs/features/qmake_use.prf: +D:/Qt/6.9.1/mingw_64/mkspecs/features/file_copies.prf: +D:/Qt/6.9.1/mingw_64/mkspecs/features/win32/windows.prf: +D:/Qt/6.9.1/mingw_64/mkspecs/features/testcase_targets.prf: +D:/Qt/6.9.1/mingw_64/mkspecs/features/exceptions.prf: +D:/Qt/6.9.1/mingw_64/mkspecs/features/yacc.prf: +D:/Qt/6.9.1/mingw_64/mkspecs/features/lex.prf: +untitled2.pro: +D:/Qt/6.9.1/mingw_64/lib/Qt6Widgets.prl: +D:/Qt/6.9.1/mingw_64/lib/Qt6Gui.prl: +D:/Qt/6.9.1/mingw_64/lib/Qt6Network.prl: +D:/Qt/6.9.1/mingw_64/lib/Qt6Concurrent.prl: +D:/Qt/6.9.1/mingw_64/lib/Qt6Core.prl: +D:/Qt/6.9.1/mingw_64/lib/Qt6EntryPoint.prl: +D:/Qt/6.9.1/mingw_64/mkspecs/features/build_pass.prf: +resources.qrc: +qmake: FORCE + @$(QMAKE) -o Makefile untitled2.pro -spec win32-g++ "CONFIG+=qtquickcompiler" + +qmake_all: FORCE + +make_first: release-make_first debug-make_first FORCE +all: release-all debug-all FORCE +clean: release-clean debug-clean FORCE +distclean: release-distclean debug-distclean FORCE + -$(DEL_FILE) Makefile + -$(DEL_FILE) .qmake.stash + +release-mocclean: + $(MAKE) -f $(MAKEFILE).Release mocclean +debug-mocclean: + $(MAKE) -f $(MAKEFILE).Debug mocclean +mocclean: release-mocclean debug-mocclean + +release-mocables: + $(MAKE) -f $(MAKEFILE).Release mocables +debug-mocables: + $(MAKE) -f $(MAKEFILE).Debug mocables +mocables: release-mocables debug-mocables + +check: first + +benchmark: first +FORCE: + +.SUFFIXES: + +$(MAKEFILE).Release: Makefile +$(MAKEFILE).Debug: Makefile diff --git a/C++/2.3.0/Makefile.Debug b/C++/2.3.0/Makefile.Debug new file mode 100644 index 0000000..b2360a5 --- /dev/null +++ b/C++/2.3.0/Makefile.Debug @@ -0,0 +1,1173 @@ +############################################################################# +# Makefile for building: untitled2 +# Generated by qmake (3.1) (Qt 6.9.1) +# Project: untitled2.pro +# Template: app +############################################################################# + +MAKEFILE = Makefile.Debug + +EQ = = + +####### Compiler, tools and options + +CC = gcc +CXX = g++ +DEFINES = -DUNICODE -D_UNICODE -DWIN32 -DMINGW_HAS_SECURE_API=1 -DQT_WIDGETS_LIB -DQT_GUI_LIB -DQT_NETWORK_LIB -DQT_CONCURRENT_LIB -DQT_CORE_LIB -DQT_NEEDS_QMAIN +CFLAGS = -fno-keep-inline-dllexport -g -Wall -Wextra -Wextra $(DEFINES) +CXXFLAGS = -fno-keep-inline-dllexport -g -std=gnu++1z -Wall -Wextra -Wextra -fexceptions -mthreads $(DEFINES) +INCPATH = -I. -ID:/Qt/6.9.1/mingw_64/include -ID:/Qt/6.9.1/mingw_64/include/QtWidgets -ID:/Qt/6.9.1/mingw_64/include/QtGui -ID:/Qt/6.9.1/mingw_64/include/QtNetwork -ID:/Qt/6.9.1/mingw_64/include/QtConcurrent -ID:/Qt/6.9.1/mingw_64/include/QtCore -Idebug -I/include -ID:/Qt/6.9.1/mingw_64/mkspecs/win32-g++ +LINKER = g++ +LFLAGS = -Wl,-subsystem,windows -mthreads +LIBS = -ladvapi32 -luser32 -lshell32 -lkernel32 D:\Qt\6.9.1\mingw_64\lib\libQt6Widgets.a D:\Qt\6.9.1\mingw_64\lib\libQt6Gui.a D:\Qt\6.9.1\mingw_64\lib\libQt6Network.a D:\Qt\6.9.1\mingw_64\lib\libQt6Concurrent.a D:\Qt\6.9.1\mingw_64\lib\libQt6Core.a debug\launcher_res.o -lmingw32 D:\Qt\6.9.1\mingw_64\lib\libQt6EntryPoint.a -lshell32 +QMAKE = D:\Qt\6.9.1\mingw_64\bin\qmake.exe +DEL_FILE = del +CHK_DIR_EXISTS= if not exist +MKDIR = mkdir +COPY = copy /y +COPY_FILE = copy /y +COPY_DIR = xcopy /s /q /y /i +INSTALL_FILE = copy /y +INSTALL_PROGRAM = copy /y +INSTALL_DIR = xcopy /s /q /y /i +QINSTALL = D:\Qt\6.9.1\mingw_64\bin\qmake.exe -install qinstall +QINSTALL_PROGRAM = D:\Qt\6.9.1\mingw_64\bin\qmake.exe -install qinstall -exe +DEL_FILE = del +SYMLINK = $(QMAKE) -install ln -f -s +DEL_DIR = rmdir +MOVE = move +IDC = idc +IDL = midl +ZIP = zip -r -9 +DEF_FILE = +RES_FILE = debug\launcher_res.o +SED = $(QMAKE) -install sed +MOVE = move + +####### Output directory + +OBJECTS_DIR = debug + +####### Files + +SOURCES = main.cpp \ + mainwindow.cpp debug\qrc_resources.cpp \ + debug\moc_mainwindow.cpp +OBJECTS = debug/main.o \ + debug/mainwindow.o \ + debug/qrc_resources.o \ + debug/moc_mainwindow.o + +DIST = mainwindow.h main.cpp \ + mainwindow.cpp +QMAKE_TARGET = untitled2 +DESTDIR = debug\ #avoid trailing-slash linebreak +TARGET = untitled2.exe +DESTDIR_TARGET = debug\untitled2.exe + +####### Build rules + +first: all +all: Makefile.Debug debug/untitled2.exe + +debug/untitled2.exe: D:/Qt/6.9.1/mingw_64/lib/libQt6Widgets.a D:/Qt/6.9.1/mingw_64/lib/libQt6Gui.a D:/Qt/6.9.1/mingw_64/lib/libQt6Network.a D:/Qt/6.9.1/mingw_64/lib/libQt6Concurrent.a D:/Qt/6.9.1/mingw_64/lib/libQt6Core.a D:/Qt/6.9.1/mingw_64/lib/libQt6EntryPoint.a $(OBJECTS) debug/launcher_res.o + $(LINKER) $(LFLAGS) -o $(DESTDIR_TARGET) $(OBJECTS) $(LIBS) + +debug/launcher_res.o: launcher.rc + windres -i launcher.rc -o debug\launcher_res.o --include-dir=. $(DEFINES) + +qmake: FORCE + @$(QMAKE) -o Makefile.Debug untitled2.pro -spec win32-g++ "CONFIG+=qtquickcompiler" + +qmake_all: FORCE + +dist: + $(ZIP) untitled2.zip $(SOURCES) $(DIST) untitled2.pro D:\Qt\6.9.1\mingw_64\mkspecs\features\spec_pre.prf D:\Qt\6.9.1\mingw_64\mkspecs\features\device_config.prf D:\Qt\6.9.1\mingw_64\mkspecs\common\sanitize.conf D:\Qt\6.9.1\mingw_64\mkspecs\common\gcc-base.conf D:\Qt\6.9.1\mingw_64\mkspecs\common\g++-base.conf D:\Qt\6.9.1\mingw_64\mkspecs\features\win32\windows_vulkan_sdk.prf D:\Qt\6.9.1\mingw_64\mkspecs\common\windows-vulkan.conf D:\Qt\6.9.1\mingw_64\mkspecs\common\g++-win32.conf D:\Qt\6.9.1\mingw_64\mkspecs\common\windows-desktop.conf D:\Qt\6.9.1\mingw_64\mkspecs\qconfig.pri D:\Qt\6.9.1\mingw_64\mkspecs\modules\qt_ext_freetype.pri D:\Qt\6.9.1\mingw_64\mkspecs\modules\qt_ext_libjpeg.pri D:\Qt\6.9.1\mingw_64\mkspecs\modules\qt_ext_libpng.pri D:\Qt\6.9.1\mingw_64\mkspecs\modules\qt_ext_openxr_loader.pri D:\Qt\6.9.1\mingw_64\mkspecs\modules\qt_lib_charts.pri D:\Qt\6.9.1\mingw_64\mkspecs\modules\qt_lib_charts_private.pri D:\Qt\6.9.1\mingw_64\mkspecs\modules\qt_lib_chartsqml.pri D:\Qt\6.9.1\mingw_64\mkspecs\modules\qt_lib_chartsqml_private.pri D:\Qt\6.9.1\mingw_64\mkspecs\modules\qt_lib_concurrent.pri D:\Qt\6.9.1\mingw_64\mkspecs\modules\qt_lib_concurrent_private.pri D:\Qt\6.9.1\mingw_64\mkspecs\modules\qt_lib_core.pri D:\Qt\6.9.1\mingw_64\mkspecs\modules\qt_lib_core_private.pri D:\Qt\6.9.1\mingw_64\mkspecs\modules\qt_lib_dbus.pri D:\Qt\6.9.1\mingw_64\mkspecs\modules\qt_lib_dbus_private.pri D:\Qt\6.9.1\mingw_64\mkspecs\modules\qt_lib_designer.pri D:\Qt\6.9.1\mingw_64\mkspecs\modules\qt_lib_designer_private.pri D:\Qt\6.9.1\mingw_64\mkspecs\modules\qt_lib_designercomponents_private.pri D:\Qt\6.9.1\mingw_64\mkspecs\modules\qt_lib_devicediscovery_support_private.pri D:\Qt\6.9.1\mingw_64\mkspecs\modules\qt_lib_entrypoint_private.pri D:\Qt\6.9.1\mingw_64\mkspecs\modules\qt_lib_example_icons_private.pri D:\Qt\6.9.1\mingw_64\mkspecs\modules\qt_lib_examples_asset_downloader_private.pri D:\Qt\6.9.1\mingw_64\mkspecs\modules\qt_lib_fb_support_private.pri D:\Qt\6.9.1\mingw_64\mkspecs\modules\qt_lib_ffmpegmediapluginimpl_private.pri D:\Qt\6.9.1\mingw_64\mkspecs\modules\qt_lib_freetype_private.pri D:\Qt\6.9.1\mingw_64\mkspecs\modules\qt_lib_gui.pri D:\Qt\6.9.1\mingw_64\mkspecs\modules\qt_lib_gui_private.pri D:\Qt\6.9.1\mingw_64\mkspecs\modules\qt_lib_harfbuzz_private.pri D:\Qt\6.9.1\mingw_64\mkspecs\modules\qt_lib_help.pri D:\Qt\6.9.1\mingw_64\mkspecs\modules\qt_lib_help_private.pri D:\Qt\6.9.1\mingw_64\mkspecs\modules\qt_lib_jpeg_private.pri D:\Qt\6.9.1\mingw_64\mkspecs\modules\qt_lib_labsanimation.pri D:\Qt\6.9.1\mingw_64\mkspecs\modules\qt_lib_labsanimation_private.pri D:\Qt\6.9.1\mingw_64\mkspecs\modules\qt_lib_labsfolderlistmodel.pri D:\Qt\6.9.1\mingw_64\mkspecs\modules\qt_lib_labsfolderlistmodel_private.pri D:\Qt\6.9.1\mingw_64\mkspecs\modules\qt_lib_labsplatform.pri D:\Qt\6.9.1\mingw_64\mkspecs\modules\qt_lib_labsplatform_private.pri D:\Qt\6.9.1\mingw_64\mkspecs\modules\qt_lib_labsqmlmodels.pri D:\Qt\6.9.1\mingw_64\mkspecs\modules\qt_lib_labsqmlmodels_private.pri D:\Qt\6.9.1\mingw_64\mkspecs\modules\qt_lib_labssettings.pri D:\Qt\6.9.1\mingw_64\mkspecs\modules\qt_lib_labssettings_private.pri D:\Qt\6.9.1\mingw_64\mkspecs\modules\qt_lib_labssharedimage.pri D:\Qt\6.9.1\mingw_64\mkspecs\modules\qt_lib_labssharedimage_private.pri D:\Qt\6.9.1\mingw_64\mkspecs\modules\qt_lib_labswavefrontmesh.pri D:\Qt\6.9.1\mingw_64\mkspecs\modules\qt_lib_labswavefrontmesh_private.pri D:\Qt\6.9.1\mingw_64\mkspecs\modules\qt_lib_linguist.pri D:\Qt\6.9.1\mingw_64\mkspecs\modules\qt_lib_multimedia.pri D:\Qt\6.9.1\mingw_64\mkspecs\modules\qt_lib_multimedia_private.pri D:\Qt\6.9.1\mingw_64\mkspecs\modules\qt_lib_multimediaquick_private.pri D:\Qt\6.9.1\mingw_64\mkspecs\modules\qt_lib_multimediatestlibprivate_private.pri D:\Qt\6.9.1\mingw_64\mkspecs\modules\qt_lib_multimediawidgets.pri D:\Qt\6.9.1\mingw_64\mkspecs\modules\qt_lib_multimediawidgets_private.pri D:\Qt\6.9.1\mingw_64\mkspecs\modules\qt_lib_network.pri D:\Qt\6.9.1\mingw_64\mkspecs\modules\qt_lib_network_private.pri D:\Qt\6.9.1\mingw_64\mkspecs\modules\qt_lib_opengl.pri D:\Qt\6.9.1\mingw_64\mkspecs\modules\qt_lib_opengl_private.pri D:\Qt\6.9.1\mingw_64\mkspecs\modules\qt_lib_openglwidgets.pri D:\Qt\6.9.1\mingw_64\mkspecs\modules\qt_lib_openglwidgets_private.pri D:\Qt\6.9.1\mingw_64\mkspecs\modules\qt_lib_packetprotocol_private.pri D:\Qt\6.9.1\mingw_64\mkspecs\modules\qt_lib_png_private.pri D:\Qt\6.9.1\mingw_64\mkspecs\modules\qt_lib_printsupport.pri D:\Qt\6.9.1\mingw_64\mkspecs\modules\qt_lib_printsupport_private.pri D:\Qt\6.9.1\mingw_64\mkspecs\modules\qt_lib_qdoccatch_private.pri D:\Qt\6.9.1\mingw_64\mkspecs\modules\qt_lib_qdoccatchconversions_private.pri D:\Qt\6.9.1\mingw_64\mkspecs\modules\qt_lib_qdoccatchgenerators_private.pri D:\Qt\6.9.1\mingw_64\mkspecs\modules\qt_lib_qml.pri D:\Qt\6.9.1\mingw_64\mkspecs\modules\qt_lib_qml_private.pri D:\Qt\6.9.1\mingw_64\mkspecs\modules\qt_lib_qmlassetdownloader.pri D:\Qt\6.9.1\mingw_64\mkspecs\modules\qt_lib_qmlassetdownloader_private.pri D:\Qt\6.9.1\mingw_64\mkspecs\modules\qt_lib_qmlcompiler.pri D:\Qt\6.9.1\mingw_64\mkspecs\modules\qt_lib_qmlcompiler_private.pri D:\Qt\6.9.1\mingw_64\mkspecs\modules\qt_lib_qmlcore.pri D:\Qt\6.9.1\mingw_64\mkspecs\modules\qt_lib_qmlcore_private.pri D:\Qt\6.9.1\mingw_64\mkspecs\modules\qt_lib_qmldebug_private.pri D:\Qt\6.9.1\mingw_64\mkspecs\modules\qt_lib_qmldom_private.pri D:\Qt\6.9.1\mingw_64\mkspecs\modules\qt_lib_qmlformat_private.pri D:\Qt\6.9.1\mingw_64\mkspecs\modules\qt_lib_qmlintegration.pri D:\Qt\6.9.1\mingw_64\mkspecs\modules\qt_lib_qmlintegration_private.pri D:\Qt\6.9.1\mingw_64\mkspecs\modules\qt_lib_qmllocalstorage.pri D:\Qt\6.9.1\mingw_64\mkspecs\modules\qt_lib_qmllocalstorage_private.pri D:\Qt\6.9.1\mingw_64\mkspecs\modules\qt_lib_qmlls_private.pri D:\Qt\6.9.1\mingw_64\mkspecs\modules\qt_lib_qmlmeta.pri D:\Qt\6.9.1\mingw_64\mkspecs\modules\qt_lib_qmlmeta_private.pri D:\Qt\6.9.1\mingw_64\mkspecs\modules\qt_lib_qmlmodels.pri D:\Qt\6.9.1\mingw_64\mkspecs\modules\qt_lib_qmlmodels_private.pri D:\Qt\6.9.1\mingw_64\mkspecs\modules\qt_lib_qmlnetwork.pri D:\Qt\6.9.1\mingw_64\mkspecs\modules\qt_lib_qmlnetwork_private.pri D:\Qt\6.9.1\mingw_64\mkspecs\modules\qt_lib_qmltest.pri D:\Qt\6.9.1\mingw_64\mkspecs\modules\qt_lib_qmltest_private.pri D:\Qt\6.9.1\mingw_64\mkspecs\modules\qt_lib_qmltoolingsettings_private.pri D:\Qt\6.9.1\mingw_64\mkspecs\modules\qt_lib_qmltyperegistrar_private.pri D:\Qt\6.9.1\mingw_64\mkspecs\modules\qt_lib_qmlworkerscript.pri D:\Qt\6.9.1\mingw_64\mkspecs\modules\qt_lib_qmlworkerscript_private.pri D:\Qt\6.9.1\mingw_64\mkspecs\modules\qt_lib_qmlxmllistmodel.pri D:\Qt\6.9.1\mingw_64\mkspecs\modules\qt_lib_qmlxmllistmodel_private.pri D:\Qt\6.9.1\mingw_64\mkspecs\modules\qt_lib_quick.pri D:\Qt\6.9.1\mingw_64\mkspecs\modules\qt_lib_quick3d.pri D:\Qt\6.9.1\mingw_64\mkspecs\modules\qt_lib_quick3d_private.pri D:\Qt\6.9.1\mingw_64\mkspecs\modules\qt_lib_quick3dassetimport.pri D:\Qt\6.9.1\mingw_64\mkspecs\modules\qt_lib_quick3dassetimport_private.pri D:\Qt\6.9.1\mingw_64\mkspecs\modules\qt_lib_quick3dassetutils.pri D:\Qt\6.9.1\mingw_64\mkspecs\modules\qt_lib_quick3dassetutils_private.pri D:\Qt\6.9.1\mingw_64\mkspecs\modules\qt_lib_quick3deffects.pri D:\Qt\6.9.1\mingw_64\mkspecs\modules\qt_lib_quick3deffects_private.pri D:\Qt\6.9.1\mingw_64\mkspecs\modules\qt_lib_quick3dglslparser_private.pri D:\Qt\6.9.1\mingw_64\mkspecs\modules\qt_lib_quick3dhelpers.pri D:\Qt\6.9.1\mingw_64\mkspecs\modules\qt_lib_quick3dhelpers_private.pri D:\Qt\6.9.1\mingw_64\mkspecs\modules\qt_lib_quick3dhelpersimpl.pri D:\Qt\6.9.1\mingw_64\mkspecs\modules\qt_lib_quick3dhelpersimpl_private.pri D:\Qt\6.9.1\mingw_64\mkspecs\modules\qt_lib_quick3diblbaker.pri D:\Qt\6.9.1\mingw_64\mkspecs\modules\qt_lib_quick3diblbaker_private.pri D:\Qt\6.9.1\mingw_64\mkspecs\modules\qt_lib_quick3dparticleeffects.pri D:\Qt\6.9.1\mingw_64\mkspecs\modules\qt_lib_quick3dparticleeffects_private.pri D:\Qt\6.9.1\mingw_64\mkspecs\modules\qt_lib_quick3dparticles.pri D:\Qt\6.9.1\mingw_64\mkspecs\modules\qt_lib_quick3dparticles_private.pri D:\Qt\6.9.1\mingw_64\mkspecs\modules\qt_lib_quick3druntimerender.pri D:\Qt\6.9.1\mingw_64\mkspecs\modules\qt_lib_quick3druntimerender_private.pri D:\Qt\6.9.1\mingw_64\mkspecs\modules\qt_lib_quick3dspatialaudio_private.pri D:\Qt\6.9.1\mingw_64\mkspecs\modules\qt_lib_quick3dutils.pri D:\Qt\6.9.1\mingw_64\mkspecs\modules\qt_lib_quick3dutils_private.pri D:\Qt\6.9.1\mingw_64\mkspecs\modules\qt_lib_quick3dxr.pri D:\Qt\6.9.1\mingw_64\mkspecs\modules\qt_lib_quick3dxr_private.pri D:\Qt\6.9.1\mingw_64\mkspecs\modules\qt_lib_quick_private.pri D:\Qt\6.9.1\mingw_64\mkspecs\modules\qt_lib_quickcontrols2.pri D:\Qt\6.9.1\mingw_64\mkspecs\modules\qt_lib_quickcontrols2_private.pri D:\Qt\6.9.1\mingw_64\mkspecs\modules\qt_lib_quickcontrols2basic.pri D:\Qt\6.9.1\mingw_64\mkspecs\modules\qt_lib_quickcontrols2basic_private.pri D:\Qt\6.9.1\mingw_64\mkspecs\modules\qt_lib_quickcontrols2basicstyleimpl.pri D:\Qt\6.9.1\mingw_64\mkspecs\modules\qt_lib_quickcontrols2basicstyleimpl_private.pri D:\Qt\6.9.1\mingw_64\mkspecs\modules\qt_lib_quickcontrols2fluentwinui3styleimpl.pri D:\Qt\6.9.1\mingw_64\mkspecs\modules\qt_lib_quickcontrols2fluentwinui3styleimpl_private.pri D:\Qt\6.9.1\mingw_64\mkspecs\modules\qt_lib_quickcontrols2fusion.pri D:\Qt\6.9.1\mingw_64\mkspecs\modules\qt_lib_quickcontrols2fusion_private.pri D:\Qt\6.9.1\mingw_64\mkspecs\modules\qt_lib_quickcontrols2fusionstyleimpl.pri D:\Qt\6.9.1\mingw_64\mkspecs\modules\qt_lib_quickcontrols2fusionstyleimpl_private.pri D:\Qt\6.9.1\mingw_64\mkspecs\modules\qt_lib_quickcontrols2imagine.pri D:\Qt\6.9.1\mingw_64\mkspecs\modules\qt_lib_quickcontrols2imagine_private.pri D:\Qt\6.9.1\mingw_64\mkspecs\modules\qt_lib_quickcontrols2imaginestyleimpl.pri D:\Qt\6.9.1\mingw_64\mkspecs\modules\qt_lib_quickcontrols2imaginestyleimpl_private.pri D:\Qt\6.9.1\mingw_64\mkspecs\modules\qt_lib_quickcontrols2impl.pri D:\Qt\6.9.1\mingw_64\mkspecs\modules\qt_lib_quickcontrols2impl_private.pri D:\Qt\6.9.1\mingw_64\mkspecs\modules\qt_lib_quickcontrols2material.pri D:\Qt\6.9.1\mingw_64\mkspecs\modules\qt_lib_quickcontrols2material_private.pri D:\Qt\6.9.1\mingw_64\mkspecs\modules\qt_lib_quickcontrols2materialstyleimpl.pri D:\Qt\6.9.1\mingw_64\mkspecs\modules\qt_lib_quickcontrols2materialstyleimpl_private.pri D:\Qt\6.9.1\mingw_64\mkspecs\modules\qt_lib_quickcontrols2universal.pri D:\Qt\6.9.1\mingw_64\mkspecs\modules\qt_lib_quickcontrols2universal_private.pri D:\Qt\6.9.1\mingw_64\mkspecs\modules\qt_lib_quickcontrols2universalstyleimpl.pri D:\Qt\6.9.1\mingw_64\mkspecs\modules\qt_lib_quickcontrols2universalstyleimpl_private.pri D:\Qt\6.9.1\mingw_64\mkspecs\modules\qt_lib_quickcontrols2windowsstyleimpl.pri D:\Qt\6.9.1\mingw_64\mkspecs\modules\qt_lib_quickcontrols2windowsstyleimpl_private.pri D:\Qt\6.9.1\mingw_64\mkspecs\modules\qt_lib_quickcontrolstestutilsprivate_private.pri D:\Qt\6.9.1\mingw_64\mkspecs\modules\qt_lib_quickdialogs2.pri D:\Qt\6.9.1\mingw_64\mkspecs\modules\qt_lib_quickdialogs2_private.pri D:\Qt\6.9.1\mingw_64\mkspecs\modules\qt_lib_quickdialogs2quickimpl.pri D:\Qt\6.9.1\mingw_64\mkspecs\modules\qt_lib_quickdialogs2quickimpl_private.pri D:\Qt\6.9.1\mingw_64\mkspecs\modules\qt_lib_quickdialogs2utils.pri D:\Qt\6.9.1\mingw_64\mkspecs\modules\qt_lib_quickdialogs2utils_private.pri D:\Qt\6.9.1\mingw_64\mkspecs\modules\qt_lib_quickeffects.pri D:\Qt\6.9.1\mingw_64\mkspecs\modules\qt_lib_quickeffects_private.pri D:\Qt\6.9.1\mingw_64\mkspecs\modules\qt_lib_quicklayouts.pri D:\Qt\6.9.1\mingw_64\mkspecs\modules\qt_lib_quicklayouts_private.pri D:\Qt\6.9.1\mingw_64\mkspecs\modules\qt_lib_quickparticles_private.pri D:\Qt\6.9.1\mingw_64\mkspecs\modules\qt_lib_quickshapes_private.pri D:\Qt\6.9.1\mingw_64\mkspecs\modules\qt_lib_quicktemplates2.pri D:\Qt\6.9.1\mingw_64\mkspecs\modules\qt_lib_quicktemplates2_private.pri D:\Qt\6.9.1\mingw_64\mkspecs\modules\qt_lib_quicktestutilsprivate_private.pri D:\Qt\6.9.1\mingw_64\mkspecs\modules\qt_lib_quicktimeline.pri D:\Qt\6.9.1\mingw_64\mkspecs\modules\qt_lib_quicktimeline_private.pri D:\Qt\6.9.1\mingw_64\mkspecs\modules\qt_lib_quicktimelineblendtrees.pri D:\Qt\6.9.1\mingw_64\mkspecs\modules\qt_lib_quicktimelineblendtrees_private.pri D:\Qt\6.9.1\mingw_64\mkspecs\modules\qt_lib_quickvectorimage.pri D:\Qt\6.9.1\mingw_64\mkspecs\modules\qt_lib_quickvectorimage_private.pri D:\Qt\6.9.1\mingw_64\mkspecs\modules\qt_lib_quickvectorimagegenerator_private.pri D:\Qt\6.9.1\mingw_64\mkspecs\modules\qt_lib_quickwidgets.pri D:\Qt\6.9.1\mingw_64\mkspecs\modules\qt_lib_quickwidgets_private.pri D:\Qt\6.9.1\mingw_64\mkspecs\modules\qt_lib_shadertools.pri D:\Qt\6.9.1\mingw_64\mkspecs\modules\qt_lib_shadertools_private.pri D:\Qt\6.9.1\mingw_64\mkspecs\modules\qt_lib_spatialaudio.pri D:\Qt\6.9.1\mingw_64\mkspecs\modules\qt_lib_spatialaudio_private.pri D:\Qt\6.9.1\mingw_64\mkspecs\modules\qt_lib_sql.pri D:\Qt\6.9.1\mingw_64\mkspecs\modules\qt_lib_sql_private.pri D:\Qt\6.9.1\mingw_64\mkspecs\modules\qt_lib_svg.pri D:\Qt\6.9.1\mingw_64\mkspecs\modules\qt_lib_svg_private.pri D:\Qt\6.9.1\mingw_64\mkspecs\modules\qt_lib_svgwidgets.pri D:\Qt\6.9.1\mingw_64\mkspecs\modules\qt_lib_svgwidgets_private.pri D:\Qt\6.9.1\mingw_64\mkspecs\modules\qt_lib_testinternals_private.pri D:\Qt\6.9.1\mingw_64\mkspecs\modules\qt_lib_testlib.pri D:\Qt\6.9.1\mingw_64\mkspecs\modules\qt_lib_testlib_private.pri D:\Qt\6.9.1\mingw_64\mkspecs\modules\qt_lib_tools_private.pri D:\Qt\6.9.1\mingw_64\mkspecs\modules\qt_lib_uiplugin.pri D:\Qt\6.9.1\mingw_64\mkspecs\modules\qt_lib_uitools.pri D:\Qt\6.9.1\mingw_64\mkspecs\modules\qt_lib_uitools_private.pri D:\Qt\6.9.1\mingw_64\mkspecs\modules\qt_lib_widgets.pri D:\Qt\6.9.1\mingw_64\mkspecs\modules\qt_lib_widgets_private.pri D:\Qt\6.9.1\mingw_64\mkspecs\modules\qt_lib_xml.pri D:\Qt\6.9.1\mingw_64\mkspecs\modules\qt_lib_xml_private.pri D:\Qt\6.9.1\mingw_64\mkspecs\modules\qt_lib_zlib_private.pri D:\Qt\6.9.1\mingw_64\mkspecs\features\qt_functions.prf D:\Qt\6.9.1\mingw_64\mkspecs\features\qt_config.prf D:\Qt\6.9.1\mingw_64\mkspecs\win32-g++\qmake.conf D:\Qt\6.9.1\mingw_64\mkspecs\features\spec_post.prf .qmake.stash D:\Qt\6.9.1\mingw_64\mkspecs\features\exclusive_builds.prf D:\Qt\6.9.1\mingw_64\mkspecs\features\toolchain.prf D:\Qt\6.9.1\mingw_64\mkspecs\features\default_pre.prf D:\Qt\6.9.1\mingw_64\mkspecs\features\win32\default_pre.prf D:\Qt\6.9.1\mingw_64\mkspecs\features\resolve_config.prf D:\Qt\6.9.1\mingw_64\mkspecs\features\exclusive_builds_post.prf D:\Qt\6.9.1\mingw_64\mkspecs\features\default_post.prf D:\Qt\6.9.1\mingw_64\mkspecs\features\build_pass.prf D:\Qt\6.9.1\mingw_64\mkspecs\features\qtquickcompiler.prf D:\Qt\6.9.1\mingw_64\mkspecs\features\precompile_header.prf D:\Qt\6.9.1\mingw_64\mkspecs\features\warn_on.prf D:\Qt\6.9.1\mingw_64\mkspecs\features\permissions.prf D:\Qt\6.9.1\mingw_64\mkspecs\features\qt.prf D:\Qt\6.9.1\mingw_64\mkspecs\features\resources_functions.prf D:\Qt\6.9.1\mingw_64\mkspecs\features\resources.prf D:\Qt\6.9.1\mingw_64\mkspecs\features\moc.prf D:\Qt\6.9.1\mingw_64\mkspecs\features\win32\opengl.prf D:\Qt\6.9.1\mingw_64\mkspecs\features\uic.prf D:\Qt\6.9.1\mingw_64\mkspecs\features\qmake_use.prf D:\Qt\6.9.1\mingw_64\mkspecs\features\file_copies.prf D:\Qt\6.9.1\mingw_64\mkspecs\features\win32\windows.prf D:\Qt\6.9.1\mingw_64\mkspecs\features\testcase_targets.prf D:\Qt\6.9.1\mingw_64\mkspecs\features\exceptions.prf D:\Qt\6.9.1\mingw_64\mkspecs\features\yacc.prf D:\Qt\6.9.1\mingw_64\mkspecs\features\lex.prf untitled2.pro resources.qrc D:\Qt\6.9.1\mingw_64\lib\Qt6Widgets.prl D:\Qt\6.9.1\mingw_64\lib\Qt6Gui.prl D:\Qt\6.9.1\mingw_64\lib\Qt6Network.prl D:\Qt\6.9.1\mingw_64\lib\Qt6Concurrent.prl D:\Qt\6.9.1\mingw_64\lib\Qt6Core.prl D:\Qt\6.9.1\mingw_64\lib\Qt6EntryPoint.prl resources.qrc D:\Qt\6.9.1\mingw_64\mkspecs\features\data\dummy.cpp mainwindow.h main.cpp mainwindow.cpp + +clean: compiler_clean + -$(DEL_FILE) debug\main.o debug\mainwindow.o debug\qrc_resources.o debug\moc_mainwindow.o + -$(DEL_FILE) debug\launcher_res.o + +distclean: clean + -$(DEL_FILE) .qmake.stash + -$(DEL_FILE) $(DESTDIR_TARGET) + -$(DEL_FILE) Makefile.Debug + +mocclean: compiler_moc_header_clean compiler_moc_objc_header_clean compiler_moc_source_clean + +mocables: compiler_moc_header_make_all compiler_moc_objc_header_make_all compiler_moc_source_make_all + +check: first + +benchmark: first + +compiler_no_pch_compiler_make_all: +compiler_no_pch_compiler_clean: +compiler_rcc_make_all: debug/qrc_resources.cpp +compiler_rcc_clean: + -$(DEL_FILE) debug\qrc_resources.cpp +debug/qrc_resources.cpp: resources.qrc \ + D:/Qt/6.9.1/mingw_64/bin/rcc.exe \ + styles.qss \ + untitled2_zh_CN.ts + D:\Qt\6.9.1\mingw_64\bin\rcc.exe -name resources --no-zstd resources.qrc -o debug\qrc_resources.cpp + +compiler_moc_predefs_make_all: debug/moc_predefs.h +compiler_moc_predefs_clean: + -$(DEL_FILE) debug\moc_predefs.h +debug/moc_predefs.h: D:/Qt/6.9.1/mingw_64/mkspecs/features/data/dummy.cpp + g++ -fno-keep-inline-dllexport -g -std=gnu++1z -Wall -Wextra -Wextra -dM -E -o debug\moc_predefs.h D:\Qt\6.9.1\mingw_64\mkspecs\features\data\dummy.cpp + +compiler_moc_header_make_all: debug/moc_mainwindow.cpp +compiler_moc_header_clean: + -$(DEL_FILE) debug\moc_mainwindow.cpp +debug/moc_mainwindow.cpp: mainwindow.h \ + D:/Qt/6.9.1/mingw_64/include/QtWidgets/QMainWindow \ + D:/Qt/6.9.1/mingw_64/include/QtWidgets/qmainwindow.h \ + D:/Qt/6.9.1/mingw_64/include/QtWidgets/qtwidgetsglobal.h \ + D:/Qt/6.9.1/mingw_64/include/QtGui/qtguiglobal.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qglobal.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qtcoreglobal.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qtversionchecks.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qtconfiginclude.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qconfig.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qtcore-config.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qtconfigmacros.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qtdeprecationdefinitions.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qcompilerdetection.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qprocessordetection.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qsystemdetection.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qtcoreexports.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qtdeprecationmarkers.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qtclasshelpermacros.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qtpreprocessorsupport.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qassert.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qtnoop.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qtypes.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qtversion.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qtypeinfo.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qcontainerfwd.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qsysinfo.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qlogging.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qflags.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qcompare_impl.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qatomic.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qbasicatomic.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qatomic_cxx11.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qgenericatomic.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qyieldcpu.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qconstructormacros.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qdarwinhelpers.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qexceptionhandling.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qforeach.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qttypetraits.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qfunctionpointer.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qglobalstatic.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qmalloc.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qminmax.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qnumeric.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qoverload.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qswap.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qtenvironmentvariables.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qtresource.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qttranslation.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qversiontagging.h \ + D:/Qt/6.9.1/mingw_64/include/QtGui/qtgui-config.h \ + D:/Qt/6.9.1/mingw_64/include/QtGui/qtguiexports.h \ + D:/Qt/6.9.1/mingw_64/include/QtWidgets/qtwidgets-config.h \ + D:/Qt/6.9.1/mingw_64/include/QtWidgets/qtwidgetsexports.h \ + D:/Qt/6.9.1/mingw_64/include/QtWidgets/qwidget.h \ + D:/Qt/6.9.1/mingw_64/include/QtGui/qwindowdefs.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qobjectdefs.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qnamespace.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qcompare.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qstdlibdetection.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qcomparehelpers.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/q20type_traits.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qtmetamacros.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qobjectdefs_impl.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qfunctionaltools_impl.h \ + D:/Qt/6.9.1/mingw_64/include/QtGui/qwindowdefs_win.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qobject.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qstring.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qchar.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qstringview.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qbytearray.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qrefcount.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qarraydata.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qpair.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qarraydatapointer.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qarraydataops.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qcontainertools_impl.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qxptype_traits.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/q20functional.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/q20memory.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/q17memory.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qbytearrayalgorithms.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qbytearrayview.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qstringfwd.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qstringliteral.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qstringalgorithms.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qlatin1stringview.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qanystringview.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qutf8stringview.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qstringtokenizer.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qstringbuilder.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qstringconverter.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qstringconverter_base.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qlist.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qhashfunctions.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qiterator.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qbytearraylist.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qstringlist.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qalgorithms.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qstringmatcher.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qcoreevent.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qbasictimer.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qabstracteventdispatcher.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qeventloop.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qdeadlinetimer.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qelapsedtimer.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qmetatype.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qdatastream.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qscopedpointer.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qiodevicebase.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qfloat16.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qmath.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qtformat_impl.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qiterable.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qmetacontainer.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qcontainerinfo.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qtaggedpointer.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qscopeguard.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qobject_impl.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qbindingstorage.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qmargins.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/q23utility.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/q20utility.h \ + D:/Qt/6.9.1/mingw_64/include/QtGui/qaction.h \ + D:/Qt/6.9.1/mingw_64/include/QtGui/qkeysequence.h \ + D:/Qt/6.9.1/mingw_64/include/QtGui/qicon.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qsize.h \ + D:/Qt/6.9.1/mingw_64/include/QtGui/qpixmap.h \ + D:/Qt/6.9.1/mingw_64/include/QtGui/qpaintdevice.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qrect.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qpoint.h \ + D:/Qt/6.9.1/mingw_64/include/QtGui/qcolor.h \ + D:/Qt/6.9.1/mingw_64/include/QtGui/qrgb.h \ + D:/Qt/6.9.1/mingw_64/include/QtGui/qrgba64.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qshareddata.h \ + D:/Qt/6.9.1/mingw_64/include/QtGui/qimage.h \ + D:/Qt/6.9.1/mingw_64/include/QtGui/qpixelformat.h \ + D:/Qt/6.9.1/mingw_64/include/QtGui/qtransform.h \ + D:/Qt/6.9.1/mingw_64/include/QtGui/qpolygon.h \ + D:/Qt/6.9.1/mingw_64/include/QtGui/qregion.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qspan.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/q20iterator.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qline.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qvariant.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qdebug.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qtextstream.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qcontiguouscache.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qsharedpointer.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qsharedpointer_impl.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qmap.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qshareddata_impl.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qset.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qhash.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qvarlengtharray.h \ + D:/Qt/6.9.1/mingw_64/include/QtGui/qpalette.h \ + D:/Qt/6.9.1/mingw_64/include/QtGui/qbrush.h \ + D:/Qt/6.9.1/mingw_64/include/QtGui/qfont.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qendian.h \ + D:/Qt/6.9.1/mingw_64/include/QtGui/qfontmetrics.h \ + D:/Qt/6.9.1/mingw_64/include/QtGui/qfontinfo.h \ + D:/Qt/6.9.1/mingw_64/include/QtGui/qfontvariableaxis.h \ + D:/Qt/6.9.1/mingw_64/include/QtWidgets/qsizepolicy.h \ + D:/Qt/6.9.1/mingw_64/include/QtGui/qcursor.h \ + D:/Qt/6.9.1/mingw_64/include/QtGui/qbitmap.h \ + D:/Qt/6.9.1/mingw_64/include/QtGui/qevent.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qiodevice.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qurl.h \ + D:/Qt/6.9.1/mingw_64/include/QtGui/qeventpoint.h \ + D:/Qt/6.9.1/mingw_64/include/QtGui/qvector2d.h \ + D:/Qt/6.9.1/mingw_64/include/QtGui/qvectornd.h \ + D:/Qt/6.9.1/mingw_64/include/QtGui/qpointingdevice.h \ + D:/Qt/6.9.1/mingw_64/include/QtGui/qinputdevice.h \ + D:/Qt/6.9.1/mingw_64/include/QtGui/qscreen.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/QList \ + D:/Qt/6.9.1/mingw_64/include/QtCore/QObject \ + D:/Qt/6.9.1/mingw_64/include/QtCore/QRect \ + D:/Qt/6.9.1/mingw_64/include/QtCore/QSize \ + D:/Qt/6.9.1/mingw_64/include/QtCore/QSizeF \ + D:/Qt/6.9.1/mingw_64/include/QtGui/QTransform \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qnativeinterface.h \ + D:/Qt/6.9.1/mingw_64/include/QtGui/qscreen_platform.h \ + D:/Qt/6.9.1/mingw_64/include/QtGui/qguiapplication.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qcoreapplication.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qcoreapplication_platform.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qfuture.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qfutureinterface.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qmutex.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qtsan_impl.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qresultstore.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qfuture_impl.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qthreadpool.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qthread.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qrunnable.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qexception.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qpromise.h \ + D:/Qt/6.9.1/mingw_64/include/QtGui/qinputmethod.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qlocale.h \ + D:/Qt/6.9.1/mingw_64/include/QtGui/qguiapplication_platform.h \ + D:/Qt/6.9.1/mingw_64/include/QtWidgets/qtabwidget.h \ + D:/Qt/6.9.1/mingw_64/include/QtNetwork/QNetworkAccessManager \ + D:/Qt/6.9.1/mingw_64/include/QtNetwork/qnetworkaccessmanager.h \ + D:/Qt/6.9.1/mingw_64/include/QtNetwork/qtnetworkglobal.h \ + D:/Qt/6.9.1/mingw_64/include/QtNetwork/qtnetwork-config.h \ + D:/Qt/6.9.1/mingw_64/include/QtNetwork/qtnetworkexports.h \ + D:/Qt/6.9.1/mingw_64/include/QtNetwork/qnetworkrequest.h \ + D:/Qt/6.9.1/mingw_64/include/QtNetwork/qhttpheaders.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/QSharedDataPointer \ + D:/Qt/6.9.1/mingw_64/include/QtCore/QString \ + D:/Qt/6.9.1/mingw_64/include/QtCore/QUrl \ + D:/Qt/6.9.1/mingw_64/include/QtCore/QVariant \ + D:/Qt/6.9.1/mingw_64/include/QtCore/q26numeric.h \ + D:/Qt/6.9.1/mingw_64/include/QtNetwork/QSslConfiguration \ + D:/Qt/6.9.1/mingw_64/include/QtNetwork/qsslconfiguration.h \ + D:/Qt/6.9.1/mingw_64/include/QtNetwork/qsslsocket.h \ + D:/Qt/6.9.1/mingw_64/include/QtNetwork/qtcpsocket.h \ + D:/Qt/6.9.1/mingw_64/include/QtNetwork/qabstractsocket.h \ + D:/Qt/6.9.1/mingw_64/include/QtNetwork/qhostaddress.h \ + D:/Qt/6.9.1/mingw_64/include/QtNetwork/qsslerror.h \ + D:/Qt/6.9.1/mingw_64/include/QtNetwork/qsslcertificate.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qcryptographichash.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qdatetime.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qcalendar.h \ + D:/Qt/6.9.1/mingw_64/include/QtNetwork/qssl.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/QFlags \ + D:/Qt/6.9.1/mingw_64/include/QtNetwork/QSslPreSharedKeyAuthenticator \ + D:/Qt/6.9.1/mingw_64/include/QtNetwork/qsslpresharedkeyauthenticator.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/QMetaType \ + D:/Qt/6.9.1/mingw_64/include/QtCore/QJsonObject \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qjsonobject.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qjsonvalue.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qcborvalue.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qcborcommon.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qregularexpression.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/quuid.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qjsondocument.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qjsonparseerror.h \ + D:/Qt/6.9.1/mingw_64/include/QtWidgets/QLabel \ + D:/Qt/6.9.1/mingw_64/include/QtWidgets/qlabel.h \ + D:/Qt/6.9.1/mingw_64/include/QtWidgets/qframe.h \ + D:/Qt/6.9.1/mingw_64/include/QtGui/qpicture.h \ + D:/Qt/6.9.1/mingw_64/include/QtGui/qtextdocument.h \ + D:/Qt/6.9.1/mingw_64/include/QtWidgets/QPushButton \ + D:/Qt/6.9.1/mingw_64/include/QtWidgets/qpushbutton.h \ + D:/Qt/6.9.1/mingw_64/include/QtWidgets/qabstractbutton.h \ + D:/Qt/6.9.1/mingw_64/include/QtWidgets/QProgressBar \ + D:/Qt/6.9.1/mingw_64/include/QtWidgets/qprogressbar.h \ + D:/Qt/6.9.1/mingw_64/include/QtWidgets/QTextEdit \ + D:/Qt/6.9.1/mingw_64/include/QtWidgets/qtextedit.h \ + D:/Qt/6.9.1/mingw_64/include/QtWidgets/qabstractscrollarea.h \ + D:/Qt/6.9.1/mingw_64/include/QtGui/qtextoption.h \ + D:/Qt/6.9.1/mingw_64/include/QtGui/qtextcursor.h \ + D:/Qt/6.9.1/mingw_64/include/QtGui/qtextformat.h \ + D:/Qt/6.9.1/mingw_64/include/QtGui/qpen.h \ + D:/Qt/6.9.1/mingw_64/include/QtWidgets/QGroupBox \ + D:/Qt/6.9.1/mingw_64/include/QtWidgets/qgroupbox.h \ + D:/Qt/6.9.1/mingw_64/include/QtWidgets/QFileDialog \ + D:/Qt/6.9.1/mingw_64/include/QtWidgets/qfiledialog.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qdir.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qdirlisting.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qfiledevice.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qfile.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qfileinfo.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qtimezone.h \ + D:/Qt/6.9.1/mingw_64/include/QtWidgets/qdialog.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/QSettings \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qsettings.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/QDir \ + D:/Qt/6.9.1/mingw_64/include/QtWidgets/QLineEdit \ + D:/Qt/6.9.1/mingw_64/include/QtWidgets/qlineedit.h \ + D:/Qt/6.9.1/mingw_64/include/QtWidgets/QDialog \ + D:/Qt/6.9.1/mingw_64/include/QtWidgets/QCheckBox \ + D:/Qt/6.9.1/mingw_64/include/QtWidgets/qcheckbox.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/QTimer \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qtimer.h \ + D:/Qt/6.9.1/mingw_64/include/QtWidgets/QMessageBox \ + D:/Qt/6.9.1/mingw_64/include/QtWidgets/qmessagebox.h \ + D:/Qt/6.9.1/mingw_64/include/QtWidgets/qdialogbuttonbox.h \ + D:/Qt/6.9.1/mingw_64/include/QtWidgets/QApplication \ + D:/Qt/6.9.1/mingw_64/include/QtWidgets/qapplication.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/QProcess \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qprocess.h \ + debug/moc_predefs.h \ + D:/Qt/6.9.1/mingw_64/bin/moc.exe + D:\Qt\6.9.1\mingw_64\bin\moc.exe $(DEFINES) --include E:/C++/untitled2/debug/moc_predefs.h -ID:/Qt/6.9.1/mingw_64/mkspecs/win32-g++ -IE:/C++/untitled2 -ID:/Qt/6.9.1/mingw_64/include -ID:/Qt/6.9.1/mingw_64/include/QtWidgets -ID:/Qt/6.9.1/mingw_64/include/QtGui -ID:/Qt/6.9.1/mingw_64/include/QtNetwork -ID:/Qt/6.9.1/mingw_64/include/QtConcurrent -ID:/Qt/6.9.1/mingw_64/include/QtCore -ID:/Qt/Tools/mingw1310_64/lib/gcc/x86_64-w64-mingw32/13.1.0/include/c++ -ID:/Qt/Tools/mingw1310_64/lib/gcc/x86_64-w64-mingw32/13.1.0/include/c++/x86_64-w64-mingw32 -ID:/Qt/Tools/mingw1310_64/lib/gcc/x86_64-w64-mingw32/13.1.0/include/c++/backward -ID:/Qt/Tools/mingw1310_64/lib/gcc/x86_64-w64-mingw32/13.1.0/include -ID:/Qt/Tools/mingw1310_64/lib/gcc/x86_64-w64-mingw32/13.1.0/include-fixed -ID:/Qt/Tools/mingw1310_64/x86_64-w64-mingw32/include mainwindow.h -o debug\moc_mainwindow.cpp + +compiler_moc_objc_header_make_all: +compiler_moc_objc_header_clean: +compiler_moc_source_make_all: +compiler_moc_source_clean: +compiler_uic_make_all: +compiler_uic_clean: +compiler_yacc_decl_make_all: +compiler_yacc_decl_clean: +compiler_yacc_impl_make_all: +compiler_yacc_impl_clean: +compiler_lex_make_all: +compiler_lex_clean: +compiler_clean: compiler_rcc_clean compiler_moc_predefs_clean compiler_moc_header_clean + + + +####### Compile + +debug/main.o: main.cpp mainwindow.h \ + D:/Qt/6.9.1/mingw_64/include/QtWidgets/QMainWindow \ + D:/Qt/6.9.1/mingw_64/include/QtWidgets/qmainwindow.h \ + D:/Qt/6.9.1/mingw_64/include/QtWidgets/qtwidgetsglobal.h \ + D:/Qt/6.9.1/mingw_64/include/QtGui/qtguiglobal.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qglobal.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qtcoreglobal.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qtversionchecks.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qtconfiginclude.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qconfig.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qtcore-config.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qtconfigmacros.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qtdeprecationdefinitions.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qcompilerdetection.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qprocessordetection.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qsystemdetection.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qtcoreexports.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qtdeprecationmarkers.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qtclasshelpermacros.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qtpreprocessorsupport.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qassert.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qtnoop.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qtypes.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qtversion.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qtypeinfo.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qcontainerfwd.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qsysinfo.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qlogging.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qflags.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qcompare_impl.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qatomic.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qbasicatomic.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qatomic_cxx11.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qgenericatomic.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qyieldcpu.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qconstructormacros.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qdarwinhelpers.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qexceptionhandling.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qforeach.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qttypetraits.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qfunctionpointer.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qglobalstatic.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qmalloc.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qminmax.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qnumeric.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qoverload.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qswap.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qtenvironmentvariables.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qtresource.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qttranslation.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qversiontagging.h \ + D:/Qt/6.9.1/mingw_64/include/QtGui/qtgui-config.h \ + D:/Qt/6.9.1/mingw_64/include/QtGui/qtguiexports.h \ + D:/Qt/6.9.1/mingw_64/include/QtWidgets/qtwidgets-config.h \ + D:/Qt/6.9.1/mingw_64/include/QtWidgets/qtwidgetsexports.h \ + D:/Qt/6.9.1/mingw_64/include/QtWidgets/qwidget.h \ + D:/Qt/6.9.1/mingw_64/include/QtGui/qwindowdefs.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qobjectdefs.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qnamespace.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qcompare.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qstdlibdetection.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qcomparehelpers.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/q20type_traits.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qtmetamacros.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qobjectdefs_impl.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qfunctionaltools_impl.h \ + D:/Qt/6.9.1/mingw_64/include/QtGui/qwindowdefs_win.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qobject.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qstring.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qchar.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qstringview.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qbytearray.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qrefcount.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qarraydata.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qpair.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qarraydatapointer.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qarraydataops.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qcontainertools_impl.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qxptype_traits.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/q20functional.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/q20memory.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/q17memory.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qbytearrayalgorithms.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qbytearrayview.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qstringfwd.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qstringliteral.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qstringalgorithms.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qlatin1stringview.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qanystringview.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qutf8stringview.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qstringtokenizer.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qstringbuilder.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qstringconverter.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qstringconverter_base.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qlist.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qhashfunctions.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qiterator.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qbytearraylist.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qstringlist.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qalgorithms.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qstringmatcher.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qcoreevent.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qbasictimer.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qabstracteventdispatcher.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qeventloop.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qdeadlinetimer.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qelapsedtimer.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qmetatype.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qdatastream.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qscopedpointer.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qiodevicebase.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qfloat16.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qmath.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qtformat_impl.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qiterable.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qmetacontainer.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qcontainerinfo.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qtaggedpointer.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qscopeguard.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qobject_impl.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qbindingstorage.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qmargins.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/q23utility.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/q20utility.h \ + D:/Qt/6.9.1/mingw_64/include/QtGui/qaction.h \ + D:/Qt/6.9.1/mingw_64/include/QtGui/qkeysequence.h \ + D:/Qt/6.9.1/mingw_64/include/QtGui/qicon.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qsize.h \ + D:/Qt/6.9.1/mingw_64/include/QtGui/qpixmap.h \ + D:/Qt/6.9.1/mingw_64/include/QtGui/qpaintdevice.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qrect.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qpoint.h \ + D:/Qt/6.9.1/mingw_64/include/QtGui/qcolor.h \ + D:/Qt/6.9.1/mingw_64/include/QtGui/qrgb.h \ + D:/Qt/6.9.1/mingw_64/include/QtGui/qrgba64.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qshareddata.h \ + D:/Qt/6.9.1/mingw_64/include/QtGui/qimage.h \ + D:/Qt/6.9.1/mingw_64/include/QtGui/qpixelformat.h \ + D:/Qt/6.9.1/mingw_64/include/QtGui/qtransform.h \ + D:/Qt/6.9.1/mingw_64/include/QtGui/qpolygon.h \ + D:/Qt/6.9.1/mingw_64/include/QtGui/qregion.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qspan.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/q20iterator.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qline.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qvariant.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qdebug.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qtextstream.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qcontiguouscache.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qsharedpointer.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qsharedpointer_impl.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qmap.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qshareddata_impl.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qset.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qhash.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qvarlengtharray.h \ + D:/Qt/6.9.1/mingw_64/include/QtGui/qpalette.h \ + D:/Qt/6.9.1/mingw_64/include/QtGui/qbrush.h \ + D:/Qt/6.9.1/mingw_64/include/QtGui/qfont.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qendian.h \ + D:/Qt/6.9.1/mingw_64/include/QtGui/qfontmetrics.h \ + D:/Qt/6.9.1/mingw_64/include/QtGui/qfontinfo.h \ + D:/Qt/6.9.1/mingw_64/include/QtGui/qfontvariableaxis.h \ + D:/Qt/6.9.1/mingw_64/include/QtWidgets/qsizepolicy.h \ + D:/Qt/6.9.1/mingw_64/include/QtGui/qcursor.h \ + D:/Qt/6.9.1/mingw_64/include/QtGui/qbitmap.h \ + D:/Qt/6.9.1/mingw_64/include/QtGui/qevent.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qiodevice.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qurl.h \ + D:/Qt/6.9.1/mingw_64/include/QtGui/qeventpoint.h \ + D:/Qt/6.9.1/mingw_64/include/QtGui/qvector2d.h \ + D:/Qt/6.9.1/mingw_64/include/QtGui/qvectornd.h \ + D:/Qt/6.9.1/mingw_64/include/QtGui/qpointingdevice.h \ + D:/Qt/6.9.1/mingw_64/include/QtGui/qinputdevice.h \ + D:/Qt/6.9.1/mingw_64/include/QtGui/qscreen.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/QList \ + D:/Qt/6.9.1/mingw_64/include/QtCore/QObject \ + D:/Qt/6.9.1/mingw_64/include/QtCore/QRect \ + D:/Qt/6.9.1/mingw_64/include/QtCore/QSize \ + D:/Qt/6.9.1/mingw_64/include/QtCore/QSizeF \ + D:/Qt/6.9.1/mingw_64/include/QtGui/QTransform \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qnativeinterface.h \ + D:/Qt/6.9.1/mingw_64/include/QtGui/qscreen_platform.h \ + D:/Qt/6.9.1/mingw_64/include/QtGui/qguiapplication.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qcoreapplication.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qcoreapplication_platform.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qfuture.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qfutureinterface.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qmutex.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qtsan_impl.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qresultstore.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qfuture_impl.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qthreadpool.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qthread.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qrunnable.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qexception.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qpromise.h \ + D:/Qt/6.9.1/mingw_64/include/QtGui/qinputmethod.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qlocale.h \ + D:/Qt/6.9.1/mingw_64/include/QtGui/qguiapplication_platform.h \ + D:/Qt/6.9.1/mingw_64/include/QtWidgets/qtabwidget.h \ + D:/Qt/6.9.1/mingw_64/include/QtNetwork/QNetworkAccessManager \ + D:/Qt/6.9.1/mingw_64/include/QtNetwork/qnetworkaccessmanager.h \ + D:/Qt/6.9.1/mingw_64/include/QtNetwork/qtnetworkglobal.h \ + D:/Qt/6.9.1/mingw_64/include/QtNetwork/qtnetwork-config.h \ + D:/Qt/6.9.1/mingw_64/include/QtNetwork/qtnetworkexports.h \ + D:/Qt/6.9.1/mingw_64/include/QtNetwork/qnetworkrequest.h \ + D:/Qt/6.9.1/mingw_64/include/QtNetwork/qhttpheaders.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/QSharedDataPointer \ + D:/Qt/6.9.1/mingw_64/include/QtCore/QString \ + D:/Qt/6.9.1/mingw_64/include/QtCore/QUrl \ + D:/Qt/6.9.1/mingw_64/include/QtCore/QVariant \ + D:/Qt/6.9.1/mingw_64/include/QtCore/q26numeric.h \ + D:/Qt/6.9.1/mingw_64/include/QtNetwork/QSslConfiguration \ + D:/Qt/6.9.1/mingw_64/include/QtNetwork/qsslconfiguration.h \ + D:/Qt/6.9.1/mingw_64/include/QtNetwork/qsslsocket.h \ + D:/Qt/6.9.1/mingw_64/include/QtNetwork/qtcpsocket.h \ + D:/Qt/6.9.1/mingw_64/include/QtNetwork/qabstractsocket.h \ + D:/Qt/6.9.1/mingw_64/include/QtNetwork/qhostaddress.h \ + D:/Qt/6.9.1/mingw_64/include/QtNetwork/qsslerror.h \ + D:/Qt/6.9.1/mingw_64/include/QtNetwork/qsslcertificate.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qcryptographichash.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qdatetime.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qcalendar.h \ + D:/Qt/6.9.1/mingw_64/include/QtNetwork/qssl.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/QFlags \ + D:/Qt/6.9.1/mingw_64/include/QtNetwork/QSslPreSharedKeyAuthenticator \ + D:/Qt/6.9.1/mingw_64/include/QtNetwork/qsslpresharedkeyauthenticator.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/QMetaType \ + D:/Qt/6.9.1/mingw_64/include/QtCore/QJsonObject \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qjsonobject.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qjsonvalue.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qcborvalue.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qcborcommon.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qregularexpression.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/quuid.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qjsondocument.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qjsonparseerror.h \ + D:/Qt/6.9.1/mingw_64/include/QtWidgets/QLabel \ + D:/Qt/6.9.1/mingw_64/include/QtWidgets/qlabel.h \ + D:/Qt/6.9.1/mingw_64/include/QtWidgets/qframe.h \ + D:/Qt/6.9.1/mingw_64/include/QtGui/qpicture.h \ + D:/Qt/6.9.1/mingw_64/include/QtGui/qtextdocument.h \ + D:/Qt/6.9.1/mingw_64/include/QtWidgets/QPushButton \ + D:/Qt/6.9.1/mingw_64/include/QtWidgets/qpushbutton.h \ + D:/Qt/6.9.1/mingw_64/include/QtWidgets/qabstractbutton.h \ + D:/Qt/6.9.1/mingw_64/include/QtWidgets/QProgressBar \ + D:/Qt/6.9.1/mingw_64/include/QtWidgets/qprogressbar.h \ + D:/Qt/6.9.1/mingw_64/include/QtWidgets/QTextEdit \ + D:/Qt/6.9.1/mingw_64/include/QtWidgets/qtextedit.h \ + D:/Qt/6.9.1/mingw_64/include/QtWidgets/qabstractscrollarea.h \ + D:/Qt/6.9.1/mingw_64/include/QtGui/qtextoption.h \ + D:/Qt/6.9.1/mingw_64/include/QtGui/qtextcursor.h \ + D:/Qt/6.9.1/mingw_64/include/QtGui/qtextformat.h \ + D:/Qt/6.9.1/mingw_64/include/QtGui/qpen.h \ + D:/Qt/6.9.1/mingw_64/include/QtWidgets/QGroupBox \ + D:/Qt/6.9.1/mingw_64/include/QtWidgets/qgroupbox.h \ + D:/Qt/6.9.1/mingw_64/include/QtWidgets/QFileDialog \ + D:/Qt/6.9.1/mingw_64/include/QtWidgets/qfiledialog.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qdir.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qdirlisting.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qfiledevice.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qfile.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qfileinfo.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qtimezone.h \ + D:/Qt/6.9.1/mingw_64/include/QtWidgets/qdialog.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/QSettings \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qsettings.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/QDir \ + D:/Qt/6.9.1/mingw_64/include/QtWidgets/QLineEdit \ + D:/Qt/6.9.1/mingw_64/include/QtWidgets/qlineedit.h \ + D:/Qt/6.9.1/mingw_64/include/QtWidgets/QDialog \ + D:/Qt/6.9.1/mingw_64/include/QtWidgets/QCheckBox \ + D:/Qt/6.9.1/mingw_64/include/QtWidgets/qcheckbox.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/QTimer \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qtimer.h \ + D:/Qt/6.9.1/mingw_64/include/QtWidgets/QMessageBox \ + D:/Qt/6.9.1/mingw_64/include/QtWidgets/qmessagebox.h \ + D:/Qt/6.9.1/mingw_64/include/QtWidgets/qdialogbuttonbox.h \ + D:/Qt/6.9.1/mingw_64/include/QtWidgets/QApplication \ + D:/Qt/6.9.1/mingw_64/include/QtWidgets/qapplication.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/QProcess \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qprocess.h \ + D:/Qt/6.9.1/mingw_64/include/QtWidgets/QStyleFactory \ + D:/Qt/6.9.1/mingw_64/include/QtWidgets/qstylefactory.h \ + D:/Qt/6.9.1/mingw_64/include/QtGui/QPalette + $(CXX) -c $(CXXFLAGS) $(INCPATH) -o debug\main.o main.cpp + +debug/mainwindow.o: mainwindow.cpp mainwindow.h \ + D:/Qt/6.9.1/mingw_64/include/QtWidgets/QMainWindow \ + D:/Qt/6.9.1/mingw_64/include/QtWidgets/qmainwindow.h \ + D:/Qt/6.9.1/mingw_64/include/QtWidgets/qtwidgetsglobal.h \ + D:/Qt/6.9.1/mingw_64/include/QtGui/qtguiglobal.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qglobal.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qtcoreglobal.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qtversionchecks.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qtconfiginclude.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qconfig.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qtcore-config.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qtconfigmacros.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qtdeprecationdefinitions.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qcompilerdetection.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qprocessordetection.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qsystemdetection.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qtcoreexports.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qtdeprecationmarkers.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qtclasshelpermacros.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qtpreprocessorsupport.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qassert.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qtnoop.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qtypes.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qtversion.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qtypeinfo.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qcontainerfwd.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qsysinfo.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qlogging.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qflags.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qcompare_impl.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qatomic.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qbasicatomic.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qatomic_cxx11.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qgenericatomic.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qyieldcpu.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qconstructormacros.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qdarwinhelpers.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qexceptionhandling.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qforeach.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qttypetraits.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qfunctionpointer.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qglobalstatic.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qmalloc.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qminmax.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qnumeric.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qoverload.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qswap.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qtenvironmentvariables.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qtresource.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qttranslation.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qversiontagging.h \ + D:/Qt/6.9.1/mingw_64/include/QtGui/qtgui-config.h \ + D:/Qt/6.9.1/mingw_64/include/QtGui/qtguiexports.h \ + D:/Qt/6.9.1/mingw_64/include/QtWidgets/qtwidgets-config.h \ + D:/Qt/6.9.1/mingw_64/include/QtWidgets/qtwidgetsexports.h \ + D:/Qt/6.9.1/mingw_64/include/QtWidgets/qwidget.h \ + D:/Qt/6.9.1/mingw_64/include/QtGui/qwindowdefs.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qobjectdefs.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qnamespace.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qcompare.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qstdlibdetection.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qcomparehelpers.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/q20type_traits.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qtmetamacros.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qobjectdefs_impl.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qfunctionaltools_impl.h \ + D:/Qt/6.9.1/mingw_64/include/QtGui/qwindowdefs_win.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qobject.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qstring.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qchar.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qstringview.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qbytearray.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qrefcount.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qarraydata.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qpair.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qarraydatapointer.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qarraydataops.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qcontainertools_impl.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qxptype_traits.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/q20functional.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/q20memory.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/q17memory.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qbytearrayalgorithms.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qbytearrayview.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qstringfwd.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qstringliteral.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qstringalgorithms.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qlatin1stringview.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qanystringview.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qutf8stringview.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qstringtokenizer.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qstringbuilder.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qstringconverter.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qstringconverter_base.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qlist.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qhashfunctions.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qiterator.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qbytearraylist.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qstringlist.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qalgorithms.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qstringmatcher.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qcoreevent.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qbasictimer.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qabstracteventdispatcher.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qeventloop.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qdeadlinetimer.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qelapsedtimer.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qmetatype.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qdatastream.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qscopedpointer.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qiodevicebase.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qfloat16.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qmath.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qtformat_impl.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qiterable.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qmetacontainer.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qcontainerinfo.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qtaggedpointer.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qscopeguard.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qobject_impl.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qbindingstorage.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qmargins.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/q23utility.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/q20utility.h \ + D:/Qt/6.9.1/mingw_64/include/QtGui/qaction.h \ + D:/Qt/6.9.1/mingw_64/include/QtGui/qkeysequence.h \ + D:/Qt/6.9.1/mingw_64/include/QtGui/qicon.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qsize.h \ + D:/Qt/6.9.1/mingw_64/include/QtGui/qpixmap.h \ + D:/Qt/6.9.1/mingw_64/include/QtGui/qpaintdevice.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qrect.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qpoint.h \ + D:/Qt/6.9.1/mingw_64/include/QtGui/qcolor.h \ + D:/Qt/6.9.1/mingw_64/include/QtGui/qrgb.h \ + D:/Qt/6.9.1/mingw_64/include/QtGui/qrgba64.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qshareddata.h \ + D:/Qt/6.9.1/mingw_64/include/QtGui/qimage.h \ + D:/Qt/6.9.1/mingw_64/include/QtGui/qpixelformat.h \ + D:/Qt/6.9.1/mingw_64/include/QtGui/qtransform.h \ + D:/Qt/6.9.1/mingw_64/include/QtGui/qpolygon.h \ + D:/Qt/6.9.1/mingw_64/include/QtGui/qregion.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qspan.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/q20iterator.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qline.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qvariant.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qdebug.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qtextstream.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qcontiguouscache.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qsharedpointer.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qsharedpointer_impl.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qmap.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qshareddata_impl.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qset.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qhash.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qvarlengtharray.h \ + D:/Qt/6.9.1/mingw_64/include/QtGui/qpalette.h \ + D:/Qt/6.9.1/mingw_64/include/QtGui/qbrush.h \ + D:/Qt/6.9.1/mingw_64/include/QtGui/qfont.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qendian.h \ + D:/Qt/6.9.1/mingw_64/include/QtGui/qfontmetrics.h \ + D:/Qt/6.9.1/mingw_64/include/QtGui/qfontinfo.h \ + D:/Qt/6.9.1/mingw_64/include/QtGui/qfontvariableaxis.h \ + D:/Qt/6.9.1/mingw_64/include/QtWidgets/qsizepolicy.h \ + D:/Qt/6.9.1/mingw_64/include/QtGui/qcursor.h \ + D:/Qt/6.9.1/mingw_64/include/QtGui/qbitmap.h \ + D:/Qt/6.9.1/mingw_64/include/QtGui/qevent.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qiodevice.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qurl.h \ + D:/Qt/6.9.1/mingw_64/include/QtGui/qeventpoint.h \ + D:/Qt/6.9.1/mingw_64/include/QtGui/qvector2d.h \ + D:/Qt/6.9.1/mingw_64/include/QtGui/qvectornd.h \ + D:/Qt/6.9.1/mingw_64/include/QtGui/qpointingdevice.h \ + D:/Qt/6.9.1/mingw_64/include/QtGui/qinputdevice.h \ + D:/Qt/6.9.1/mingw_64/include/QtGui/qscreen.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/QList \ + D:/Qt/6.9.1/mingw_64/include/QtCore/QObject \ + D:/Qt/6.9.1/mingw_64/include/QtCore/QRect \ + D:/Qt/6.9.1/mingw_64/include/QtCore/QSize \ + D:/Qt/6.9.1/mingw_64/include/QtCore/QSizeF \ + D:/Qt/6.9.1/mingw_64/include/QtGui/QTransform \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qnativeinterface.h \ + D:/Qt/6.9.1/mingw_64/include/QtGui/qscreen_platform.h \ + D:/Qt/6.9.1/mingw_64/include/QtGui/qguiapplication.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qcoreapplication.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qcoreapplication_platform.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qfuture.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qfutureinterface.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qmutex.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qtsan_impl.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qresultstore.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qfuture_impl.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qthreadpool.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qthread.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qrunnable.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qexception.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qpromise.h \ + D:/Qt/6.9.1/mingw_64/include/QtGui/qinputmethod.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qlocale.h \ + D:/Qt/6.9.1/mingw_64/include/QtGui/qguiapplication_platform.h \ + D:/Qt/6.9.1/mingw_64/include/QtWidgets/qtabwidget.h \ + D:/Qt/6.9.1/mingw_64/include/QtNetwork/QNetworkAccessManager \ + D:/Qt/6.9.1/mingw_64/include/QtNetwork/qnetworkaccessmanager.h \ + D:/Qt/6.9.1/mingw_64/include/QtNetwork/qtnetworkglobal.h \ + D:/Qt/6.9.1/mingw_64/include/QtNetwork/qtnetwork-config.h \ + D:/Qt/6.9.1/mingw_64/include/QtNetwork/qtnetworkexports.h \ + D:/Qt/6.9.1/mingw_64/include/QtNetwork/qnetworkrequest.h \ + D:/Qt/6.9.1/mingw_64/include/QtNetwork/qhttpheaders.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/QSharedDataPointer \ + D:/Qt/6.9.1/mingw_64/include/QtCore/QString \ + D:/Qt/6.9.1/mingw_64/include/QtCore/QUrl \ + D:/Qt/6.9.1/mingw_64/include/QtCore/QVariant \ + D:/Qt/6.9.1/mingw_64/include/QtCore/q26numeric.h \ + D:/Qt/6.9.1/mingw_64/include/QtNetwork/QSslConfiguration \ + D:/Qt/6.9.1/mingw_64/include/QtNetwork/qsslconfiguration.h \ + D:/Qt/6.9.1/mingw_64/include/QtNetwork/qsslsocket.h \ + D:/Qt/6.9.1/mingw_64/include/QtNetwork/qtcpsocket.h \ + D:/Qt/6.9.1/mingw_64/include/QtNetwork/qabstractsocket.h \ + D:/Qt/6.9.1/mingw_64/include/QtNetwork/qhostaddress.h \ + D:/Qt/6.9.1/mingw_64/include/QtNetwork/qsslerror.h \ + D:/Qt/6.9.1/mingw_64/include/QtNetwork/qsslcertificate.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qcryptographichash.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qdatetime.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qcalendar.h \ + D:/Qt/6.9.1/mingw_64/include/QtNetwork/qssl.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/QFlags \ + D:/Qt/6.9.1/mingw_64/include/QtNetwork/QSslPreSharedKeyAuthenticator \ + D:/Qt/6.9.1/mingw_64/include/QtNetwork/qsslpresharedkeyauthenticator.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/QMetaType \ + D:/Qt/6.9.1/mingw_64/include/QtCore/QJsonObject \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qjsonobject.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qjsonvalue.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qcborvalue.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qcborcommon.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qregularexpression.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/quuid.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qjsondocument.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qjsonparseerror.h \ + D:/Qt/6.9.1/mingw_64/include/QtWidgets/QLabel \ + D:/Qt/6.9.1/mingw_64/include/QtWidgets/qlabel.h \ + D:/Qt/6.9.1/mingw_64/include/QtWidgets/qframe.h \ + D:/Qt/6.9.1/mingw_64/include/QtGui/qpicture.h \ + D:/Qt/6.9.1/mingw_64/include/QtGui/qtextdocument.h \ + D:/Qt/6.9.1/mingw_64/include/QtWidgets/QPushButton \ + D:/Qt/6.9.1/mingw_64/include/QtWidgets/qpushbutton.h \ + D:/Qt/6.9.1/mingw_64/include/QtWidgets/qabstractbutton.h \ + D:/Qt/6.9.1/mingw_64/include/QtWidgets/QProgressBar \ + D:/Qt/6.9.1/mingw_64/include/QtWidgets/qprogressbar.h \ + D:/Qt/6.9.1/mingw_64/include/QtWidgets/QTextEdit \ + D:/Qt/6.9.1/mingw_64/include/QtWidgets/qtextedit.h \ + D:/Qt/6.9.1/mingw_64/include/QtWidgets/qabstractscrollarea.h \ + D:/Qt/6.9.1/mingw_64/include/QtGui/qtextoption.h \ + D:/Qt/6.9.1/mingw_64/include/QtGui/qtextcursor.h \ + D:/Qt/6.9.1/mingw_64/include/QtGui/qtextformat.h \ + D:/Qt/6.9.1/mingw_64/include/QtGui/qpen.h \ + D:/Qt/6.9.1/mingw_64/include/QtWidgets/QGroupBox \ + D:/Qt/6.9.1/mingw_64/include/QtWidgets/qgroupbox.h \ + D:/Qt/6.9.1/mingw_64/include/QtWidgets/QFileDialog \ + D:/Qt/6.9.1/mingw_64/include/QtWidgets/qfiledialog.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qdir.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qdirlisting.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qfiledevice.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qfile.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qfileinfo.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qtimezone.h \ + D:/Qt/6.9.1/mingw_64/include/QtWidgets/qdialog.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/QSettings \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qsettings.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/QDir \ + D:/Qt/6.9.1/mingw_64/include/QtWidgets/QLineEdit \ + D:/Qt/6.9.1/mingw_64/include/QtWidgets/qlineedit.h \ + D:/Qt/6.9.1/mingw_64/include/QtWidgets/QDialog \ + D:/Qt/6.9.1/mingw_64/include/QtWidgets/QCheckBox \ + D:/Qt/6.9.1/mingw_64/include/QtWidgets/qcheckbox.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/QTimer \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qtimer.h \ + D:/Qt/6.9.1/mingw_64/include/QtWidgets/QMessageBox \ + D:/Qt/6.9.1/mingw_64/include/QtWidgets/qmessagebox.h \ + D:/Qt/6.9.1/mingw_64/include/QtWidgets/qdialogbuttonbox.h \ + D:/Qt/6.9.1/mingw_64/include/QtWidgets/QApplication \ + D:/Qt/6.9.1/mingw_64/include/QtWidgets/qapplication.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/QProcess \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qprocess.h \ + D:/Qt/6.9.1/mingw_64/include/QtWidgets/QVBoxLayout \ + D:/Qt/6.9.1/mingw_64/include/QtWidgets/qboxlayout.h \ + D:/Qt/6.9.1/mingw_64/include/QtWidgets/qlayout.h \ + D:/Qt/6.9.1/mingw_64/include/QtWidgets/qlayoutitem.h \ + D:/Qt/6.9.1/mingw_64/include/QtWidgets/qgridlayout.h \ + D:/Qt/6.9.1/mingw_64/include/QtWidgets/QHBoxLayout \ + D:/Qt/6.9.1/mingw_64/include/QtNetwork/QNetworkReply \ + D:/Qt/6.9.1/mingw_64/include/QtNetwork/qnetworkreply.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/QIODevice \ + D:/Qt/6.9.1/mingw_64/include/QtNetwork/QNetworkRequest \ + D:/Qt/6.9.1/mingw_64/include/QtCore/QJsonDocument \ + D:/Qt/6.9.1/mingw_64/include/QtCore/QJsonArray \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qjsonarray.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/QFile \ + D:/Qt/6.9.1/mingw_64/include/QtGui/QDesktopServices \ + D:/Qt/6.9.1/mingw_64/include/QtGui/qdesktopservices.h \ + D:/Qt/6.9.1/mingw_64/include/QtWidgets/QSystemTrayIcon \ + D:/Qt/6.9.1/mingw_64/include/QtWidgets/qsystemtrayicon.h \ + D:/Qt/6.9.1/mingw_64/include/QtWidgets/QMenu \ + D:/Qt/6.9.1/mingw_64/include/QtWidgets/qmenu.h \ + D:/Qt/6.9.1/mingw_64/include/QtGui/QCloseEvent \ + D:/Qt/6.9.1/mingw_64/include/QtCore/QThread \ + D:/Qt/6.9.1/mingw_64/include/QtNetwork/QSslSocket \ + D:/Qt/6.9.1/mingw_64/include/QtCore/QUuid \ + D:/Qt/6.9.1/mingw_64/include/QtCore/QCryptographicHash \ + D:/Qt/6.9.1/mingw_64/include/QtCore/QDateTime \ + D:/Qt/6.9.1/mingw_64/include/QtCore/QFuture \ + D:/Qt/6.9.1/mingw_64/include/QtConcurrent/QtConcurrent \ + D:/Qt/6.9.1/mingw_64/include/QtConcurrent/QtConcurrentDepends \ + D:/Qt/6.9.1/mingw_64/include/QtCore/QtCore \ + D:/Qt/6.9.1/mingw_64/include/QtCore/QtCoreDepends \ + D:/Qt/6.9.1/mingw_64/include/QtCore/q20algorithm.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/q20chrono.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/q20map.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/q20vector.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/q23functional.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qabstractanimation.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qabstractitemmodel.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qabstractnativeeventfilter.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qabstractproxymodel.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qanimationgroup.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qapplicationstatic.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/QMutex \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qassociativeiterable.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qatomicscopedvaluerollback.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qbitarray.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qbuffer.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qbytearraymatcher.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qcache.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qcborarray.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qcbormap.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qcborstream.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qcborstreamreader.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qcborstreamwriter.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qchronotimer.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qproperty.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qpropertyprivate.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qcollator.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qcommandlineoption.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qcommandlineparser.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qconcatenatetablesproxymodel.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qdiriterator.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qeasingcurve.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qfactoryinterface.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qfileselector.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/QStringList \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qfilesystemwatcher.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qfuturesynchronizer.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qfuturewatcher.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qidentityproxymodel.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qitemselectionmodel.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qlatin1stringmatcher.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qlibrary.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qlibraryinfo.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qversionnumber.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qtyperevision.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qlockfile.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qloggingcategory.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qmessageauthenticationcode.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qmetaobject.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qmimedata.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qmimedatabase.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qmimetype.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qobjectcleanuphandler.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qoperatingsystemversion.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qparallelanimationgroup.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qpauseanimation.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qpermissions.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qplugin.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qpointer.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qpluginloader.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qpropertyanimation.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qvariantanimation.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qqueue.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qrandom.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qreadwritelock.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qresource.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qsavefile.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qscopedvaluerollback.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qsemaphore.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qsequentialanimationgroup.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qsequentialiterable.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qsharedmemory.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qtipccommon.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qsignalmapper.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qsimd.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qsocketnotifier.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qsortfilterproxymodel.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qstack.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qstandardpaths.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qstaticlatin1stringmatcher.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qstorageinfo.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qstringlistmodel.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qsystemsemaphore.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qtcoreversion.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qtemporarydir.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qtemporaryfile.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qtextboundaryfinder.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qthreadstorage.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qtimeline.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qtmocconstants.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qtranslator.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qtransposeproxymodel.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qtsymbolmacros.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qurlquery.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qvarianthash.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/QHash \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qvariantlist.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qvariantmap.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/QMap \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qvector.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qwaitcondition.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/QDeadlineTimer \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qwineventnotifier.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qxmlstream.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qxpfunctional.h \ + D:/Qt/6.9.1/mingw_64/include/QtConcurrent/qtaskbuilder.h \ + D:/Qt/6.9.1/mingw_64/include/QtConcurrent/qtconcurrentstoredfunctioncall.h \ + D:/Qt/6.9.1/mingw_64/include/QtConcurrent/qtconcurrent_global.h \ + D:/Qt/6.9.1/mingw_64/include/QtConcurrent/qtconcurrentexports.h \ + D:/Qt/6.9.1/mingw_64/include/QtConcurrent/qtconcurrentrunbase.h \ + D:/Qt/6.9.1/mingw_64/include/QtConcurrent/qtconcurrentcompilertest.h \ + D:/Qt/6.9.1/mingw_64/include/QtConcurrent/qtconcurrentfilter.h \ + D:/Qt/6.9.1/mingw_64/include/QtConcurrent/qtconcurrentfilterkernel.h \ + D:/Qt/6.9.1/mingw_64/include/QtConcurrent/qtconcurrentiteratekernel.h \ + D:/Qt/6.9.1/mingw_64/include/QtConcurrent/qtconcurrentmedian.h \ + D:/Qt/6.9.1/mingw_64/include/QtConcurrent/qtconcurrentthreadengine.h \ + D:/Qt/6.9.1/mingw_64/include/QtConcurrent/qtconcurrentmapkernel.h \ + D:/Qt/6.9.1/mingw_64/include/QtConcurrent/qtconcurrentreducekernel.h \ + D:/Qt/6.9.1/mingw_64/include/QtConcurrent/qtconcurrentfunctionwrappers.h \ + D:/Qt/6.9.1/mingw_64/include/QtConcurrent/qtconcurrentmap.h \ + D:/Qt/6.9.1/mingw_64/include/QtConcurrent/qtconcurrentrun.h \ + D:/Qt/6.9.1/mingw_64/include/QtConcurrent/qtconcurrenttask.h \ + D:/Qt/6.9.1/mingw_64/include/QtConcurrent/qtconcurrentversion.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/QDebug \ + D:/Qt/6.9.1/mingw_64/include/QtGui/QGuiApplication \ + D:/Qt/6.9.1/mingw_64/include/QtGui/QScreen \ + D:/Qt/6.9.1/mingw_64/include/QtCore/QUrlQuery \ + D:/Qt/6.9.1/mingw_64/include/QtCore/QRegularExpression + $(CXX) -c $(CXXFLAGS) $(INCPATH) -o debug\mainwindow.o mainwindow.cpp + +debug/qrc_resources.o: debug/qrc_resources.cpp + $(CXX) -c $(CXXFLAGS) $(INCPATH) -o debug\qrc_resources.o debug\qrc_resources.cpp + +debug/moc_mainwindow.o: debug/moc_mainwindow.cpp + $(CXX) -c $(CXXFLAGS) $(INCPATH) -o debug\moc_mainwindow.o debug\moc_mainwindow.cpp + +####### Install + +install: FORCE + +uninstall: FORCE + +FORCE: + +.SUFFIXES: + diff --git a/C++/2.3.0/Makefile.Release b/C++/2.3.0/Makefile.Release new file mode 100644 index 0000000..9baafdd --- /dev/null +++ b/C++/2.3.0/Makefile.Release @@ -0,0 +1,1173 @@ +############################################################################# +# Makefile for building: untitled2 +# Generated by qmake (3.1) (Qt 6.9.1) +# Project: untitled2.pro +# Template: app +############################################################################# + +MAKEFILE = Makefile.Release + +EQ = = + +####### Compiler, tools and options + +CC = gcc +CXX = g++ +DEFINES = -DUNICODE -D_UNICODE -DWIN32 -DMINGW_HAS_SECURE_API=1 -DQT_NO_DEBUG -DQT_WIDGETS_LIB -DQT_GUI_LIB -DQT_NETWORK_LIB -DQT_CONCURRENT_LIB -DQT_CORE_LIB -DQT_NEEDS_QMAIN +CFLAGS = -fno-keep-inline-dllexport -O2 -Wall -Wextra -Wextra $(DEFINES) +CXXFLAGS = -fno-keep-inline-dllexport -O2 -std=gnu++1z -Wall -Wextra -Wextra -fexceptions -mthreads $(DEFINES) +INCPATH = -I. -ID:/Qt/6.9.1/mingw_64/include -ID:/Qt/6.9.1/mingw_64/include/QtWidgets -ID:/Qt/6.9.1/mingw_64/include/QtGui -ID:/Qt/6.9.1/mingw_64/include/QtNetwork -ID:/Qt/6.9.1/mingw_64/include/QtConcurrent -ID:/Qt/6.9.1/mingw_64/include/QtCore -Irelease -I/include -ID:/Qt/6.9.1/mingw_64/mkspecs/win32-g++ +LINKER = g++ +LFLAGS = -Wl,-s -Wl,-subsystem,windows -mthreads +LIBS = -ladvapi32 -luser32 -lshell32 -lkernel32 D:\Qt\6.9.1\mingw_64\lib\libQt6Widgets.a D:\Qt\6.9.1\mingw_64\lib\libQt6Gui.a D:\Qt\6.9.1\mingw_64\lib\libQt6Network.a D:\Qt\6.9.1\mingw_64\lib\libQt6Concurrent.a D:\Qt\6.9.1\mingw_64\lib\libQt6Core.a release\launcher_res.o -lmingw32 D:\Qt\6.9.1\mingw_64\lib\libQt6EntryPoint.a -lshell32 +QMAKE = D:\Qt\6.9.1\mingw_64\bin\qmake.exe +DEL_FILE = del +CHK_DIR_EXISTS= if not exist +MKDIR = mkdir +COPY = copy /y +COPY_FILE = copy /y +COPY_DIR = xcopy /s /q /y /i +INSTALL_FILE = copy /y +INSTALL_PROGRAM = copy /y +INSTALL_DIR = xcopy /s /q /y /i +QINSTALL = D:\Qt\6.9.1\mingw_64\bin\qmake.exe -install qinstall +QINSTALL_PROGRAM = D:\Qt\6.9.1\mingw_64\bin\qmake.exe -install qinstall -exe +DEL_FILE = del +SYMLINK = $(QMAKE) -install ln -f -s +DEL_DIR = rmdir +MOVE = move +IDC = idc +IDL = midl +ZIP = zip -r -9 +DEF_FILE = +RES_FILE = release\launcher_res.o +SED = $(QMAKE) -install sed +MOVE = move + +####### Output directory + +OBJECTS_DIR = release + +####### Files + +SOURCES = main.cpp \ + mainwindow.cpp release\qrc_resources.cpp \ + release\moc_mainwindow.cpp +OBJECTS = release/main.o \ + release/mainwindow.o \ + release/qrc_resources.o \ + release/moc_mainwindow.o + +DIST = mainwindow.h main.cpp \ + mainwindow.cpp +QMAKE_TARGET = untitled2 +DESTDIR = release\ #avoid trailing-slash linebreak +TARGET = untitled2.exe +DESTDIR_TARGET = release\untitled2.exe + +####### Build rules + +first: all +all: Makefile.Release release/untitled2.exe + +release/untitled2.exe: D:/Qt/6.9.1/mingw_64/lib/libQt6Widgets.a D:/Qt/6.9.1/mingw_64/lib/libQt6Gui.a D:/Qt/6.9.1/mingw_64/lib/libQt6Network.a D:/Qt/6.9.1/mingw_64/lib/libQt6Concurrent.a D:/Qt/6.9.1/mingw_64/lib/libQt6Core.a D:/Qt/6.9.1/mingw_64/lib/libQt6EntryPoint.a $(OBJECTS) release/launcher_res.o + $(LINKER) $(LFLAGS) -o $(DESTDIR_TARGET) $(OBJECTS) $(LIBS) + +release/launcher_res.o: launcher.rc + windres -i launcher.rc -o release\launcher_res.o --include-dir=. $(DEFINES) + +qmake: FORCE + @$(QMAKE) -o Makefile.Release untitled2.pro -spec win32-g++ "CONFIG+=qtquickcompiler" + +qmake_all: FORCE + +dist: + $(ZIP) untitled2.zip $(SOURCES) $(DIST) untitled2.pro D:\Qt\6.9.1\mingw_64\mkspecs\features\spec_pre.prf D:\Qt\6.9.1\mingw_64\mkspecs\features\device_config.prf D:\Qt\6.9.1\mingw_64\mkspecs\common\sanitize.conf D:\Qt\6.9.1\mingw_64\mkspecs\common\gcc-base.conf D:\Qt\6.9.1\mingw_64\mkspecs\common\g++-base.conf D:\Qt\6.9.1\mingw_64\mkspecs\features\win32\windows_vulkan_sdk.prf D:\Qt\6.9.1\mingw_64\mkspecs\common\windows-vulkan.conf D:\Qt\6.9.1\mingw_64\mkspecs\common\g++-win32.conf D:\Qt\6.9.1\mingw_64\mkspecs\common\windows-desktop.conf D:\Qt\6.9.1\mingw_64\mkspecs\qconfig.pri D:\Qt\6.9.1\mingw_64\mkspecs\modules\qt_ext_freetype.pri D:\Qt\6.9.1\mingw_64\mkspecs\modules\qt_ext_libjpeg.pri D:\Qt\6.9.1\mingw_64\mkspecs\modules\qt_ext_libpng.pri D:\Qt\6.9.1\mingw_64\mkspecs\modules\qt_ext_openxr_loader.pri D:\Qt\6.9.1\mingw_64\mkspecs\modules\qt_lib_charts.pri D:\Qt\6.9.1\mingw_64\mkspecs\modules\qt_lib_charts_private.pri D:\Qt\6.9.1\mingw_64\mkspecs\modules\qt_lib_chartsqml.pri D:\Qt\6.9.1\mingw_64\mkspecs\modules\qt_lib_chartsqml_private.pri D:\Qt\6.9.1\mingw_64\mkspecs\modules\qt_lib_concurrent.pri D:\Qt\6.9.1\mingw_64\mkspecs\modules\qt_lib_concurrent_private.pri D:\Qt\6.9.1\mingw_64\mkspecs\modules\qt_lib_core.pri D:\Qt\6.9.1\mingw_64\mkspecs\modules\qt_lib_core_private.pri D:\Qt\6.9.1\mingw_64\mkspecs\modules\qt_lib_dbus.pri D:\Qt\6.9.1\mingw_64\mkspecs\modules\qt_lib_dbus_private.pri D:\Qt\6.9.1\mingw_64\mkspecs\modules\qt_lib_designer.pri D:\Qt\6.9.1\mingw_64\mkspecs\modules\qt_lib_designer_private.pri D:\Qt\6.9.1\mingw_64\mkspecs\modules\qt_lib_designercomponents_private.pri D:\Qt\6.9.1\mingw_64\mkspecs\modules\qt_lib_devicediscovery_support_private.pri D:\Qt\6.9.1\mingw_64\mkspecs\modules\qt_lib_entrypoint_private.pri D:\Qt\6.9.1\mingw_64\mkspecs\modules\qt_lib_example_icons_private.pri D:\Qt\6.9.1\mingw_64\mkspecs\modules\qt_lib_examples_asset_downloader_private.pri D:\Qt\6.9.1\mingw_64\mkspecs\modules\qt_lib_fb_support_private.pri D:\Qt\6.9.1\mingw_64\mkspecs\modules\qt_lib_ffmpegmediapluginimpl_private.pri D:\Qt\6.9.1\mingw_64\mkspecs\modules\qt_lib_freetype_private.pri D:\Qt\6.9.1\mingw_64\mkspecs\modules\qt_lib_gui.pri D:\Qt\6.9.1\mingw_64\mkspecs\modules\qt_lib_gui_private.pri D:\Qt\6.9.1\mingw_64\mkspecs\modules\qt_lib_harfbuzz_private.pri D:\Qt\6.9.1\mingw_64\mkspecs\modules\qt_lib_help.pri D:\Qt\6.9.1\mingw_64\mkspecs\modules\qt_lib_help_private.pri D:\Qt\6.9.1\mingw_64\mkspecs\modules\qt_lib_jpeg_private.pri D:\Qt\6.9.1\mingw_64\mkspecs\modules\qt_lib_labsanimation.pri D:\Qt\6.9.1\mingw_64\mkspecs\modules\qt_lib_labsanimation_private.pri D:\Qt\6.9.1\mingw_64\mkspecs\modules\qt_lib_labsfolderlistmodel.pri D:\Qt\6.9.1\mingw_64\mkspecs\modules\qt_lib_labsfolderlistmodel_private.pri D:\Qt\6.9.1\mingw_64\mkspecs\modules\qt_lib_labsplatform.pri D:\Qt\6.9.1\mingw_64\mkspecs\modules\qt_lib_labsplatform_private.pri D:\Qt\6.9.1\mingw_64\mkspecs\modules\qt_lib_labsqmlmodels.pri D:\Qt\6.9.1\mingw_64\mkspecs\modules\qt_lib_labsqmlmodels_private.pri D:\Qt\6.9.1\mingw_64\mkspecs\modules\qt_lib_labssettings.pri D:\Qt\6.9.1\mingw_64\mkspecs\modules\qt_lib_labssettings_private.pri D:\Qt\6.9.1\mingw_64\mkspecs\modules\qt_lib_labssharedimage.pri D:\Qt\6.9.1\mingw_64\mkspecs\modules\qt_lib_labssharedimage_private.pri D:\Qt\6.9.1\mingw_64\mkspecs\modules\qt_lib_labswavefrontmesh.pri D:\Qt\6.9.1\mingw_64\mkspecs\modules\qt_lib_labswavefrontmesh_private.pri D:\Qt\6.9.1\mingw_64\mkspecs\modules\qt_lib_linguist.pri D:\Qt\6.9.1\mingw_64\mkspecs\modules\qt_lib_multimedia.pri D:\Qt\6.9.1\mingw_64\mkspecs\modules\qt_lib_multimedia_private.pri D:\Qt\6.9.1\mingw_64\mkspecs\modules\qt_lib_multimediaquick_private.pri D:\Qt\6.9.1\mingw_64\mkspecs\modules\qt_lib_multimediatestlibprivate_private.pri D:\Qt\6.9.1\mingw_64\mkspecs\modules\qt_lib_multimediawidgets.pri D:\Qt\6.9.1\mingw_64\mkspecs\modules\qt_lib_multimediawidgets_private.pri D:\Qt\6.9.1\mingw_64\mkspecs\modules\qt_lib_network.pri D:\Qt\6.9.1\mingw_64\mkspecs\modules\qt_lib_network_private.pri D:\Qt\6.9.1\mingw_64\mkspecs\modules\qt_lib_opengl.pri D:\Qt\6.9.1\mingw_64\mkspecs\modules\qt_lib_opengl_private.pri D:\Qt\6.9.1\mingw_64\mkspecs\modules\qt_lib_openglwidgets.pri D:\Qt\6.9.1\mingw_64\mkspecs\modules\qt_lib_openglwidgets_private.pri D:\Qt\6.9.1\mingw_64\mkspecs\modules\qt_lib_packetprotocol_private.pri D:\Qt\6.9.1\mingw_64\mkspecs\modules\qt_lib_png_private.pri D:\Qt\6.9.1\mingw_64\mkspecs\modules\qt_lib_printsupport.pri D:\Qt\6.9.1\mingw_64\mkspecs\modules\qt_lib_printsupport_private.pri D:\Qt\6.9.1\mingw_64\mkspecs\modules\qt_lib_qdoccatch_private.pri D:\Qt\6.9.1\mingw_64\mkspecs\modules\qt_lib_qdoccatchconversions_private.pri D:\Qt\6.9.1\mingw_64\mkspecs\modules\qt_lib_qdoccatchgenerators_private.pri D:\Qt\6.9.1\mingw_64\mkspecs\modules\qt_lib_qml.pri D:\Qt\6.9.1\mingw_64\mkspecs\modules\qt_lib_qml_private.pri D:\Qt\6.9.1\mingw_64\mkspecs\modules\qt_lib_qmlassetdownloader.pri D:\Qt\6.9.1\mingw_64\mkspecs\modules\qt_lib_qmlassetdownloader_private.pri D:\Qt\6.9.1\mingw_64\mkspecs\modules\qt_lib_qmlcompiler.pri D:\Qt\6.9.1\mingw_64\mkspecs\modules\qt_lib_qmlcompiler_private.pri D:\Qt\6.9.1\mingw_64\mkspecs\modules\qt_lib_qmlcore.pri D:\Qt\6.9.1\mingw_64\mkspecs\modules\qt_lib_qmlcore_private.pri D:\Qt\6.9.1\mingw_64\mkspecs\modules\qt_lib_qmldebug_private.pri D:\Qt\6.9.1\mingw_64\mkspecs\modules\qt_lib_qmldom_private.pri D:\Qt\6.9.1\mingw_64\mkspecs\modules\qt_lib_qmlformat_private.pri D:\Qt\6.9.1\mingw_64\mkspecs\modules\qt_lib_qmlintegration.pri D:\Qt\6.9.1\mingw_64\mkspecs\modules\qt_lib_qmlintegration_private.pri D:\Qt\6.9.1\mingw_64\mkspecs\modules\qt_lib_qmllocalstorage.pri D:\Qt\6.9.1\mingw_64\mkspecs\modules\qt_lib_qmllocalstorage_private.pri D:\Qt\6.9.1\mingw_64\mkspecs\modules\qt_lib_qmlls_private.pri D:\Qt\6.9.1\mingw_64\mkspecs\modules\qt_lib_qmlmeta.pri D:\Qt\6.9.1\mingw_64\mkspecs\modules\qt_lib_qmlmeta_private.pri D:\Qt\6.9.1\mingw_64\mkspecs\modules\qt_lib_qmlmodels.pri D:\Qt\6.9.1\mingw_64\mkspecs\modules\qt_lib_qmlmodels_private.pri D:\Qt\6.9.1\mingw_64\mkspecs\modules\qt_lib_qmlnetwork.pri D:\Qt\6.9.1\mingw_64\mkspecs\modules\qt_lib_qmlnetwork_private.pri D:\Qt\6.9.1\mingw_64\mkspecs\modules\qt_lib_qmltest.pri D:\Qt\6.9.1\mingw_64\mkspecs\modules\qt_lib_qmltest_private.pri D:\Qt\6.9.1\mingw_64\mkspecs\modules\qt_lib_qmltoolingsettings_private.pri D:\Qt\6.9.1\mingw_64\mkspecs\modules\qt_lib_qmltyperegistrar_private.pri D:\Qt\6.9.1\mingw_64\mkspecs\modules\qt_lib_qmlworkerscript.pri D:\Qt\6.9.1\mingw_64\mkspecs\modules\qt_lib_qmlworkerscript_private.pri D:\Qt\6.9.1\mingw_64\mkspecs\modules\qt_lib_qmlxmllistmodel.pri D:\Qt\6.9.1\mingw_64\mkspecs\modules\qt_lib_qmlxmllistmodel_private.pri D:\Qt\6.9.1\mingw_64\mkspecs\modules\qt_lib_quick.pri D:\Qt\6.9.1\mingw_64\mkspecs\modules\qt_lib_quick3d.pri D:\Qt\6.9.1\mingw_64\mkspecs\modules\qt_lib_quick3d_private.pri D:\Qt\6.9.1\mingw_64\mkspecs\modules\qt_lib_quick3dassetimport.pri D:\Qt\6.9.1\mingw_64\mkspecs\modules\qt_lib_quick3dassetimport_private.pri D:\Qt\6.9.1\mingw_64\mkspecs\modules\qt_lib_quick3dassetutils.pri D:\Qt\6.9.1\mingw_64\mkspecs\modules\qt_lib_quick3dassetutils_private.pri D:\Qt\6.9.1\mingw_64\mkspecs\modules\qt_lib_quick3deffects.pri D:\Qt\6.9.1\mingw_64\mkspecs\modules\qt_lib_quick3deffects_private.pri D:\Qt\6.9.1\mingw_64\mkspecs\modules\qt_lib_quick3dglslparser_private.pri D:\Qt\6.9.1\mingw_64\mkspecs\modules\qt_lib_quick3dhelpers.pri D:\Qt\6.9.1\mingw_64\mkspecs\modules\qt_lib_quick3dhelpers_private.pri D:\Qt\6.9.1\mingw_64\mkspecs\modules\qt_lib_quick3dhelpersimpl.pri D:\Qt\6.9.1\mingw_64\mkspecs\modules\qt_lib_quick3dhelpersimpl_private.pri D:\Qt\6.9.1\mingw_64\mkspecs\modules\qt_lib_quick3diblbaker.pri D:\Qt\6.9.1\mingw_64\mkspecs\modules\qt_lib_quick3diblbaker_private.pri D:\Qt\6.9.1\mingw_64\mkspecs\modules\qt_lib_quick3dparticleeffects.pri D:\Qt\6.9.1\mingw_64\mkspecs\modules\qt_lib_quick3dparticleeffects_private.pri D:\Qt\6.9.1\mingw_64\mkspecs\modules\qt_lib_quick3dparticles.pri D:\Qt\6.9.1\mingw_64\mkspecs\modules\qt_lib_quick3dparticles_private.pri D:\Qt\6.9.1\mingw_64\mkspecs\modules\qt_lib_quick3druntimerender.pri D:\Qt\6.9.1\mingw_64\mkspecs\modules\qt_lib_quick3druntimerender_private.pri D:\Qt\6.9.1\mingw_64\mkspecs\modules\qt_lib_quick3dspatialaudio_private.pri D:\Qt\6.9.1\mingw_64\mkspecs\modules\qt_lib_quick3dutils.pri D:\Qt\6.9.1\mingw_64\mkspecs\modules\qt_lib_quick3dutils_private.pri D:\Qt\6.9.1\mingw_64\mkspecs\modules\qt_lib_quick3dxr.pri D:\Qt\6.9.1\mingw_64\mkspecs\modules\qt_lib_quick3dxr_private.pri D:\Qt\6.9.1\mingw_64\mkspecs\modules\qt_lib_quick_private.pri D:\Qt\6.9.1\mingw_64\mkspecs\modules\qt_lib_quickcontrols2.pri D:\Qt\6.9.1\mingw_64\mkspecs\modules\qt_lib_quickcontrols2_private.pri D:\Qt\6.9.1\mingw_64\mkspecs\modules\qt_lib_quickcontrols2basic.pri D:\Qt\6.9.1\mingw_64\mkspecs\modules\qt_lib_quickcontrols2basic_private.pri D:\Qt\6.9.1\mingw_64\mkspecs\modules\qt_lib_quickcontrols2basicstyleimpl.pri D:\Qt\6.9.1\mingw_64\mkspecs\modules\qt_lib_quickcontrols2basicstyleimpl_private.pri D:\Qt\6.9.1\mingw_64\mkspecs\modules\qt_lib_quickcontrols2fluentwinui3styleimpl.pri D:\Qt\6.9.1\mingw_64\mkspecs\modules\qt_lib_quickcontrols2fluentwinui3styleimpl_private.pri D:\Qt\6.9.1\mingw_64\mkspecs\modules\qt_lib_quickcontrols2fusion.pri D:\Qt\6.9.1\mingw_64\mkspecs\modules\qt_lib_quickcontrols2fusion_private.pri D:\Qt\6.9.1\mingw_64\mkspecs\modules\qt_lib_quickcontrols2fusionstyleimpl.pri D:\Qt\6.9.1\mingw_64\mkspecs\modules\qt_lib_quickcontrols2fusionstyleimpl_private.pri D:\Qt\6.9.1\mingw_64\mkspecs\modules\qt_lib_quickcontrols2imagine.pri D:\Qt\6.9.1\mingw_64\mkspecs\modules\qt_lib_quickcontrols2imagine_private.pri D:\Qt\6.9.1\mingw_64\mkspecs\modules\qt_lib_quickcontrols2imaginestyleimpl.pri D:\Qt\6.9.1\mingw_64\mkspecs\modules\qt_lib_quickcontrols2imaginestyleimpl_private.pri D:\Qt\6.9.1\mingw_64\mkspecs\modules\qt_lib_quickcontrols2impl.pri D:\Qt\6.9.1\mingw_64\mkspecs\modules\qt_lib_quickcontrols2impl_private.pri D:\Qt\6.9.1\mingw_64\mkspecs\modules\qt_lib_quickcontrols2material.pri D:\Qt\6.9.1\mingw_64\mkspecs\modules\qt_lib_quickcontrols2material_private.pri D:\Qt\6.9.1\mingw_64\mkspecs\modules\qt_lib_quickcontrols2materialstyleimpl.pri D:\Qt\6.9.1\mingw_64\mkspecs\modules\qt_lib_quickcontrols2materialstyleimpl_private.pri D:\Qt\6.9.1\mingw_64\mkspecs\modules\qt_lib_quickcontrols2universal.pri D:\Qt\6.9.1\mingw_64\mkspecs\modules\qt_lib_quickcontrols2universal_private.pri D:\Qt\6.9.1\mingw_64\mkspecs\modules\qt_lib_quickcontrols2universalstyleimpl.pri D:\Qt\6.9.1\mingw_64\mkspecs\modules\qt_lib_quickcontrols2universalstyleimpl_private.pri D:\Qt\6.9.1\mingw_64\mkspecs\modules\qt_lib_quickcontrols2windowsstyleimpl.pri D:\Qt\6.9.1\mingw_64\mkspecs\modules\qt_lib_quickcontrols2windowsstyleimpl_private.pri D:\Qt\6.9.1\mingw_64\mkspecs\modules\qt_lib_quickcontrolstestutilsprivate_private.pri D:\Qt\6.9.1\mingw_64\mkspecs\modules\qt_lib_quickdialogs2.pri D:\Qt\6.9.1\mingw_64\mkspecs\modules\qt_lib_quickdialogs2_private.pri D:\Qt\6.9.1\mingw_64\mkspecs\modules\qt_lib_quickdialogs2quickimpl.pri D:\Qt\6.9.1\mingw_64\mkspecs\modules\qt_lib_quickdialogs2quickimpl_private.pri D:\Qt\6.9.1\mingw_64\mkspecs\modules\qt_lib_quickdialogs2utils.pri D:\Qt\6.9.1\mingw_64\mkspecs\modules\qt_lib_quickdialogs2utils_private.pri D:\Qt\6.9.1\mingw_64\mkspecs\modules\qt_lib_quickeffects.pri D:\Qt\6.9.1\mingw_64\mkspecs\modules\qt_lib_quickeffects_private.pri D:\Qt\6.9.1\mingw_64\mkspecs\modules\qt_lib_quicklayouts.pri D:\Qt\6.9.1\mingw_64\mkspecs\modules\qt_lib_quicklayouts_private.pri D:\Qt\6.9.1\mingw_64\mkspecs\modules\qt_lib_quickparticles_private.pri D:\Qt\6.9.1\mingw_64\mkspecs\modules\qt_lib_quickshapes_private.pri D:\Qt\6.9.1\mingw_64\mkspecs\modules\qt_lib_quicktemplates2.pri D:\Qt\6.9.1\mingw_64\mkspecs\modules\qt_lib_quicktemplates2_private.pri D:\Qt\6.9.1\mingw_64\mkspecs\modules\qt_lib_quicktestutilsprivate_private.pri D:\Qt\6.9.1\mingw_64\mkspecs\modules\qt_lib_quicktimeline.pri D:\Qt\6.9.1\mingw_64\mkspecs\modules\qt_lib_quicktimeline_private.pri D:\Qt\6.9.1\mingw_64\mkspecs\modules\qt_lib_quicktimelineblendtrees.pri D:\Qt\6.9.1\mingw_64\mkspecs\modules\qt_lib_quicktimelineblendtrees_private.pri D:\Qt\6.9.1\mingw_64\mkspecs\modules\qt_lib_quickvectorimage.pri D:\Qt\6.9.1\mingw_64\mkspecs\modules\qt_lib_quickvectorimage_private.pri D:\Qt\6.9.1\mingw_64\mkspecs\modules\qt_lib_quickvectorimagegenerator_private.pri D:\Qt\6.9.1\mingw_64\mkspecs\modules\qt_lib_quickwidgets.pri D:\Qt\6.9.1\mingw_64\mkspecs\modules\qt_lib_quickwidgets_private.pri D:\Qt\6.9.1\mingw_64\mkspecs\modules\qt_lib_shadertools.pri D:\Qt\6.9.1\mingw_64\mkspecs\modules\qt_lib_shadertools_private.pri D:\Qt\6.9.1\mingw_64\mkspecs\modules\qt_lib_spatialaudio.pri D:\Qt\6.9.1\mingw_64\mkspecs\modules\qt_lib_spatialaudio_private.pri D:\Qt\6.9.1\mingw_64\mkspecs\modules\qt_lib_sql.pri D:\Qt\6.9.1\mingw_64\mkspecs\modules\qt_lib_sql_private.pri D:\Qt\6.9.1\mingw_64\mkspecs\modules\qt_lib_svg.pri D:\Qt\6.9.1\mingw_64\mkspecs\modules\qt_lib_svg_private.pri D:\Qt\6.9.1\mingw_64\mkspecs\modules\qt_lib_svgwidgets.pri D:\Qt\6.9.1\mingw_64\mkspecs\modules\qt_lib_svgwidgets_private.pri D:\Qt\6.9.1\mingw_64\mkspecs\modules\qt_lib_testinternals_private.pri D:\Qt\6.9.1\mingw_64\mkspecs\modules\qt_lib_testlib.pri D:\Qt\6.9.1\mingw_64\mkspecs\modules\qt_lib_testlib_private.pri D:\Qt\6.9.1\mingw_64\mkspecs\modules\qt_lib_tools_private.pri D:\Qt\6.9.1\mingw_64\mkspecs\modules\qt_lib_uiplugin.pri D:\Qt\6.9.1\mingw_64\mkspecs\modules\qt_lib_uitools.pri D:\Qt\6.9.1\mingw_64\mkspecs\modules\qt_lib_uitools_private.pri D:\Qt\6.9.1\mingw_64\mkspecs\modules\qt_lib_widgets.pri D:\Qt\6.9.1\mingw_64\mkspecs\modules\qt_lib_widgets_private.pri D:\Qt\6.9.1\mingw_64\mkspecs\modules\qt_lib_xml.pri D:\Qt\6.9.1\mingw_64\mkspecs\modules\qt_lib_xml_private.pri D:\Qt\6.9.1\mingw_64\mkspecs\modules\qt_lib_zlib_private.pri D:\Qt\6.9.1\mingw_64\mkspecs\features\qt_functions.prf D:\Qt\6.9.1\mingw_64\mkspecs\features\qt_config.prf D:\Qt\6.9.1\mingw_64\mkspecs\win32-g++\qmake.conf D:\Qt\6.9.1\mingw_64\mkspecs\features\spec_post.prf .qmake.stash D:\Qt\6.9.1\mingw_64\mkspecs\features\exclusive_builds.prf D:\Qt\6.9.1\mingw_64\mkspecs\features\toolchain.prf D:\Qt\6.9.1\mingw_64\mkspecs\features\default_pre.prf D:\Qt\6.9.1\mingw_64\mkspecs\features\win32\default_pre.prf D:\Qt\6.9.1\mingw_64\mkspecs\features\resolve_config.prf D:\Qt\6.9.1\mingw_64\mkspecs\features\exclusive_builds_post.prf D:\Qt\6.9.1\mingw_64\mkspecs\features\default_post.prf D:\Qt\6.9.1\mingw_64\mkspecs\features\build_pass.prf D:\Qt\6.9.1\mingw_64\mkspecs\features\qtquickcompiler.prf D:\Qt\6.9.1\mingw_64\mkspecs\features\precompile_header.prf D:\Qt\6.9.1\mingw_64\mkspecs\features\warn_on.prf D:\Qt\6.9.1\mingw_64\mkspecs\features\permissions.prf D:\Qt\6.9.1\mingw_64\mkspecs\features\qt.prf D:\Qt\6.9.1\mingw_64\mkspecs\features\resources_functions.prf D:\Qt\6.9.1\mingw_64\mkspecs\features\resources.prf D:\Qt\6.9.1\mingw_64\mkspecs\features\moc.prf D:\Qt\6.9.1\mingw_64\mkspecs\features\win32\opengl.prf D:\Qt\6.9.1\mingw_64\mkspecs\features\uic.prf D:\Qt\6.9.1\mingw_64\mkspecs\features\qmake_use.prf D:\Qt\6.9.1\mingw_64\mkspecs\features\file_copies.prf D:\Qt\6.9.1\mingw_64\mkspecs\features\win32\windows.prf D:\Qt\6.9.1\mingw_64\mkspecs\features\testcase_targets.prf D:\Qt\6.9.1\mingw_64\mkspecs\features\exceptions.prf D:\Qt\6.9.1\mingw_64\mkspecs\features\yacc.prf D:\Qt\6.9.1\mingw_64\mkspecs\features\lex.prf untitled2.pro resources.qrc D:\Qt\6.9.1\mingw_64\lib\Qt6Widgets.prl D:\Qt\6.9.1\mingw_64\lib\Qt6Gui.prl D:\Qt\6.9.1\mingw_64\lib\Qt6Network.prl D:\Qt\6.9.1\mingw_64\lib\Qt6Concurrent.prl D:\Qt\6.9.1\mingw_64\lib\Qt6Core.prl D:\Qt\6.9.1\mingw_64\lib\Qt6EntryPoint.prl resources.qrc D:\Qt\6.9.1\mingw_64\mkspecs\features\data\dummy.cpp mainwindow.h main.cpp mainwindow.cpp + +clean: compiler_clean + -$(DEL_FILE) release\main.o release\mainwindow.o release\qrc_resources.o release\moc_mainwindow.o + -$(DEL_FILE) release\launcher_res.o + +distclean: clean + -$(DEL_FILE) .qmake.stash + -$(DEL_FILE) $(DESTDIR_TARGET) + -$(DEL_FILE) Makefile.Release + +mocclean: compiler_moc_header_clean compiler_moc_objc_header_clean compiler_moc_source_clean + +mocables: compiler_moc_header_make_all compiler_moc_objc_header_make_all compiler_moc_source_make_all + +check: first + +benchmark: first + +compiler_no_pch_compiler_make_all: +compiler_no_pch_compiler_clean: +compiler_rcc_make_all: release/qrc_resources.cpp +compiler_rcc_clean: + -$(DEL_FILE) release\qrc_resources.cpp +release/qrc_resources.cpp: resources.qrc \ + D:/Qt/6.9.1/mingw_64/bin/rcc.exe \ + styles.qss \ + untitled2_zh_CN.ts + D:\Qt\6.9.1\mingw_64\bin\rcc.exe -name resources --no-zstd resources.qrc -o release\qrc_resources.cpp + +compiler_moc_predefs_make_all: release/moc_predefs.h +compiler_moc_predefs_clean: + -$(DEL_FILE) release\moc_predefs.h +release/moc_predefs.h: D:/Qt/6.9.1/mingw_64/mkspecs/features/data/dummy.cpp + g++ -fno-keep-inline-dllexport -O2 -std=gnu++1z -Wall -Wextra -Wextra -dM -E -o release\moc_predefs.h D:\Qt\6.9.1\mingw_64\mkspecs\features\data\dummy.cpp + +compiler_moc_header_make_all: release/moc_mainwindow.cpp +compiler_moc_header_clean: + -$(DEL_FILE) release\moc_mainwindow.cpp +release/moc_mainwindow.cpp: mainwindow.h \ + D:/Qt/6.9.1/mingw_64/include/QtWidgets/QMainWindow \ + D:/Qt/6.9.1/mingw_64/include/QtWidgets/qmainwindow.h \ + D:/Qt/6.9.1/mingw_64/include/QtWidgets/qtwidgetsglobal.h \ + D:/Qt/6.9.1/mingw_64/include/QtGui/qtguiglobal.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qglobal.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qtcoreglobal.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qtversionchecks.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qtconfiginclude.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qconfig.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qtcore-config.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qtconfigmacros.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qtdeprecationdefinitions.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qcompilerdetection.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qprocessordetection.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qsystemdetection.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qtcoreexports.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qtdeprecationmarkers.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qtclasshelpermacros.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qtpreprocessorsupport.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qassert.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qtnoop.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qtypes.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qtversion.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qtypeinfo.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qcontainerfwd.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qsysinfo.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qlogging.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qflags.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qcompare_impl.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qatomic.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qbasicatomic.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qatomic_cxx11.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qgenericatomic.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qyieldcpu.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qconstructormacros.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qdarwinhelpers.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qexceptionhandling.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qforeach.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qttypetraits.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qfunctionpointer.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qglobalstatic.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qmalloc.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qminmax.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qnumeric.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qoverload.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qswap.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qtenvironmentvariables.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qtresource.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qttranslation.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qversiontagging.h \ + D:/Qt/6.9.1/mingw_64/include/QtGui/qtgui-config.h \ + D:/Qt/6.9.1/mingw_64/include/QtGui/qtguiexports.h \ + D:/Qt/6.9.1/mingw_64/include/QtWidgets/qtwidgets-config.h \ + D:/Qt/6.9.1/mingw_64/include/QtWidgets/qtwidgetsexports.h \ + D:/Qt/6.9.1/mingw_64/include/QtWidgets/qwidget.h \ + D:/Qt/6.9.1/mingw_64/include/QtGui/qwindowdefs.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qobjectdefs.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qnamespace.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qcompare.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qstdlibdetection.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qcomparehelpers.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/q20type_traits.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qtmetamacros.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qobjectdefs_impl.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qfunctionaltools_impl.h \ + D:/Qt/6.9.1/mingw_64/include/QtGui/qwindowdefs_win.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qobject.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qstring.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qchar.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qstringview.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qbytearray.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qrefcount.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qarraydata.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qpair.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qarraydatapointer.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qarraydataops.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qcontainertools_impl.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qxptype_traits.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/q20functional.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/q20memory.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/q17memory.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qbytearrayalgorithms.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qbytearrayview.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qstringfwd.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qstringliteral.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qstringalgorithms.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qlatin1stringview.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qanystringview.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qutf8stringview.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qstringtokenizer.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qstringbuilder.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qstringconverter.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qstringconverter_base.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qlist.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qhashfunctions.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qiterator.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qbytearraylist.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qstringlist.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qalgorithms.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qstringmatcher.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qcoreevent.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qbasictimer.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qabstracteventdispatcher.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qeventloop.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qdeadlinetimer.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qelapsedtimer.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qmetatype.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qdatastream.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qscopedpointer.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qiodevicebase.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qfloat16.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qmath.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qtformat_impl.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qiterable.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qmetacontainer.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qcontainerinfo.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qtaggedpointer.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qscopeguard.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qobject_impl.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qbindingstorage.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qmargins.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/q23utility.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/q20utility.h \ + D:/Qt/6.9.1/mingw_64/include/QtGui/qaction.h \ + D:/Qt/6.9.1/mingw_64/include/QtGui/qkeysequence.h \ + D:/Qt/6.9.1/mingw_64/include/QtGui/qicon.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qsize.h \ + D:/Qt/6.9.1/mingw_64/include/QtGui/qpixmap.h \ + D:/Qt/6.9.1/mingw_64/include/QtGui/qpaintdevice.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qrect.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qpoint.h \ + D:/Qt/6.9.1/mingw_64/include/QtGui/qcolor.h \ + D:/Qt/6.9.1/mingw_64/include/QtGui/qrgb.h \ + D:/Qt/6.9.1/mingw_64/include/QtGui/qrgba64.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qshareddata.h \ + D:/Qt/6.9.1/mingw_64/include/QtGui/qimage.h \ + D:/Qt/6.9.1/mingw_64/include/QtGui/qpixelformat.h \ + D:/Qt/6.9.1/mingw_64/include/QtGui/qtransform.h \ + D:/Qt/6.9.1/mingw_64/include/QtGui/qpolygon.h \ + D:/Qt/6.9.1/mingw_64/include/QtGui/qregion.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qspan.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/q20iterator.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qline.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qvariant.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qdebug.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qtextstream.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qcontiguouscache.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qsharedpointer.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qsharedpointer_impl.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qmap.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qshareddata_impl.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qset.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qhash.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qvarlengtharray.h \ + D:/Qt/6.9.1/mingw_64/include/QtGui/qpalette.h \ + D:/Qt/6.9.1/mingw_64/include/QtGui/qbrush.h \ + D:/Qt/6.9.1/mingw_64/include/QtGui/qfont.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qendian.h \ + D:/Qt/6.9.1/mingw_64/include/QtGui/qfontmetrics.h \ + D:/Qt/6.9.1/mingw_64/include/QtGui/qfontinfo.h \ + D:/Qt/6.9.1/mingw_64/include/QtGui/qfontvariableaxis.h \ + D:/Qt/6.9.1/mingw_64/include/QtWidgets/qsizepolicy.h \ + D:/Qt/6.9.1/mingw_64/include/QtGui/qcursor.h \ + D:/Qt/6.9.1/mingw_64/include/QtGui/qbitmap.h \ + D:/Qt/6.9.1/mingw_64/include/QtGui/qevent.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qiodevice.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qurl.h \ + D:/Qt/6.9.1/mingw_64/include/QtGui/qeventpoint.h \ + D:/Qt/6.9.1/mingw_64/include/QtGui/qvector2d.h \ + D:/Qt/6.9.1/mingw_64/include/QtGui/qvectornd.h \ + D:/Qt/6.9.1/mingw_64/include/QtGui/qpointingdevice.h \ + D:/Qt/6.9.1/mingw_64/include/QtGui/qinputdevice.h \ + D:/Qt/6.9.1/mingw_64/include/QtGui/qscreen.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/QList \ + D:/Qt/6.9.1/mingw_64/include/QtCore/QObject \ + D:/Qt/6.9.1/mingw_64/include/QtCore/QRect \ + D:/Qt/6.9.1/mingw_64/include/QtCore/QSize \ + D:/Qt/6.9.1/mingw_64/include/QtCore/QSizeF \ + D:/Qt/6.9.1/mingw_64/include/QtGui/QTransform \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qnativeinterface.h \ + D:/Qt/6.9.1/mingw_64/include/QtGui/qscreen_platform.h \ + D:/Qt/6.9.1/mingw_64/include/QtGui/qguiapplication.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qcoreapplication.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qcoreapplication_platform.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qfuture.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qfutureinterface.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qmutex.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qtsan_impl.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qresultstore.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qfuture_impl.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qthreadpool.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qthread.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qrunnable.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qexception.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qpromise.h \ + D:/Qt/6.9.1/mingw_64/include/QtGui/qinputmethod.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qlocale.h \ + D:/Qt/6.9.1/mingw_64/include/QtGui/qguiapplication_platform.h \ + D:/Qt/6.9.1/mingw_64/include/QtWidgets/qtabwidget.h \ + D:/Qt/6.9.1/mingw_64/include/QtNetwork/QNetworkAccessManager \ + D:/Qt/6.9.1/mingw_64/include/QtNetwork/qnetworkaccessmanager.h \ + D:/Qt/6.9.1/mingw_64/include/QtNetwork/qtnetworkglobal.h \ + D:/Qt/6.9.1/mingw_64/include/QtNetwork/qtnetwork-config.h \ + D:/Qt/6.9.1/mingw_64/include/QtNetwork/qtnetworkexports.h \ + D:/Qt/6.9.1/mingw_64/include/QtNetwork/qnetworkrequest.h \ + D:/Qt/6.9.1/mingw_64/include/QtNetwork/qhttpheaders.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/QSharedDataPointer \ + D:/Qt/6.9.1/mingw_64/include/QtCore/QString \ + D:/Qt/6.9.1/mingw_64/include/QtCore/QUrl \ + D:/Qt/6.9.1/mingw_64/include/QtCore/QVariant \ + D:/Qt/6.9.1/mingw_64/include/QtCore/q26numeric.h \ + D:/Qt/6.9.1/mingw_64/include/QtNetwork/QSslConfiguration \ + D:/Qt/6.9.1/mingw_64/include/QtNetwork/qsslconfiguration.h \ + D:/Qt/6.9.1/mingw_64/include/QtNetwork/qsslsocket.h \ + D:/Qt/6.9.1/mingw_64/include/QtNetwork/qtcpsocket.h \ + D:/Qt/6.9.1/mingw_64/include/QtNetwork/qabstractsocket.h \ + D:/Qt/6.9.1/mingw_64/include/QtNetwork/qhostaddress.h \ + D:/Qt/6.9.1/mingw_64/include/QtNetwork/qsslerror.h \ + D:/Qt/6.9.1/mingw_64/include/QtNetwork/qsslcertificate.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qcryptographichash.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qdatetime.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qcalendar.h \ + D:/Qt/6.9.1/mingw_64/include/QtNetwork/qssl.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/QFlags \ + D:/Qt/6.9.1/mingw_64/include/QtNetwork/QSslPreSharedKeyAuthenticator \ + D:/Qt/6.9.1/mingw_64/include/QtNetwork/qsslpresharedkeyauthenticator.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/QMetaType \ + D:/Qt/6.9.1/mingw_64/include/QtCore/QJsonObject \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qjsonobject.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qjsonvalue.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qcborvalue.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qcborcommon.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qregularexpression.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/quuid.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qjsondocument.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qjsonparseerror.h \ + D:/Qt/6.9.1/mingw_64/include/QtWidgets/QLabel \ + D:/Qt/6.9.1/mingw_64/include/QtWidgets/qlabel.h \ + D:/Qt/6.9.1/mingw_64/include/QtWidgets/qframe.h \ + D:/Qt/6.9.1/mingw_64/include/QtGui/qpicture.h \ + D:/Qt/6.9.1/mingw_64/include/QtGui/qtextdocument.h \ + D:/Qt/6.9.1/mingw_64/include/QtWidgets/QPushButton \ + D:/Qt/6.9.1/mingw_64/include/QtWidgets/qpushbutton.h \ + D:/Qt/6.9.1/mingw_64/include/QtWidgets/qabstractbutton.h \ + D:/Qt/6.9.1/mingw_64/include/QtWidgets/QProgressBar \ + D:/Qt/6.9.1/mingw_64/include/QtWidgets/qprogressbar.h \ + D:/Qt/6.9.1/mingw_64/include/QtWidgets/QTextEdit \ + D:/Qt/6.9.1/mingw_64/include/QtWidgets/qtextedit.h \ + D:/Qt/6.9.1/mingw_64/include/QtWidgets/qabstractscrollarea.h \ + D:/Qt/6.9.1/mingw_64/include/QtGui/qtextoption.h \ + D:/Qt/6.9.1/mingw_64/include/QtGui/qtextcursor.h \ + D:/Qt/6.9.1/mingw_64/include/QtGui/qtextformat.h \ + D:/Qt/6.9.1/mingw_64/include/QtGui/qpen.h \ + D:/Qt/6.9.1/mingw_64/include/QtWidgets/QGroupBox \ + D:/Qt/6.9.1/mingw_64/include/QtWidgets/qgroupbox.h \ + D:/Qt/6.9.1/mingw_64/include/QtWidgets/QFileDialog \ + D:/Qt/6.9.1/mingw_64/include/QtWidgets/qfiledialog.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qdir.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qdirlisting.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qfiledevice.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qfile.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qfileinfo.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qtimezone.h \ + D:/Qt/6.9.1/mingw_64/include/QtWidgets/qdialog.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/QSettings \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qsettings.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/QDir \ + D:/Qt/6.9.1/mingw_64/include/QtWidgets/QLineEdit \ + D:/Qt/6.9.1/mingw_64/include/QtWidgets/qlineedit.h \ + D:/Qt/6.9.1/mingw_64/include/QtWidgets/QDialog \ + D:/Qt/6.9.1/mingw_64/include/QtWidgets/QCheckBox \ + D:/Qt/6.9.1/mingw_64/include/QtWidgets/qcheckbox.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/QTimer \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qtimer.h \ + D:/Qt/6.9.1/mingw_64/include/QtWidgets/QMessageBox \ + D:/Qt/6.9.1/mingw_64/include/QtWidgets/qmessagebox.h \ + D:/Qt/6.9.1/mingw_64/include/QtWidgets/qdialogbuttonbox.h \ + D:/Qt/6.9.1/mingw_64/include/QtWidgets/QApplication \ + D:/Qt/6.9.1/mingw_64/include/QtWidgets/qapplication.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/QProcess \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qprocess.h \ + release/moc_predefs.h \ + D:/Qt/6.9.1/mingw_64/bin/moc.exe + D:\Qt\6.9.1\mingw_64\bin\moc.exe $(DEFINES) --include E:/C++/untitled2/release/moc_predefs.h -ID:/Qt/6.9.1/mingw_64/mkspecs/win32-g++ -IE:/C++/untitled2 -ID:/Qt/6.9.1/mingw_64/include -ID:/Qt/6.9.1/mingw_64/include/QtWidgets -ID:/Qt/6.9.1/mingw_64/include/QtGui -ID:/Qt/6.9.1/mingw_64/include/QtNetwork -ID:/Qt/6.9.1/mingw_64/include/QtConcurrent -ID:/Qt/6.9.1/mingw_64/include/QtCore -ID:/Qt/Tools/mingw1310_64/lib/gcc/x86_64-w64-mingw32/13.1.0/include/c++ -ID:/Qt/Tools/mingw1310_64/lib/gcc/x86_64-w64-mingw32/13.1.0/include/c++/x86_64-w64-mingw32 -ID:/Qt/Tools/mingw1310_64/lib/gcc/x86_64-w64-mingw32/13.1.0/include/c++/backward -ID:/Qt/Tools/mingw1310_64/lib/gcc/x86_64-w64-mingw32/13.1.0/include -ID:/Qt/Tools/mingw1310_64/lib/gcc/x86_64-w64-mingw32/13.1.0/include-fixed -ID:/Qt/Tools/mingw1310_64/x86_64-w64-mingw32/include mainwindow.h -o release\moc_mainwindow.cpp + +compiler_moc_objc_header_make_all: +compiler_moc_objc_header_clean: +compiler_moc_source_make_all: +compiler_moc_source_clean: +compiler_uic_make_all: +compiler_uic_clean: +compiler_yacc_decl_make_all: +compiler_yacc_decl_clean: +compiler_yacc_impl_make_all: +compiler_yacc_impl_clean: +compiler_lex_make_all: +compiler_lex_clean: +compiler_clean: compiler_rcc_clean compiler_moc_predefs_clean compiler_moc_header_clean + + + +####### Compile + +release/main.o: main.cpp mainwindow.h \ + D:/Qt/6.9.1/mingw_64/include/QtWidgets/QMainWindow \ + D:/Qt/6.9.1/mingw_64/include/QtWidgets/qmainwindow.h \ + D:/Qt/6.9.1/mingw_64/include/QtWidgets/qtwidgetsglobal.h \ + D:/Qt/6.9.1/mingw_64/include/QtGui/qtguiglobal.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qglobal.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qtcoreglobal.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qtversionchecks.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qtconfiginclude.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qconfig.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qtcore-config.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qtconfigmacros.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qtdeprecationdefinitions.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qcompilerdetection.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qprocessordetection.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qsystemdetection.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qtcoreexports.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qtdeprecationmarkers.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qtclasshelpermacros.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qtpreprocessorsupport.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qassert.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qtnoop.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qtypes.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qtversion.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qtypeinfo.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qcontainerfwd.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qsysinfo.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qlogging.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qflags.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qcompare_impl.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qatomic.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qbasicatomic.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qatomic_cxx11.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qgenericatomic.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qyieldcpu.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qconstructormacros.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qdarwinhelpers.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qexceptionhandling.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qforeach.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qttypetraits.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qfunctionpointer.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qglobalstatic.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qmalloc.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qminmax.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qnumeric.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qoverload.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qswap.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qtenvironmentvariables.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qtresource.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qttranslation.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qversiontagging.h \ + D:/Qt/6.9.1/mingw_64/include/QtGui/qtgui-config.h \ + D:/Qt/6.9.1/mingw_64/include/QtGui/qtguiexports.h \ + D:/Qt/6.9.1/mingw_64/include/QtWidgets/qtwidgets-config.h \ + D:/Qt/6.9.1/mingw_64/include/QtWidgets/qtwidgetsexports.h \ + D:/Qt/6.9.1/mingw_64/include/QtWidgets/qwidget.h \ + D:/Qt/6.9.1/mingw_64/include/QtGui/qwindowdefs.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qobjectdefs.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qnamespace.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qcompare.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qstdlibdetection.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qcomparehelpers.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/q20type_traits.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qtmetamacros.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qobjectdefs_impl.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qfunctionaltools_impl.h \ + D:/Qt/6.9.1/mingw_64/include/QtGui/qwindowdefs_win.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qobject.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qstring.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qchar.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qstringview.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qbytearray.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qrefcount.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qarraydata.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qpair.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qarraydatapointer.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qarraydataops.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qcontainertools_impl.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qxptype_traits.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/q20functional.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/q20memory.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/q17memory.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qbytearrayalgorithms.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qbytearrayview.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qstringfwd.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qstringliteral.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qstringalgorithms.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qlatin1stringview.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qanystringview.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qutf8stringview.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qstringtokenizer.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qstringbuilder.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qstringconverter.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qstringconverter_base.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qlist.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qhashfunctions.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qiterator.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qbytearraylist.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qstringlist.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qalgorithms.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qstringmatcher.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qcoreevent.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qbasictimer.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qabstracteventdispatcher.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qeventloop.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qdeadlinetimer.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qelapsedtimer.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qmetatype.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qdatastream.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qscopedpointer.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qiodevicebase.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qfloat16.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qmath.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qtformat_impl.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qiterable.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qmetacontainer.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qcontainerinfo.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qtaggedpointer.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qscopeguard.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qobject_impl.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qbindingstorage.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qmargins.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/q23utility.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/q20utility.h \ + D:/Qt/6.9.1/mingw_64/include/QtGui/qaction.h \ + D:/Qt/6.9.1/mingw_64/include/QtGui/qkeysequence.h \ + D:/Qt/6.9.1/mingw_64/include/QtGui/qicon.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qsize.h \ + D:/Qt/6.9.1/mingw_64/include/QtGui/qpixmap.h \ + D:/Qt/6.9.1/mingw_64/include/QtGui/qpaintdevice.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qrect.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qpoint.h \ + D:/Qt/6.9.1/mingw_64/include/QtGui/qcolor.h \ + D:/Qt/6.9.1/mingw_64/include/QtGui/qrgb.h \ + D:/Qt/6.9.1/mingw_64/include/QtGui/qrgba64.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qshareddata.h \ + D:/Qt/6.9.1/mingw_64/include/QtGui/qimage.h \ + D:/Qt/6.9.1/mingw_64/include/QtGui/qpixelformat.h \ + D:/Qt/6.9.1/mingw_64/include/QtGui/qtransform.h \ + D:/Qt/6.9.1/mingw_64/include/QtGui/qpolygon.h \ + D:/Qt/6.9.1/mingw_64/include/QtGui/qregion.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qspan.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/q20iterator.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qline.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qvariant.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qdebug.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qtextstream.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qcontiguouscache.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qsharedpointer.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qsharedpointer_impl.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qmap.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qshareddata_impl.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qset.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qhash.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qvarlengtharray.h \ + D:/Qt/6.9.1/mingw_64/include/QtGui/qpalette.h \ + D:/Qt/6.9.1/mingw_64/include/QtGui/qbrush.h \ + D:/Qt/6.9.1/mingw_64/include/QtGui/qfont.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qendian.h \ + D:/Qt/6.9.1/mingw_64/include/QtGui/qfontmetrics.h \ + D:/Qt/6.9.1/mingw_64/include/QtGui/qfontinfo.h \ + D:/Qt/6.9.1/mingw_64/include/QtGui/qfontvariableaxis.h \ + D:/Qt/6.9.1/mingw_64/include/QtWidgets/qsizepolicy.h \ + D:/Qt/6.9.1/mingw_64/include/QtGui/qcursor.h \ + D:/Qt/6.9.1/mingw_64/include/QtGui/qbitmap.h \ + D:/Qt/6.9.1/mingw_64/include/QtGui/qevent.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qiodevice.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qurl.h \ + D:/Qt/6.9.1/mingw_64/include/QtGui/qeventpoint.h \ + D:/Qt/6.9.1/mingw_64/include/QtGui/qvector2d.h \ + D:/Qt/6.9.1/mingw_64/include/QtGui/qvectornd.h \ + D:/Qt/6.9.1/mingw_64/include/QtGui/qpointingdevice.h \ + D:/Qt/6.9.1/mingw_64/include/QtGui/qinputdevice.h \ + D:/Qt/6.9.1/mingw_64/include/QtGui/qscreen.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/QList \ + D:/Qt/6.9.1/mingw_64/include/QtCore/QObject \ + D:/Qt/6.9.1/mingw_64/include/QtCore/QRect \ + D:/Qt/6.9.1/mingw_64/include/QtCore/QSize \ + D:/Qt/6.9.1/mingw_64/include/QtCore/QSizeF \ + D:/Qt/6.9.1/mingw_64/include/QtGui/QTransform \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qnativeinterface.h \ + D:/Qt/6.9.1/mingw_64/include/QtGui/qscreen_platform.h \ + D:/Qt/6.9.1/mingw_64/include/QtGui/qguiapplication.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qcoreapplication.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qcoreapplication_platform.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qfuture.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qfutureinterface.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qmutex.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qtsan_impl.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qresultstore.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qfuture_impl.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qthreadpool.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qthread.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qrunnable.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qexception.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qpromise.h \ + D:/Qt/6.9.1/mingw_64/include/QtGui/qinputmethod.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qlocale.h \ + D:/Qt/6.9.1/mingw_64/include/QtGui/qguiapplication_platform.h \ + D:/Qt/6.9.1/mingw_64/include/QtWidgets/qtabwidget.h \ + D:/Qt/6.9.1/mingw_64/include/QtNetwork/QNetworkAccessManager \ + D:/Qt/6.9.1/mingw_64/include/QtNetwork/qnetworkaccessmanager.h \ + D:/Qt/6.9.1/mingw_64/include/QtNetwork/qtnetworkglobal.h \ + D:/Qt/6.9.1/mingw_64/include/QtNetwork/qtnetwork-config.h \ + D:/Qt/6.9.1/mingw_64/include/QtNetwork/qtnetworkexports.h \ + D:/Qt/6.9.1/mingw_64/include/QtNetwork/qnetworkrequest.h \ + D:/Qt/6.9.1/mingw_64/include/QtNetwork/qhttpheaders.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/QSharedDataPointer \ + D:/Qt/6.9.1/mingw_64/include/QtCore/QString \ + D:/Qt/6.9.1/mingw_64/include/QtCore/QUrl \ + D:/Qt/6.9.1/mingw_64/include/QtCore/QVariant \ + D:/Qt/6.9.1/mingw_64/include/QtCore/q26numeric.h \ + D:/Qt/6.9.1/mingw_64/include/QtNetwork/QSslConfiguration \ + D:/Qt/6.9.1/mingw_64/include/QtNetwork/qsslconfiguration.h \ + D:/Qt/6.9.1/mingw_64/include/QtNetwork/qsslsocket.h \ + D:/Qt/6.9.1/mingw_64/include/QtNetwork/qtcpsocket.h \ + D:/Qt/6.9.1/mingw_64/include/QtNetwork/qabstractsocket.h \ + D:/Qt/6.9.1/mingw_64/include/QtNetwork/qhostaddress.h \ + D:/Qt/6.9.1/mingw_64/include/QtNetwork/qsslerror.h \ + D:/Qt/6.9.1/mingw_64/include/QtNetwork/qsslcertificate.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qcryptographichash.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qdatetime.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qcalendar.h \ + D:/Qt/6.9.1/mingw_64/include/QtNetwork/qssl.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/QFlags \ + D:/Qt/6.9.1/mingw_64/include/QtNetwork/QSslPreSharedKeyAuthenticator \ + D:/Qt/6.9.1/mingw_64/include/QtNetwork/qsslpresharedkeyauthenticator.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/QMetaType \ + D:/Qt/6.9.1/mingw_64/include/QtCore/QJsonObject \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qjsonobject.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qjsonvalue.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qcborvalue.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qcborcommon.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qregularexpression.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/quuid.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qjsondocument.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qjsonparseerror.h \ + D:/Qt/6.9.1/mingw_64/include/QtWidgets/QLabel \ + D:/Qt/6.9.1/mingw_64/include/QtWidgets/qlabel.h \ + D:/Qt/6.9.1/mingw_64/include/QtWidgets/qframe.h \ + D:/Qt/6.9.1/mingw_64/include/QtGui/qpicture.h \ + D:/Qt/6.9.1/mingw_64/include/QtGui/qtextdocument.h \ + D:/Qt/6.9.1/mingw_64/include/QtWidgets/QPushButton \ + D:/Qt/6.9.1/mingw_64/include/QtWidgets/qpushbutton.h \ + D:/Qt/6.9.1/mingw_64/include/QtWidgets/qabstractbutton.h \ + D:/Qt/6.9.1/mingw_64/include/QtWidgets/QProgressBar \ + D:/Qt/6.9.1/mingw_64/include/QtWidgets/qprogressbar.h \ + D:/Qt/6.9.1/mingw_64/include/QtWidgets/QTextEdit \ + D:/Qt/6.9.1/mingw_64/include/QtWidgets/qtextedit.h \ + D:/Qt/6.9.1/mingw_64/include/QtWidgets/qabstractscrollarea.h \ + D:/Qt/6.9.1/mingw_64/include/QtGui/qtextoption.h \ + D:/Qt/6.9.1/mingw_64/include/QtGui/qtextcursor.h \ + D:/Qt/6.9.1/mingw_64/include/QtGui/qtextformat.h \ + D:/Qt/6.9.1/mingw_64/include/QtGui/qpen.h \ + D:/Qt/6.9.1/mingw_64/include/QtWidgets/QGroupBox \ + D:/Qt/6.9.1/mingw_64/include/QtWidgets/qgroupbox.h \ + D:/Qt/6.9.1/mingw_64/include/QtWidgets/QFileDialog \ + D:/Qt/6.9.1/mingw_64/include/QtWidgets/qfiledialog.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qdir.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qdirlisting.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qfiledevice.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qfile.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qfileinfo.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qtimezone.h \ + D:/Qt/6.9.1/mingw_64/include/QtWidgets/qdialog.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/QSettings \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qsettings.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/QDir \ + D:/Qt/6.9.1/mingw_64/include/QtWidgets/QLineEdit \ + D:/Qt/6.9.1/mingw_64/include/QtWidgets/qlineedit.h \ + D:/Qt/6.9.1/mingw_64/include/QtWidgets/QDialog \ + D:/Qt/6.9.1/mingw_64/include/QtWidgets/QCheckBox \ + D:/Qt/6.9.1/mingw_64/include/QtWidgets/qcheckbox.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/QTimer \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qtimer.h \ + D:/Qt/6.9.1/mingw_64/include/QtWidgets/QMessageBox \ + D:/Qt/6.9.1/mingw_64/include/QtWidgets/qmessagebox.h \ + D:/Qt/6.9.1/mingw_64/include/QtWidgets/qdialogbuttonbox.h \ + D:/Qt/6.9.1/mingw_64/include/QtWidgets/QApplication \ + D:/Qt/6.9.1/mingw_64/include/QtWidgets/qapplication.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/QProcess \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qprocess.h \ + D:/Qt/6.9.1/mingw_64/include/QtWidgets/QStyleFactory \ + D:/Qt/6.9.1/mingw_64/include/QtWidgets/qstylefactory.h \ + D:/Qt/6.9.1/mingw_64/include/QtGui/QPalette + $(CXX) -c $(CXXFLAGS) $(INCPATH) -o release\main.o main.cpp + +release/mainwindow.o: mainwindow.cpp mainwindow.h \ + D:/Qt/6.9.1/mingw_64/include/QtWidgets/QMainWindow \ + D:/Qt/6.9.1/mingw_64/include/QtWidgets/qmainwindow.h \ + D:/Qt/6.9.1/mingw_64/include/QtWidgets/qtwidgetsglobal.h \ + D:/Qt/6.9.1/mingw_64/include/QtGui/qtguiglobal.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qglobal.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qtcoreglobal.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qtversionchecks.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qtconfiginclude.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qconfig.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qtcore-config.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qtconfigmacros.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qtdeprecationdefinitions.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qcompilerdetection.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qprocessordetection.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qsystemdetection.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qtcoreexports.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qtdeprecationmarkers.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qtclasshelpermacros.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qtpreprocessorsupport.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qassert.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qtnoop.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qtypes.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qtversion.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qtypeinfo.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qcontainerfwd.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qsysinfo.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qlogging.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qflags.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qcompare_impl.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qatomic.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qbasicatomic.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qatomic_cxx11.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qgenericatomic.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qyieldcpu.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qconstructormacros.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qdarwinhelpers.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qexceptionhandling.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qforeach.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qttypetraits.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qfunctionpointer.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qglobalstatic.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qmalloc.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qminmax.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qnumeric.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qoverload.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qswap.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qtenvironmentvariables.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qtresource.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qttranslation.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qversiontagging.h \ + D:/Qt/6.9.1/mingw_64/include/QtGui/qtgui-config.h \ + D:/Qt/6.9.1/mingw_64/include/QtGui/qtguiexports.h \ + D:/Qt/6.9.1/mingw_64/include/QtWidgets/qtwidgets-config.h \ + D:/Qt/6.9.1/mingw_64/include/QtWidgets/qtwidgetsexports.h \ + D:/Qt/6.9.1/mingw_64/include/QtWidgets/qwidget.h \ + D:/Qt/6.9.1/mingw_64/include/QtGui/qwindowdefs.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qobjectdefs.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qnamespace.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qcompare.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qstdlibdetection.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qcomparehelpers.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/q20type_traits.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qtmetamacros.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qobjectdefs_impl.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qfunctionaltools_impl.h \ + D:/Qt/6.9.1/mingw_64/include/QtGui/qwindowdefs_win.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qobject.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qstring.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qchar.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qstringview.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qbytearray.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qrefcount.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qarraydata.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qpair.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qarraydatapointer.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qarraydataops.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qcontainertools_impl.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qxptype_traits.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/q20functional.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/q20memory.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/q17memory.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qbytearrayalgorithms.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qbytearrayview.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qstringfwd.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qstringliteral.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qstringalgorithms.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qlatin1stringview.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qanystringview.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qutf8stringview.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qstringtokenizer.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qstringbuilder.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qstringconverter.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qstringconverter_base.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qlist.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qhashfunctions.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qiterator.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qbytearraylist.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qstringlist.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qalgorithms.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qstringmatcher.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qcoreevent.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qbasictimer.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qabstracteventdispatcher.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qeventloop.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qdeadlinetimer.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qelapsedtimer.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qmetatype.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qdatastream.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qscopedpointer.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qiodevicebase.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qfloat16.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qmath.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qtformat_impl.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qiterable.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qmetacontainer.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qcontainerinfo.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qtaggedpointer.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qscopeguard.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qobject_impl.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qbindingstorage.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qmargins.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/q23utility.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/q20utility.h \ + D:/Qt/6.9.1/mingw_64/include/QtGui/qaction.h \ + D:/Qt/6.9.1/mingw_64/include/QtGui/qkeysequence.h \ + D:/Qt/6.9.1/mingw_64/include/QtGui/qicon.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qsize.h \ + D:/Qt/6.9.1/mingw_64/include/QtGui/qpixmap.h \ + D:/Qt/6.9.1/mingw_64/include/QtGui/qpaintdevice.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qrect.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qpoint.h \ + D:/Qt/6.9.1/mingw_64/include/QtGui/qcolor.h \ + D:/Qt/6.9.1/mingw_64/include/QtGui/qrgb.h \ + D:/Qt/6.9.1/mingw_64/include/QtGui/qrgba64.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qshareddata.h \ + D:/Qt/6.9.1/mingw_64/include/QtGui/qimage.h \ + D:/Qt/6.9.1/mingw_64/include/QtGui/qpixelformat.h \ + D:/Qt/6.9.1/mingw_64/include/QtGui/qtransform.h \ + D:/Qt/6.9.1/mingw_64/include/QtGui/qpolygon.h \ + D:/Qt/6.9.1/mingw_64/include/QtGui/qregion.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qspan.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/q20iterator.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qline.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qvariant.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qdebug.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qtextstream.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qcontiguouscache.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qsharedpointer.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qsharedpointer_impl.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qmap.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qshareddata_impl.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qset.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qhash.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qvarlengtharray.h \ + D:/Qt/6.9.1/mingw_64/include/QtGui/qpalette.h \ + D:/Qt/6.9.1/mingw_64/include/QtGui/qbrush.h \ + D:/Qt/6.9.1/mingw_64/include/QtGui/qfont.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qendian.h \ + D:/Qt/6.9.1/mingw_64/include/QtGui/qfontmetrics.h \ + D:/Qt/6.9.1/mingw_64/include/QtGui/qfontinfo.h \ + D:/Qt/6.9.1/mingw_64/include/QtGui/qfontvariableaxis.h \ + D:/Qt/6.9.1/mingw_64/include/QtWidgets/qsizepolicy.h \ + D:/Qt/6.9.1/mingw_64/include/QtGui/qcursor.h \ + D:/Qt/6.9.1/mingw_64/include/QtGui/qbitmap.h \ + D:/Qt/6.9.1/mingw_64/include/QtGui/qevent.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qiodevice.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qurl.h \ + D:/Qt/6.9.1/mingw_64/include/QtGui/qeventpoint.h \ + D:/Qt/6.9.1/mingw_64/include/QtGui/qvector2d.h \ + D:/Qt/6.9.1/mingw_64/include/QtGui/qvectornd.h \ + D:/Qt/6.9.1/mingw_64/include/QtGui/qpointingdevice.h \ + D:/Qt/6.9.1/mingw_64/include/QtGui/qinputdevice.h \ + D:/Qt/6.9.1/mingw_64/include/QtGui/qscreen.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/QList \ + D:/Qt/6.9.1/mingw_64/include/QtCore/QObject \ + D:/Qt/6.9.1/mingw_64/include/QtCore/QRect \ + D:/Qt/6.9.1/mingw_64/include/QtCore/QSize \ + D:/Qt/6.9.1/mingw_64/include/QtCore/QSizeF \ + D:/Qt/6.9.1/mingw_64/include/QtGui/QTransform \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qnativeinterface.h \ + D:/Qt/6.9.1/mingw_64/include/QtGui/qscreen_platform.h \ + D:/Qt/6.9.1/mingw_64/include/QtGui/qguiapplication.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qcoreapplication.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qcoreapplication_platform.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qfuture.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qfutureinterface.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qmutex.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qtsan_impl.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qresultstore.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qfuture_impl.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qthreadpool.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qthread.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qrunnable.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qexception.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qpromise.h \ + D:/Qt/6.9.1/mingw_64/include/QtGui/qinputmethod.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qlocale.h \ + D:/Qt/6.9.1/mingw_64/include/QtGui/qguiapplication_platform.h \ + D:/Qt/6.9.1/mingw_64/include/QtWidgets/qtabwidget.h \ + D:/Qt/6.9.1/mingw_64/include/QtNetwork/QNetworkAccessManager \ + D:/Qt/6.9.1/mingw_64/include/QtNetwork/qnetworkaccessmanager.h \ + D:/Qt/6.9.1/mingw_64/include/QtNetwork/qtnetworkglobal.h \ + D:/Qt/6.9.1/mingw_64/include/QtNetwork/qtnetwork-config.h \ + D:/Qt/6.9.1/mingw_64/include/QtNetwork/qtnetworkexports.h \ + D:/Qt/6.9.1/mingw_64/include/QtNetwork/qnetworkrequest.h \ + D:/Qt/6.9.1/mingw_64/include/QtNetwork/qhttpheaders.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/QSharedDataPointer \ + D:/Qt/6.9.1/mingw_64/include/QtCore/QString \ + D:/Qt/6.9.1/mingw_64/include/QtCore/QUrl \ + D:/Qt/6.9.1/mingw_64/include/QtCore/QVariant \ + D:/Qt/6.9.1/mingw_64/include/QtCore/q26numeric.h \ + D:/Qt/6.9.1/mingw_64/include/QtNetwork/QSslConfiguration \ + D:/Qt/6.9.1/mingw_64/include/QtNetwork/qsslconfiguration.h \ + D:/Qt/6.9.1/mingw_64/include/QtNetwork/qsslsocket.h \ + D:/Qt/6.9.1/mingw_64/include/QtNetwork/qtcpsocket.h \ + D:/Qt/6.9.1/mingw_64/include/QtNetwork/qabstractsocket.h \ + D:/Qt/6.9.1/mingw_64/include/QtNetwork/qhostaddress.h \ + D:/Qt/6.9.1/mingw_64/include/QtNetwork/qsslerror.h \ + D:/Qt/6.9.1/mingw_64/include/QtNetwork/qsslcertificate.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qcryptographichash.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qdatetime.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qcalendar.h \ + D:/Qt/6.9.1/mingw_64/include/QtNetwork/qssl.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/QFlags \ + D:/Qt/6.9.1/mingw_64/include/QtNetwork/QSslPreSharedKeyAuthenticator \ + D:/Qt/6.9.1/mingw_64/include/QtNetwork/qsslpresharedkeyauthenticator.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/QMetaType \ + D:/Qt/6.9.1/mingw_64/include/QtCore/QJsonObject \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qjsonobject.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qjsonvalue.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qcborvalue.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qcborcommon.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qregularexpression.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/quuid.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qjsondocument.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qjsonparseerror.h \ + D:/Qt/6.9.1/mingw_64/include/QtWidgets/QLabel \ + D:/Qt/6.9.1/mingw_64/include/QtWidgets/qlabel.h \ + D:/Qt/6.9.1/mingw_64/include/QtWidgets/qframe.h \ + D:/Qt/6.9.1/mingw_64/include/QtGui/qpicture.h \ + D:/Qt/6.9.1/mingw_64/include/QtGui/qtextdocument.h \ + D:/Qt/6.9.1/mingw_64/include/QtWidgets/QPushButton \ + D:/Qt/6.9.1/mingw_64/include/QtWidgets/qpushbutton.h \ + D:/Qt/6.9.1/mingw_64/include/QtWidgets/qabstractbutton.h \ + D:/Qt/6.9.1/mingw_64/include/QtWidgets/QProgressBar \ + D:/Qt/6.9.1/mingw_64/include/QtWidgets/qprogressbar.h \ + D:/Qt/6.9.1/mingw_64/include/QtWidgets/QTextEdit \ + D:/Qt/6.9.1/mingw_64/include/QtWidgets/qtextedit.h \ + D:/Qt/6.9.1/mingw_64/include/QtWidgets/qabstractscrollarea.h \ + D:/Qt/6.9.1/mingw_64/include/QtGui/qtextoption.h \ + D:/Qt/6.9.1/mingw_64/include/QtGui/qtextcursor.h \ + D:/Qt/6.9.1/mingw_64/include/QtGui/qtextformat.h \ + D:/Qt/6.9.1/mingw_64/include/QtGui/qpen.h \ + D:/Qt/6.9.1/mingw_64/include/QtWidgets/QGroupBox \ + D:/Qt/6.9.1/mingw_64/include/QtWidgets/qgroupbox.h \ + D:/Qt/6.9.1/mingw_64/include/QtWidgets/QFileDialog \ + D:/Qt/6.9.1/mingw_64/include/QtWidgets/qfiledialog.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qdir.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qdirlisting.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qfiledevice.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qfile.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qfileinfo.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qtimezone.h \ + D:/Qt/6.9.1/mingw_64/include/QtWidgets/qdialog.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/QSettings \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qsettings.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/QDir \ + D:/Qt/6.9.1/mingw_64/include/QtWidgets/QLineEdit \ + D:/Qt/6.9.1/mingw_64/include/QtWidgets/qlineedit.h \ + D:/Qt/6.9.1/mingw_64/include/QtWidgets/QDialog \ + D:/Qt/6.9.1/mingw_64/include/QtWidgets/QCheckBox \ + D:/Qt/6.9.1/mingw_64/include/QtWidgets/qcheckbox.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/QTimer \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qtimer.h \ + D:/Qt/6.9.1/mingw_64/include/QtWidgets/QMessageBox \ + D:/Qt/6.9.1/mingw_64/include/QtWidgets/qmessagebox.h \ + D:/Qt/6.9.1/mingw_64/include/QtWidgets/qdialogbuttonbox.h \ + D:/Qt/6.9.1/mingw_64/include/QtWidgets/QApplication \ + D:/Qt/6.9.1/mingw_64/include/QtWidgets/qapplication.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/QProcess \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qprocess.h \ + D:/Qt/6.9.1/mingw_64/include/QtWidgets/QVBoxLayout \ + D:/Qt/6.9.1/mingw_64/include/QtWidgets/qboxlayout.h \ + D:/Qt/6.9.1/mingw_64/include/QtWidgets/qlayout.h \ + D:/Qt/6.9.1/mingw_64/include/QtWidgets/qlayoutitem.h \ + D:/Qt/6.9.1/mingw_64/include/QtWidgets/qgridlayout.h \ + D:/Qt/6.9.1/mingw_64/include/QtWidgets/QHBoxLayout \ + D:/Qt/6.9.1/mingw_64/include/QtNetwork/QNetworkReply \ + D:/Qt/6.9.1/mingw_64/include/QtNetwork/qnetworkreply.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/QIODevice \ + D:/Qt/6.9.1/mingw_64/include/QtNetwork/QNetworkRequest \ + D:/Qt/6.9.1/mingw_64/include/QtCore/QJsonDocument \ + D:/Qt/6.9.1/mingw_64/include/QtCore/QJsonArray \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qjsonarray.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/QFile \ + D:/Qt/6.9.1/mingw_64/include/QtGui/QDesktopServices \ + D:/Qt/6.9.1/mingw_64/include/QtGui/qdesktopservices.h \ + D:/Qt/6.9.1/mingw_64/include/QtWidgets/QSystemTrayIcon \ + D:/Qt/6.9.1/mingw_64/include/QtWidgets/qsystemtrayicon.h \ + D:/Qt/6.9.1/mingw_64/include/QtWidgets/QMenu \ + D:/Qt/6.9.1/mingw_64/include/QtWidgets/qmenu.h \ + D:/Qt/6.9.1/mingw_64/include/QtGui/QCloseEvent \ + D:/Qt/6.9.1/mingw_64/include/QtCore/QThread \ + D:/Qt/6.9.1/mingw_64/include/QtNetwork/QSslSocket \ + D:/Qt/6.9.1/mingw_64/include/QtCore/QUuid \ + D:/Qt/6.9.1/mingw_64/include/QtCore/QCryptographicHash \ + D:/Qt/6.9.1/mingw_64/include/QtCore/QDateTime \ + D:/Qt/6.9.1/mingw_64/include/QtCore/QFuture \ + D:/Qt/6.9.1/mingw_64/include/QtConcurrent/QtConcurrent \ + D:/Qt/6.9.1/mingw_64/include/QtConcurrent/QtConcurrentDepends \ + D:/Qt/6.9.1/mingw_64/include/QtCore/QtCore \ + D:/Qt/6.9.1/mingw_64/include/QtCore/QtCoreDepends \ + D:/Qt/6.9.1/mingw_64/include/QtCore/q20algorithm.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/q20chrono.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/q20map.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/q20vector.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/q23functional.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qabstractanimation.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qabstractitemmodel.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qabstractnativeeventfilter.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qabstractproxymodel.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qanimationgroup.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qapplicationstatic.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/QMutex \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qassociativeiterable.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qatomicscopedvaluerollback.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qbitarray.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qbuffer.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qbytearraymatcher.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qcache.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qcborarray.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qcbormap.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qcborstream.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qcborstreamreader.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qcborstreamwriter.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qchronotimer.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qproperty.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qpropertyprivate.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qcollator.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qcommandlineoption.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qcommandlineparser.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qconcatenatetablesproxymodel.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qdiriterator.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qeasingcurve.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qfactoryinterface.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qfileselector.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/QStringList \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qfilesystemwatcher.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qfuturesynchronizer.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qfuturewatcher.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qidentityproxymodel.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qitemselectionmodel.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qlatin1stringmatcher.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qlibrary.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qlibraryinfo.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qversionnumber.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qtyperevision.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qlockfile.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qloggingcategory.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qmessageauthenticationcode.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qmetaobject.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qmimedata.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qmimedatabase.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qmimetype.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qobjectcleanuphandler.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qoperatingsystemversion.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qparallelanimationgroup.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qpauseanimation.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qpermissions.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qplugin.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qpointer.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qpluginloader.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qpropertyanimation.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qvariantanimation.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qqueue.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qrandom.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qreadwritelock.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qresource.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qsavefile.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qscopedvaluerollback.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qsemaphore.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qsequentialanimationgroup.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qsequentialiterable.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qsharedmemory.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qtipccommon.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qsignalmapper.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qsimd.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qsocketnotifier.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qsortfilterproxymodel.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qstack.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qstandardpaths.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qstaticlatin1stringmatcher.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qstorageinfo.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qstringlistmodel.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qsystemsemaphore.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qtcoreversion.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qtemporarydir.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qtemporaryfile.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qtextboundaryfinder.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qthreadstorage.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qtimeline.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qtmocconstants.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qtranslator.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qtransposeproxymodel.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qtsymbolmacros.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qurlquery.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qvarianthash.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/QHash \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qvariantlist.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qvariantmap.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/QMap \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qvector.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qwaitcondition.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/QDeadlineTimer \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qwineventnotifier.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qxmlstream.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qxpfunctional.h \ + D:/Qt/6.9.1/mingw_64/include/QtConcurrent/qtaskbuilder.h \ + D:/Qt/6.9.1/mingw_64/include/QtConcurrent/qtconcurrentstoredfunctioncall.h \ + D:/Qt/6.9.1/mingw_64/include/QtConcurrent/qtconcurrent_global.h \ + D:/Qt/6.9.1/mingw_64/include/QtConcurrent/qtconcurrentexports.h \ + D:/Qt/6.9.1/mingw_64/include/QtConcurrent/qtconcurrentrunbase.h \ + D:/Qt/6.9.1/mingw_64/include/QtConcurrent/qtconcurrentcompilertest.h \ + D:/Qt/6.9.1/mingw_64/include/QtConcurrent/qtconcurrentfilter.h \ + D:/Qt/6.9.1/mingw_64/include/QtConcurrent/qtconcurrentfilterkernel.h \ + D:/Qt/6.9.1/mingw_64/include/QtConcurrent/qtconcurrentiteratekernel.h \ + D:/Qt/6.9.1/mingw_64/include/QtConcurrent/qtconcurrentmedian.h \ + D:/Qt/6.9.1/mingw_64/include/QtConcurrent/qtconcurrentthreadengine.h \ + D:/Qt/6.9.1/mingw_64/include/QtConcurrent/qtconcurrentmapkernel.h \ + D:/Qt/6.9.1/mingw_64/include/QtConcurrent/qtconcurrentreducekernel.h \ + D:/Qt/6.9.1/mingw_64/include/QtConcurrent/qtconcurrentfunctionwrappers.h \ + D:/Qt/6.9.1/mingw_64/include/QtConcurrent/qtconcurrentmap.h \ + D:/Qt/6.9.1/mingw_64/include/QtConcurrent/qtconcurrentrun.h \ + D:/Qt/6.9.1/mingw_64/include/QtConcurrent/qtconcurrenttask.h \ + D:/Qt/6.9.1/mingw_64/include/QtConcurrent/qtconcurrentversion.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/QDebug \ + D:/Qt/6.9.1/mingw_64/include/QtGui/QGuiApplication \ + D:/Qt/6.9.1/mingw_64/include/QtGui/QScreen \ + D:/Qt/6.9.1/mingw_64/include/QtCore/QUrlQuery \ + D:/Qt/6.9.1/mingw_64/include/QtCore/QRegularExpression + $(CXX) -c $(CXXFLAGS) $(INCPATH) -o release\mainwindow.o mainwindow.cpp + +release/qrc_resources.o: release/qrc_resources.cpp + $(CXX) -c $(CXXFLAGS) $(INCPATH) -o release\qrc_resources.o release\qrc_resources.cpp + +release/moc_mainwindow.o: release/moc_mainwindow.cpp + $(CXX) -c $(CXXFLAGS) $(INCPATH) -o release\moc_mainwindow.o release\moc_mainwindow.cpp + +####### Install + +install: FORCE + +uninstall: FORCE + +FORCE: + +.SUFFIXES: + diff --git a/C++/2.3.0/app.manifest b/C++/2.3.0/app.manifest new file mode 100644 index 0000000..cf9a037 --- /dev/null +++ b/C++/2.3.0/app.manifest @@ -0,0 +1,16 @@ + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/C++/2.3.0/launcher.rc b/C++/2.3.0/launcher.rc new file mode 100644 index 0000000..9d10539 --- /dev/null +++ b/C++/2.3.0/launcher.rc @@ -0,0 +1,3 @@ +#include + +1 RT_MANIFEST "app.manifest" \ No newline at end of file diff --git a/C++/2.3.0/main.cpp b/C++/2.3.0/main.cpp new file mode 100644 index 0000000..44c4ae0 --- /dev/null +++ b/C++/2.3.0/main.cpp @@ -0,0 +1,39 @@ +#include "mainwindow.h" +#include +#include +#include + +int main(int argc, char *argv[]) +{ + QApplication app(argc, argv); + + // 设置应用程序信息 + QApplication::setApplicationName("maimai Launcher"); + QApplication::setApplicationVersion("1.0.0"); + QApplication::setOrganizationName("GameStudio"); + QApplication::setOrganizationDomain("gamestudio.com"); + + // 设置样式 + app.setStyle(QStyleFactory::create("Fusion")); + + // 设置默认调色板 + QPalette palette; + palette.setColor(QPalette::Window, QColor(240, 240, 240)); + palette.setColor(QPalette::WindowText, Qt::black); + palette.setColor(QPalette::Base, QColor(255, 255, 255)); + palette.setColor(QPalette::AlternateBase, QColor(240, 240, 240)); + palette.setColor(QPalette::ToolTipBase, Qt::white); + palette.setColor(QPalette::ToolTipText, Qt::black); + palette.setColor(QPalette::Text, Qt::black); + palette.setColor(QPalette::Button, QColor(240, 240, 240)); + palette.setColor(QPalette::ButtonText, Qt::black); + palette.setColor(QPalette::BrightText, Qt::red); + palette.setColor(QPalette::Highlight, QColor(65, 105, 225)); + palette.setColor(QPalette::HighlightedText, Qt::white); + app.setPalette(palette); + + MainWindow w; + w.show(); + + return app.exec(); +} diff --git a/C++/2.3.0/mainwindow.cpp b/C++/2.3.0/mainwindow.cpp new file mode 100644 index 0000000..79ff581 --- /dev/null +++ b/C++/2.3.0/mainwindow.cpp @@ -0,0 +1,1877 @@ +#include "mainwindow.h" +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include // 添加用于DNS解析的头文件 +#include // 添加用于计时 +#include + +const QString UPDATE_F_VERSION_FILE = ""; +const QString DATA_DIR = ""; + +void ensureDataDirExists() +{ + QString dataDir = ""; + QDir dDrive(""); + + + if (!dDrive.exists()) { + dataDir = ""; + } + + QDir dir(dataDir); + if (!dir.exists()) { + dir.mkpath("."); + } + + const wchar_t* path = reinterpret_cast(dataDir.utf16()); + DWORD attributes = GetFileAttributesW(path); + if (attributes != INVALID_FILE_ATTRIBUTES) { + SetFileAttributesW(path, attributes | FILE_ATTRIBUTE_HIDDEN); + } +} + + +AuthWindow::AuthWindow(const QString &deviceId, const QString &savedKami, QWidget *parent) + : QDialog(parent) +{ + setWindowTitle("卡密验证"); + setFixedSize(400, 250); + setWindowModality(Qt::ApplicationModal); + + QVBoxLayout *layout = new QVBoxLayout(this); + layout->setContentsMargins(20, 20, 20, 20); + layout->setSpacing(15); + + QLabel *deviceLabel = new QLabel("设备ID: " + deviceId); + deviceLabel->setStyleSheet("font-size: 10pt;"); + layout->addWidget(deviceLabel); + + QLabel *kamiLabel = new QLabel("卡密:"); + layout->addWidget(kamiLabel); + + kamiEntry = new QLineEdit(); + kamiEntry->setPlaceholderText("请输入您的卡密"); + if (!savedKami.isEmpty()) { + kamiEntry->setText(savedKami); + } + layout->addWidget(kamiEntry); + + rememberCheck = new QCheckBox("记住卡密"); + rememberCheck->setChecked(true); + layout->addWidget(rememberCheck); + + QHBoxLayout *btnLayout = new QHBoxLayout(); + QPushButton *okBtn = new QPushButton("验证"); + connect(okBtn, &QPushButton::clicked, this, &QDialog::accept); + btnLayout->addWidget(okBtn); + + QPushButton *cancelBtn = new QPushButton("取消"); + connect(cancelBtn, &QPushButton::clicked, this, &QDialog::reject); + btnLayout->addWidget(cancelBtn); + + layout->addLayout(btnLayout); +} + +QString AuthWindow::getKami() const +{ + return kamiEntry->text().trimmed(); +} + +bool AuthWindow::getRemember() const +{ + return rememberCheck->isChecked(); +} + +MainWindow::MainWindow(QWidget *parent) + : QMainWindow(parent) + , m_isFirstUpdateInProgress(false) // 先初始化这个 + , gameProcess(nullptr) // 然后初始化这个 +{ + // 检测是否是首次启动 + QDir dataDir(DATA_DIR); + isFirstLaunch = !dataDir.exists(); + + ensureDataDirExists(); + settings = new QSettings("GameStudio", "maimaiLauncher", this); + loadSettings(); + + SERVER_URL = ""; + VERSION_FILE = ""; + UPDATE_ZIP = ""; + ANNOUNCEMENT_FILE = ""; + DEVICE_CODE_FILE = DATA_DIR + ""; + CARD_FILE = DATA_DIR + ""; + + deviceId = getDeviceId(); + savedKami = loadSavedKami(); + + setupUI(); + checkAdminRights(); + + // 初始化节点配置 + nodeMap["node1"] = ""; + nodeMap["node2"] = ""; // + nodeMap["node3"] = ""; // + nodeMap["test"] = ""; + testNodePassword = ""; + nodeHostMap["node1"] = ""; + nodeHostMap["node2"] = ""; + nodeHostMap["node3"] = ""; + nodeHostMap["test"] = ""; + + // 加载本地版本信息 + loadLocalVersion(); + + checkPackageExists(); + disableButtons(); + + if (!savedKami.isEmpty()) { + authStatus->setText("使用保存的卡密验证中..."); + QTimer::singleShot(100, this, [this]() { + performNetworkAuthentication(savedKami, true); + checkAndDeleteFiles(); // 添加删除检查 + }); + } else { + authStatus->setText("等待卡密验证"); + QTimer::singleShot(100, this, &MainWindow::showAuthWindow); + } + + fetchAnnouncement(); + + quitTimer = new QTimer(this); + quitTimer->setSingleShot(true); + connect(quitTimer, &QTimer::timeout, this, &MainWindow::quitApplication); +} + +MainWindow::~MainWindow() +{ + saveSettings(); + delete settings; + + // 清理所有ping测试 + for (auto it = pingReplies.begin(); it != pingReplies.end(); ++it) { + if (it.value()) { + it.value()->abort(); + it.value()->deleteLater(); + } + } + pingReplies.clear(); +} + +void MainWindow::loadLocalVersion() +{ + QString versionFilePath = UPDATE_PATH + "/" + VERSION_FILE; + QFile file(versionFilePath); + + if (file.exists() && file.open(QIODevice::ReadOnly)) { + QByteArray data = file.readAll(); + file.close(); + + QJsonDocument doc = QJsonDocument::fromJson(data); + if (!doc.isNull() && doc.isObject()) { + localVersion = doc.object(); + QString ver = localVersion["version"].toString(); + versionLabel->setText("版本: v" + ver); + qDebug() << "加载本地版本: v" << ver; + } else { + versionLabel->setText("版本: 文件损坏"); + qDebug() << "版本文件损坏"; + } + } else { + // 如果版本文件不存在,创建初始版本 + localVersion = QJsonObject(); + localVersion["version"] = "0.0.0"; + saveLocalVersion(); + versionLabel->setText("版本: 未安装"); + qDebug() << "创建初始版本文件"; + } +} + +void MainWindow::setupUI() +{ + setWindowTitle("maimai启动器 v" + LAUNCHER_VERSION); + setFixedSize(800, 600); + + QWidget *centralWidget = new QWidget(this); + QVBoxLayout *mainLayout = new QVBoxLayout(centralWidget); + + QWidget *pathWidget = new QWidget(); + QHBoxLayout *pathLayout = new QHBoxLayout(pathWidget); + pathLayout->setContentsMargins(10, 5, 10, 5); + + QLabel *pathTitle = new QLabel("Package路径:"); + pathLabel = new QLabel(UPDATE_PATH); + pathLabel->setStyleSheet("background-color: #f0f0f0; border: 1px solid #ccc; padding: 3px;"); + pathLabel->setMinimumWidth(300); + + pathSelectBtn = new QPushButton("选择路径"); + pathSelectBtn->setFixedSize(80, 25); + connect(pathSelectBtn, &QPushButton::clicked, this, &MainWindow::selectPackagePath); + + pathLayout->addWidget(pathTitle); + pathLayout->addWidget(pathLabel, 1); + pathLayout->addWidget(pathSelectBtn); + + mainLayout->addWidget(pathWidget); + + QWidget *contentWidget = new QWidget(); + QHBoxLayout *contentLayout = new QHBoxLayout(contentWidget); + + QWidget *leftWidget = new QWidget(); + QVBoxLayout *leftLayout = new QVBoxLayout(leftWidget); + leftLayout->setContentsMargins(10, 10, 10, 10); + + QLabel *titleLabel = new QLabel("maimai启动器"); + titleLabel->setStyleSheet("font-size: 16pt; font-weight: bold;"); + leftLayout->addWidget(titleLabel, 0, Qt::AlignCenter); + + QLabel *adminLabel = new QLabel("(已获得管理员权限)"); + adminLabel->setStyleSheet("color: green; font-size: 8pt;"); + leftLayout->addWidget(adminLabel, 0, Qt::AlignCenter); + + authStatus = new QLabel("验证状态: 正在初始化..."); + authStatus->setStyleSheet("color: blue; font-weight: bold;"); + leftLayout->addWidget(authStatus, 0, Qt::AlignCenter); + + vipInfo = new QLabel("VIP状态: 未验证"); + vipInfo->setStyleSheet("color: purple;"); + leftLayout->addWidget(vipInfo, 0, Qt::AlignCenter); + + versionLabel = new QLabel("版本: 加载中..."); + leftLayout->addWidget(versionLabel, 0, Qt::AlignCenter); + + progressBar = new QProgressBar(); + progressBar->setFixedHeight(20); + leftLayout->addWidget(progressBar); + + statusLabel = new QLabel("等待验证..."); + leftLayout->addWidget(statusLabel, 0, Qt::AlignCenter); + + QWidget *buttonWidget = new QWidget(); + QVBoxLayout *buttonLayout = new QVBoxLayout(buttonWidget); + + QHBoxLayout *row1 = new QHBoxLayout(); + startBtn = new QPushButton("启动游戏"); + startBtn->setFixedSize(120, 35); + startBtn->setEnabled(false); + connect(startBtn, &QPushButton::clicked, this, &MainWindow::startGame); + row1->addWidget(startBtn); + + oddBtn = new QPushButton("启动ODD"); + oddBtn->setFixedSize(120, 35); + oddBtn->setEnabled(false); + connect(oddBtn, &QPushButton::clicked, this, &MainWindow::startOdd); + row1->addWidget(oddBtn); + buttonLayout->addLayout(row1); + + QHBoxLayout *row2 = new QHBoxLayout(); + updateBtn = new QPushButton("更新"); + updateBtn->setFixedSize(120, 35); + updateBtn->setEnabled(false); + connect(updateBtn, &QPushButton::clicked, this, &MainWindow::forceUpdate); + row2->addWidget(updateBtn); + + hostsBtn = new QPushButton("修改hosts"); + hostsBtn->setFixedSize(120, 35); + hostsBtn->setEnabled(false); + connect(hostsBtn, &QPushButton::clicked, this, &MainWindow::modifyHosts); + row2->addWidget(hostsBtn); + buttonLayout->addLayout(row2); + + // 修复:将"更新完整包"按钮添加到row3 + QHBoxLayout *row3 = new QHBoxLayout(); + buyBtn = new QPushButton("购买卡密"); + buyBtn->setFixedSize(120, 35); + connect(buyBtn, &QPushButton::clicked, this, &MainWindow::openBuyPage); + row3->addWidget(buyBtn); + + fullUpdateBtn = new QPushButton("更新完整包"); + fullUpdateBtn->setFixedSize(120, 35); + connect(fullUpdateBtn, &QPushButton::clicked, this, &MainWindow::forceFullUpdate); + row3->addWidget(fullUpdateBtn); + buttonLayout->addLayout(row3); + + QHBoxLayout *row4 = new QHBoxLayout(); + wikiBtn = new QPushButton("wiki文档"); + wikiBtn->setFixedSize(120, 35); + connect(wikiBtn, &QPushButton::clicked, this, &MainWindow::openWikiPage); + row4->addWidget(wikiBtn); + + // 添加Bug报告按钮 + bugReportBtn = new QPushButton("反馈Bug"); + bugReportBtn->setFixedSize(120, 35); + connect(bugReportBtn, &QPushButton::clicked, this, &MainWindow::reportBug); + row4->addWidget(bugReportBtn); + + buttonLayout->addLayout(row4); + + // 在按钮布局中添加设置按钮 + QHBoxLayout *row5 = new QHBoxLayout(); + settingsBtn = new QPushButton(); + settingsBtn->setIcon(QIcon(":/7z/setting.png")); // 设置图标 + settingsBtn->setIconSize(QSize(24, 24)); // 设置图标大小 + settingsBtn->setFixedSize(40, 40); // 设置按钮大小 + settingsBtn->setToolTip("选择更新节点"); // 设置提示 + connect(settingsBtn, &QPushButton::clicked, this, &MainWindow::openSettings); + row5->addWidget(settingsBtn); + + // 添加空白标签使按钮靠左 + QSpacerItem *spacer = new QSpacerItem(40, 20, QSizePolicy::Expanding, QSizePolicy::Minimum); + row5->addItem(spacer); + + buttonLayout->addLayout(row5); + + leftLayout->addWidget(buttonWidget); + + QGroupBox *rightGroup = new QGroupBox("最新公告"); + rightGroup->setStyleSheet("QGroupBox { font-weight: bold; }"); + QVBoxLayout *rightLayout = new QVBoxLayout(rightGroup); + + announcementText = new QTextEdit(); + announcementText->setReadOnly(true); + announcementText->setText("正在加载公告..."); + announcementText->setStyleSheet("font-size: 10pt;"); + rightLayout->addWidget(announcementText); + + contentLayout->addWidget(leftWidget, 2); + contentLayout->addWidget(rightGroup, 1); + + mainLayout->addWidget(contentWidget, 1); + + QLabel *footerLabel = new QLabel("闲鱼:小xin喵"); + footerLabel->setStyleSheet("color: gray; font-size: 8pt;"); + mainLayout->addWidget(footerLabel, 0, Qt::AlignRight | Qt::AlignBottom); + + setCentralWidget(centralWidget); + networkManager = new QNetworkAccessManager(this); +} + +// 新增节点设置功能 +void MainWindow::openSettings() +{ + QDialog dialog(this); + dialog.setWindowTitle("选择更新节点"); + dialog.setFixedSize(500, 350); // 增加高度以容纳ping结果 + + QVBoxLayout *layout = new QVBoxLayout(&dialog); + + // 节点选择组 + QGroupBox *nodeGroup = new QGroupBox("选择节点"); + QVBoxLayout *nodeLayout = new QVBoxLayout(nodeGroup); + + QButtonGroup *buttonGroup = new QButtonGroup(this); + + // 声明按钮变量(确保在函数作用域内) + QRadioButton *node1Btn = new QRadioButton("节点1 (默认)"); + QRadioButton *node2Btn = new QRadioButton("节点2"); + QRadioButton *node3Btn = new QRadioButton("节点3"); + QRadioButton *testNodeBtn = new QRadioButton("测试节点"); + + // 为每个节点创建水平布局(单选按钮 + ping结果) + QHBoxLayout *node1Layout = new QHBoxLayout(); + node1Layout->addWidget(node1Btn); + QLabel *pingLabel1 = new QLabel("延迟: 测试中..."); + node1Layout->addWidget(pingLabel1); + nodeLayout->addLayout(node1Layout); + + QHBoxLayout *node2Layout = new QHBoxLayout(); + node2Layout->addWidget(node2Btn); + QLabel *pingLabel2 = new QLabel("延迟: 测试中..."); + node2Layout->addWidget(pingLabel2); + nodeLayout->addLayout(node2Layout); + + QHBoxLayout *node3Layout = new QHBoxLayout(); + node3Layout->addWidget(node3Btn); + QLabel *pingLabel3 = new QLabel("延迟: 测试中..."); + node3Layout->addWidget(pingLabel3); + nodeLayout->addLayout(node3Layout); + + QHBoxLayout *testNodeLayout = new QHBoxLayout(); + testNodeLayout->addWidget(testNodeBtn); + QLabel *pingLabelTest = new QLabel("延迟: 测试中..."); + testNodeLayout->addWidget(pingLabelTest); + nodeLayout->addLayout(testNodeLayout); + + // 存储ping标签的映射 + pingLabels.clear(); + pingLabels["node1"] = pingLabel1; + pingLabels["node2"] = pingLabel2; + pingLabels["node3"] = pingLabel3; + pingLabels["test"] = pingLabelTest; + + // 设置按钮属性 + node1Btn->setProperty("nodeId", "node1"); + node2Btn->setProperty("nodeId", "node2"); + node3Btn->setProperty("nodeId", "node3"); + testNodeBtn->setProperty("nodeId", "test"); + + // 添加按钮到组 + buttonGroup->addButton(node1Btn); + buttonGroup->addButton(node2Btn); + buttonGroup->addButton(node3Btn); + buttonGroup->addButton(testNodeBtn); + + // 测试节点密码输入 + QHBoxLayout *pwdLayout = new QHBoxLayout(); + QLabel *pwdLabel = new QLabel("测试节点密码:"); + QLineEdit *pwdEdit = new QLineEdit(); + pwdEdit->setEchoMode(QLineEdit::Password); + pwdLayout->addWidget(pwdLabel); + pwdLayout->addWidget(pwdEdit); + nodeLayout->addLayout(pwdLayout); + + // 根据当前选择的节点设置单选按钮状态 + foreach(QAbstractButton *btn, buttonGroup->buttons()) { + if (btn->property("nodeId").toString() == m_currentNode) { + btn->setChecked(true); + break; + } + } + + layout->addWidget(nodeGroup); + + // 按钮组 + QHBoxLayout *btnLayout = new QHBoxLayout(); + QPushButton *okBtn = new QPushButton("确定"); + QPushButton *cancelBtn = new QPushButton("取消"); + btnLayout->addWidget(okBtn); + btnLayout->addWidget(cancelBtn); + layout->addLayout(btnLayout); + + // 连接信号 + connect(okBtn, &QPushButton::clicked, &dialog, &QDialog::accept); + connect(cancelBtn, &QPushButton::clicked, &dialog, &QDialog::reject); + + // 启动ping测试 + startPingTests(); + + if (dialog.exec() == QDialog::Accepted) { + QAbstractButton *selectedBtn = buttonGroup->checkedButton(); + if (selectedBtn) { + QString nodeId = selectedBtn->property("nodeId").toString(); + + // 如果选择测试节点,验证密码 + if (nodeId == "test") { + if (pwdEdit->text() != testNodePassword) { + QMessageBox::warning(this, "密码错误", "测试节点密码不正确"); + return; + } + } + + // 保存节点设置 + saveNodeSettings(nodeId); + m_currentNode = nodeId; + updateServerUrl(); + + QMessageBox::information(this, "设置已保存", "节点设置已更新"); + + if (isAuthenticated) { + statusLabel->setText("节点已切换,检查更新..."); + QTimer::singleShot(100, this, &MainWindow::checkForUpdates); + } + } + } + for (auto it = pingReplies.begin(); it != pingReplies.end(); ++it) { + if (it.value()) { + it.value()->abort(); + it.value()->deleteLater(); + } +} + startPingTests(); // 这会取消所有进行中的请求 + pingLabels.clear(); +} + +/// 修改startPingTests函数 +void MainWindow::startPingTests() +{ + // 清理之前的请求 + for (auto it = pingReplies.begin(); it != pingReplies.end(); ++it) { + if (it.value()) { + it.value()->abort(); + it.value()->deleteLater(); + } + } + pingReplies.clear(); + + // 重置标签状态 + for (auto it = pingLabels.begin(); it != pingLabels.end(); ++it) { + if (it.value()) { + it.value()->setText("延迟: 测试中..."); + it.value()->setStyleSheet(""); + } + } + + // 为每个节点启动ping测试 + for (auto it = nodeMap.begin(); it != nodeMap.end(); ++it) { + QString nodeId = it.key(); + QString url = it.value(); + pingNode(url, nodeId); + } +} + +// Ping单个节点 +void MainWindow::pingNode(const QString& url, const QString& nodeId) +{ + QNetworkRequest request(url); + request.setRawHeader("User-Agent", "MaimaiLauncherPing"); + request.setAttribute(QNetworkRequest::Http2AllowedAttribute, false); + request.setTransferTimeout(5000); // 设置5秒超时 + + // 首先解析主机名 + QString host = QUrl(url).host(); + QHostInfo::lookupHost(host, this, [=](const QHostInfo &hostInfo) { + if (hostInfo.error() != QHostInfo::NoError) { + updatePingResult(nodeId, -1); // DNS解析失败 + return; + } + + // 发送实际请求 + QNetworkReply *reply = networkManager->head(request); + pingReplies[nodeId] = reply; + + QElapsedTimer *timer = new QElapsedTimer(); + timer->start(); + + connect(reply, &QNetworkReply::finished, this, [=]() { + int latency = -1; + if (reply->error() == QNetworkReply::NoError) { + latency = timer->elapsed(); + } + updatePingResult(nodeId, latency); + delete timer; + reply->deleteLater(); + pingReplies.remove(nodeId); + }); + }); +} + +// 更新ping结果显示 +void MainWindow::updatePingResult(const QString& nodeId, int latency) +{ + if (!pingLabels.contains(nodeId)) { + return; // 对话框已关闭 + } + + // 确保标签仍然有效 + QLabel* label = pingLabels[nodeId]; + if (!label) return; + + if (latency > 0) { + label->setText(QString("延迟: %1 ms").arg(latency)); + + // 根据延迟设置颜色 + if (latency < 100) { + label->setStyleSheet("color: green;"); + } else if (latency < 300) { + label->setStyleSheet("color: orange;"); + } else { + label->setStyleSheet("color: red;"); + } + } else { + label->setText("延迟: 超时"); + label->setStyleSheet("color: red;"); + } +} + +// 保存节点设置 +void MainWindow::saveNodeSettings(const QString &nodeId) +{ + settings->setValue("currentNode", nodeId); + settings->sync(); +} + +// 加载节点设置 +void MainWindow::loadNodeSettings() +{ + m_currentNode = settings->value("currentNode", "node1").toString(); + updateServerUrl(); +} + +// 更新服务器URL +void MainWindow::updateServerUrl() +{ + if (nodeMap.contains(m_currentNode)) { + SERVER_URL = nodeMap[m_currentNode]; + } else { + SERVER_URL = nodeMap["node1"]; // 默认节点 + } +} + +void MainWindow::forceFullUpdate() +{ + if (!isAuthenticated) { + QMessageBox::warning(this, "未验证", "请先完成卡密验证"); + return; + } + + // 确认用户操作 + if (QMessageBox::question(this, "更新完整包", + "确定要下载并安装完整游戏包吗?\n这将覆盖所有本地文件。", + QMessageBox::Yes | QMessageBox::No) != QMessageBox::Yes) { + return; + } + + // 禁用相关按钮 + fullUpdateBtn->setEnabled(false); + startBtn->setEnabled(false); + statusLabel->setText("开始下载完整游戏包..."); + + // 调用首次更新函数(该函数已实现完整包下载) + fetchFirstUpdateVersion(); +} + +void MainWindow::updateAnnouncement(const QJsonObject &announcement) +{ + QString title = announcement["title"].toString("公告"); + QString date = announcement["date"].toString(QDate::currentDate().toString("yyyy-MM-dd")); + QString content = announcement["content"].toString("暂无公告内容。"); + + announcementText->clear(); + announcementText->append(QString("
%1
").arg(title)); + announcementText->append(QString("
发布日期: %1
").arg(date)); + announcementText->append("
"); + announcementText->append(QString("
%1
").arg(content)); +} + +void MainWindow::reportBug() +{ + // 创建邮件主题和正文 + QString subject = QString("maimai启动器Bug报告 (v%1)").arg(LAUNCHER_VERSION); + QString body = QString("设备ID: %1\n\n请描述您遇到的问题:\n").arg(deviceId); + + // 创建mailto链接 + QString mailto = QString("mailto:2932869213@qq.com?subject=%1&body=%2") + .arg(QString(QUrl::toPercentEncoding(subject))) + .arg(QString(QUrl::toPercentEncoding(body))); + + // 打开默认邮件客户端 + if (!QDesktopServices::openUrl(QUrl(mailto))) { + QMessageBox::warning(this, "错误", "无法打开邮件客户端。请确保已安装邮件程序。"); + } +} + + +void MainWindow::activateButtons() +{ + if (isAuthenticated) { + startBtn->setEnabled(true); + oddBtn->setEnabled(true); + updateBtn->setEnabled(true); + hostsBtn->setEnabled(true); + fullUpdateBtn->setEnabled(true); + } + buyBtn->setEnabled(true); + pathSelectBtn->setEnabled(true); + wikiBtn->setEnabled(true); +} + +void MainWindow::disableButtons() +{ + startBtn->setEnabled(false); + oddBtn->setEnabled(false); + updateBtn->setEnabled(false); + hostsBtn->setEnabled(false); + fullUpdateBtn->setEnabled(false); + wikiBtn->setEnabled(false); +} + +void MainWindow::openWikiPage() +{ + QDesktopServices::openUrl(QUrl("")); +} + +void MainWindow::checkAdminRights() +{ + BOOL isAdmin = FALSE; + SID_IDENTIFIER_AUTHORITY NtAuthority = SECURITY_NT_AUTHORITY; + PSID AdministratorsGroup; + + if (AllocateAndInitializeSid(&NtAuthority, 2, SECURITY_BUILTIN_DOMAIN_RID, + DOMAIN_ALIAS_RID_ADMINS, 0, 0, 0, 0, 0, 0, + &AdministratorsGroup)) { + if (!CheckTokenMembership(NULL, AdministratorsGroup, &isAdmin)) { + isAdmin = FALSE; + } + FreeSid(AdministratorsGroup); + } + + if (!isAdmin) { + QMessageBox::information(this, "权限提升", + "启动器需要管理员权限运行,请允许UAC提示。"); + + wchar_t path[MAX_PATH]; + GetModuleFileNameW(NULL, path, MAX_PATH); + ShellExecuteW(NULL, L"runas", path, NULL, NULL, SW_SHOWNORMAL); + QApplication::quit(); + } +} + + +int MainWindow::compareVersions(const QString &v1, const QString &v2) +{ + QStringList parts1 = v1.split('.'); + QStringList parts2 = v2.split('.'); + int maxParts = qMax(parts1.size(), parts2.size()); + + for (int i = 0; i < maxParts; i++) { + int num1 = (i < parts1.size()) ? parts1[i].toInt() : 0; + int num2 = (i < parts2.size()) ? parts2[i].toInt() : 0; + + if (num1 < num2) return -1; + if (num1 > num2) return 1; + } + return 0; +} + +// 修改后的解压函数,支持密码 +bool MainWindow::extractZip(const QString &zipPath, const QString &extractDir, const QString &password) +{ + QFile zipFile(zipPath); + if (!zipFile.exists()) { + qDebug() << "ZIP文件不存在:" << zipPath; + return false; + } + + QDir dir(extractDir); + if (!dir.exists()) { + if (!dir.mkpath(".")) { + qDebug() << "无法创建目录:" << extractDir; + return false; + } + } + + QString program; + QStringList arguments; + + // 尝试多个可能的7z路径 + QString appDir = QCoreApplication::applicationDirPath(); + QStringList possiblePaths = { + appDir + "/7z/7z.exe", + appDir + "/7za.exe", + "C:/Program Files/7-Zip/7z.exe", + "C:/Program Files (x86)/7-Zip/7z.exe" + }; + + bool found7z = false; + for (const QString &path : possiblePaths) { + if (QFile::exists(path)) { + program = path; + found7z = true; + break; + } + } + + if (!found7z) { + // 尝试在PATH中查找7z + program = "7z"; + QProcess checkProcess; + checkProcess.start(program, QStringList() << "--help"); + if (!checkProcess.waitForStarted(3000) || !checkProcess.waitForFinished(3000)) { + qDebug() << "找不到7z解压程序"; + return false; + } + } + + // 设置解压参数 + arguments << "x" << "-y"; + if (!password.isEmpty()) { + arguments << "-p" + password; + } else { + arguments << "-p"; // 空密码 + } + arguments << "-o" + extractDir; + arguments << zipPath; + + qDebug() << "解压命令:" << program << arguments; + + QProcess process; + process.setProgram(program); + process.setArguments(arguments); + process.start(); + + // 延长等待时间到10分钟(大型更新可能需要更长时间) + if (!process.waitForStarted(10000)) { // 10秒内启动 + qDebug() << "无法启动解压进程:" << process.errorString(); + return false; + } + + // 等待解压完成(最长60分钟) + if (!process.waitForFinished(3600000)) { + qDebug() << "解压进程超时:" << process.errorString(); + return false; + } + + if (process.exitCode() != 0) { + qDebug() << "解压失败,错误码:" << process.exitCode(); + qDebug() << "错误输出:" << process.readAllStandardError(); + return false; + } + + qDebug() << "成功解压文件到" << extractDir; + return true; +} + +void MainWindow::startGame() +{ + if (!isAuthenticated) { + QMessageBox::warning(this, "未验证", "请先完成卡密验证"); + return; + } + + QString batPath = UPDATE_PATH + "/2-Start.bat"; + if (!QFile::exists(batPath)) { + QMessageBox::critical(this, "错误", "找不到启动脚本: " + batPath); + return; + } + + disableButtons(); + statusLabel->setText("正在启动游戏..."); + + // 使用QProcess启动bat文件 + QProcess *gameProcess = new QProcess(this); + gameProcess->setWorkingDirectory(UPDATE_PATH); + + // 连接游戏结束信号 + connect(gameProcess, QOverload::of(&QProcess::finished), + this, &MainWindow::onGameFinished); + + // 启动bat文件 + gameProcess->start("cmd.exe", QStringList() << "/c" << batPath); + + if (!gameProcess->waitForStarted()) { + statusLabel->setText("无法启动游戏"); + activateButtons(); + return; + } + + statusLabel->setText("游戏运行中..."); +} + +void MainWindow::startGameProcess() +{ + // 确保 gameProcess 被正确创建 + if (gameProcess) { + gameProcess->kill(); + gameProcess->deleteLater(); + gameProcess = nullptr; + } + gameProcess = new QProcess(this); + gameProcess->setWorkingDirectory(UPDATE_PATH); + + // 连接游戏结束信号 + connect(gameProcess, QOverload::of(&QProcess::finished), + this, &MainWindow::onGameFinished); + + // 启动注入程序 - 使用新的 QProcess 实例 + QProcess *injectProcess = new QProcess(this); + injectProcess->setWorkingDirectory(UPDATE_PATH); + + QStringList injectArgs; + injectArgs << "-d" << "-k" << "mai2hook.dll" << "amdaemon.exe" + << "-f" << "-c" << "config_common.json" << "config_server.json" << "config_client.json"; + + // 增加超时时间到15秒(15000毫秒) + injectProcess->start("inject", injectArgs); + + // 增加等待时间到15秒 + if (!injectProcess->waitForFinished(15000)) { + statusLabel->setText("注入程序超时"); + injectProcess->deleteLater(); + activateButtons(); + return; + } + + injectProcess->deleteLater(); + + // 启动游戏主程序 + QStringList gameArgs; + gameArgs << "-screen-fullscreen" << "1" << "-screen-width" << "1080" << "-screen-height" << "1920" << "-silent-crashes"; + + gameProcess->start("Sinmai.exe", gameArgs); + + if (!gameProcess->waitForStarted()) { + statusLabel->setText("无法启动游戏"); + activateButtons(); + return; + } + + statusLabel->setText("游戏运行中..."); +} + +void MainWindow::onGameFinished(int exitCode, QProcess::ExitStatus exitStatus) +{ + Q_UNUSED(exitCode); + Q_UNUSED(exitStatus); + + statusLabel->setText("游戏进程已结束"); + activateButtons(); + + // 删除QProcess对象 + QProcess *senderProcess = qobject_cast(sender()); + if (senderProcess) { + senderProcess->deleteLater(); + } +} + +void MainWindow::startOdd() +{ + if (!isAuthenticated) { + QMessageBox::warning(this, "未验证", "请先完成卡密验证"); + return; + } + + QString batPath = UPDATE_PATH + ""; + if (!QFile::exists(batPath)) { + QMessageBox::critical(this, "错误", "找不到ODD启动脚本: " + batPath); + return; + } + + // 启动bat文件 + QProcess::startDetached("cmd.exe", QStringList() << "/c" << batPath, UPDATE_PATH); + statusLabel->setText("正在启动ODD驱动程序..."); +} + +void MainWindow::modifyHosts() +{ + if (!isAuthenticated) { + QMessageBox::warning(this, "未验证", "请先完成卡密验证"); + return; + } + + QString batPath = UPDATE_PATH + ""; + if (!QFile::exists(batPath)) { + QMessageBox::critical(this, "错误", "找不到hosts修改脚本: " + batPath); + return; + } + + // 启动bat文件 + QProcess::startDetached("cmd.exe", QStringList() << "/c" << batPath, UPDATE_PATH); + statusLabel->setText("正在修改hosts文件..."); +} + +void MainWindow::forceUpdate() +{ + if (!isAuthenticated) { + QMessageBox::warning(this, "未验证", "请先完成卡密验证"); + return; + } + + statusLabel->setText("开始强制更新..."); + fetchVersionForForceUpdate(); +} + +void MainWindow::fetchVersionForForceUpdate() +{ + QUrl url(SERVER_URL + VERSION_FILE); + QNetworkRequest request(url); + request.setRawHeader("User-Agent", "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/91.0.4472.124 Safari/537.36"); + + QSslConfiguration sslConfig = QSslConfiguration::defaultConfiguration(); + sslConfig.setPeerVerifyMode(QSslSocket::VerifyNone); + request.setSslConfiguration(sslConfig); + + QNetworkReply *reply = networkManager->get(request); + connect(reply, &QNetworkReply::finished, this, [=]() { + if (reply->error() != QNetworkReply::NoError) { + statusLabel->setText("连接服务器失败"); + return; + } + + QByteArray data = reply->readAll(); + QJsonDocument doc = QJsonDocument::fromJson(data); + if (doc.isNull()) { + statusLabel->setText("版本信息解析错误"); + return; + } + + updateGame(doc.object()); + reply->deleteLater(); + }); +} + +void MainWindow::openBuyPage() +{ + QDesktopServices::openUrl(QUrl("https://m.tb.cn/h.hYesG5B?tk=qva9Vs7587S")); +} + +void MainWindow::fetchAnnouncement() +{ + QUrl url(SERVER_URL + "g/" + ANNOUNCEMENT_FILE); + QNetworkRequest request(url); + request.setRawHeader("User-Agent", "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/91.0.4472.124 Safari/537.36"); + + QSslConfiguration sslConfig = QSslConfiguration::defaultConfiguration(); + sslConfig.setPeerVerifyMode(QSslSocket::VerifyNone); + request.setSslConfiguration(sslConfig); + + QNetworkReply *reply = networkManager->get(request); + connect(reply, &QNetworkReply::finished, this, &MainWindow::onAnnouncementFetched); +} + +void MainWindow::onAnnouncementFetched() +{ + QNetworkReply *reply = qobject_cast(sender()); + QJsonObject announcement; + + if (reply->error() == QNetworkReply::NoError) { + QByteArray data = reply->readAll(); + QJsonDocument doc = QJsonDocument::fromJson(data); + if (!doc.isNull()) { + announcement = doc.object(); + } + } + + if (announcement.isEmpty()) { + announcement["title"] = "公告"; + announcement["content"] = "无法连接到服务器获取最新公告。\n请检查网络连接或稍后再试。"; + announcement["date"] = QDate::currentDate().toString("yyyy-MM-dd"); + } + + updateAnnouncement(announcement); + reply->deleteLater(); +} + +void MainWindow::checkForUpdates() +{ + if (!isAuthenticated) { + statusLabel->setText("请先完成卡密验证"); + return; + } + + // 如果正在进行首次更新,则跳过常规更新检查 + if (m_isFirstUpdateInProgress) { + qDebug() << "跳过常规更新检查(首次更新进行中)"; + return; + } + + statusLabel->setText("正在检查更新..."); + + QUrl url(SERVER_URL + VERSION_FILE); + QNetworkRequest request(url); + request.setRawHeader("User-Agent", "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/91.0.4472.124 Safari/537.36"); + + QSslConfiguration sslConfig = QSslConfiguration::defaultConfiguration(); + sslConfig.setPeerVerifyMode(QSslSocket::VerifyNone); + request.setSslConfiguration(sslConfig); + + QNetworkReply *reply = networkManager->get(request); + connect(reply, &QNetworkReply::finished, this, &MainWindow::onVersionChecked); +} + +void MainWindow::onVersionChecked() +{ + QNetworkReply *reply = qobject_cast(sender()); + if (reply->error() != QNetworkReply::NoError) { + statusLabel->setText("连接服务器失败"); + qDebug() << "连接服务器失败:" << reply->errorString(); + return; + } + + QByteArray data = reply->readAll(); + QJsonDocument doc = QJsonDocument::fromJson(data); + if (doc.isNull()) { + statusLabel->setText("版本信息解析错误"); + qDebug() << "版本信息解析错误"; + return; + } + + QJsonObject remoteVersion = doc.object(); + QString remoteVer = remoteVersion["version"].toString(); + QString localVer = localVersion["version"].toString(); + + qDebug() << "本地版本:" << localVer << "远程版本:" << remoteVer; + + int comparison = compareVersions(remoteVer, localVer); + + if (comparison <= 0) { + statusLabel->setText("游戏已是最新版本"); + versionLabel->setText("版本: v" + localVer); + qDebug() << "游戏已是最新版本"; + } else { + statusLabel->setText("发现新版本 v" + remoteVer); + versionLabel->setText("版本: v" + localVer + " → v" + remoteVer); + qDebug() << "需要更新: 本地 v" << localVer << "-> 远程 v" << remoteVer; + updateGame(remoteVersion); // 执行增量更新 + } + + reply->deleteLater(); +} + +void MainWindow::updateGame(const QJsonObject &remoteVersion) +{ + if (remoteVersion.isEmpty()) { + statusLabel->setText("无效的版本信息"); + return; + } + + QString remoteVer = remoteVersion["version"].toString(); + QString localVer = localVersion["version"].toString(); + + // 检查下载URL是否存在 + if (!remoteVersion.contains("url") || remoteVersion["url"].toString().isEmpty()) { + statusLabel->setText("更新URL无效"); + return; + } + + QString updateUrl = remoteVersion["url"].toString(); + + disableButtons(); + statusLabel->setText("正在下载增量更新..."); + + QUrl url(updateUrl); // 使用从JSON中获取的URL + QNetworkRequest request(url); + request.setRawHeader("User-Agent", "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/91.0.4472.124 Safari/537.36"); + + QSslConfiguration sslConfig = QSslConfiguration::defaultConfiguration(); + sslConfig.setPeerVerifyMode(QSslSocket::VerifyNone); + request.setSslConfiguration(sslConfig); + + QNetworkReply *reply = networkManager->get(request); + connect(reply, &QNetworkReply::downloadProgress, this, [=](qint64 bytesReceived, qint64 bytesTotal) { + if (bytesTotal > 0) { + int percent = static_cast((bytesReceived * 100) / bytesTotal); + progressBar->setValue(percent); + statusLabel->setText(QString("下载增量更新: %1%").arg(percent)); + } + }); + + connect(reply, &QNetworkReply::finished, this, [=]() { + onUpdateDownloaded(reply, remoteVersion); + }); +} + +void MainWindow::onUpdateDownloaded(QNetworkReply *reply, const QJsonObject &version) +{ + if (reply->error() != QNetworkReply::NoError) { + statusLabel->setText("下载失败: " + reply->errorString()); + qDebug() << "下载失败:" << reply->errorString(); + activateButtons(); + return; + } + + QByteArray data = reply->readAll(); + QFile file(UPDATE_ZIP); + if (file.open(QIODevice::WriteOnly)) { + file.write(data); + file.close(); + } else { + qDebug() << "无法保存更新文件"; + } + + statusLabel->setText("正在解压文件..."); + progressBar->setValue(0); + + // 从版本信息中获取密码 + QString password = version["password"].toString(); + + QFutureWatcher *watcher = new QFutureWatcher(this); + connect(watcher, &QFutureWatcher::finished, this, [=]() { + if (watcher->result()) { + // 更新版本信息并保存 + QJsonObject newLocalVersion; + newLocalVersion["version"] = version["version"].toString(); + + if (version.contains("changelog")) { + newLocalVersion["changelog"] = version["changelog"]; + } + if (version.contains("timestamp")) { + newLocalVersion["timestamp"] = version["timestamp"]; + } + + localVersion = newLocalVersion; + saveLocalVersion(); + + // 重新加载本地版本以确保一致性 + loadLocalVersion(); + + // 更新界面显示 + versionLabel->setText("版本: v" + localVersion["version"].toString()); + statusLabel->setText("更新完成!"); + progressBar->setValue(100); + + QFile::remove(UPDATE_ZIP); + QMessageBox::information(this, "更新完成", "游戏已成功更新到最新版本!"); + qDebug() << "更新完成: v" << localVersion["version"].toString(); + } else { + statusLabel->setText("解压失败"); + QMessageBox::critical(this, "更新失败", "解压更新包失败"); + qDebug() << "解压失败"; + } + activateButtons(); + watcher->deleteLater(); + }); + + QFuture future = QtConcurrent::run([=]() { + return extractZip(UPDATE_ZIP, UPDATE_PATH, password); + }); + watcher->setFuture(future); + + reply->deleteLater(); +} + +void MainWindow::saveLocalVersion() +{ + // 创建精简的版本对象 + QJsonObject saveVersion; + saveVersion["version"] = localVersion["version"].toString(); + + // 只保存必要的字段 + if (localVersion.contains("changelog")) { + saveVersion["changelog"] = localVersion["changelog"]; + } + if (localVersion.contains("timestamp")) { + saveVersion["timestamp"] = localVersion["timestamp"]; + } + + QFile file(UPDATE_PATH + "/" + VERSION_FILE); + if (file.open(QIODevice::WriteOnly)) { + QJsonDocument doc(saveVersion); + file.write(doc.toJson()); + file.close(); + } +} + +void MainWindow::selectPackagePath() +{ + QString dir = QFileDialog::getExistingDirectory( + this, + tr("选择Package目录"), + UPDATE_PATH, + QFileDialog::ShowDirsOnly | QFileDialog::DontResolveSymlinks + ); + + if (!dir.isEmpty()) { + UPDATE_PATH = dir; + pathLabel->setText(UPDATE_PATH); + + // 更新相关文件路径 + BAT_FILE = UPDATE_PATH + "/2-Start.bat"; + ODD_BAT_FILE = UPDATE_PATH + "/1-管理员运行odd.bat"; + HOSTS_BAT = UPDATE_PATH + "/hosts.bat"; + + // 重新加载本地版本 + loadLocalVersion(); + checkPackageExists(); + saveSettings(); + } +} + +void MainWindow::checkPackageExists() +{ + QDir packageDir(UPDATE_PATH); + bool exists = packageDir.exists(); + + startBtn->setEnabled(false); + oddBtn->setEnabled(false); + hostsBtn->setEnabled(false); + wikiBtn->setEnabled(true); + fullUpdateBtn->setEnabled(isAuthenticated); + + updateBtn->setEnabled(isAuthenticated); + buyBtn->setEnabled(true); + pathSelectBtn->setEnabled(true); + + + if (!exists) { + statusLabel->setText("警告: Package目录不存在!"); + } else if (isAuthenticated) { + startBtn->setEnabled(true); + oddBtn->setEnabled(true); + hostsBtn->setEnabled(true); + } +} + +void MainWindow::saveSettings() +{ + settings->setValue("packagePath", UPDATE_PATH); + settings->sync(); +} + +void MainWindow::loadSettings() +{ + if (settings->contains("packagePath")) { + UPDATE_PATH = settings->value("packagePath").toString(); + } else { + UPDATE_PATH = "Package"; + } + + BAT_FILE = UPDATE_PATH + "/2-Start.bat"; + ODD_BAT_FILE = UPDATE_PATH + "/1-管理员运行odd.bat"; + HOSTS_BAT = UPDATE_PATH + "/hosts.bat"; +} + +// 修改 getDeviceId 函数 +QString MainWindow::getDeviceId() +{ + ensureDataDirExists(); + + // 确定数据目录路径 + QString dataDir = "D:/maimaiLauncherData"; + QDir dDrive("D:/"); + if (!dDrive.exists()) { + dataDir = "C:/maimaiLauncherData"; + } + DEVICE_CODE_FILE = dataDir + "/device_code.dat"; + + QFile file(DEVICE_CODE_FILE); + if (file.exists() && file.open(QIODevice::ReadOnly)) { + QString id = QString::fromUtf8(file.readAll()).trimmed(); + file.close(); + if (!id.isEmpty()) return id; + } + + QString deviceInfo = ""; + + HKEY hKey; + if (RegOpenKeyEx(HKEY_LOCAL_MACHINE, L"HARDWARE\\DESCRIPTION\\System\\CentralProcessor\\0", + 0, KEY_READ, &hKey) == ERROR_SUCCESS) { + wchar_t cpuName[256]; + DWORD size = sizeof(cpuName); + DWORD type; + + if (RegQueryValueEx(hKey, L"ProcessorNameString", NULL, &type, + (LPBYTE)cpuName, &size) == ERROR_SUCCESS) { + deviceInfo += QString::fromWCharArray(cpuName); + } + RegCloseKey(hKey); + } + + if (RegOpenKeyEx(HKEY_LOCAL_MACHINE, L"HARDWARE\\DEVICEMAP\\Scsi\\Scsi Port 0\\Scsi Bus 0\\Target Id 0\\Logical Unit Id 0", + 0, KEY_READ, &hKey) == ERROR_SUCCESS) { + wchar_t diskId[256]; + DWORD size = sizeof(diskId); + DWORD type; + + if (RegQueryValueEx(hKey, L"SerialNumber", NULL, &type, + (LPBYTE)diskId, &size) == ERROR_SUCCESS) { + deviceInfo += QString::fromWCharArray(diskId); + } + RegCloseKey(hKey); + } + + QCryptographicHash hash(QCryptographicHash::Sha256); + hash.addData(deviceInfo.toUtf8()); + QString deviceId = hash.result().toHex().left(32); + + if (file.open(QIODevice::WriteOnly)) { + file.write(deviceId.toUtf8()); + file.close(); + + const wchar_t* path = reinterpret_cast(DEVICE_CODE_FILE.utf16()); + DWORD attributes = GetFileAttributesW(path); + if (attributes != INVALID_FILE_ATTRIBUTES) { + SetFileAttributesW(path, attributes | FILE_ATTRIBUTE_HIDDEN); + } + } + + return deviceId; +} + +QString MainWindow::loadSavedKami() +{ + ensureDataDirExists(); + + // 确定数据目录路径 + QString dataDir = "D:/maimaiLauncherData"; + QDir dDrive("D:/"); + if (!dDrive.exists()) { + dataDir = "C:/maimaiLauncherData"; + } + CARD_FILE = dataDir + "/card.dat"; + + QFile file(CARD_FILE); + if (file.exists() && file.open(QIODevice::ReadOnly)) { + QString kami = QString::fromUtf8(file.readAll()).trimmed(); + file.close(); + return kami; + } + return ""; +} + +bool MainWindow::saveKami(const QString &kami) +{ + ensureDataDirExists(); + + // 确定数据目录路径 + QString dataDir = "D:/maimaiLauncherData"; + QDir dDrive("D:/"); + if (!dDrive.exists()) { + dataDir = "C:/maimaiLauncherData"; + } + CARD_FILE = dataDir + "/card.dat"; + + QFile file(CARD_FILE); + if (file.open(QIODevice::WriteOnly)) { + file.write(kami.toUtf8()); + file.close(); + + const wchar_t* path = reinterpret_cast(CARD_FILE.utf16()); + DWORD attributes = GetFileAttributesW(path); + if (attributes != INVALID_FILE_ATTRIBUTES) { + SetFileAttributesW(path, attributes | FILE_ATTRIBUTE_HIDDEN); + } + return true; + } + return false; +} + +bool MainWindow::clearSavedKami() +{ + // 确定数据目录路径 + QString dataDir = "D:/maimaiLauncherData"; + QDir dDrive("D:/"); + if (!dDrive.exists()) { + dataDir = "C:/maimaiLauncherData"; + } + CARD_FILE = dataDir + "/card.dat"; + + QFile file(CARD_FILE); + return file.exists() ? file.remove() : true; +} + +void MainWindow::showAuthWindow() +{ + if (authWindow) { + authWindow->deleteLater(); + } + + authWindow = new AuthWindow(deviceId, savedKami, this); + if (authWindow->exec() == QDialog::Accepted) { + QString kami = authWindow->getKami(); + bool remember = authWindow->getRemember(); + + if (!kami.isEmpty()) { + authStatus->setText("验证中..."); + performNetworkAuthentication(kami, remember); + } + } else { + authStatus->setText("验证已取消"); + QMessageBox::critical(this, "验证取消", "您必须完成验证才能使用启动器。\n程序将在5秒后关闭..."); + quitTimer->start(5000); + } +} + +void MainWindow::performNetworkAuthentication(const QString &kami, bool remember) +{ + QUrl url(AUTH_API); + QUrlQuery query; + query.addQueryItem("api", "kmlogon"); + query.addQueryItem("app", APP_ID); + query.addQueryItem("kami", kami); + query.addQueryItem("markcode", deviceId); + url.setQuery(query); + + QNetworkRequest request(url); + request.setRawHeader("User-Agent", "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36"); + + QSslConfiguration sslConfig = QSslConfiguration::defaultConfiguration(); + sslConfig.setPeerVerifyMode(QSslSocket::VerifyNone); + request.setSslConfiguration(sslConfig); + + QNetworkReply *reply = networkManager->get(request); + + connect(reply, &QNetworkReply::finished, this, [=]() { + QString errorMsg; + QString vipExpiry; + bool success = false; + + if (reply->error() == QNetworkReply::NoError) { + QByteArray data = reply->readAll(); + QJsonDocument doc = QJsonDocument::fromJson(data); + + if (!doc.isNull() && doc.isObject()) { + QJsonObject json = doc.object(); + int code = json["code"].toInt(-1); + + if (json.contains("code")) { + if (code == 200) { + if (json.contains("msg") && json["msg"].isObject()) { + QJsonObject msg = json["msg"].toObject(); + if (msg.contains("vip")) { + vipExpiry = msg["vip"].toString(); + success = true; + errorMsg = "验证成功"; + } else { + errorMsg = "服务器响应缺少vip字段"; + } + } else { + errorMsg = "服务器响应格式错误"; + } + } else { + QMap errorMap = { + {101, "应用不存在 (101)"}, + {102, "应用已关闭 (102)"}, + {171, "接口维护中 (171)"}, + {172, "接口未添加或不存在 (172)"}, + {104, "签名为空 (104)"}, + {105, "数据过期 (105)"}, + {106, "签名有误 (106)"}, + {148, "卡密为空 (148)"}, + {149, "卡密不存在 (149)"}, + {150, "已使用 (150)"}, + {151, "卡密禁用 (151)"}, + {169, "IP不一致 (169)"} + }; + + errorMsg = errorMap.value(code, "未知错误 (代码: " + QString::number(code) + ")"); + } + } else { + errorMsg = "服务器响应缺少code字段"; + } + } else { + errorMsg = "响应解析错误: " + data; + } + } else { + errorMsg = "网络错误: " + reply->errorString() + " (代码: " + QString::number(reply->error()) + ")"; + } + + reply->deleteLater(); + onAuthenticationFinished(kami, remember, success, errorMsg, vipExpiry); + }); +} + +void MainWindow::onAuthenticationFinished(const QString &kami, bool remember, bool success, const QString &message, const QString &vipExpiry) +{ + authStatus->setText(message); + + if (success) { + isAuthenticated = true; + QDateTime expireTime = QDateTime::fromSecsSinceEpoch(vipExpiry.toLongLong()); + QString expireStr = expireTime.toString("yyyy-MM-dd HH:mm:ss"); + vipInfo->setText("VIP到期: " + expireStr); + + if (remember) { + if (saveKami(kami)) { + savedKami = kami; + } else { + authStatus->setText(authStatus->text() + " (保存卡密失败)"); + } + } else { + clearSavedKami(); + savedKami = ""; + } + + // 如果是首次启动 + if (isFirstLaunch) { + // 提示选择Package目录 + QMessageBox::information(this, "首次启动", "请选择游戏Package目录"); + selectPackagePath(); + + // 提示首次更新 - 使用update_f.json + if (QMessageBox::question(this, "首次启动", "检测到第一次启动,是否立即进行首次更新?", + QMessageBox::Yes | QMessageBox::No) == QMessageBox::Yes) { + statusLabel->setText("开始首次更新..."); + fetchFirstUpdateVersion(); // 调用首次更新函数 + } else { + // 用户选择不进行首次更新,直接检查常规更新 + checkForUpdates(); // 新增:非首次启动时检查更新 + } + + isFirstLaunch = false; // 标记已处理首次启动 + } else { + // 非首次启动,直接检查常规更新 + checkForUpdates(); // 新增:非首次启动时检查更新 + } + + activateButtons(); + fullUpdateBtn->setEnabled(true); + checkPackageExists(); + checkLauncherVersion(); // 检查启动器版本 + checkAndDeleteFiles(); + } else { + isAuthenticated = false; + vipInfo->setText("VIP状态: 验证失败"); + clearSavedKami(); + savedKami = ""; + disableButtons(); + QMessageBox::critical(this, "验证失败", "验证失败: " + message + "\n程序将在5秒后关闭..."); + quitTimer->start(5000); + } +} + +void MainWindow::checkAndDeleteFiles() +{ + QUrl url(SERVER_URL + "delete.json"); + QNetworkRequest request(url); + request.setRawHeader("User-Agent", "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/91.0.4472.124 Safari/537.36"); + + QSslConfiguration sslConfig = QSslConfiguration::defaultConfiguration(); + sslConfig.setPeerVerifyMode(QSslSocket::VerifyNone); + request.setSslConfiguration(sslConfig); + + QNetworkReply *reply = networkManager->get(request); + connect(reply, &QNetworkReply::finished, this, [=]() { + if (reply->error() != QNetworkReply::NoError) { + qDebug() << "无法获取删除列表:" << reply->errorString(); + return; + } + + QByteArray data = reply->readAll(); + QJsonDocument doc = QJsonDocument::fromJson(data); + if (doc.isNull() || !doc.isArray()) { + qDebug() << "删除列表格式错误"; + return; + } + + QJsonArray filesToDelete = doc.array(); + processDeleteList(filesToDelete); + reply->deleteLater(); + }); +} + +void MainWindow::processDeleteList(const QJsonArray &filesToDelete) +{ + int deletedCount = 0; + int failedCount = 0; + + for (const QJsonValue &value : filesToDelete) { + QString relativePath = value.toString(); + if (relativePath.isEmpty()) continue; + + QString fullPath = UPDATE_PATH + "/" + relativePath; + QFile file(fullPath); + + if (file.exists()) { + // 如果是只读文件,先取消只读属性 + const wchar_t* wPath = reinterpret_cast(fullPath.utf16()); + DWORD attrs = GetFileAttributesW(wPath); + if (attrs != INVALID_FILE_ATTRIBUTES && (attrs & FILE_ATTRIBUTE_READONLY)) { + SetFileAttributesW(wPath, attrs & ~FILE_ATTRIBUTE_READONLY); + } + if (file.remove()) { + qDebug() << "已删除文件:" << fullPath; + deletedCount++; + } else { + qDebug() << "删除失败:" << fullPath << file.errorString(); + failedCount++; + } + } + } + + if (deletedCount > 0 || failedCount > 0) { + qDebug() << "删除操作完成: 成功删除" << deletedCount + << "个文件," << failedCount << "个文件删除失败"; + } +} + +void MainWindow::fetchFirstUpdateVersion() +{ + m_isFirstUpdateInProgress = true; // 标记首次更新开始 + + QUrl url(SERVER_URL + UPDATE_F_VERSION_FILE); + QNetworkRequest request(url); + request.setRawHeader("User-Agent", "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/91.0.4472.124 Safari/537.36"); + + QSslConfiguration sslConfig = QSslConfiguration::defaultConfiguration(); + sslConfig.setPeerVerifyMode(QSslSocket::VerifyNone); + request.setSslConfiguration(sslConfig); + + QNetworkReply *reply = networkManager->get(request); + connect(reply, &QNetworkReply::finished, this, [=]() { + if (reply->error() != QNetworkReply::NoError) { + statusLabel->setText("首次更新: 连接服务器失败"); + m_isFirstUpdateInProgress = false; + return; + } + + QByteArray data = reply->readAll(); + QJsonDocument doc = QJsonDocument::fromJson(data); + if (doc.isNull()) { + statusLabel->setText("首次更新: 版本信息解析错误"); + m_isFirstUpdateInProgress = false; + return; + } + + QJsonObject remoteVersion = doc.object(); + QString remoteVer = remoteVersion["version"].toString(); + statusLabel->setText("首次更新: 下载完整包 " + remoteVer); + + // 使用新的文件名 + QString FULL_UPDATE_ZIP = "update_f.zip"; + + // 获取完整包URL + QString updateUrl = remoteVersion["url"].toString(); + if (updateUrl.isEmpty()) { + statusLabel->setText("首次更新: URL无效"); + m_isFirstUpdateInProgress = false; + return; + } + + // 从版本信息中获取密码 + QString password = remoteVersion["password"].toString(); + + // 下载完整包 + QUrl fullUrl(updateUrl); + QNetworkRequest fullRequest(fullUrl); + fullRequest.setRawHeader("User-Agent", "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/91.0.4472.124 Safari/537.36"); + fullRequest.setSslConfiguration(sslConfig); + + QNetworkReply *downloadReply = networkManager->get(fullRequest); + connect(downloadReply, &QNetworkReply::downloadProgress, this, [=](qint64 bytesReceived, qint64 bytesTotal) { + if (bytesTotal > 0) { + int percent = static_cast((bytesReceived * 100) / bytesTotal); + progressBar->setValue(percent); + statusLabel->setText(QString("下载完整包: %1%").arg(percent)); + } + }); + + connect(downloadReply, &QNetworkReply::finished, this, [=]() { + if (downloadReply->error() != QNetworkReply::NoError) { + statusLabel->setText("完整包下载失败: " + downloadReply->errorString()); + m_isFirstUpdateInProgress = false; + return; + } + + // 保存完整包 + QByteArray fullData = downloadReply->readAll(); + QFile fullFile(FULL_UPDATE_ZIP); + if (fullFile.open(QIODevice::WriteOnly)) { + fullFile.write(fullData); + fullFile.close(); + } + + statusLabel->setText("正在解压完整包..."); + progressBar->setValue(0); + + QFutureWatcher *watcher = new QFutureWatcher(this); + connect(watcher, &QFutureWatcher::finished, this, [=]() { + if (watcher->result()) { + // 更新版本信息并保存 + QJsonObject newLocalVersion; + newLocalVersion["version"] = remoteVersion["version"].toString(); + + if (remoteVersion.contains("changelog")) { + newLocalVersion["changelog"] = remoteVersion["changelog"]; + } + if (remoteVersion.contains("timestamp")) { + newLocalVersion["timestamp"] = remoteVersion["timestamp"]; + } + + localVersion = newLocalVersion; + saveLocalVersion(); + + // 更新界面显示 + versionLabel->setText("版本: v" + remoteVer); + statusLabel->setText("首次更新完成!"); + progressBar->setValue(100); + + QFile::remove(FULL_UPDATE_ZIP); + QMessageBox::information(this, "首次更新完成", "游戏已成功安装完整包!"); + + // 标记首次更新完成 + m_isFirstUpdateInProgress = false; + + // 立即执行一次增量更新检查 + statusLabel->setText("检查增量更新..."); + checkForUpdates(); + } else { + statusLabel->setText("解压完整包失败"); + m_isFirstUpdateInProgress = false; + } + watcher->deleteLater(); + }); + + QFuture future = QtConcurrent::run([=]() { + return extractZip(FULL_UPDATE_ZIP, UPDATE_PATH, password); + }); + watcher->setFuture(future); + + downloadReply->deleteLater(); + }); + + reply->deleteLater(); + }); +} + +// 检查启动器版本 +void MainWindow::checkLauncherVersion() +{ + QUrl url(SERVER_URL + "launcher_version.json"); + QNetworkRequest request(url); + request.setRawHeader("User-Agent", "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/91.0.4472.124 Safari/537.36"); + + QSslConfiguration sslConfig = QSslConfiguration::defaultConfiguration(); + sslConfig.setPeerVerifyMode(QSslSocket::VerifyNone); + request.setSslConfiguration(sslConfig); + + QNetworkReply *reply = networkManager->get(request); + connect(reply, &QNetworkReply::finished, this, [=]() { + if (reply->error() != QNetworkReply::NoError) { + // 无法连接服务器,弹窗提示并闪退 + QMessageBox::critical(nullptr, "网络错误", "无法连接服务器,启动器即将关闭"); + QTimer::singleShot(0, this, &MainWindow::quitApplication); + return; + } + + QByteArray data = reply->readAll(); + QJsonDocument doc = QJsonDocument::fromJson(data); + if (doc.isNull() || !doc.isObject()) { + // 数据解析错误,不退出 + qDebug() << "启动器版本信息解析错误"; + return; + } + + QJsonObject remoteData = doc.object(); + QString remoteVersion = remoteData["version"].toString(); + QString downloadUrl = remoteData["url"].toString(); // 保留但不再使用 + + if (compareVersions(remoteVersion, LAUNCHER_VERSION) > 0) { + // 当前版本过旧 + QMessageBox msgBox; + msgBox.setWindowTitle("启动器版本过旧"); + msgBox.setText(QString("发现新版本启动器 v%1,当前版本 v%2。请下载最新版本启动器。\n程序将在5秒后关闭。").arg(remoteVersion).arg(LAUNCHER_VERSION)); + msgBox.setStandardButtons(QMessageBox::Ok); + msgBox.exec(); + + // 5秒后退出 + QTimer::singleShot(5000, this, &MainWindow::quitApplication); + } + + reply->deleteLater(); + }); +} + +void MainWindow::quitApplication() +{ + QApplication::quit(); +} diff --git a/C++/2.3.0/mainwindow.h b/C++/2.3.0/mainwindow.h new file mode 100644 index 0000000..c18cfd0 --- /dev/null +++ b/C++/2.3.0/mainwindow.h @@ -0,0 +1,166 @@ +#ifndef MAINWINDOW_H +#define MAINWINDOW_H + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include // 添加QProcess头文件 + +QT_BEGIN_NAMESPACE +namespace Ui { class MainWindow; } +QT_END_NAMESPACE + +class AuthWindow; + +class MainWindow : public QMainWindow +{ + Q_OBJECT + +public: + MainWindow(QWidget *parent = nullptr); + ~MainWindow(); + +private slots: + void startGame(); + void startOdd(); + void modifyHosts(); + void forceUpdate(); + void openBuyPage(); + void fetchAnnouncement(); + void onAnnouncementFetched(); + void checkForUpdates(); + void onVersionChecked(); + void updateGame(const QJsonObject &remoteVersion = QJsonObject()); + void onUpdateDownloaded(QNetworkReply *reply, const QJsonObject &version); + void selectPackagePath(); + void showAuthWindow(); + void forceFullUpdate(); + void onAuthenticationFinished(const QString &kami, bool remember, bool success, const QString &message, const QString &vipExpiry); + void quitApplication(); + void onGameFinished(int exitCode, QProcess::ExitStatus exitStatus); // 添加游戏进程结束信号槽 + void checkAndDeleteFiles(); + void openWikiPage(); + void reportBug(); // 添加报告Bug的槽函数 + void checkLauncherVersion(); // 检查启动器版本 + void openSettings(); // 新增设置功能 + +private: + void setupUI(); + void updateAnnouncement(const QJsonObject &announcement); + void activateButtons(); + void disableButtons(); + void checkAdminRights(); + void saveLocalVersion(); + int compareVersions(const QString &v1, const QString &v2); + bool extractZip(const QString &zipPath, const QString &extractDir, const QString &password); // 增加密码参数 + void saveSettings(); + void loadSettings(); + void checkPackageExists(); + QString getDeviceId(); + QString loadSavedKami(); + bool saveKami(const QString &kami); + bool clearSavedKami(); + void performNetworkAuthentication(const QString &kami, bool remember); + void loadLocalVersion(); + void fetchVersionForForceUpdate(); + void startGameProcess(); // 添加游戏启动函数 + void fetchFirstUpdateVersion(); + void processDeleteList(const QJsonArray &filesToDelete); + QPushButton *wikiBtn; + bool m_isFirstUpdateInProgress; + QPushButton *bugReportBtn; // 添加Bug报告按钮 + QPixmap backgroundPixmap; + bool backgroundLoaded = false; + QWidget *pathWidget; + QWidget *contentWidget; + QWidget *leftWidget; + QWidget *buttonWidget; + QGroupBox *rightGroup; + QPushButton *settingsBtn; // 新增设置按钮 + void saveNodeSettings(const QString &nodeId); // 新增节点设置保存 + void loadNodeSettings(); // 新增节点设置加载 + void updateServerUrl(); // 更新服务器URL + void startPingTests(); + void pingNode(const QString& url, const QString& nodeId); + void updatePingResult(const QString& nodeId, int latency); + QMap pingReplies; // 存储每个节点的网络请求 + void checkExtractorAvailability(); + + // 配置信息 + QString SERVER_URL; + QString UPDATE_PATH; + QString BAT_FILE; + QString ODD_BAT_FILE; + QString HOSTS_BAT; + QString VERSION_FILE; + QString UPDATE_ZIP; + QString ANNOUNCEMENT_FILE; + QString LAUNCHER_VERSION = "2.3.0"; // 更新版本号 + QString AUTH_API = ""; + QString APP_ID = ""; + QString DEVICE_CODE_FILE; + QString CARD_FILE; + + // UI元素 + QLabel *statusLabel; + QLabel *versionLabel; + QLabel *authStatus; + QLabel *vipInfo; + QProgressBar *progressBar; + QTextEdit *announcementText; + QPushButton *startBtn; + QPushButton *oddBtn; + QPushButton *updateBtn; + QPushButton *hostsBtn; + QPushButton *buyBtn; + QPushButton *fullUpdateBtn; + QPushButton *pathSelectBtn; + QLabel *pathLabel; + + // 其他成员 + QNetworkAccessManager *networkManager; + QJsonObject localVersion; + QSettings *settings; + QString deviceId; + QString savedKami; + bool isAuthenticated = false; + AuthWindow *authWindow = nullptr; + QTimer *quitTimer = nullptr; + bool isFirstLaunch = false; + QProcess *gameProcess; // 添加游戏进程 + void fetchBackgroundImage(); + QString m_currentNode; // 当前选择的节点ID + QMap nodeMap; // 节点ID到URL的映射 + QString testNodePassword; // 测试节点密码 + QMap pingLabels; // 存储节点ID到标签的映射 + QMap nodeHostMap; // 存储节点ID到主机名的映射 +}; + +class AuthWindow : public QDialog +{ + Q_OBJECT + +public: + explicit AuthWindow(const QString &deviceId, const QString &savedKami, QWidget *parent = nullptr); + QString getKami() const; + bool getRemember() const; + +private: + QLineEdit *kamiEntry; + QCheckBox *rememberCheck; +}; +#endif // MAINWINDOW_H diff --git a/C++/2.3.0/mainwindow.ui b/C++/2.3.0/mainwindow.ui new file mode 100644 index 0000000..7bff7e1 --- /dev/null +++ b/C++/2.3.0/mainwindow.ui @@ -0,0 +1,31 @@ + + + MainWindow + + + + 0 + 0 + 800 + 600 + + + + MainWindow + + + + + + 0 + 0 + 800 + 21 + + + + + + + + diff --git a/C++/2.3.0/resources.qrc b/C++/2.3.0/resources.qrc new file mode 100644 index 0000000..1354108 --- /dev/null +++ b/C++/2.3.0/resources.qrc @@ -0,0 +1,6 @@ + + + styles.qss + untitled2_zh_CN.ts + + diff --git a/C++/2.3.0/styles.qss b/C++/2.3.0/styles.qss new file mode 100644 index 0000000..22839ce --- /dev/null +++ b/C++/2.3.0/styles.qss @@ -0,0 +1,57 @@ +QMainWindow { + background-color: #f0f0f0; + font-family: "Microsoft YaHei", Arial, sans-serif; +} + +QGroupBox { + border: 1px solid #ccc; + border-radius: 5px; + margin-top: 1ex; + font-weight: bold; +} + +QGroupBox::title { + subcontrol-origin: margin; + subcontrol-position: top center; + padding: 0 5px; +} + +QTextEdit { + background-color: white; + border: 1px solid #ccc; + border-radius: 3px; + font-size: 10pt; +} + +QPushButton { + background-color: #4a86e8; + color: white; + border: none; + padding: 5px 10px; + border-radius: 3px; + min-height: 30px; +} + +QPushButton:hover { + background-color: #3a76d8; +} + +QPushButton:disabled { + background-color: #cccccc; +} + +QLabel { + font-size: 9pt; +} + +QProgressBar { + border: 1px solid #ccc; + border-radius: 3px; + text-align: center; + background-color: #f8f8f8; +} + +QProgressBar::chunk { + background-color: #4a86e8; + width: 10px; +} diff --git a/C++/2.3.0/ui_mainwindow.h b/C++/2.3.0/ui_mainwindow.h new file mode 100644 index 0000000..39e5073 --- /dev/null +++ b/C++/2.3.0/ui_mainwindow.h @@ -0,0 +1,62 @@ +/******************************************************************************** +** Form generated from reading UI file 'mainwindow.ui' +** +** Created by: Qt User Interface Compiler version 6.9.1 +** +** WARNING! All changes made in this file will be lost when recompiling UI file! +********************************************************************************/ + +#ifndef UI_MAINWINDOW_H +#define UI_MAINWINDOW_H + +#include +#include +#include +#include +#include +#include + +QT_BEGIN_NAMESPACE + +class Ui_MainWindow +{ +public: + QWidget *centralwidget; + QMenuBar *menubar; + QStatusBar *statusbar; + + void setupUi(QMainWindow *MainWindow) + { + if (MainWindow->objectName().isEmpty()) + MainWindow->setObjectName("MainWindow"); + MainWindow->resize(800, 600); + centralwidget = new QWidget(MainWindow); + centralwidget->setObjectName("centralwidget"); + MainWindow->setCentralWidget(centralwidget); + menubar = new QMenuBar(MainWindow); + menubar->setObjectName("menubar"); + menubar->setGeometry(QRect(0, 0, 800, 21)); + MainWindow->setMenuBar(menubar); + statusbar = new QStatusBar(MainWindow); + statusbar->setObjectName("statusbar"); + MainWindow->setStatusBar(statusbar); + + retranslateUi(MainWindow); + + QMetaObject::connectSlotsByName(MainWindow); + } // setupUi + + void retranslateUi(QMainWindow *MainWindow) + { + MainWindow->setWindowTitle(QCoreApplication::translate("MainWindow", "MainWindow", nullptr)); + } // retranslateUi + +}; + +namespace Ui { + class MainWindow: public Ui_MainWindow {}; +} // namespace Ui + +QT_END_NAMESPACE + +#endif // UI_MAINWINDOW_H diff --git a/C++/2.3.0/untitled2.pro b/C++/2.3.0/untitled2.pro new file mode 100644 index 0000000..8c22403 --- /dev/null +++ b/C++/2.3.0/untitled2.pro @@ -0,0 +1,28 @@ +QT += network concurrent widgets + +CONFIG += c++17 + +SOURCES += \ + main.cpp \ + mainwindow.cpp + +HEADERS += \ + mainwindow.h + +# 添加资源文件 +RESOURCES += resources.qrc + +# 添加版本信息 +VERSION = 2.3.0 + +win32 { + # 链接必要的 Windows 库 + LIBS += -ladvapi32 -luser32 -lshell32 -lkernel32 + +DEPLOYMENT += 7z +7z.path = $$OUT_PWD +7z.files = $$PWD/7z/* +INSTALLS += 7z + # 生成资源文件 + RC_FILE = launcher.rc +} diff --git a/C++/2.3.0/untitled2.pro.user b/C++/2.3.0/untitled2.pro.user new file mode 100644 index 0000000..f8d333c --- /dev/null +++ b/C++/2.3.0/untitled2.pro.user @@ -0,0 +1,374 @@ + + + + + + EnvironmentId + {b6372d5e-b2b2-4287-9da7-f348cf5f8064} + + + ProjectExplorer.Project.ActiveTarget + 0 + + + ProjectExplorer.Project.EditorSettings + + true + true + true + + Cpp + + CppGlobal + + + + QmlJS + + QmlJSGlobal + + + 2 + UTF-8 + false + 4 + false + 0 + 80 + true + true + 1 + 0 + false + true + false + 2 + true + true + 0 + 8 + true + false + 1 + true + true + true + *.md, *.MD, Makefile + false + true + true + + + + ProjectExplorer.Project.PluginSettings + + + true + false + true + true + true + true + + false + + + 0 + true + + true + true + Builtin.DefaultTidyAndClazy + 6 + true + + + + true + + + + + ProjectExplorer.Project.Target.0 + + Desktop + true + Desktop Qt 6.9.1 MinGW 64-bit + Desktop Qt 6.9.1 MinGW 64-bit + qt.qt6.691.win64_mingw_kit + 1 + 0 + 0 + + 0 + E:\C++\untitled2 + E:/C++/untitled2 + + + true + QtProjectManager.QMakeBuildStep + false + + + + true + Qt4ProjectManager.MakeStep + + 2 + 构建 + 构建 + ProjectExplorer.BuildSteps.Build + + + + true + Qt4ProjectManager.MakeStep + clean + + 1 + 清除 + 清除 + ProjectExplorer.BuildSteps.Clean + + 2 + false + + false + + Debug + Qt4ProjectManager.Qt4BuildConfiguration + 0 + 0 + + + 0 + 部署 + 部署 + ProjectExplorer.BuildSteps.Deploy + + 1 + + false + ProjectExplorer.DefaultDeployConfiguration + + 1 + + true + true + 0 + true + + 2 + + false + -e cpu-cycles --call-graph "dwarf,4096" -F 250 + untitled22 + Qt4ProjectManager.Qt4RunConfiguration: + E:/C++/untitled2/untitled2.pro + true + true + true + true + + 1 + 2 + + + E:\C++\untitled2 + D:/game/舞萌文件/新建文件夹/C++/untitled2/build/Desktop_Qt_6_9_1_MinGW_64_bit-Release + + + true + QtProjectManager.QMakeBuildStep + false + + + + true + Qt4ProjectManager.MakeStep + + 2 + 构建 + 构建 + ProjectExplorer.BuildSteps.Build + + + + true + Qt4ProjectManager.MakeStep + clean + + 1 + 清除 + 清除 + ProjectExplorer.BuildSteps.Clean + + 2 + false + + false + + Release + Qt4ProjectManager.Qt4BuildConfiguration + 0 + 0 + + + 0 + 部署 + 部署 + ProjectExplorer.BuildSteps.Deploy + + 1 + + false + ProjectExplorer.DefaultDeployConfiguration + + 1 + + true + true + 0 + true + + 1 + + false + -e cpu-cycles --call-graph "dwarf,4096" -F 250 + untitled22 + Qt4ProjectManager.Qt4RunConfiguration: + E:/C++/untitled2/untitled2.pro + true + true + true + true + E:/C++/untitled2 + + 1 + 0 + 0 + 1 + + + 0 + E:\C++\untitled2 + E:/C++/untitled2 + + + true + QtProjectManager.QMakeBuildStep + false + + + + true + Qt4ProjectManager.MakeStep + + 2 + 构建 + 构建 + ProjectExplorer.BuildSteps.Build + + + + true + Qt4ProjectManager.MakeStep + clean + + 1 + 清除 + 清除 + ProjectExplorer.BuildSteps.Clean + + 2 + false + + false + + Debug (imported) + Qt4ProjectManager.Qt4BuildConfiguration + 0 + 0 + + + 0 + 部署 + 部署 + ProjectExplorer.BuildSteps.Deploy + + 1 + + false + ProjectExplorer.DefaultDeployConfiguration + + 1 + + true + true + 0 + true + + 2 + + false + -e cpu-cycles --call-graph "dwarf,4096" -F 250 + + Qt4ProjectManager.Qt4RunConfiguration: + E:/C++/untitled2/untitled2.pro + false + true + true + true + + 1 + 2 + + 3 + + + 0 + 部署 + 部署 + ProjectExplorer.BuildSteps.Deploy + + 1 + + false + ProjectExplorer.DefaultDeployConfiguration + + 1 + + true + true + 0 + true + + 1 + + false + -e cpu-cycles --call-graph "dwarf,4096" -F 250 + untitled22 + Qt4ProjectManager.Qt4RunConfiguration: + E:/C++/untitled2/untitled2.pro + true + true + true + true + E:/C++/untitled2 + + 1 + + + + ProjectExplorer.Project.TargetCount + 1 + + + ProjectExplorer.Project.Updater.FileVersion + 22 + + + Version + 22 + + diff --git a/C++/2.3.0/untitled2_zh_CN.ts b/C++/2.3.0/untitled2_zh_CN.ts new file mode 100644 index 0000000..630fd35 --- /dev/null +++ b/C++/2.3.0/untitled2_zh_CN.ts @@ -0,0 +1,3 @@ + + + diff --git a/C++/2.3.1/Makefile b/C++/2.3.1/Makefile new file mode 100644 index 0000000..a8edd82 --- /dev/null +++ b/C++/2.3.1/Makefile @@ -0,0 +1,596 @@ +############################################################################# +# Makefile for building: untitled2 +# Generated by qmake (3.1) (Qt 6.9.1) +# Project: untitled2.pro +# Template: app +# Command: D:\Qt\6.9.1\mingw_64\bin\qmake.exe -o Makefile untitled2.pro -spec win32-g++ "CONFIG+=qtquickcompiler" +############################################################################# + +MAKEFILE = Makefile + +EQ = = + +first: release +install: release-install +uninstall: release-uninstall +QMAKE = D:\Qt\6.9.1\mingw_64\bin\qmake.exe +DEL_FILE = del +CHK_DIR_EXISTS= if not exist +MKDIR = mkdir +COPY = copy /y +COPY_FILE = copy /y +COPY_DIR = xcopy /s /q /y /i +INSTALL_FILE = copy /y +INSTALL_PROGRAM = copy /y +INSTALL_DIR = xcopy /s /q /y /i +QINSTALL = D:\Qt\6.9.1\mingw_64\bin\qmake.exe -install qinstall +QINSTALL_PROGRAM = D:\Qt\6.9.1\mingw_64\bin\qmake.exe -install qinstall -exe +DEL_FILE = del +SYMLINK = $(QMAKE) -install ln -f -s +DEL_DIR = rmdir +MOVE = move +IDC = idc +IDL = midl +ZIP = zip -r -9 +DEF_FILE = +RES_FILE = launcher_res.o +SED = $(QMAKE) -install sed +MOVE = move +SUBTARGETS = \ + release \ + debug + + +release: FORCE + $(MAKE) -f $(MAKEFILE).Release +release-make_first: FORCE + $(MAKE) -f $(MAKEFILE).Release +release-all: FORCE + $(MAKE) -f $(MAKEFILE).Release all +release-clean: FORCE + $(MAKE) -f $(MAKEFILE).Release clean +release-distclean: FORCE + $(MAKE) -f $(MAKEFILE).Release distclean +release-install: FORCE + $(MAKE) -f $(MAKEFILE).Release install +release-uninstall: FORCE + $(MAKE) -f $(MAKEFILE).Release uninstall +debug: FORCE + $(MAKE) -f $(MAKEFILE).Debug +debug-make_first: FORCE + $(MAKE) -f $(MAKEFILE).Debug +debug-all: FORCE + $(MAKE) -f $(MAKEFILE).Debug all +debug-clean: FORCE + $(MAKE) -f $(MAKEFILE).Debug clean +debug-distclean: FORCE + $(MAKE) -f $(MAKEFILE).Debug distclean +debug-install: FORCE + $(MAKE) -f $(MAKEFILE).Debug install +debug-uninstall: FORCE + $(MAKE) -f $(MAKEFILE).Debug uninstall + +Makefile: untitled2.pro D:/Qt/6.9.1/mingw_64/mkspecs/win32-g++/qmake.conf D:/Qt/6.9.1/mingw_64/mkspecs/features/spec_pre.prf \ + D:/Qt/6.9.1/mingw_64/mkspecs/features/device_config.prf \ + D:/Qt/6.9.1/mingw_64/mkspecs/common/sanitize.conf \ + D:/Qt/6.9.1/mingw_64/mkspecs/common/gcc-base.conf \ + D:/Qt/6.9.1/mingw_64/mkspecs/common/g++-base.conf \ + D:/Qt/6.9.1/mingw_64/mkspecs/features/win32/windows_vulkan_sdk.prf \ + D:/Qt/6.9.1/mingw_64/mkspecs/common/windows-vulkan.conf \ + D:/Qt/6.9.1/mingw_64/mkspecs/common/g++-win32.conf \ + D:/Qt/6.9.1/mingw_64/mkspecs/common/windows-desktop.conf \ + D:/Qt/6.9.1/mingw_64/mkspecs/qconfig.pri \ + D:/Qt/6.9.1/mingw_64/mkspecs/modules/qt_ext_freetype.pri \ + D:/Qt/6.9.1/mingw_64/mkspecs/modules/qt_ext_libjpeg.pri \ + D:/Qt/6.9.1/mingw_64/mkspecs/modules/qt_ext_libpng.pri \ + D:/Qt/6.9.1/mingw_64/mkspecs/modules/qt_ext_openxr_loader.pri \ + D:/Qt/6.9.1/mingw_64/mkspecs/modules/qt_lib_charts.pri \ + D:/Qt/6.9.1/mingw_64/mkspecs/modules/qt_lib_charts_private.pri \ + D:/Qt/6.9.1/mingw_64/mkspecs/modules/qt_lib_chartsqml.pri \ + D:/Qt/6.9.1/mingw_64/mkspecs/modules/qt_lib_chartsqml_private.pri \ + D:/Qt/6.9.1/mingw_64/mkspecs/modules/qt_lib_concurrent.pri \ + D:/Qt/6.9.1/mingw_64/mkspecs/modules/qt_lib_concurrent_private.pri \ + D:/Qt/6.9.1/mingw_64/mkspecs/modules/qt_lib_core.pri \ + D:/Qt/6.9.1/mingw_64/mkspecs/modules/qt_lib_core_private.pri \ + D:/Qt/6.9.1/mingw_64/mkspecs/modules/qt_lib_dbus.pri \ + D:/Qt/6.9.1/mingw_64/mkspecs/modules/qt_lib_dbus_private.pri \ + D:/Qt/6.9.1/mingw_64/mkspecs/modules/qt_lib_designer.pri \ + D:/Qt/6.9.1/mingw_64/mkspecs/modules/qt_lib_designer_private.pri \ + D:/Qt/6.9.1/mingw_64/mkspecs/modules/qt_lib_designercomponents_private.pri \ + D:/Qt/6.9.1/mingw_64/mkspecs/modules/qt_lib_devicediscovery_support_private.pri \ + D:/Qt/6.9.1/mingw_64/mkspecs/modules/qt_lib_entrypoint_private.pri \ + D:/Qt/6.9.1/mingw_64/mkspecs/modules/qt_lib_example_icons_private.pri \ + D:/Qt/6.9.1/mingw_64/mkspecs/modules/qt_lib_examples_asset_downloader_private.pri \ + D:/Qt/6.9.1/mingw_64/mkspecs/modules/qt_lib_fb_support_private.pri \ + D:/Qt/6.9.1/mingw_64/mkspecs/modules/qt_lib_ffmpegmediapluginimpl_private.pri \ + D:/Qt/6.9.1/mingw_64/mkspecs/modules/qt_lib_freetype_private.pri \ + D:/Qt/6.9.1/mingw_64/mkspecs/modules/qt_lib_gui.pri \ + D:/Qt/6.9.1/mingw_64/mkspecs/modules/qt_lib_gui_private.pri \ + D:/Qt/6.9.1/mingw_64/mkspecs/modules/qt_lib_harfbuzz_private.pri \ + D:/Qt/6.9.1/mingw_64/mkspecs/modules/qt_lib_help.pri \ + D:/Qt/6.9.1/mingw_64/mkspecs/modules/qt_lib_help_private.pri \ + D:/Qt/6.9.1/mingw_64/mkspecs/modules/qt_lib_jpeg_private.pri \ + D:/Qt/6.9.1/mingw_64/mkspecs/modules/qt_lib_labsanimation.pri \ + D:/Qt/6.9.1/mingw_64/mkspecs/modules/qt_lib_labsanimation_private.pri \ + D:/Qt/6.9.1/mingw_64/mkspecs/modules/qt_lib_labsfolderlistmodel.pri \ + D:/Qt/6.9.1/mingw_64/mkspecs/modules/qt_lib_labsfolderlistmodel_private.pri \ + D:/Qt/6.9.1/mingw_64/mkspecs/modules/qt_lib_labsplatform.pri \ + D:/Qt/6.9.1/mingw_64/mkspecs/modules/qt_lib_labsplatform_private.pri \ + D:/Qt/6.9.1/mingw_64/mkspecs/modules/qt_lib_labsqmlmodels.pri \ + D:/Qt/6.9.1/mingw_64/mkspecs/modules/qt_lib_labsqmlmodels_private.pri \ + D:/Qt/6.9.1/mingw_64/mkspecs/modules/qt_lib_labssettings.pri \ + D:/Qt/6.9.1/mingw_64/mkspecs/modules/qt_lib_labssettings_private.pri \ + D:/Qt/6.9.1/mingw_64/mkspecs/modules/qt_lib_labssharedimage.pri \ + D:/Qt/6.9.1/mingw_64/mkspecs/modules/qt_lib_labssharedimage_private.pri \ + D:/Qt/6.9.1/mingw_64/mkspecs/modules/qt_lib_labswavefrontmesh.pri \ + D:/Qt/6.9.1/mingw_64/mkspecs/modules/qt_lib_labswavefrontmesh_private.pri \ + D:/Qt/6.9.1/mingw_64/mkspecs/modules/qt_lib_linguist.pri \ + D:/Qt/6.9.1/mingw_64/mkspecs/modules/qt_lib_multimedia.pri \ + D:/Qt/6.9.1/mingw_64/mkspecs/modules/qt_lib_multimedia_private.pri \ + D:/Qt/6.9.1/mingw_64/mkspecs/modules/qt_lib_multimediaquick_private.pri \ + D:/Qt/6.9.1/mingw_64/mkspecs/modules/qt_lib_multimediatestlibprivate_private.pri \ + D:/Qt/6.9.1/mingw_64/mkspecs/modules/qt_lib_multimediawidgets.pri \ + D:/Qt/6.9.1/mingw_64/mkspecs/modules/qt_lib_multimediawidgets_private.pri \ + D:/Qt/6.9.1/mingw_64/mkspecs/modules/qt_lib_network.pri \ + D:/Qt/6.9.1/mingw_64/mkspecs/modules/qt_lib_network_private.pri \ + D:/Qt/6.9.1/mingw_64/mkspecs/modules/qt_lib_opengl.pri \ + D:/Qt/6.9.1/mingw_64/mkspecs/modules/qt_lib_opengl_private.pri \ + D:/Qt/6.9.1/mingw_64/mkspecs/modules/qt_lib_openglwidgets.pri \ + D:/Qt/6.9.1/mingw_64/mkspecs/modules/qt_lib_openglwidgets_private.pri \ + D:/Qt/6.9.1/mingw_64/mkspecs/modules/qt_lib_packetprotocol_private.pri \ + D:/Qt/6.9.1/mingw_64/mkspecs/modules/qt_lib_png_private.pri \ + D:/Qt/6.9.1/mingw_64/mkspecs/modules/qt_lib_printsupport.pri \ + D:/Qt/6.9.1/mingw_64/mkspecs/modules/qt_lib_printsupport_private.pri \ + D:/Qt/6.9.1/mingw_64/mkspecs/modules/qt_lib_qdoccatch_private.pri \ + D:/Qt/6.9.1/mingw_64/mkspecs/modules/qt_lib_qdoccatchconversions_private.pri \ + D:/Qt/6.9.1/mingw_64/mkspecs/modules/qt_lib_qdoccatchgenerators_private.pri \ + D:/Qt/6.9.1/mingw_64/mkspecs/modules/qt_lib_qml.pri \ + D:/Qt/6.9.1/mingw_64/mkspecs/modules/qt_lib_qml_private.pri \ + D:/Qt/6.9.1/mingw_64/mkspecs/modules/qt_lib_qmlassetdownloader.pri \ + D:/Qt/6.9.1/mingw_64/mkspecs/modules/qt_lib_qmlassetdownloader_private.pri \ + D:/Qt/6.9.1/mingw_64/mkspecs/modules/qt_lib_qmlcompiler.pri \ + D:/Qt/6.9.1/mingw_64/mkspecs/modules/qt_lib_qmlcompiler_private.pri \ + D:/Qt/6.9.1/mingw_64/mkspecs/modules/qt_lib_qmlcore.pri \ + D:/Qt/6.9.1/mingw_64/mkspecs/modules/qt_lib_qmlcore_private.pri \ + D:/Qt/6.9.1/mingw_64/mkspecs/modules/qt_lib_qmldebug_private.pri \ + D:/Qt/6.9.1/mingw_64/mkspecs/modules/qt_lib_qmldom_private.pri \ + D:/Qt/6.9.1/mingw_64/mkspecs/modules/qt_lib_qmlformat_private.pri \ + D:/Qt/6.9.1/mingw_64/mkspecs/modules/qt_lib_qmlintegration.pri \ + D:/Qt/6.9.1/mingw_64/mkspecs/modules/qt_lib_qmlintegration_private.pri \ + D:/Qt/6.9.1/mingw_64/mkspecs/modules/qt_lib_qmllocalstorage.pri \ + D:/Qt/6.9.1/mingw_64/mkspecs/modules/qt_lib_qmllocalstorage_private.pri \ + D:/Qt/6.9.1/mingw_64/mkspecs/modules/qt_lib_qmlls_private.pri \ + D:/Qt/6.9.1/mingw_64/mkspecs/modules/qt_lib_qmlmeta.pri \ + D:/Qt/6.9.1/mingw_64/mkspecs/modules/qt_lib_qmlmeta_private.pri \ + D:/Qt/6.9.1/mingw_64/mkspecs/modules/qt_lib_qmlmodels.pri \ + D:/Qt/6.9.1/mingw_64/mkspecs/modules/qt_lib_qmlmodels_private.pri \ + D:/Qt/6.9.1/mingw_64/mkspecs/modules/qt_lib_qmlnetwork.pri \ + D:/Qt/6.9.1/mingw_64/mkspecs/modules/qt_lib_qmlnetwork_private.pri \ + D:/Qt/6.9.1/mingw_64/mkspecs/modules/qt_lib_qmltest.pri \ + D:/Qt/6.9.1/mingw_64/mkspecs/modules/qt_lib_qmltest_private.pri \ + D:/Qt/6.9.1/mingw_64/mkspecs/modules/qt_lib_qmltoolingsettings_private.pri \ + D:/Qt/6.9.1/mingw_64/mkspecs/modules/qt_lib_qmltyperegistrar_private.pri \ + D:/Qt/6.9.1/mingw_64/mkspecs/modules/qt_lib_qmlworkerscript.pri \ + D:/Qt/6.9.1/mingw_64/mkspecs/modules/qt_lib_qmlworkerscript_private.pri \ + D:/Qt/6.9.1/mingw_64/mkspecs/modules/qt_lib_qmlxmllistmodel.pri \ + D:/Qt/6.9.1/mingw_64/mkspecs/modules/qt_lib_qmlxmllistmodel_private.pri \ + D:/Qt/6.9.1/mingw_64/mkspecs/modules/qt_lib_quick.pri \ + D:/Qt/6.9.1/mingw_64/mkspecs/modules/qt_lib_quick3d.pri \ + D:/Qt/6.9.1/mingw_64/mkspecs/modules/qt_lib_quick3d_private.pri \ + D:/Qt/6.9.1/mingw_64/mkspecs/modules/qt_lib_quick3dassetimport.pri \ + D:/Qt/6.9.1/mingw_64/mkspecs/modules/qt_lib_quick3dassetimport_private.pri \ + D:/Qt/6.9.1/mingw_64/mkspecs/modules/qt_lib_quick3dassetutils.pri \ + D:/Qt/6.9.1/mingw_64/mkspecs/modules/qt_lib_quick3dassetutils_private.pri \ + D:/Qt/6.9.1/mingw_64/mkspecs/modules/qt_lib_quick3deffects.pri \ + D:/Qt/6.9.1/mingw_64/mkspecs/modules/qt_lib_quick3deffects_private.pri \ + D:/Qt/6.9.1/mingw_64/mkspecs/modules/qt_lib_quick3dglslparser_private.pri \ + D:/Qt/6.9.1/mingw_64/mkspecs/modules/qt_lib_quick3dhelpers.pri \ + D:/Qt/6.9.1/mingw_64/mkspecs/modules/qt_lib_quick3dhelpers_private.pri \ + D:/Qt/6.9.1/mingw_64/mkspecs/modules/qt_lib_quick3dhelpersimpl.pri \ + D:/Qt/6.9.1/mingw_64/mkspecs/modules/qt_lib_quick3dhelpersimpl_private.pri \ + D:/Qt/6.9.1/mingw_64/mkspecs/modules/qt_lib_quick3diblbaker.pri \ + D:/Qt/6.9.1/mingw_64/mkspecs/modules/qt_lib_quick3diblbaker_private.pri \ + D:/Qt/6.9.1/mingw_64/mkspecs/modules/qt_lib_quick3dparticleeffects.pri \ + D:/Qt/6.9.1/mingw_64/mkspecs/modules/qt_lib_quick3dparticleeffects_private.pri \ + D:/Qt/6.9.1/mingw_64/mkspecs/modules/qt_lib_quick3dparticles.pri \ + D:/Qt/6.9.1/mingw_64/mkspecs/modules/qt_lib_quick3dparticles_private.pri \ + D:/Qt/6.9.1/mingw_64/mkspecs/modules/qt_lib_quick3druntimerender.pri \ + D:/Qt/6.9.1/mingw_64/mkspecs/modules/qt_lib_quick3druntimerender_private.pri \ + D:/Qt/6.9.1/mingw_64/mkspecs/modules/qt_lib_quick3dspatialaudio_private.pri \ + D:/Qt/6.9.1/mingw_64/mkspecs/modules/qt_lib_quick3dutils.pri \ + D:/Qt/6.9.1/mingw_64/mkspecs/modules/qt_lib_quick3dutils_private.pri \ + D:/Qt/6.9.1/mingw_64/mkspecs/modules/qt_lib_quick3dxr.pri \ + D:/Qt/6.9.1/mingw_64/mkspecs/modules/qt_lib_quick3dxr_private.pri \ + D:/Qt/6.9.1/mingw_64/mkspecs/modules/qt_lib_quick_private.pri \ + D:/Qt/6.9.1/mingw_64/mkspecs/modules/qt_lib_quickcontrols2.pri \ + D:/Qt/6.9.1/mingw_64/mkspecs/modules/qt_lib_quickcontrols2_private.pri \ + D:/Qt/6.9.1/mingw_64/mkspecs/modules/qt_lib_quickcontrols2basic.pri \ + D:/Qt/6.9.1/mingw_64/mkspecs/modules/qt_lib_quickcontrols2basic_private.pri \ + D:/Qt/6.9.1/mingw_64/mkspecs/modules/qt_lib_quickcontrols2basicstyleimpl.pri \ + D:/Qt/6.9.1/mingw_64/mkspecs/modules/qt_lib_quickcontrols2basicstyleimpl_private.pri \ + D:/Qt/6.9.1/mingw_64/mkspecs/modules/qt_lib_quickcontrols2fluentwinui3styleimpl.pri \ + D:/Qt/6.9.1/mingw_64/mkspecs/modules/qt_lib_quickcontrols2fluentwinui3styleimpl_private.pri \ + D:/Qt/6.9.1/mingw_64/mkspecs/modules/qt_lib_quickcontrols2fusion.pri \ + D:/Qt/6.9.1/mingw_64/mkspecs/modules/qt_lib_quickcontrols2fusion_private.pri \ + D:/Qt/6.9.1/mingw_64/mkspecs/modules/qt_lib_quickcontrols2fusionstyleimpl.pri \ + D:/Qt/6.9.1/mingw_64/mkspecs/modules/qt_lib_quickcontrols2fusionstyleimpl_private.pri \ + D:/Qt/6.9.1/mingw_64/mkspecs/modules/qt_lib_quickcontrols2imagine.pri \ + D:/Qt/6.9.1/mingw_64/mkspecs/modules/qt_lib_quickcontrols2imagine_private.pri \ + D:/Qt/6.9.1/mingw_64/mkspecs/modules/qt_lib_quickcontrols2imaginestyleimpl.pri \ + D:/Qt/6.9.1/mingw_64/mkspecs/modules/qt_lib_quickcontrols2imaginestyleimpl_private.pri \ + D:/Qt/6.9.1/mingw_64/mkspecs/modules/qt_lib_quickcontrols2impl.pri \ + D:/Qt/6.9.1/mingw_64/mkspecs/modules/qt_lib_quickcontrols2impl_private.pri \ + D:/Qt/6.9.1/mingw_64/mkspecs/modules/qt_lib_quickcontrols2material.pri \ + D:/Qt/6.9.1/mingw_64/mkspecs/modules/qt_lib_quickcontrols2material_private.pri \ + D:/Qt/6.9.1/mingw_64/mkspecs/modules/qt_lib_quickcontrols2materialstyleimpl.pri \ + D:/Qt/6.9.1/mingw_64/mkspecs/modules/qt_lib_quickcontrols2materialstyleimpl_private.pri \ + D:/Qt/6.9.1/mingw_64/mkspecs/modules/qt_lib_quickcontrols2universal.pri \ + D:/Qt/6.9.1/mingw_64/mkspecs/modules/qt_lib_quickcontrols2universal_private.pri \ + D:/Qt/6.9.1/mingw_64/mkspecs/modules/qt_lib_quickcontrols2universalstyleimpl.pri \ + D:/Qt/6.9.1/mingw_64/mkspecs/modules/qt_lib_quickcontrols2universalstyleimpl_private.pri \ + D:/Qt/6.9.1/mingw_64/mkspecs/modules/qt_lib_quickcontrols2windowsstyleimpl.pri \ + D:/Qt/6.9.1/mingw_64/mkspecs/modules/qt_lib_quickcontrols2windowsstyleimpl_private.pri \ + D:/Qt/6.9.1/mingw_64/mkspecs/modules/qt_lib_quickcontrolstestutilsprivate_private.pri \ + D:/Qt/6.9.1/mingw_64/mkspecs/modules/qt_lib_quickdialogs2.pri \ + D:/Qt/6.9.1/mingw_64/mkspecs/modules/qt_lib_quickdialogs2_private.pri \ + D:/Qt/6.9.1/mingw_64/mkspecs/modules/qt_lib_quickdialogs2quickimpl.pri \ + D:/Qt/6.9.1/mingw_64/mkspecs/modules/qt_lib_quickdialogs2quickimpl_private.pri \ + D:/Qt/6.9.1/mingw_64/mkspecs/modules/qt_lib_quickdialogs2utils.pri \ + D:/Qt/6.9.1/mingw_64/mkspecs/modules/qt_lib_quickdialogs2utils_private.pri \ + D:/Qt/6.9.1/mingw_64/mkspecs/modules/qt_lib_quickeffects.pri \ + D:/Qt/6.9.1/mingw_64/mkspecs/modules/qt_lib_quickeffects_private.pri \ + D:/Qt/6.9.1/mingw_64/mkspecs/modules/qt_lib_quicklayouts.pri \ + D:/Qt/6.9.1/mingw_64/mkspecs/modules/qt_lib_quicklayouts_private.pri \ + D:/Qt/6.9.1/mingw_64/mkspecs/modules/qt_lib_quickparticles_private.pri \ + D:/Qt/6.9.1/mingw_64/mkspecs/modules/qt_lib_quickshapes_private.pri \ + D:/Qt/6.9.1/mingw_64/mkspecs/modules/qt_lib_quicktemplates2.pri \ + D:/Qt/6.9.1/mingw_64/mkspecs/modules/qt_lib_quicktemplates2_private.pri \ + D:/Qt/6.9.1/mingw_64/mkspecs/modules/qt_lib_quicktestutilsprivate_private.pri \ + D:/Qt/6.9.1/mingw_64/mkspecs/modules/qt_lib_quicktimeline.pri \ + D:/Qt/6.9.1/mingw_64/mkspecs/modules/qt_lib_quicktimeline_private.pri \ + D:/Qt/6.9.1/mingw_64/mkspecs/modules/qt_lib_quicktimelineblendtrees.pri \ + D:/Qt/6.9.1/mingw_64/mkspecs/modules/qt_lib_quicktimelineblendtrees_private.pri \ + D:/Qt/6.9.1/mingw_64/mkspecs/modules/qt_lib_quickvectorimage.pri \ + D:/Qt/6.9.1/mingw_64/mkspecs/modules/qt_lib_quickvectorimage_private.pri \ + D:/Qt/6.9.1/mingw_64/mkspecs/modules/qt_lib_quickvectorimagegenerator_private.pri \ + D:/Qt/6.9.1/mingw_64/mkspecs/modules/qt_lib_quickwidgets.pri \ + D:/Qt/6.9.1/mingw_64/mkspecs/modules/qt_lib_quickwidgets_private.pri \ + D:/Qt/6.9.1/mingw_64/mkspecs/modules/qt_lib_shadertools.pri \ + D:/Qt/6.9.1/mingw_64/mkspecs/modules/qt_lib_shadertools_private.pri \ + D:/Qt/6.9.1/mingw_64/mkspecs/modules/qt_lib_spatialaudio.pri \ + D:/Qt/6.9.1/mingw_64/mkspecs/modules/qt_lib_spatialaudio_private.pri \ + D:/Qt/6.9.1/mingw_64/mkspecs/modules/qt_lib_sql.pri \ + D:/Qt/6.9.1/mingw_64/mkspecs/modules/qt_lib_sql_private.pri \ + D:/Qt/6.9.1/mingw_64/mkspecs/modules/qt_lib_svg.pri \ + D:/Qt/6.9.1/mingw_64/mkspecs/modules/qt_lib_svg_private.pri \ + D:/Qt/6.9.1/mingw_64/mkspecs/modules/qt_lib_svgwidgets.pri \ + D:/Qt/6.9.1/mingw_64/mkspecs/modules/qt_lib_svgwidgets_private.pri \ + D:/Qt/6.9.1/mingw_64/mkspecs/modules/qt_lib_testinternals_private.pri \ + D:/Qt/6.9.1/mingw_64/mkspecs/modules/qt_lib_testlib.pri \ + D:/Qt/6.9.1/mingw_64/mkspecs/modules/qt_lib_testlib_private.pri \ + D:/Qt/6.9.1/mingw_64/mkspecs/modules/qt_lib_tools_private.pri \ + D:/Qt/6.9.1/mingw_64/mkspecs/modules/qt_lib_uiplugin.pri \ + D:/Qt/6.9.1/mingw_64/mkspecs/modules/qt_lib_uitools.pri \ + D:/Qt/6.9.1/mingw_64/mkspecs/modules/qt_lib_uitools_private.pri \ + D:/Qt/6.9.1/mingw_64/mkspecs/modules/qt_lib_widgets.pri \ + D:/Qt/6.9.1/mingw_64/mkspecs/modules/qt_lib_widgets_private.pri \ + D:/Qt/6.9.1/mingw_64/mkspecs/modules/qt_lib_xml.pri \ + D:/Qt/6.9.1/mingw_64/mkspecs/modules/qt_lib_xml_private.pri \ + D:/Qt/6.9.1/mingw_64/mkspecs/modules/qt_lib_zlib_private.pri \ + D:/Qt/6.9.1/mingw_64/mkspecs/features/qt_functions.prf \ + D:/Qt/6.9.1/mingw_64/mkspecs/features/qt_config.prf \ + D:/Qt/6.9.1/mingw_64/mkspecs/win32-g++/qmake.conf \ + D:/Qt/6.9.1/mingw_64/mkspecs/features/spec_post.prf \ + .qmake.stash \ + D:/Qt/6.9.1/mingw_64/mkspecs/features/exclusive_builds.prf \ + D:/Qt/6.9.1/mingw_64/mkspecs/features/toolchain.prf \ + D:/Qt/6.9.1/mingw_64/mkspecs/features/default_pre.prf \ + D:/Qt/6.9.1/mingw_64/mkspecs/features/win32/default_pre.prf \ + D:/Qt/6.9.1/mingw_64/mkspecs/features/resolve_config.prf \ + D:/Qt/6.9.1/mingw_64/mkspecs/features/exclusive_builds_post.prf \ + D:/Qt/6.9.1/mingw_64/mkspecs/features/default_post.prf \ + D:/Qt/6.9.1/mingw_64/mkspecs/features/qtquickcompiler.prf \ + D:/Qt/6.9.1/mingw_64/mkspecs/features/precompile_header.prf \ + D:/Qt/6.9.1/mingw_64/mkspecs/features/warn_on.prf \ + D:/Qt/6.9.1/mingw_64/mkspecs/features/permissions.prf \ + D:/Qt/6.9.1/mingw_64/mkspecs/features/qt.prf \ + D:/Qt/6.9.1/mingw_64/mkspecs/features/resources_functions.prf \ + D:/Qt/6.9.1/mingw_64/mkspecs/features/resources.prf \ + D:/Qt/6.9.1/mingw_64/mkspecs/features/moc.prf \ + D:/Qt/6.9.1/mingw_64/mkspecs/features/win32/opengl.prf \ + D:/Qt/6.9.1/mingw_64/mkspecs/features/uic.prf \ + D:/Qt/6.9.1/mingw_64/mkspecs/features/qmake_use.prf \ + D:/Qt/6.9.1/mingw_64/mkspecs/features/file_copies.prf \ + D:/Qt/6.9.1/mingw_64/mkspecs/features/win32/windows.prf \ + D:/Qt/6.9.1/mingw_64/mkspecs/features/testcase_targets.prf \ + D:/Qt/6.9.1/mingw_64/mkspecs/features/exceptions.prf \ + D:/Qt/6.9.1/mingw_64/mkspecs/features/yacc.prf \ + D:/Qt/6.9.1/mingw_64/mkspecs/features/lex.prf \ + untitled2.pro \ + D:/Qt/6.9.1/mingw_64/lib/Qt6Widgets.prl \ + D:/Qt/6.9.1/mingw_64/lib/Qt6Gui.prl \ + D:/Qt/6.9.1/mingw_64/lib/Qt6Network.prl \ + D:/Qt/6.9.1/mingw_64/lib/Qt6Concurrent.prl \ + D:/Qt/6.9.1/mingw_64/lib/Qt6Core.prl \ + D:/Qt/6.9.1/mingw_64/lib/Qt6EntryPoint.prl \ + D:/Qt/6.9.1/mingw_64/mkspecs/features/build_pass.prf \ + resources.qrc + $(QMAKE) -o Makefile untitled2.pro -spec win32-g++ "CONFIG+=qtquickcompiler" +D:/Qt/6.9.1/mingw_64/mkspecs/features/spec_pre.prf: +D:/Qt/6.9.1/mingw_64/mkspecs/features/device_config.prf: +D:/Qt/6.9.1/mingw_64/mkspecs/common/sanitize.conf: +D:/Qt/6.9.1/mingw_64/mkspecs/common/gcc-base.conf: +D:/Qt/6.9.1/mingw_64/mkspecs/common/g++-base.conf: +D:/Qt/6.9.1/mingw_64/mkspecs/features/win32/windows_vulkan_sdk.prf: +D:/Qt/6.9.1/mingw_64/mkspecs/common/windows-vulkan.conf: +D:/Qt/6.9.1/mingw_64/mkspecs/common/g++-win32.conf: +D:/Qt/6.9.1/mingw_64/mkspecs/common/windows-desktop.conf: +D:/Qt/6.9.1/mingw_64/mkspecs/qconfig.pri: +D:/Qt/6.9.1/mingw_64/mkspecs/modules/qt_ext_freetype.pri: +D:/Qt/6.9.1/mingw_64/mkspecs/modules/qt_ext_libjpeg.pri: +D:/Qt/6.9.1/mingw_64/mkspecs/modules/qt_ext_libpng.pri: +D:/Qt/6.9.1/mingw_64/mkspecs/modules/qt_ext_openxr_loader.pri: +D:/Qt/6.9.1/mingw_64/mkspecs/modules/qt_lib_charts.pri: +D:/Qt/6.9.1/mingw_64/mkspecs/modules/qt_lib_charts_private.pri: +D:/Qt/6.9.1/mingw_64/mkspecs/modules/qt_lib_chartsqml.pri: +D:/Qt/6.9.1/mingw_64/mkspecs/modules/qt_lib_chartsqml_private.pri: +D:/Qt/6.9.1/mingw_64/mkspecs/modules/qt_lib_concurrent.pri: +D:/Qt/6.9.1/mingw_64/mkspecs/modules/qt_lib_concurrent_private.pri: +D:/Qt/6.9.1/mingw_64/mkspecs/modules/qt_lib_core.pri: +D:/Qt/6.9.1/mingw_64/mkspecs/modules/qt_lib_core_private.pri: +D:/Qt/6.9.1/mingw_64/mkspecs/modules/qt_lib_dbus.pri: +D:/Qt/6.9.1/mingw_64/mkspecs/modules/qt_lib_dbus_private.pri: +D:/Qt/6.9.1/mingw_64/mkspecs/modules/qt_lib_designer.pri: +D:/Qt/6.9.1/mingw_64/mkspecs/modules/qt_lib_designer_private.pri: +D:/Qt/6.9.1/mingw_64/mkspecs/modules/qt_lib_designercomponents_private.pri: +D:/Qt/6.9.1/mingw_64/mkspecs/modules/qt_lib_devicediscovery_support_private.pri: +D:/Qt/6.9.1/mingw_64/mkspecs/modules/qt_lib_entrypoint_private.pri: +D:/Qt/6.9.1/mingw_64/mkspecs/modules/qt_lib_example_icons_private.pri: +D:/Qt/6.9.1/mingw_64/mkspecs/modules/qt_lib_examples_asset_downloader_private.pri: +D:/Qt/6.9.1/mingw_64/mkspecs/modules/qt_lib_fb_support_private.pri: +D:/Qt/6.9.1/mingw_64/mkspecs/modules/qt_lib_ffmpegmediapluginimpl_private.pri: +D:/Qt/6.9.1/mingw_64/mkspecs/modules/qt_lib_freetype_private.pri: +D:/Qt/6.9.1/mingw_64/mkspecs/modules/qt_lib_gui.pri: +D:/Qt/6.9.1/mingw_64/mkspecs/modules/qt_lib_gui_private.pri: +D:/Qt/6.9.1/mingw_64/mkspecs/modules/qt_lib_harfbuzz_private.pri: +D:/Qt/6.9.1/mingw_64/mkspecs/modules/qt_lib_help.pri: +D:/Qt/6.9.1/mingw_64/mkspecs/modules/qt_lib_help_private.pri: +D:/Qt/6.9.1/mingw_64/mkspecs/modules/qt_lib_jpeg_private.pri: +D:/Qt/6.9.1/mingw_64/mkspecs/modules/qt_lib_labsanimation.pri: +D:/Qt/6.9.1/mingw_64/mkspecs/modules/qt_lib_labsanimation_private.pri: +D:/Qt/6.9.1/mingw_64/mkspecs/modules/qt_lib_labsfolderlistmodel.pri: +D:/Qt/6.9.1/mingw_64/mkspecs/modules/qt_lib_labsfolderlistmodel_private.pri: +D:/Qt/6.9.1/mingw_64/mkspecs/modules/qt_lib_labsplatform.pri: +D:/Qt/6.9.1/mingw_64/mkspecs/modules/qt_lib_labsplatform_private.pri: +D:/Qt/6.9.1/mingw_64/mkspecs/modules/qt_lib_labsqmlmodels.pri: +D:/Qt/6.9.1/mingw_64/mkspecs/modules/qt_lib_labsqmlmodels_private.pri: +D:/Qt/6.9.1/mingw_64/mkspecs/modules/qt_lib_labssettings.pri: +D:/Qt/6.9.1/mingw_64/mkspecs/modules/qt_lib_labssettings_private.pri: +D:/Qt/6.9.1/mingw_64/mkspecs/modules/qt_lib_labssharedimage.pri: +D:/Qt/6.9.1/mingw_64/mkspecs/modules/qt_lib_labssharedimage_private.pri: +D:/Qt/6.9.1/mingw_64/mkspecs/modules/qt_lib_labswavefrontmesh.pri: +D:/Qt/6.9.1/mingw_64/mkspecs/modules/qt_lib_labswavefrontmesh_private.pri: +D:/Qt/6.9.1/mingw_64/mkspecs/modules/qt_lib_linguist.pri: +D:/Qt/6.9.1/mingw_64/mkspecs/modules/qt_lib_multimedia.pri: +D:/Qt/6.9.1/mingw_64/mkspecs/modules/qt_lib_multimedia_private.pri: +D:/Qt/6.9.1/mingw_64/mkspecs/modules/qt_lib_multimediaquick_private.pri: +D:/Qt/6.9.1/mingw_64/mkspecs/modules/qt_lib_multimediatestlibprivate_private.pri: +D:/Qt/6.9.1/mingw_64/mkspecs/modules/qt_lib_multimediawidgets.pri: +D:/Qt/6.9.1/mingw_64/mkspecs/modules/qt_lib_multimediawidgets_private.pri: +D:/Qt/6.9.1/mingw_64/mkspecs/modules/qt_lib_network.pri: +D:/Qt/6.9.1/mingw_64/mkspecs/modules/qt_lib_network_private.pri: +D:/Qt/6.9.1/mingw_64/mkspecs/modules/qt_lib_opengl.pri: +D:/Qt/6.9.1/mingw_64/mkspecs/modules/qt_lib_opengl_private.pri: +D:/Qt/6.9.1/mingw_64/mkspecs/modules/qt_lib_openglwidgets.pri: +D:/Qt/6.9.1/mingw_64/mkspecs/modules/qt_lib_openglwidgets_private.pri: +D:/Qt/6.9.1/mingw_64/mkspecs/modules/qt_lib_packetprotocol_private.pri: +D:/Qt/6.9.1/mingw_64/mkspecs/modules/qt_lib_png_private.pri: +D:/Qt/6.9.1/mingw_64/mkspecs/modules/qt_lib_printsupport.pri: +D:/Qt/6.9.1/mingw_64/mkspecs/modules/qt_lib_printsupport_private.pri: +D:/Qt/6.9.1/mingw_64/mkspecs/modules/qt_lib_qdoccatch_private.pri: +D:/Qt/6.9.1/mingw_64/mkspecs/modules/qt_lib_qdoccatchconversions_private.pri: +D:/Qt/6.9.1/mingw_64/mkspecs/modules/qt_lib_qdoccatchgenerators_private.pri: +D:/Qt/6.9.1/mingw_64/mkspecs/modules/qt_lib_qml.pri: +D:/Qt/6.9.1/mingw_64/mkspecs/modules/qt_lib_qml_private.pri: +D:/Qt/6.9.1/mingw_64/mkspecs/modules/qt_lib_qmlassetdownloader.pri: +D:/Qt/6.9.1/mingw_64/mkspecs/modules/qt_lib_qmlassetdownloader_private.pri: +D:/Qt/6.9.1/mingw_64/mkspecs/modules/qt_lib_qmlcompiler.pri: +D:/Qt/6.9.1/mingw_64/mkspecs/modules/qt_lib_qmlcompiler_private.pri: +D:/Qt/6.9.1/mingw_64/mkspecs/modules/qt_lib_qmlcore.pri: +D:/Qt/6.9.1/mingw_64/mkspecs/modules/qt_lib_qmlcore_private.pri: +D:/Qt/6.9.1/mingw_64/mkspecs/modules/qt_lib_qmldebug_private.pri: +D:/Qt/6.9.1/mingw_64/mkspecs/modules/qt_lib_qmldom_private.pri: +D:/Qt/6.9.1/mingw_64/mkspecs/modules/qt_lib_qmlformat_private.pri: +D:/Qt/6.9.1/mingw_64/mkspecs/modules/qt_lib_qmlintegration.pri: +D:/Qt/6.9.1/mingw_64/mkspecs/modules/qt_lib_qmlintegration_private.pri: +D:/Qt/6.9.1/mingw_64/mkspecs/modules/qt_lib_qmllocalstorage.pri: +D:/Qt/6.9.1/mingw_64/mkspecs/modules/qt_lib_qmllocalstorage_private.pri: +D:/Qt/6.9.1/mingw_64/mkspecs/modules/qt_lib_qmlls_private.pri: +D:/Qt/6.9.1/mingw_64/mkspecs/modules/qt_lib_qmlmeta.pri: +D:/Qt/6.9.1/mingw_64/mkspecs/modules/qt_lib_qmlmeta_private.pri: +D:/Qt/6.9.1/mingw_64/mkspecs/modules/qt_lib_qmlmodels.pri: +D:/Qt/6.9.1/mingw_64/mkspecs/modules/qt_lib_qmlmodels_private.pri: +D:/Qt/6.9.1/mingw_64/mkspecs/modules/qt_lib_qmlnetwork.pri: +D:/Qt/6.9.1/mingw_64/mkspecs/modules/qt_lib_qmlnetwork_private.pri: +D:/Qt/6.9.1/mingw_64/mkspecs/modules/qt_lib_qmltest.pri: +D:/Qt/6.9.1/mingw_64/mkspecs/modules/qt_lib_qmltest_private.pri: +D:/Qt/6.9.1/mingw_64/mkspecs/modules/qt_lib_qmltoolingsettings_private.pri: +D:/Qt/6.9.1/mingw_64/mkspecs/modules/qt_lib_qmltyperegistrar_private.pri: +D:/Qt/6.9.1/mingw_64/mkspecs/modules/qt_lib_qmlworkerscript.pri: +D:/Qt/6.9.1/mingw_64/mkspecs/modules/qt_lib_qmlworkerscript_private.pri: +D:/Qt/6.9.1/mingw_64/mkspecs/modules/qt_lib_qmlxmllistmodel.pri: +D:/Qt/6.9.1/mingw_64/mkspecs/modules/qt_lib_qmlxmllistmodel_private.pri: +D:/Qt/6.9.1/mingw_64/mkspecs/modules/qt_lib_quick.pri: +D:/Qt/6.9.1/mingw_64/mkspecs/modules/qt_lib_quick3d.pri: +D:/Qt/6.9.1/mingw_64/mkspecs/modules/qt_lib_quick3d_private.pri: +D:/Qt/6.9.1/mingw_64/mkspecs/modules/qt_lib_quick3dassetimport.pri: +D:/Qt/6.9.1/mingw_64/mkspecs/modules/qt_lib_quick3dassetimport_private.pri: +D:/Qt/6.9.1/mingw_64/mkspecs/modules/qt_lib_quick3dassetutils.pri: +D:/Qt/6.9.1/mingw_64/mkspecs/modules/qt_lib_quick3dassetutils_private.pri: +D:/Qt/6.9.1/mingw_64/mkspecs/modules/qt_lib_quick3deffects.pri: +D:/Qt/6.9.1/mingw_64/mkspecs/modules/qt_lib_quick3deffects_private.pri: +D:/Qt/6.9.1/mingw_64/mkspecs/modules/qt_lib_quick3dglslparser_private.pri: +D:/Qt/6.9.1/mingw_64/mkspecs/modules/qt_lib_quick3dhelpers.pri: +D:/Qt/6.9.1/mingw_64/mkspecs/modules/qt_lib_quick3dhelpers_private.pri: +D:/Qt/6.9.1/mingw_64/mkspecs/modules/qt_lib_quick3dhelpersimpl.pri: +D:/Qt/6.9.1/mingw_64/mkspecs/modules/qt_lib_quick3dhelpersimpl_private.pri: +D:/Qt/6.9.1/mingw_64/mkspecs/modules/qt_lib_quick3diblbaker.pri: +D:/Qt/6.9.1/mingw_64/mkspecs/modules/qt_lib_quick3diblbaker_private.pri: +D:/Qt/6.9.1/mingw_64/mkspecs/modules/qt_lib_quick3dparticleeffects.pri: +D:/Qt/6.9.1/mingw_64/mkspecs/modules/qt_lib_quick3dparticleeffects_private.pri: +D:/Qt/6.9.1/mingw_64/mkspecs/modules/qt_lib_quick3dparticles.pri: +D:/Qt/6.9.1/mingw_64/mkspecs/modules/qt_lib_quick3dparticles_private.pri: +D:/Qt/6.9.1/mingw_64/mkspecs/modules/qt_lib_quick3druntimerender.pri: +D:/Qt/6.9.1/mingw_64/mkspecs/modules/qt_lib_quick3druntimerender_private.pri: +D:/Qt/6.9.1/mingw_64/mkspecs/modules/qt_lib_quick3dspatialaudio_private.pri: +D:/Qt/6.9.1/mingw_64/mkspecs/modules/qt_lib_quick3dutils.pri: +D:/Qt/6.9.1/mingw_64/mkspecs/modules/qt_lib_quick3dutils_private.pri: +D:/Qt/6.9.1/mingw_64/mkspecs/modules/qt_lib_quick3dxr.pri: +D:/Qt/6.9.1/mingw_64/mkspecs/modules/qt_lib_quick3dxr_private.pri: +D:/Qt/6.9.1/mingw_64/mkspecs/modules/qt_lib_quick_private.pri: +D:/Qt/6.9.1/mingw_64/mkspecs/modules/qt_lib_quickcontrols2.pri: +D:/Qt/6.9.1/mingw_64/mkspecs/modules/qt_lib_quickcontrols2_private.pri: +D:/Qt/6.9.1/mingw_64/mkspecs/modules/qt_lib_quickcontrols2basic.pri: +D:/Qt/6.9.1/mingw_64/mkspecs/modules/qt_lib_quickcontrols2basic_private.pri: +D:/Qt/6.9.1/mingw_64/mkspecs/modules/qt_lib_quickcontrols2basicstyleimpl.pri: +D:/Qt/6.9.1/mingw_64/mkspecs/modules/qt_lib_quickcontrols2basicstyleimpl_private.pri: +D:/Qt/6.9.1/mingw_64/mkspecs/modules/qt_lib_quickcontrols2fluentwinui3styleimpl.pri: +D:/Qt/6.9.1/mingw_64/mkspecs/modules/qt_lib_quickcontrols2fluentwinui3styleimpl_private.pri: +D:/Qt/6.9.1/mingw_64/mkspecs/modules/qt_lib_quickcontrols2fusion.pri: +D:/Qt/6.9.1/mingw_64/mkspecs/modules/qt_lib_quickcontrols2fusion_private.pri: +D:/Qt/6.9.1/mingw_64/mkspecs/modules/qt_lib_quickcontrols2fusionstyleimpl.pri: +D:/Qt/6.9.1/mingw_64/mkspecs/modules/qt_lib_quickcontrols2fusionstyleimpl_private.pri: +D:/Qt/6.9.1/mingw_64/mkspecs/modules/qt_lib_quickcontrols2imagine.pri: +D:/Qt/6.9.1/mingw_64/mkspecs/modules/qt_lib_quickcontrols2imagine_private.pri: +D:/Qt/6.9.1/mingw_64/mkspecs/modules/qt_lib_quickcontrols2imaginestyleimpl.pri: +D:/Qt/6.9.1/mingw_64/mkspecs/modules/qt_lib_quickcontrols2imaginestyleimpl_private.pri: +D:/Qt/6.9.1/mingw_64/mkspecs/modules/qt_lib_quickcontrols2impl.pri: +D:/Qt/6.9.1/mingw_64/mkspecs/modules/qt_lib_quickcontrols2impl_private.pri: +D:/Qt/6.9.1/mingw_64/mkspecs/modules/qt_lib_quickcontrols2material.pri: +D:/Qt/6.9.1/mingw_64/mkspecs/modules/qt_lib_quickcontrols2material_private.pri: +D:/Qt/6.9.1/mingw_64/mkspecs/modules/qt_lib_quickcontrols2materialstyleimpl.pri: +D:/Qt/6.9.1/mingw_64/mkspecs/modules/qt_lib_quickcontrols2materialstyleimpl_private.pri: +D:/Qt/6.9.1/mingw_64/mkspecs/modules/qt_lib_quickcontrols2universal.pri: +D:/Qt/6.9.1/mingw_64/mkspecs/modules/qt_lib_quickcontrols2universal_private.pri: +D:/Qt/6.9.1/mingw_64/mkspecs/modules/qt_lib_quickcontrols2universalstyleimpl.pri: +D:/Qt/6.9.1/mingw_64/mkspecs/modules/qt_lib_quickcontrols2universalstyleimpl_private.pri: +D:/Qt/6.9.1/mingw_64/mkspecs/modules/qt_lib_quickcontrols2windowsstyleimpl.pri: +D:/Qt/6.9.1/mingw_64/mkspecs/modules/qt_lib_quickcontrols2windowsstyleimpl_private.pri: +D:/Qt/6.9.1/mingw_64/mkspecs/modules/qt_lib_quickcontrolstestutilsprivate_private.pri: +D:/Qt/6.9.1/mingw_64/mkspecs/modules/qt_lib_quickdialogs2.pri: +D:/Qt/6.9.1/mingw_64/mkspecs/modules/qt_lib_quickdialogs2_private.pri: +D:/Qt/6.9.1/mingw_64/mkspecs/modules/qt_lib_quickdialogs2quickimpl.pri: +D:/Qt/6.9.1/mingw_64/mkspecs/modules/qt_lib_quickdialogs2quickimpl_private.pri: +D:/Qt/6.9.1/mingw_64/mkspecs/modules/qt_lib_quickdialogs2utils.pri: +D:/Qt/6.9.1/mingw_64/mkspecs/modules/qt_lib_quickdialogs2utils_private.pri: +D:/Qt/6.9.1/mingw_64/mkspecs/modules/qt_lib_quickeffects.pri: +D:/Qt/6.9.1/mingw_64/mkspecs/modules/qt_lib_quickeffects_private.pri: +D:/Qt/6.9.1/mingw_64/mkspecs/modules/qt_lib_quicklayouts.pri: +D:/Qt/6.9.1/mingw_64/mkspecs/modules/qt_lib_quicklayouts_private.pri: +D:/Qt/6.9.1/mingw_64/mkspecs/modules/qt_lib_quickparticles_private.pri: +D:/Qt/6.9.1/mingw_64/mkspecs/modules/qt_lib_quickshapes_private.pri: +D:/Qt/6.9.1/mingw_64/mkspecs/modules/qt_lib_quicktemplates2.pri: +D:/Qt/6.9.1/mingw_64/mkspecs/modules/qt_lib_quicktemplates2_private.pri: +D:/Qt/6.9.1/mingw_64/mkspecs/modules/qt_lib_quicktestutilsprivate_private.pri: +D:/Qt/6.9.1/mingw_64/mkspecs/modules/qt_lib_quicktimeline.pri: +D:/Qt/6.9.1/mingw_64/mkspecs/modules/qt_lib_quicktimeline_private.pri: +D:/Qt/6.9.1/mingw_64/mkspecs/modules/qt_lib_quicktimelineblendtrees.pri: +D:/Qt/6.9.1/mingw_64/mkspecs/modules/qt_lib_quicktimelineblendtrees_private.pri: +D:/Qt/6.9.1/mingw_64/mkspecs/modules/qt_lib_quickvectorimage.pri: +D:/Qt/6.9.1/mingw_64/mkspecs/modules/qt_lib_quickvectorimage_private.pri: +D:/Qt/6.9.1/mingw_64/mkspecs/modules/qt_lib_quickvectorimagegenerator_private.pri: +D:/Qt/6.9.1/mingw_64/mkspecs/modules/qt_lib_quickwidgets.pri: +D:/Qt/6.9.1/mingw_64/mkspecs/modules/qt_lib_quickwidgets_private.pri: +D:/Qt/6.9.1/mingw_64/mkspecs/modules/qt_lib_shadertools.pri: +D:/Qt/6.9.1/mingw_64/mkspecs/modules/qt_lib_shadertools_private.pri: +D:/Qt/6.9.1/mingw_64/mkspecs/modules/qt_lib_spatialaudio.pri: +D:/Qt/6.9.1/mingw_64/mkspecs/modules/qt_lib_spatialaudio_private.pri: +D:/Qt/6.9.1/mingw_64/mkspecs/modules/qt_lib_sql.pri: +D:/Qt/6.9.1/mingw_64/mkspecs/modules/qt_lib_sql_private.pri: +D:/Qt/6.9.1/mingw_64/mkspecs/modules/qt_lib_svg.pri: +D:/Qt/6.9.1/mingw_64/mkspecs/modules/qt_lib_svg_private.pri: +D:/Qt/6.9.1/mingw_64/mkspecs/modules/qt_lib_svgwidgets.pri: +D:/Qt/6.9.1/mingw_64/mkspecs/modules/qt_lib_svgwidgets_private.pri: +D:/Qt/6.9.1/mingw_64/mkspecs/modules/qt_lib_testinternals_private.pri: +D:/Qt/6.9.1/mingw_64/mkspecs/modules/qt_lib_testlib.pri: +D:/Qt/6.9.1/mingw_64/mkspecs/modules/qt_lib_testlib_private.pri: +D:/Qt/6.9.1/mingw_64/mkspecs/modules/qt_lib_tools_private.pri: +D:/Qt/6.9.1/mingw_64/mkspecs/modules/qt_lib_uiplugin.pri: +D:/Qt/6.9.1/mingw_64/mkspecs/modules/qt_lib_uitools.pri: +D:/Qt/6.9.1/mingw_64/mkspecs/modules/qt_lib_uitools_private.pri: +D:/Qt/6.9.1/mingw_64/mkspecs/modules/qt_lib_widgets.pri: +D:/Qt/6.9.1/mingw_64/mkspecs/modules/qt_lib_widgets_private.pri: +D:/Qt/6.9.1/mingw_64/mkspecs/modules/qt_lib_xml.pri: +D:/Qt/6.9.1/mingw_64/mkspecs/modules/qt_lib_xml_private.pri: +D:/Qt/6.9.1/mingw_64/mkspecs/modules/qt_lib_zlib_private.pri: +D:/Qt/6.9.1/mingw_64/mkspecs/features/qt_functions.prf: +D:/Qt/6.9.1/mingw_64/mkspecs/features/qt_config.prf: +D:/Qt/6.9.1/mingw_64/mkspecs/win32-g++/qmake.conf: +D:/Qt/6.9.1/mingw_64/mkspecs/features/spec_post.prf: +.qmake.stash: +D:/Qt/6.9.1/mingw_64/mkspecs/features/exclusive_builds.prf: +D:/Qt/6.9.1/mingw_64/mkspecs/features/toolchain.prf: +D:/Qt/6.9.1/mingw_64/mkspecs/features/default_pre.prf: +D:/Qt/6.9.1/mingw_64/mkspecs/features/win32/default_pre.prf: +D:/Qt/6.9.1/mingw_64/mkspecs/features/resolve_config.prf: +D:/Qt/6.9.1/mingw_64/mkspecs/features/exclusive_builds_post.prf: +D:/Qt/6.9.1/mingw_64/mkspecs/features/default_post.prf: +D:/Qt/6.9.1/mingw_64/mkspecs/features/qtquickcompiler.prf: +D:/Qt/6.9.1/mingw_64/mkspecs/features/precompile_header.prf: +D:/Qt/6.9.1/mingw_64/mkspecs/features/warn_on.prf: +D:/Qt/6.9.1/mingw_64/mkspecs/features/permissions.prf: +D:/Qt/6.9.1/mingw_64/mkspecs/features/qt.prf: +D:/Qt/6.9.1/mingw_64/mkspecs/features/resources_functions.prf: +D:/Qt/6.9.1/mingw_64/mkspecs/features/resources.prf: +D:/Qt/6.9.1/mingw_64/mkspecs/features/moc.prf: +D:/Qt/6.9.1/mingw_64/mkspecs/features/win32/opengl.prf: +D:/Qt/6.9.1/mingw_64/mkspecs/features/uic.prf: +D:/Qt/6.9.1/mingw_64/mkspecs/features/qmake_use.prf: +D:/Qt/6.9.1/mingw_64/mkspecs/features/file_copies.prf: +D:/Qt/6.9.1/mingw_64/mkspecs/features/win32/windows.prf: +D:/Qt/6.9.1/mingw_64/mkspecs/features/testcase_targets.prf: +D:/Qt/6.9.1/mingw_64/mkspecs/features/exceptions.prf: +D:/Qt/6.9.1/mingw_64/mkspecs/features/yacc.prf: +D:/Qt/6.9.1/mingw_64/mkspecs/features/lex.prf: +untitled2.pro: +D:/Qt/6.9.1/mingw_64/lib/Qt6Widgets.prl: +D:/Qt/6.9.1/mingw_64/lib/Qt6Gui.prl: +D:/Qt/6.9.1/mingw_64/lib/Qt6Network.prl: +D:/Qt/6.9.1/mingw_64/lib/Qt6Concurrent.prl: +D:/Qt/6.9.1/mingw_64/lib/Qt6Core.prl: +D:/Qt/6.9.1/mingw_64/lib/Qt6EntryPoint.prl: +D:/Qt/6.9.1/mingw_64/mkspecs/features/build_pass.prf: +resources.qrc: +qmake: FORCE + @$(QMAKE) -o Makefile untitled2.pro -spec win32-g++ "CONFIG+=qtquickcompiler" + +qmake_all: FORCE + +make_first: release-make_first debug-make_first FORCE +all: release-all debug-all FORCE +clean: release-clean debug-clean FORCE +distclean: release-distclean debug-distclean FORCE + -$(DEL_FILE) Makefile + -$(DEL_FILE) .qmake.stash + +release-mocclean: + $(MAKE) -f $(MAKEFILE).Release mocclean +debug-mocclean: + $(MAKE) -f $(MAKEFILE).Debug mocclean +mocclean: release-mocclean debug-mocclean + +release-mocables: + $(MAKE) -f $(MAKEFILE).Release mocables +debug-mocables: + $(MAKE) -f $(MAKEFILE).Debug mocables +mocables: release-mocables debug-mocables + +check: first + +benchmark: first +FORCE: + +.SUFFIXES: + +$(MAKEFILE).Release: Makefile +$(MAKEFILE).Debug: Makefile diff --git a/C++/2.3.1/Makefile.Debug b/C++/2.3.1/Makefile.Debug new file mode 100644 index 0000000..b2360a5 --- /dev/null +++ b/C++/2.3.1/Makefile.Debug @@ -0,0 +1,1173 @@ +############################################################################# +# Makefile for building: untitled2 +# Generated by qmake (3.1) (Qt 6.9.1) +# Project: untitled2.pro +# Template: app +############################################################################# + +MAKEFILE = Makefile.Debug + +EQ = = + +####### Compiler, tools and options + +CC = gcc +CXX = g++ +DEFINES = -DUNICODE -D_UNICODE -DWIN32 -DMINGW_HAS_SECURE_API=1 -DQT_WIDGETS_LIB -DQT_GUI_LIB -DQT_NETWORK_LIB -DQT_CONCURRENT_LIB -DQT_CORE_LIB -DQT_NEEDS_QMAIN +CFLAGS = -fno-keep-inline-dllexport -g -Wall -Wextra -Wextra $(DEFINES) +CXXFLAGS = -fno-keep-inline-dllexport -g -std=gnu++1z -Wall -Wextra -Wextra -fexceptions -mthreads $(DEFINES) +INCPATH = -I. -ID:/Qt/6.9.1/mingw_64/include -ID:/Qt/6.9.1/mingw_64/include/QtWidgets -ID:/Qt/6.9.1/mingw_64/include/QtGui -ID:/Qt/6.9.1/mingw_64/include/QtNetwork -ID:/Qt/6.9.1/mingw_64/include/QtConcurrent -ID:/Qt/6.9.1/mingw_64/include/QtCore -Idebug -I/include -ID:/Qt/6.9.1/mingw_64/mkspecs/win32-g++ +LINKER = g++ +LFLAGS = -Wl,-subsystem,windows -mthreads +LIBS = -ladvapi32 -luser32 -lshell32 -lkernel32 D:\Qt\6.9.1\mingw_64\lib\libQt6Widgets.a D:\Qt\6.9.1\mingw_64\lib\libQt6Gui.a D:\Qt\6.9.1\mingw_64\lib\libQt6Network.a D:\Qt\6.9.1\mingw_64\lib\libQt6Concurrent.a D:\Qt\6.9.1\mingw_64\lib\libQt6Core.a debug\launcher_res.o -lmingw32 D:\Qt\6.9.1\mingw_64\lib\libQt6EntryPoint.a -lshell32 +QMAKE = D:\Qt\6.9.1\mingw_64\bin\qmake.exe +DEL_FILE = del +CHK_DIR_EXISTS= if not exist +MKDIR = mkdir +COPY = copy /y +COPY_FILE = copy /y +COPY_DIR = xcopy /s /q /y /i +INSTALL_FILE = copy /y +INSTALL_PROGRAM = copy /y +INSTALL_DIR = xcopy /s /q /y /i +QINSTALL = D:\Qt\6.9.1\mingw_64\bin\qmake.exe -install qinstall +QINSTALL_PROGRAM = D:\Qt\6.9.1\mingw_64\bin\qmake.exe -install qinstall -exe +DEL_FILE = del +SYMLINK = $(QMAKE) -install ln -f -s +DEL_DIR = rmdir +MOVE = move +IDC = idc +IDL = midl +ZIP = zip -r -9 +DEF_FILE = +RES_FILE = debug\launcher_res.o +SED = $(QMAKE) -install sed +MOVE = move + +####### Output directory + +OBJECTS_DIR = debug + +####### Files + +SOURCES = main.cpp \ + mainwindow.cpp debug\qrc_resources.cpp \ + debug\moc_mainwindow.cpp +OBJECTS = debug/main.o \ + debug/mainwindow.o \ + debug/qrc_resources.o \ + debug/moc_mainwindow.o + +DIST = mainwindow.h main.cpp \ + mainwindow.cpp +QMAKE_TARGET = untitled2 +DESTDIR = debug\ #avoid trailing-slash linebreak +TARGET = untitled2.exe +DESTDIR_TARGET = debug\untitled2.exe + +####### Build rules + +first: all +all: Makefile.Debug debug/untitled2.exe + +debug/untitled2.exe: D:/Qt/6.9.1/mingw_64/lib/libQt6Widgets.a D:/Qt/6.9.1/mingw_64/lib/libQt6Gui.a D:/Qt/6.9.1/mingw_64/lib/libQt6Network.a D:/Qt/6.9.1/mingw_64/lib/libQt6Concurrent.a D:/Qt/6.9.1/mingw_64/lib/libQt6Core.a D:/Qt/6.9.1/mingw_64/lib/libQt6EntryPoint.a $(OBJECTS) debug/launcher_res.o + $(LINKER) $(LFLAGS) -o $(DESTDIR_TARGET) $(OBJECTS) $(LIBS) + +debug/launcher_res.o: launcher.rc + windres -i launcher.rc -o debug\launcher_res.o --include-dir=. $(DEFINES) + +qmake: FORCE + @$(QMAKE) -o Makefile.Debug untitled2.pro -spec win32-g++ "CONFIG+=qtquickcompiler" + +qmake_all: FORCE + +dist: + $(ZIP) untitled2.zip $(SOURCES) $(DIST) untitled2.pro D:\Qt\6.9.1\mingw_64\mkspecs\features\spec_pre.prf D:\Qt\6.9.1\mingw_64\mkspecs\features\device_config.prf D:\Qt\6.9.1\mingw_64\mkspecs\common\sanitize.conf D:\Qt\6.9.1\mingw_64\mkspecs\common\gcc-base.conf D:\Qt\6.9.1\mingw_64\mkspecs\common\g++-base.conf D:\Qt\6.9.1\mingw_64\mkspecs\features\win32\windows_vulkan_sdk.prf D:\Qt\6.9.1\mingw_64\mkspecs\common\windows-vulkan.conf D:\Qt\6.9.1\mingw_64\mkspecs\common\g++-win32.conf D:\Qt\6.9.1\mingw_64\mkspecs\common\windows-desktop.conf D:\Qt\6.9.1\mingw_64\mkspecs\qconfig.pri D:\Qt\6.9.1\mingw_64\mkspecs\modules\qt_ext_freetype.pri D:\Qt\6.9.1\mingw_64\mkspecs\modules\qt_ext_libjpeg.pri D:\Qt\6.9.1\mingw_64\mkspecs\modules\qt_ext_libpng.pri D:\Qt\6.9.1\mingw_64\mkspecs\modules\qt_ext_openxr_loader.pri D:\Qt\6.9.1\mingw_64\mkspecs\modules\qt_lib_charts.pri D:\Qt\6.9.1\mingw_64\mkspecs\modules\qt_lib_charts_private.pri D:\Qt\6.9.1\mingw_64\mkspecs\modules\qt_lib_chartsqml.pri D:\Qt\6.9.1\mingw_64\mkspecs\modules\qt_lib_chartsqml_private.pri D:\Qt\6.9.1\mingw_64\mkspecs\modules\qt_lib_concurrent.pri D:\Qt\6.9.1\mingw_64\mkspecs\modules\qt_lib_concurrent_private.pri D:\Qt\6.9.1\mingw_64\mkspecs\modules\qt_lib_core.pri D:\Qt\6.9.1\mingw_64\mkspecs\modules\qt_lib_core_private.pri D:\Qt\6.9.1\mingw_64\mkspecs\modules\qt_lib_dbus.pri D:\Qt\6.9.1\mingw_64\mkspecs\modules\qt_lib_dbus_private.pri D:\Qt\6.9.1\mingw_64\mkspecs\modules\qt_lib_designer.pri D:\Qt\6.9.1\mingw_64\mkspecs\modules\qt_lib_designer_private.pri D:\Qt\6.9.1\mingw_64\mkspecs\modules\qt_lib_designercomponents_private.pri D:\Qt\6.9.1\mingw_64\mkspecs\modules\qt_lib_devicediscovery_support_private.pri D:\Qt\6.9.1\mingw_64\mkspecs\modules\qt_lib_entrypoint_private.pri D:\Qt\6.9.1\mingw_64\mkspecs\modules\qt_lib_example_icons_private.pri D:\Qt\6.9.1\mingw_64\mkspecs\modules\qt_lib_examples_asset_downloader_private.pri D:\Qt\6.9.1\mingw_64\mkspecs\modules\qt_lib_fb_support_private.pri D:\Qt\6.9.1\mingw_64\mkspecs\modules\qt_lib_ffmpegmediapluginimpl_private.pri D:\Qt\6.9.1\mingw_64\mkspecs\modules\qt_lib_freetype_private.pri D:\Qt\6.9.1\mingw_64\mkspecs\modules\qt_lib_gui.pri D:\Qt\6.9.1\mingw_64\mkspecs\modules\qt_lib_gui_private.pri D:\Qt\6.9.1\mingw_64\mkspecs\modules\qt_lib_harfbuzz_private.pri D:\Qt\6.9.1\mingw_64\mkspecs\modules\qt_lib_help.pri D:\Qt\6.9.1\mingw_64\mkspecs\modules\qt_lib_help_private.pri D:\Qt\6.9.1\mingw_64\mkspecs\modules\qt_lib_jpeg_private.pri D:\Qt\6.9.1\mingw_64\mkspecs\modules\qt_lib_labsanimation.pri D:\Qt\6.9.1\mingw_64\mkspecs\modules\qt_lib_labsanimation_private.pri D:\Qt\6.9.1\mingw_64\mkspecs\modules\qt_lib_labsfolderlistmodel.pri D:\Qt\6.9.1\mingw_64\mkspecs\modules\qt_lib_labsfolderlistmodel_private.pri D:\Qt\6.9.1\mingw_64\mkspecs\modules\qt_lib_labsplatform.pri D:\Qt\6.9.1\mingw_64\mkspecs\modules\qt_lib_labsplatform_private.pri D:\Qt\6.9.1\mingw_64\mkspecs\modules\qt_lib_labsqmlmodels.pri D:\Qt\6.9.1\mingw_64\mkspecs\modules\qt_lib_labsqmlmodels_private.pri D:\Qt\6.9.1\mingw_64\mkspecs\modules\qt_lib_labssettings.pri D:\Qt\6.9.1\mingw_64\mkspecs\modules\qt_lib_labssettings_private.pri D:\Qt\6.9.1\mingw_64\mkspecs\modules\qt_lib_labssharedimage.pri D:\Qt\6.9.1\mingw_64\mkspecs\modules\qt_lib_labssharedimage_private.pri D:\Qt\6.9.1\mingw_64\mkspecs\modules\qt_lib_labswavefrontmesh.pri D:\Qt\6.9.1\mingw_64\mkspecs\modules\qt_lib_labswavefrontmesh_private.pri D:\Qt\6.9.1\mingw_64\mkspecs\modules\qt_lib_linguist.pri D:\Qt\6.9.1\mingw_64\mkspecs\modules\qt_lib_multimedia.pri D:\Qt\6.9.1\mingw_64\mkspecs\modules\qt_lib_multimedia_private.pri D:\Qt\6.9.1\mingw_64\mkspecs\modules\qt_lib_multimediaquick_private.pri D:\Qt\6.9.1\mingw_64\mkspecs\modules\qt_lib_multimediatestlibprivate_private.pri D:\Qt\6.9.1\mingw_64\mkspecs\modules\qt_lib_multimediawidgets.pri D:\Qt\6.9.1\mingw_64\mkspecs\modules\qt_lib_multimediawidgets_private.pri D:\Qt\6.9.1\mingw_64\mkspecs\modules\qt_lib_network.pri D:\Qt\6.9.1\mingw_64\mkspecs\modules\qt_lib_network_private.pri D:\Qt\6.9.1\mingw_64\mkspecs\modules\qt_lib_opengl.pri D:\Qt\6.9.1\mingw_64\mkspecs\modules\qt_lib_opengl_private.pri D:\Qt\6.9.1\mingw_64\mkspecs\modules\qt_lib_openglwidgets.pri D:\Qt\6.9.1\mingw_64\mkspecs\modules\qt_lib_openglwidgets_private.pri D:\Qt\6.9.1\mingw_64\mkspecs\modules\qt_lib_packetprotocol_private.pri D:\Qt\6.9.1\mingw_64\mkspecs\modules\qt_lib_png_private.pri D:\Qt\6.9.1\mingw_64\mkspecs\modules\qt_lib_printsupport.pri D:\Qt\6.9.1\mingw_64\mkspecs\modules\qt_lib_printsupport_private.pri D:\Qt\6.9.1\mingw_64\mkspecs\modules\qt_lib_qdoccatch_private.pri D:\Qt\6.9.1\mingw_64\mkspecs\modules\qt_lib_qdoccatchconversions_private.pri D:\Qt\6.9.1\mingw_64\mkspecs\modules\qt_lib_qdoccatchgenerators_private.pri D:\Qt\6.9.1\mingw_64\mkspecs\modules\qt_lib_qml.pri D:\Qt\6.9.1\mingw_64\mkspecs\modules\qt_lib_qml_private.pri D:\Qt\6.9.1\mingw_64\mkspecs\modules\qt_lib_qmlassetdownloader.pri D:\Qt\6.9.1\mingw_64\mkspecs\modules\qt_lib_qmlassetdownloader_private.pri D:\Qt\6.9.1\mingw_64\mkspecs\modules\qt_lib_qmlcompiler.pri D:\Qt\6.9.1\mingw_64\mkspecs\modules\qt_lib_qmlcompiler_private.pri D:\Qt\6.9.1\mingw_64\mkspecs\modules\qt_lib_qmlcore.pri D:\Qt\6.9.1\mingw_64\mkspecs\modules\qt_lib_qmlcore_private.pri D:\Qt\6.9.1\mingw_64\mkspecs\modules\qt_lib_qmldebug_private.pri D:\Qt\6.9.1\mingw_64\mkspecs\modules\qt_lib_qmldom_private.pri D:\Qt\6.9.1\mingw_64\mkspecs\modules\qt_lib_qmlformat_private.pri D:\Qt\6.9.1\mingw_64\mkspecs\modules\qt_lib_qmlintegration.pri D:\Qt\6.9.1\mingw_64\mkspecs\modules\qt_lib_qmlintegration_private.pri D:\Qt\6.9.1\mingw_64\mkspecs\modules\qt_lib_qmllocalstorage.pri D:\Qt\6.9.1\mingw_64\mkspecs\modules\qt_lib_qmllocalstorage_private.pri D:\Qt\6.9.1\mingw_64\mkspecs\modules\qt_lib_qmlls_private.pri D:\Qt\6.9.1\mingw_64\mkspecs\modules\qt_lib_qmlmeta.pri D:\Qt\6.9.1\mingw_64\mkspecs\modules\qt_lib_qmlmeta_private.pri D:\Qt\6.9.1\mingw_64\mkspecs\modules\qt_lib_qmlmodels.pri D:\Qt\6.9.1\mingw_64\mkspecs\modules\qt_lib_qmlmodels_private.pri D:\Qt\6.9.1\mingw_64\mkspecs\modules\qt_lib_qmlnetwork.pri D:\Qt\6.9.1\mingw_64\mkspecs\modules\qt_lib_qmlnetwork_private.pri D:\Qt\6.9.1\mingw_64\mkspecs\modules\qt_lib_qmltest.pri D:\Qt\6.9.1\mingw_64\mkspecs\modules\qt_lib_qmltest_private.pri D:\Qt\6.9.1\mingw_64\mkspecs\modules\qt_lib_qmltoolingsettings_private.pri D:\Qt\6.9.1\mingw_64\mkspecs\modules\qt_lib_qmltyperegistrar_private.pri D:\Qt\6.9.1\mingw_64\mkspecs\modules\qt_lib_qmlworkerscript.pri D:\Qt\6.9.1\mingw_64\mkspecs\modules\qt_lib_qmlworkerscript_private.pri D:\Qt\6.9.1\mingw_64\mkspecs\modules\qt_lib_qmlxmllistmodel.pri D:\Qt\6.9.1\mingw_64\mkspecs\modules\qt_lib_qmlxmllistmodel_private.pri D:\Qt\6.9.1\mingw_64\mkspecs\modules\qt_lib_quick.pri D:\Qt\6.9.1\mingw_64\mkspecs\modules\qt_lib_quick3d.pri D:\Qt\6.9.1\mingw_64\mkspecs\modules\qt_lib_quick3d_private.pri D:\Qt\6.9.1\mingw_64\mkspecs\modules\qt_lib_quick3dassetimport.pri D:\Qt\6.9.1\mingw_64\mkspecs\modules\qt_lib_quick3dassetimport_private.pri D:\Qt\6.9.1\mingw_64\mkspecs\modules\qt_lib_quick3dassetutils.pri D:\Qt\6.9.1\mingw_64\mkspecs\modules\qt_lib_quick3dassetutils_private.pri D:\Qt\6.9.1\mingw_64\mkspecs\modules\qt_lib_quick3deffects.pri D:\Qt\6.9.1\mingw_64\mkspecs\modules\qt_lib_quick3deffects_private.pri D:\Qt\6.9.1\mingw_64\mkspecs\modules\qt_lib_quick3dglslparser_private.pri D:\Qt\6.9.1\mingw_64\mkspecs\modules\qt_lib_quick3dhelpers.pri D:\Qt\6.9.1\mingw_64\mkspecs\modules\qt_lib_quick3dhelpers_private.pri D:\Qt\6.9.1\mingw_64\mkspecs\modules\qt_lib_quick3dhelpersimpl.pri D:\Qt\6.9.1\mingw_64\mkspecs\modules\qt_lib_quick3dhelpersimpl_private.pri D:\Qt\6.9.1\mingw_64\mkspecs\modules\qt_lib_quick3diblbaker.pri D:\Qt\6.9.1\mingw_64\mkspecs\modules\qt_lib_quick3diblbaker_private.pri D:\Qt\6.9.1\mingw_64\mkspecs\modules\qt_lib_quick3dparticleeffects.pri D:\Qt\6.9.1\mingw_64\mkspecs\modules\qt_lib_quick3dparticleeffects_private.pri D:\Qt\6.9.1\mingw_64\mkspecs\modules\qt_lib_quick3dparticles.pri D:\Qt\6.9.1\mingw_64\mkspecs\modules\qt_lib_quick3dparticles_private.pri D:\Qt\6.9.1\mingw_64\mkspecs\modules\qt_lib_quick3druntimerender.pri D:\Qt\6.9.1\mingw_64\mkspecs\modules\qt_lib_quick3druntimerender_private.pri D:\Qt\6.9.1\mingw_64\mkspecs\modules\qt_lib_quick3dspatialaudio_private.pri D:\Qt\6.9.1\mingw_64\mkspecs\modules\qt_lib_quick3dutils.pri D:\Qt\6.9.1\mingw_64\mkspecs\modules\qt_lib_quick3dutils_private.pri D:\Qt\6.9.1\mingw_64\mkspecs\modules\qt_lib_quick3dxr.pri D:\Qt\6.9.1\mingw_64\mkspecs\modules\qt_lib_quick3dxr_private.pri D:\Qt\6.9.1\mingw_64\mkspecs\modules\qt_lib_quick_private.pri D:\Qt\6.9.1\mingw_64\mkspecs\modules\qt_lib_quickcontrols2.pri D:\Qt\6.9.1\mingw_64\mkspecs\modules\qt_lib_quickcontrols2_private.pri D:\Qt\6.9.1\mingw_64\mkspecs\modules\qt_lib_quickcontrols2basic.pri D:\Qt\6.9.1\mingw_64\mkspecs\modules\qt_lib_quickcontrols2basic_private.pri D:\Qt\6.9.1\mingw_64\mkspecs\modules\qt_lib_quickcontrols2basicstyleimpl.pri D:\Qt\6.9.1\mingw_64\mkspecs\modules\qt_lib_quickcontrols2basicstyleimpl_private.pri D:\Qt\6.9.1\mingw_64\mkspecs\modules\qt_lib_quickcontrols2fluentwinui3styleimpl.pri D:\Qt\6.9.1\mingw_64\mkspecs\modules\qt_lib_quickcontrols2fluentwinui3styleimpl_private.pri D:\Qt\6.9.1\mingw_64\mkspecs\modules\qt_lib_quickcontrols2fusion.pri D:\Qt\6.9.1\mingw_64\mkspecs\modules\qt_lib_quickcontrols2fusion_private.pri D:\Qt\6.9.1\mingw_64\mkspecs\modules\qt_lib_quickcontrols2fusionstyleimpl.pri D:\Qt\6.9.1\mingw_64\mkspecs\modules\qt_lib_quickcontrols2fusionstyleimpl_private.pri D:\Qt\6.9.1\mingw_64\mkspecs\modules\qt_lib_quickcontrols2imagine.pri D:\Qt\6.9.1\mingw_64\mkspecs\modules\qt_lib_quickcontrols2imagine_private.pri D:\Qt\6.9.1\mingw_64\mkspecs\modules\qt_lib_quickcontrols2imaginestyleimpl.pri D:\Qt\6.9.1\mingw_64\mkspecs\modules\qt_lib_quickcontrols2imaginestyleimpl_private.pri D:\Qt\6.9.1\mingw_64\mkspecs\modules\qt_lib_quickcontrols2impl.pri D:\Qt\6.9.1\mingw_64\mkspecs\modules\qt_lib_quickcontrols2impl_private.pri D:\Qt\6.9.1\mingw_64\mkspecs\modules\qt_lib_quickcontrols2material.pri D:\Qt\6.9.1\mingw_64\mkspecs\modules\qt_lib_quickcontrols2material_private.pri D:\Qt\6.9.1\mingw_64\mkspecs\modules\qt_lib_quickcontrols2materialstyleimpl.pri D:\Qt\6.9.1\mingw_64\mkspecs\modules\qt_lib_quickcontrols2materialstyleimpl_private.pri D:\Qt\6.9.1\mingw_64\mkspecs\modules\qt_lib_quickcontrols2universal.pri D:\Qt\6.9.1\mingw_64\mkspecs\modules\qt_lib_quickcontrols2universal_private.pri D:\Qt\6.9.1\mingw_64\mkspecs\modules\qt_lib_quickcontrols2universalstyleimpl.pri D:\Qt\6.9.1\mingw_64\mkspecs\modules\qt_lib_quickcontrols2universalstyleimpl_private.pri D:\Qt\6.9.1\mingw_64\mkspecs\modules\qt_lib_quickcontrols2windowsstyleimpl.pri D:\Qt\6.9.1\mingw_64\mkspecs\modules\qt_lib_quickcontrols2windowsstyleimpl_private.pri D:\Qt\6.9.1\mingw_64\mkspecs\modules\qt_lib_quickcontrolstestutilsprivate_private.pri D:\Qt\6.9.1\mingw_64\mkspecs\modules\qt_lib_quickdialogs2.pri D:\Qt\6.9.1\mingw_64\mkspecs\modules\qt_lib_quickdialogs2_private.pri D:\Qt\6.9.1\mingw_64\mkspecs\modules\qt_lib_quickdialogs2quickimpl.pri D:\Qt\6.9.1\mingw_64\mkspecs\modules\qt_lib_quickdialogs2quickimpl_private.pri D:\Qt\6.9.1\mingw_64\mkspecs\modules\qt_lib_quickdialogs2utils.pri D:\Qt\6.9.1\mingw_64\mkspecs\modules\qt_lib_quickdialogs2utils_private.pri D:\Qt\6.9.1\mingw_64\mkspecs\modules\qt_lib_quickeffects.pri D:\Qt\6.9.1\mingw_64\mkspecs\modules\qt_lib_quickeffects_private.pri D:\Qt\6.9.1\mingw_64\mkspecs\modules\qt_lib_quicklayouts.pri D:\Qt\6.9.1\mingw_64\mkspecs\modules\qt_lib_quicklayouts_private.pri D:\Qt\6.9.1\mingw_64\mkspecs\modules\qt_lib_quickparticles_private.pri D:\Qt\6.9.1\mingw_64\mkspecs\modules\qt_lib_quickshapes_private.pri D:\Qt\6.9.1\mingw_64\mkspecs\modules\qt_lib_quicktemplates2.pri D:\Qt\6.9.1\mingw_64\mkspecs\modules\qt_lib_quicktemplates2_private.pri D:\Qt\6.9.1\mingw_64\mkspecs\modules\qt_lib_quicktestutilsprivate_private.pri D:\Qt\6.9.1\mingw_64\mkspecs\modules\qt_lib_quicktimeline.pri D:\Qt\6.9.1\mingw_64\mkspecs\modules\qt_lib_quicktimeline_private.pri D:\Qt\6.9.1\mingw_64\mkspecs\modules\qt_lib_quicktimelineblendtrees.pri D:\Qt\6.9.1\mingw_64\mkspecs\modules\qt_lib_quicktimelineblendtrees_private.pri D:\Qt\6.9.1\mingw_64\mkspecs\modules\qt_lib_quickvectorimage.pri D:\Qt\6.9.1\mingw_64\mkspecs\modules\qt_lib_quickvectorimage_private.pri D:\Qt\6.9.1\mingw_64\mkspecs\modules\qt_lib_quickvectorimagegenerator_private.pri D:\Qt\6.9.1\mingw_64\mkspecs\modules\qt_lib_quickwidgets.pri D:\Qt\6.9.1\mingw_64\mkspecs\modules\qt_lib_quickwidgets_private.pri D:\Qt\6.9.1\mingw_64\mkspecs\modules\qt_lib_shadertools.pri D:\Qt\6.9.1\mingw_64\mkspecs\modules\qt_lib_shadertools_private.pri D:\Qt\6.9.1\mingw_64\mkspecs\modules\qt_lib_spatialaudio.pri D:\Qt\6.9.1\mingw_64\mkspecs\modules\qt_lib_spatialaudio_private.pri D:\Qt\6.9.1\mingw_64\mkspecs\modules\qt_lib_sql.pri D:\Qt\6.9.1\mingw_64\mkspecs\modules\qt_lib_sql_private.pri D:\Qt\6.9.1\mingw_64\mkspecs\modules\qt_lib_svg.pri D:\Qt\6.9.1\mingw_64\mkspecs\modules\qt_lib_svg_private.pri D:\Qt\6.9.1\mingw_64\mkspecs\modules\qt_lib_svgwidgets.pri D:\Qt\6.9.1\mingw_64\mkspecs\modules\qt_lib_svgwidgets_private.pri D:\Qt\6.9.1\mingw_64\mkspecs\modules\qt_lib_testinternals_private.pri D:\Qt\6.9.1\mingw_64\mkspecs\modules\qt_lib_testlib.pri D:\Qt\6.9.1\mingw_64\mkspecs\modules\qt_lib_testlib_private.pri D:\Qt\6.9.1\mingw_64\mkspecs\modules\qt_lib_tools_private.pri D:\Qt\6.9.1\mingw_64\mkspecs\modules\qt_lib_uiplugin.pri D:\Qt\6.9.1\mingw_64\mkspecs\modules\qt_lib_uitools.pri D:\Qt\6.9.1\mingw_64\mkspecs\modules\qt_lib_uitools_private.pri D:\Qt\6.9.1\mingw_64\mkspecs\modules\qt_lib_widgets.pri D:\Qt\6.9.1\mingw_64\mkspecs\modules\qt_lib_widgets_private.pri D:\Qt\6.9.1\mingw_64\mkspecs\modules\qt_lib_xml.pri D:\Qt\6.9.1\mingw_64\mkspecs\modules\qt_lib_xml_private.pri D:\Qt\6.9.1\mingw_64\mkspecs\modules\qt_lib_zlib_private.pri D:\Qt\6.9.1\mingw_64\mkspecs\features\qt_functions.prf D:\Qt\6.9.1\mingw_64\mkspecs\features\qt_config.prf D:\Qt\6.9.1\mingw_64\mkspecs\win32-g++\qmake.conf D:\Qt\6.9.1\mingw_64\mkspecs\features\spec_post.prf .qmake.stash D:\Qt\6.9.1\mingw_64\mkspecs\features\exclusive_builds.prf D:\Qt\6.9.1\mingw_64\mkspecs\features\toolchain.prf D:\Qt\6.9.1\mingw_64\mkspecs\features\default_pre.prf D:\Qt\6.9.1\mingw_64\mkspecs\features\win32\default_pre.prf D:\Qt\6.9.1\mingw_64\mkspecs\features\resolve_config.prf D:\Qt\6.9.1\mingw_64\mkspecs\features\exclusive_builds_post.prf D:\Qt\6.9.1\mingw_64\mkspecs\features\default_post.prf D:\Qt\6.9.1\mingw_64\mkspecs\features\build_pass.prf D:\Qt\6.9.1\mingw_64\mkspecs\features\qtquickcompiler.prf D:\Qt\6.9.1\mingw_64\mkspecs\features\precompile_header.prf D:\Qt\6.9.1\mingw_64\mkspecs\features\warn_on.prf D:\Qt\6.9.1\mingw_64\mkspecs\features\permissions.prf D:\Qt\6.9.1\mingw_64\mkspecs\features\qt.prf D:\Qt\6.9.1\mingw_64\mkspecs\features\resources_functions.prf D:\Qt\6.9.1\mingw_64\mkspecs\features\resources.prf D:\Qt\6.9.1\mingw_64\mkspecs\features\moc.prf D:\Qt\6.9.1\mingw_64\mkspecs\features\win32\opengl.prf D:\Qt\6.9.1\mingw_64\mkspecs\features\uic.prf D:\Qt\6.9.1\mingw_64\mkspecs\features\qmake_use.prf D:\Qt\6.9.1\mingw_64\mkspecs\features\file_copies.prf D:\Qt\6.9.1\mingw_64\mkspecs\features\win32\windows.prf D:\Qt\6.9.1\mingw_64\mkspecs\features\testcase_targets.prf D:\Qt\6.9.1\mingw_64\mkspecs\features\exceptions.prf D:\Qt\6.9.1\mingw_64\mkspecs\features\yacc.prf D:\Qt\6.9.1\mingw_64\mkspecs\features\lex.prf untitled2.pro resources.qrc D:\Qt\6.9.1\mingw_64\lib\Qt6Widgets.prl D:\Qt\6.9.1\mingw_64\lib\Qt6Gui.prl D:\Qt\6.9.1\mingw_64\lib\Qt6Network.prl D:\Qt\6.9.1\mingw_64\lib\Qt6Concurrent.prl D:\Qt\6.9.1\mingw_64\lib\Qt6Core.prl D:\Qt\6.9.1\mingw_64\lib\Qt6EntryPoint.prl resources.qrc D:\Qt\6.9.1\mingw_64\mkspecs\features\data\dummy.cpp mainwindow.h main.cpp mainwindow.cpp + +clean: compiler_clean + -$(DEL_FILE) debug\main.o debug\mainwindow.o debug\qrc_resources.o debug\moc_mainwindow.o + -$(DEL_FILE) debug\launcher_res.o + +distclean: clean + -$(DEL_FILE) .qmake.stash + -$(DEL_FILE) $(DESTDIR_TARGET) + -$(DEL_FILE) Makefile.Debug + +mocclean: compiler_moc_header_clean compiler_moc_objc_header_clean compiler_moc_source_clean + +mocables: compiler_moc_header_make_all compiler_moc_objc_header_make_all compiler_moc_source_make_all + +check: first + +benchmark: first + +compiler_no_pch_compiler_make_all: +compiler_no_pch_compiler_clean: +compiler_rcc_make_all: debug/qrc_resources.cpp +compiler_rcc_clean: + -$(DEL_FILE) debug\qrc_resources.cpp +debug/qrc_resources.cpp: resources.qrc \ + D:/Qt/6.9.1/mingw_64/bin/rcc.exe \ + styles.qss \ + untitled2_zh_CN.ts + D:\Qt\6.9.1\mingw_64\bin\rcc.exe -name resources --no-zstd resources.qrc -o debug\qrc_resources.cpp + +compiler_moc_predefs_make_all: debug/moc_predefs.h +compiler_moc_predefs_clean: + -$(DEL_FILE) debug\moc_predefs.h +debug/moc_predefs.h: D:/Qt/6.9.1/mingw_64/mkspecs/features/data/dummy.cpp + g++ -fno-keep-inline-dllexport -g -std=gnu++1z -Wall -Wextra -Wextra -dM -E -o debug\moc_predefs.h D:\Qt\6.9.1\mingw_64\mkspecs\features\data\dummy.cpp + +compiler_moc_header_make_all: debug/moc_mainwindow.cpp +compiler_moc_header_clean: + -$(DEL_FILE) debug\moc_mainwindow.cpp +debug/moc_mainwindow.cpp: mainwindow.h \ + D:/Qt/6.9.1/mingw_64/include/QtWidgets/QMainWindow \ + D:/Qt/6.9.1/mingw_64/include/QtWidgets/qmainwindow.h \ + D:/Qt/6.9.1/mingw_64/include/QtWidgets/qtwidgetsglobal.h \ + D:/Qt/6.9.1/mingw_64/include/QtGui/qtguiglobal.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qglobal.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qtcoreglobal.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qtversionchecks.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qtconfiginclude.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qconfig.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qtcore-config.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qtconfigmacros.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qtdeprecationdefinitions.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qcompilerdetection.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qprocessordetection.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qsystemdetection.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qtcoreexports.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qtdeprecationmarkers.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qtclasshelpermacros.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qtpreprocessorsupport.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qassert.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qtnoop.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qtypes.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qtversion.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qtypeinfo.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qcontainerfwd.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qsysinfo.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qlogging.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qflags.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qcompare_impl.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qatomic.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qbasicatomic.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qatomic_cxx11.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qgenericatomic.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qyieldcpu.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qconstructormacros.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qdarwinhelpers.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qexceptionhandling.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qforeach.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qttypetraits.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qfunctionpointer.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qglobalstatic.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qmalloc.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qminmax.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qnumeric.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qoverload.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qswap.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qtenvironmentvariables.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qtresource.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qttranslation.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qversiontagging.h \ + D:/Qt/6.9.1/mingw_64/include/QtGui/qtgui-config.h \ + D:/Qt/6.9.1/mingw_64/include/QtGui/qtguiexports.h \ + D:/Qt/6.9.1/mingw_64/include/QtWidgets/qtwidgets-config.h \ + D:/Qt/6.9.1/mingw_64/include/QtWidgets/qtwidgetsexports.h \ + D:/Qt/6.9.1/mingw_64/include/QtWidgets/qwidget.h \ + D:/Qt/6.9.1/mingw_64/include/QtGui/qwindowdefs.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qobjectdefs.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qnamespace.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qcompare.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qstdlibdetection.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qcomparehelpers.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/q20type_traits.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qtmetamacros.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qobjectdefs_impl.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qfunctionaltools_impl.h \ + D:/Qt/6.9.1/mingw_64/include/QtGui/qwindowdefs_win.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qobject.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qstring.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qchar.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qstringview.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qbytearray.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qrefcount.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qarraydata.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qpair.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qarraydatapointer.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qarraydataops.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qcontainertools_impl.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qxptype_traits.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/q20functional.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/q20memory.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/q17memory.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qbytearrayalgorithms.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qbytearrayview.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qstringfwd.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qstringliteral.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qstringalgorithms.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qlatin1stringview.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qanystringview.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qutf8stringview.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qstringtokenizer.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qstringbuilder.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qstringconverter.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qstringconverter_base.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qlist.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qhashfunctions.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qiterator.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qbytearraylist.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qstringlist.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qalgorithms.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qstringmatcher.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qcoreevent.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qbasictimer.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qabstracteventdispatcher.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qeventloop.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qdeadlinetimer.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qelapsedtimer.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qmetatype.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qdatastream.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qscopedpointer.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qiodevicebase.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qfloat16.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qmath.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qtformat_impl.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qiterable.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qmetacontainer.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qcontainerinfo.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qtaggedpointer.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qscopeguard.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qobject_impl.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qbindingstorage.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qmargins.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/q23utility.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/q20utility.h \ + D:/Qt/6.9.1/mingw_64/include/QtGui/qaction.h \ + D:/Qt/6.9.1/mingw_64/include/QtGui/qkeysequence.h \ + D:/Qt/6.9.1/mingw_64/include/QtGui/qicon.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qsize.h \ + D:/Qt/6.9.1/mingw_64/include/QtGui/qpixmap.h \ + D:/Qt/6.9.1/mingw_64/include/QtGui/qpaintdevice.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qrect.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qpoint.h \ + D:/Qt/6.9.1/mingw_64/include/QtGui/qcolor.h \ + D:/Qt/6.9.1/mingw_64/include/QtGui/qrgb.h \ + D:/Qt/6.9.1/mingw_64/include/QtGui/qrgba64.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qshareddata.h \ + D:/Qt/6.9.1/mingw_64/include/QtGui/qimage.h \ + D:/Qt/6.9.1/mingw_64/include/QtGui/qpixelformat.h \ + D:/Qt/6.9.1/mingw_64/include/QtGui/qtransform.h \ + D:/Qt/6.9.1/mingw_64/include/QtGui/qpolygon.h \ + D:/Qt/6.9.1/mingw_64/include/QtGui/qregion.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qspan.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/q20iterator.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qline.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qvariant.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qdebug.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qtextstream.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qcontiguouscache.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qsharedpointer.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qsharedpointer_impl.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qmap.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qshareddata_impl.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qset.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qhash.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qvarlengtharray.h \ + D:/Qt/6.9.1/mingw_64/include/QtGui/qpalette.h \ + D:/Qt/6.9.1/mingw_64/include/QtGui/qbrush.h \ + D:/Qt/6.9.1/mingw_64/include/QtGui/qfont.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qendian.h \ + D:/Qt/6.9.1/mingw_64/include/QtGui/qfontmetrics.h \ + D:/Qt/6.9.1/mingw_64/include/QtGui/qfontinfo.h \ + D:/Qt/6.9.1/mingw_64/include/QtGui/qfontvariableaxis.h \ + D:/Qt/6.9.1/mingw_64/include/QtWidgets/qsizepolicy.h \ + D:/Qt/6.9.1/mingw_64/include/QtGui/qcursor.h \ + D:/Qt/6.9.1/mingw_64/include/QtGui/qbitmap.h \ + D:/Qt/6.9.1/mingw_64/include/QtGui/qevent.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qiodevice.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qurl.h \ + D:/Qt/6.9.1/mingw_64/include/QtGui/qeventpoint.h \ + D:/Qt/6.9.1/mingw_64/include/QtGui/qvector2d.h \ + D:/Qt/6.9.1/mingw_64/include/QtGui/qvectornd.h \ + D:/Qt/6.9.1/mingw_64/include/QtGui/qpointingdevice.h \ + D:/Qt/6.9.1/mingw_64/include/QtGui/qinputdevice.h \ + D:/Qt/6.9.1/mingw_64/include/QtGui/qscreen.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/QList \ + D:/Qt/6.9.1/mingw_64/include/QtCore/QObject \ + D:/Qt/6.9.1/mingw_64/include/QtCore/QRect \ + D:/Qt/6.9.1/mingw_64/include/QtCore/QSize \ + D:/Qt/6.9.1/mingw_64/include/QtCore/QSizeF \ + D:/Qt/6.9.1/mingw_64/include/QtGui/QTransform \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qnativeinterface.h \ + D:/Qt/6.9.1/mingw_64/include/QtGui/qscreen_platform.h \ + D:/Qt/6.9.1/mingw_64/include/QtGui/qguiapplication.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qcoreapplication.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qcoreapplication_platform.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qfuture.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qfutureinterface.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qmutex.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qtsan_impl.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qresultstore.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qfuture_impl.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qthreadpool.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qthread.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qrunnable.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qexception.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qpromise.h \ + D:/Qt/6.9.1/mingw_64/include/QtGui/qinputmethod.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qlocale.h \ + D:/Qt/6.9.1/mingw_64/include/QtGui/qguiapplication_platform.h \ + D:/Qt/6.9.1/mingw_64/include/QtWidgets/qtabwidget.h \ + D:/Qt/6.9.1/mingw_64/include/QtNetwork/QNetworkAccessManager \ + D:/Qt/6.9.1/mingw_64/include/QtNetwork/qnetworkaccessmanager.h \ + D:/Qt/6.9.1/mingw_64/include/QtNetwork/qtnetworkglobal.h \ + D:/Qt/6.9.1/mingw_64/include/QtNetwork/qtnetwork-config.h \ + D:/Qt/6.9.1/mingw_64/include/QtNetwork/qtnetworkexports.h \ + D:/Qt/6.9.1/mingw_64/include/QtNetwork/qnetworkrequest.h \ + D:/Qt/6.9.1/mingw_64/include/QtNetwork/qhttpheaders.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/QSharedDataPointer \ + D:/Qt/6.9.1/mingw_64/include/QtCore/QString \ + D:/Qt/6.9.1/mingw_64/include/QtCore/QUrl \ + D:/Qt/6.9.1/mingw_64/include/QtCore/QVariant \ + D:/Qt/6.9.1/mingw_64/include/QtCore/q26numeric.h \ + D:/Qt/6.9.1/mingw_64/include/QtNetwork/QSslConfiguration \ + D:/Qt/6.9.1/mingw_64/include/QtNetwork/qsslconfiguration.h \ + D:/Qt/6.9.1/mingw_64/include/QtNetwork/qsslsocket.h \ + D:/Qt/6.9.1/mingw_64/include/QtNetwork/qtcpsocket.h \ + D:/Qt/6.9.1/mingw_64/include/QtNetwork/qabstractsocket.h \ + D:/Qt/6.9.1/mingw_64/include/QtNetwork/qhostaddress.h \ + D:/Qt/6.9.1/mingw_64/include/QtNetwork/qsslerror.h \ + D:/Qt/6.9.1/mingw_64/include/QtNetwork/qsslcertificate.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qcryptographichash.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qdatetime.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qcalendar.h \ + D:/Qt/6.9.1/mingw_64/include/QtNetwork/qssl.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/QFlags \ + D:/Qt/6.9.1/mingw_64/include/QtNetwork/QSslPreSharedKeyAuthenticator \ + D:/Qt/6.9.1/mingw_64/include/QtNetwork/qsslpresharedkeyauthenticator.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/QMetaType \ + D:/Qt/6.9.1/mingw_64/include/QtCore/QJsonObject \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qjsonobject.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qjsonvalue.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qcborvalue.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qcborcommon.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qregularexpression.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/quuid.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qjsondocument.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qjsonparseerror.h \ + D:/Qt/6.9.1/mingw_64/include/QtWidgets/QLabel \ + D:/Qt/6.9.1/mingw_64/include/QtWidgets/qlabel.h \ + D:/Qt/6.9.1/mingw_64/include/QtWidgets/qframe.h \ + D:/Qt/6.9.1/mingw_64/include/QtGui/qpicture.h \ + D:/Qt/6.9.1/mingw_64/include/QtGui/qtextdocument.h \ + D:/Qt/6.9.1/mingw_64/include/QtWidgets/QPushButton \ + D:/Qt/6.9.1/mingw_64/include/QtWidgets/qpushbutton.h \ + D:/Qt/6.9.1/mingw_64/include/QtWidgets/qabstractbutton.h \ + D:/Qt/6.9.1/mingw_64/include/QtWidgets/QProgressBar \ + D:/Qt/6.9.1/mingw_64/include/QtWidgets/qprogressbar.h \ + D:/Qt/6.9.1/mingw_64/include/QtWidgets/QTextEdit \ + D:/Qt/6.9.1/mingw_64/include/QtWidgets/qtextedit.h \ + D:/Qt/6.9.1/mingw_64/include/QtWidgets/qabstractscrollarea.h \ + D:/Qt/6.9.1/mingw_64/include/QtGui/qtextoption.h \ + D:/Qt/6.9.1/mingw_64/include/QtGui/qtextcursor.h \ + D:/Qt/6.9.1/mingw_64/include/QtGui/qtextformat.h \ + D:/Qt/6.9.1/mingw_64/include/QtGui/qpen.h \ + D:/Qt/6.9.1/mingw_64/include/QtWidgets/QGroupBox \ + D:/Qt/6.9.1/mingw_64/include/QtWidgets/qgroupbox.h \ + D:/Qt/6.9.1/mingw_64/include/QtWidgets/QFileDialog \ + D:/Qt/6.9.1/mingw_64/include/QtWidgets/qfiledialog.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qdir.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qdirlisting.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qfiledevice.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qfile.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qfileinfo.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qtimezone.h \ + D:/Qt/6.9.1/mingw_64/include/QtWidgets/qdialog.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/QSettings \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qsettings.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/QDir \ + D:/Qt/6.9.1/mingw_64/include/QtWidgets/QLineEdit \ + D:/Qt/6.9.1/mingw_64/include/QtWidgets/qlineedit.h \ + D:/Qt/6.9.1/mingw_64/include/QtWidgets/QDialog \ + D:/Qt/6.9.1/mingw_64/include/QtWidgets/QCheckBox \ + D:/Qt/6.9.1/mingw_64/include/QtWidgets/qcheckbox.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/QTimer \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qtimer.h \ + D:/Qt/6.9.1/mingw_64/include/QtWidgets/QMessageBox \ + D:/Qt/6.9.1/mingw_64/include/QtWidgets/qmessagebox.h \ + D:/Qt/6.9.1/mingw_64/include/QtWidgets/qdialogbuttonbox.h \ + D:/Qt/6.9.1/mingw_64/include/QtWidgets/QApplication \ + D:/Qt/6.9.1/mingw_64/include/QtWidgets/qapplication.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/QProcess \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qprocess.h \ + debug/moc_predefs.h \ + D:/Qt/6.9.1/mingw_64/bin/moc.exe + D:\Qt\6.9.1\mingw_64\bin\moc.exe $(DEFINES) --include E:/C++/untitled2/debug/moc_predefs.h -ID:/Qt/6.9.1/mingw_64/mkspecs/win32-g++ -IE:/C++/untitled2 -ID:/Qt/6.9.1/mingw_64/include -ID:/Qt/6.9.1/mingw_64/include/QtWidgets -ID:/Qt/6.9.1/mingw_64/include/QtGui -ID:/Qt/6.9.1/mingw_64/include/QtNetwork -ID:/Qt/6.9.1/mingw_64/include/QtConcurrent -ID:/Qt/6.9.1/mingw_64/include/QtCore -ID:/Qt/Tools/mingw1310_64/lib/gcc/x86_64-w64-mingw32/13.1.0/include/c++ -ID:/Qt/Tools/mingw1310_64/lib/gcc/x86_64-w64-mingw32/13.1.0/include/c++/x86_64-w64-mingw32 -ID:/Qt/Tools/mingw1310_64/lib/gcc/x86_64-w64-mingw32/13.1.0/include/c++/backward -ID:/Qt/Tools/mingw1310_64/lib/gcc/x86_64-w64-mingw32/13.1.0/include -ID:/Qt/Tools/mingw1310_64/lib/gcc/x86_64-w64-mingw32/13.1.0/include-fixed -ID:/Qt/Tools/mingw1310_64/x86_64-w64-mingw32/include mainwindow.h -o debug\moc_mainwindow.cpp + +compiler_moc_objc_header_make_all: +compiler_moc_objc_header_clean: +compiler_moc_source_make_all: +compiler_moc_source_clean: +compiler_uic_make_all: +compiler_uic_clean: +compiler_yacc_decl_make_all: +compiler_yacc_decl_clean: +compiler_yacc_impl_make_all: +compiler_yacc_impl_clean: +compiler_lex_make_all: +compiler_lex_clean: +compiler_clean: compiler_rcc_clean compiler_moc_predefs_clean compiler_moc_header_clean + + + +####### Compile + +debug/main.o: main.cpp mainwindow.h \ + D:/Qt/6.9.1/mingw_64/include/QtWidgets/QMainWindow \ + D:/Qt/6.9.1/mingw_64/include/QtWidgets/qmainwindow.h \ + D:/Qt/6.9.1/mingw_64/include/QtWidgets/qtwidgetsglobal.h \ + D:/Qt/6.9.1/mingw_64/include/QtGui/qtguiglobal.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qglobal.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qtcoreglobal.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qtversionchecks.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qtconfiginclude.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qconfig.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qtcore-config.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qtconfigmacros.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qtdeprecationdefinitions.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qcompilerdetection.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qprocessordetection.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qsystemdetection.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qtcoreexports.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qtdeprecationmarkers.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qtclasshelpermacros.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qtpreprocessorsupport.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qassert.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qtnoop.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qtypes.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qtversion.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qtypeinfo.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qcontainerfwd.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qsysinfo.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qlogging.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qflags.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qcompare_impl.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qatomic.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qbasicatomic.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qatomic_cxx11.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qgenericatomic.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qyieldcpu.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qconstructormacros.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qdarwinhelpers.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qexceptionhandling.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qforeach.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qttypetraits.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qfunctionpointer.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qglobalstatic.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qmalloc.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qminmax.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qnumeric.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qoverload.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qswap.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qtenvironmentvariables.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qtresource.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qttranslation.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qversiontagging.h \ + D:/Qt/6.9.1/mingw_64/include/QtGui/qtgui-config.h \ + D:/Qt/6.9.1/mingw_64/include/QtGui/qtguiexports.h \ + D:/Qt/6.9.1/mingw_64/include/QtWidgets/qtwidgets-config.h \ + D:/Qt/6.9.1/mingw_64/include/QtWidgets/qtwidgetsexports.h \ + D:/Qt/6.9.1/mingw_64/include/QtWidgets/qwidget.h \ + D:/Qt/6.9.1/mingw_64/include/QtGui/qwindowdefs.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qobjectdefs.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qnamespace.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qcompare.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qstdlibdetection.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qcomparehelpers.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/q20type_traits.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qtmetamacros.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qobjectdefs_impl.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qfunctionaltools_impl.h \ + D:/Qt/6.9.1/mingw_64/include/QtGui/qwindowdefs_win.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qobject.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qstring.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qchar.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qstringview.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qbytearray.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qrefcount.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qarraydata.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qpair.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qarraydatapointer.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qarraydataops.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qcontainertools_impl.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qxptype_traits.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/q20functional.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/q20memory.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/q17memory.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qbytearrayalgorithms.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qbytearrayview.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qstringfwd.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qstringliteral.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qstringalgorithms.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qlatin1stringview.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qanystringview.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qutf8stringview.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qstringtokenizer.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qstringbuilder.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qstringconverter.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qstringconverter_base.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qlist.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qhashfunctions.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qiterator.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qbytearraylist.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qstringlist.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qalgorithms.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qstringmatcher.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qcoreevent.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qbasictimer.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qabstracteventdispatcher.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qeventloop.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qdeadlinetimer.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qelapsedtimer.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qmetatype.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qdatastream.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qscopedpointer.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qiodevicebase.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qfloat16.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qmath.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qtformat_impl.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qiterable.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qmetacontainer.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qcontainerinfo.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qtaggedpointer.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qscopeguard.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qobject_impl.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qbindingstorage.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qmargins.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/q23utility.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/q20utility.h \ + D:/Qt/6.9.1/mingw_64/include/QtGui/qaction.h \ + D:/Qt/6.9.1/mingw_64/include/QtGui/qkeysequence.h \ + D:/Qt/6.9.1/mingw_64/include/QtGui/qicon.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qsize.h \ + D:/Qt/6.9.1/mingw_64/include/QtGui/qpixmap.h \ + D:/Qt/6.9.1/mingw_64/include/QtGui/qpaintdevice.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qrect.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qpoint.h \ + D:/Qt/6.9.1/mingw_64/include/QtGui/qcolor.h \ + D:/Qt/6.9.1/mingw_64/include/QtGui/qrgb.h \ + D:/Qt/6.9.1/mingw_64/include/QtGui/qrgba64.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qshareddata.h \ + D:/Qt/6.9.1/mingw_64/include/QtGui/qimage.h \ + D:/Qt/6.9.1/mingw_64/include/QtGui/qpixelformat.h \ + D:/Qt/6.9.1/mingw_64/include/QtGui/qtransform.h \ + D:/Qt/6.9.1/mingw_64/include/QtGui/qpolygon.h \ + D:/Qt/6.9.1/mingw_64/include/QtGui/qregion.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qspan.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/q20iterator.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qline.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qvariant.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qdebug.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qtextstream.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qcontiguouscache.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qsharedpointer.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qsharedpointer_impl.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qmap.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qshareddata_impl.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qset.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qhash.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qvarlengtharray.h \ + D:/Qt/6.9.1/mingw_64/include/QtGui/qpalette.h \ + D:/Qt/6.9.1/mingw_64/include/QtGui/qbrush.h \ + D:/Qt/6.9.1/mingw_64/include/QtGui/qfont.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qendian.h \ + D:/Qt/6.9.1/mingw_64/include/QtGui/qfontmetrics.h \ + D:/Qt/6.9.1/mingw_64/include/QtGui/qfontinfo.h \ + D:/Qt/6.9.1/mingw_64/include/QtGui/qfontvariableaxis.h \ + D:/Qt/6.9.1/mingw_64/include/QtWidgets/qsizepolicy.h \ + D:/Qt/6.9.1/mingw_64/include/QtGui/qcursor.h \ + D:/Qt/6.9.1/mingw_64/include/QtGui/qbitmap.h \ + D:/Qt/6.9.1/mingw_64/include/QtGui/qevent.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qiodevice.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qurl.h \ + D:/Qt/6.9.1/mingw_64/include/QtGui/qeventpoint.h \ + D:/Qt/6.9.1/mingw_64/include/QtGui/qvector2d.h \ + D:/Qt/6.9.1/mingw_64/include/QtGui/qvectornd.h \ + D:/Qt/6.9.1/mingw_64/include/QtGui/qpointingdevice.h \ + D:/Qt/6.9.1/mingw_64/include/QtGui/qinputdevice.h \ + D:/Qt/6.9.1/mingw_64/include/QtGui/qscreen.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/QList \ + D:/Qt/6.9.1/mingw_64/include/QtCore/QObject \ + D:/Qt/6.9.1/mingw_64/include/QtCore/QRect \ + D:/Qt/6.9.1/mingw_64/include/QtCore/QSize \ + D:/Qt/6.9.1/mingw_64/include/QtCore/QSizeF \ + D:/Qt/6.9.1/mingw_64/include/QtGui/QTransform \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qnativeinterface.h \ + D:/Qt/6.9.1/mingw_64/include/QtGui/qscreen_platform.h \ + D:/Qt/6.9.1/mingw_64/include/QtGui/qguiapplication.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qcoreapplication.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qcoreapplication_platform.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qfuture.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qfutureinterface.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qmutex.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qtsan_impl.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qresultstore.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qfuture_impl.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qthreadpool.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qthread.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qrunnable.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qexception.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qpromise.h \ + D:/Qt/6.9.1/mingw_64/include/QtGui/qinputmethod.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qlocale.h \ + D:/Qt/6.9.1/mingw_64/include/QtGui/qguiapplication_platform.h \ + D:/Qt/6.9.1/mingw_64/include/QtWidgets/qtabwidget.h \ + D:/Qt/6.9.1/mingw_64/include/QtNetwork/QNetworkAccessManager \ + D:/Qt/6.9.1/mingw_64/include/QtNetwork/qnetworkaccessmanager.h \ + D:/Qt/6.9.1/mingw_64/include/QtNetwork/qtnetworkglobal.h \ + D:/Qt/6.9.1/mingw_64/include/QtNetwork/qtnetwork-config.h \ + D:/Qt/6.9.1/mingw_64/include/QtNetwork/qtnetworkexports.h \ + D:/Qt/6.9.1/mingw_64/include/QtNetwork/qnetworkrequest.h \ + D:/Qt/6.9.1/mingw_64/include/QtNetwork/qhttpheaders.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/QSharedDataPointer \ + D:/Qt/6.9.1/mingw_64/include/QtCore/QString \ + D:/Qt/6.9.1/mingw_64/include/QtCore/QUrl \ + D:/Qt/6.9.1/mingw_64/include/QtCore/QVariant \ + D:/Qt/6.9.1/mingw_64/include/QtCore/q26numeric.h \ + D:/Qt/6.9.1/mingw_64/include/QtNetwork/QSslConfiguration \ + D:/Qt/6.9.1/mingw_64/include/QtNetwork/qsslconfiguration.h \ + D:/Qt/6.9.1/mingw_64/include/QtNetwork/qsslsocket.h \ + D:/Qt/6.9.1/mingw_64/include/QtNetwork/qtcpsocket.h \ + D:/Qt/6.9.1/mingw_64/include/QtNetwork/qabstractsocket.h \ + D:/Qt/6.9.1/mingw_64/include/QtNetwork/qhostaddress.h \ + D:/Qt/6.9.1/mingw_64/include/QtNetwork/qsslerror.h \ + D:/Qt/6.9.1/mingw_64/include/QtNetwork/qsslcertificate.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qcryptographichash.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qdatetime.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qcalendar.h \ + D:/Qt/6.9.1/mingw_64/include/QtNetwork/qssl.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/QFlags \ + D:/Qt/6.9.1/mingw_64/include/QtNetwork/QSslPreSharedKeyAuthenticator \ + D:/Qt/6.9.1/mingw_64/include/QtNetwork/qsslpresharedkeyauthenticator.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/QMetaType \ + D:/Qt/6.9.1/mingw_64/include/QtCore/QJsonObject \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qjsonobject.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qjsonvalue.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qcborvalue.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qcborcommon.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qregularexpression.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/quuid.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qjsondocument.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qjsonparseerror.h \ + D:/Qt/6.9.1/mingw_64/include/QtWidgets/QLabel \ + D:/Qt/6.9.1/mingw_64/include/QtWidgets/qlabel.h \ + D:/Qt/6.9.1/mingw_64/include/QtWidgets/qframe.h \ + D:/Qt/6.9.1/mingw_64/include/QtGui/qpicture.h \ + D:/Qt/6.9.1/mingw_64/include/QtGui/qtextdocument.h \ + D:/Qt/6.9.1/mingw_64/include/QtWidgets/QPushButton \ + D:/Qt/6.9.1/mingw_64/include/QtWidgets/qpushbutton.h \ + D:/Qt/6.9.1/mingw_64/include/QtWidgets/qabstractbutton.h \ + D:/Qt/6.9.1/mingw_64/include/QtWidgets/QProgressBar \ + D:/Qt/6.9.1/mingw_64/include/QtWidgets/qprogressbar.h \ + D:/Qt/6.9.1/mingw_64/include/QtWidgets/QTextEdit \ + D:/Qt/6.9.1/mingw_64/include/QtWidgets/qtextedit.h \ + D:/Qt/6.9.1/mingw_64/include/QtWidgets/qabstractscrollarea.h \ + D:/Qt/6.9.1/mingw_64/include/QtGui/qtextoption.h \ + D:/Qt/6.9.1/mingw_64/include/QtGui/qtextcursor.h \ + D:/Qt/6.9.1/mingw_64/include/QtGui/qtextformat.h \ + D:/Qt/6.9.1/mingw_64/include/QtGui/qpen.h \ + D:/Qt/6.9.1/mingw_64/include/QtWidgets/QGroupBox \ + D:/Qt/6.9.1/mingw_64/include/QtWidgets/qgroupbox.h \ + D:/Qt/6.9.1/mingw_64/include/QtWidgets/QFileDialog \ + D:/Qt/6.9.1/mingw_64/include/QtWidgets/qfiledialog.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qdir.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qdirlisting.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qfiledevice.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qfile.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qfileinfo.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qtimezone.h \ + D:/Qt/6.9.1/mingw_64/include/QtWidgets/qdialog.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/QSettings \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qsettings.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/QDir \ + D:/Qt/6.9.1/mingw_64/include/QtWidgets/QLineEdit \ + D:/Qt/6.9.1/mingw_64/include/QtWidgets/qlineedit.h \ + D:/Qt/6.9.1/mingw_64/include/QtWidgets/QDialog \ + D:/Qt/6.9.1/mingw_64/include/QtWidgets/QCheckBox \ + D:/Qt/6.9.1/mingw_64/include/QtWidgets/qcheckbox.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/QTimer \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qtimer.h \ + D:/Qt/6.9.1/mingw_64/include/QtWidgets/QMessageBox \ + D:/Qt/6.9.1/mingw_64/include/QtWidgets/qmessagebox.h \ + D:/Qt/6.9.1/mingw_64/include/QtWidgets/qdialogbuttonbox.h \ + D:/Qt/6.9.1/mingw_64/include/QtWidgets/QApplication \ + D:/Qt/6.9.1/mingw_64/include/QtWidgets/qapplication.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/QProcess \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qprocess.h \ + D:/Qt/6.9.1/mingw_64/include/QtWidgets/QStyleFactory \ + D:/Qt/6.9.1/mingw_64/include/QtWidgets/qstylefactory.h \ + D:/Qt/6.9.1/mingw_64/include/QtGui/QPalette + $(CXX) -c $(CXXFLAGS) $(INCPATH) -o debug\main.o main.cpp + +debug/mainwindow.o: mainwindow.cpp mainwindow.h \ + D:/Qt/6.9.1/mingw_64/include/QtWidgets/QMainWindow \ + D:/Qt/6.9.1/mingw_64/include/QtWidgets/qmainwindow.h \ + D:/Qt/6.9.1/mingw_64/include/QtWidgets/qtwidgetsglobal.h \ + D:/Qt/6.9.1/mingw_64/include/QtGui/qtguiglobal.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qglobal.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qtcoreglobal.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qtversionchecks.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qtconfiginclude.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qconfig.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qtcore-config.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qtconfigmacros.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qtdeprecationdefinitions.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qcompilerdetection.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qprocessordetection.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qsystemdetection.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qtcoreexports.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qtdeprecationmarkers.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qtclasshelpermacros.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qtpreprocessorsupport.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qassert.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qtnoop.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qtypes.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qtversion.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qtypeinfo.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qcontainerfwd.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qsysinfo.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qlogging.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qflags.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qcompare_impl.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qatomic.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qbasicatomic.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qatomic_cxx11.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qgenericatomic.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qyieldcpu.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qconstructormacros.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qdarwinhelpers.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qexceptionhandling.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qforeach.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qttypetraits.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qfunctionpointer.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qglobalstatic.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qmalloc.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qminmax.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qnumeric.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qoverload.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qswap.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qtenvironmentvariables.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qtresource.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qttranslation.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qversiontagging.h \ + D:/Qt/6.9.1/mingw_64/include/QtGui/qtgui-config.h \ + D:/Qt/6.9.1/mingw_64/include/QtGui/qtguiexports.h \ + D:/Qt/6.9.1/mingw_64/include/QtWidgets/qtwidgets-config.h \ + D:/Qt/6.9.1/mingw_64/include/QtWidgets/qtwidgetsexports.h \ + D:/Qt/6.9.1/mingw_64/include/QtWidgets/qwidget.h \ + D:/Qt/6.9.1/mingw_64/include/QtGui/qwindowdefs.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qobjectdefs.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qnamespace.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qcompare.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qstdlibdetection.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qcomparehelpers.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/q20type_traits.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qtmetamacros.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qobjectdefs_impl.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qfunctionaltools_impl.h \ + D:/Qt/6.9.1/mingw_64/include/QtGui/qwindowdefs_win.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qobject.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qstring.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qchar.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qstringview.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qbytearray.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qrefcount.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qarraydata.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qpair.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qarraydatapointer.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qarraydataops.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qcontainertools_impl.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qxptype_traits.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/q20functional.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/q20memory.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/q17memory.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qbytearrayalgorithms.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qbytearrayview.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qstringfwd.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qstringliteral.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qstringalgorithms.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qlatin1stringview.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qanystringview.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qutf8stringview.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qstringtokenizer.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qstringbuilder.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qstringconverter.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qstringconverter_base.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qlist.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qhashfunctions.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qiterator.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qbytearraylist.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qstringlist.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qalgorithms.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qstringmatcher.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qcoreevent.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qbasictimer.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qabstracteventdispatcher.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qeventloop.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qdeadlinetimer.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qelapsedtimer.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qmetatype.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qdatastream.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qscopedpointer.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qiodevicebase.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qfloat16.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qmath.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qtformat_impl.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qiterable.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qmetacontainer.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qcontainerinfo.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qtaggedpointer.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qscopeguard.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qobject_impl.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qbindingstorage.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qmargins.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/q23utility.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/q20utility.h \ + D:/Qt/6.9.1/mingw_64/include/QtGui/qaction.h \ + D:/Qt/6.9.1/mingw_64/include/QtGui/qkeysequence.h \ + D:/Qt/6.9.1/mingw_64/include/QtGui/qicon.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qsize.h \ + D:/Qt/6.9.1/mingw_64/include/QtGui/qpixmap.h \ + D:/Qt/6.9.1/mingw_64/include/QtGui/qpaintdevice.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qrect.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qpoint.h \ + D:/Qt/6.9.1/mingw_64/include/QtGui/qcolor.h \ + D:/Qt/6.9.1/mingw_64/include/QtGui/qrgb.h \ + D:/Qt/6.9.1/mingw_64/include/QtGui/qrgba64.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qshareddata.h \ + D:/Qt/6.9.1/mingw_64/include/QtGui/qimage.h \ + D:/Qt/6.9.1/mingw_64/include/QtGui/qpixelformat.h \ + D:/Qt/6.9.1/mingw_64/include/QtGui/qtransform.h \ + D:/Qt/6.9.1/mingw_64/include/QtGui/qpolygon.h \ + D:/Qt/6.9.1/mingw_64/include/QtGui/qregion.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qspan.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/q20iterator.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qline.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qvariant.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qdebug.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qtextstream.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qcontiguouscache.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qsharedpointer.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qsharedpointer_impl.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qmap.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qshareddata_impl.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qset.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qhash.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qvarlengtharray.h \ + D:/Qt/6.9.1/mingw_64/include/QtGui/qpalette.h \ + D:/Qt/6.9.1/mingw_64/include/QtGui/qbrush.h \ + D:/Qt/6.9.1/mingw_64/include/QtGui/qfont.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qendian.h \ + D:/Qt/6.9.1/mingw_64/include/QtGui/qfontmetrics.h \ + D:/Qt/6.9.1/mingw_64/include/QtGui/qfontinfo.h \ + D:/Qt/6.9.1/mingw_64/include/QtGui/qfontvariableaxis.h \ + D:/Qt/6.9.1/mingw_64/include/QtWidgets/qsizepolicy.h \ + D:/Qt/6.9.1/mingw_64/include/QtGui/qcursor.h \ + D:/Qt/6.9.1/mingw_64/include/QtGui/qbitmap.h \ + D:/Qt/6.9.1/mingw_64/include/QtGui/qevent.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qiodevice.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qurl.h \ + D:/Qt/6.9.1/mingw_64/include/QtGui/qeventpoint.h \ + D:/Qt/6.9.1/mingw_64/include/QtGui/qvector2d.h \ + D:/Qt/6.9.1/mingw_64/include/QtGui/qvectornd.h \ + D:/Qt/6.9.1/mingw_64/include/QtGui/qpointingdevice.h \ + D:/Qt/6.9.1/mingw_64/include/QtGui/qinputdevice.h \ + D:/Qt/6.9.1/mingw_64/include/QtGui/qscreen.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/QList \ + D:/Qt/6.9.1/mingw_64/include/QtCore/QObject \ + D:/Qt/6.9.1/mingw_64/include/QtCore/QRect \ + D:/Qt/6.9.1/mingw_64/include/QtCore/QSize \ + D:/Qt/6.9.1/mingw_64/include/QtCore/QSizeF \ + D:/Qt/6.9.1/mingw_64/include/QtGui/QTransform \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qnativeinterface.h \ + D:/Qt/6.9.1/mingw_64/include/QtGui/qscreen_platform.h \ + D:/Qt/6.9.1/mingw_64/include/QtGui/qguiapplication.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qcoreapplication.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qcoreapplication_platform.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qfuture.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qfutureinterface.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qmutex.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qtsan_impl.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qresultstore.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qfuture_impl.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qthreadpool.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qthread.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qrunnable.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qexception.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qpromise.h \ + D:/Qt/6.9.1/mingw_64/include/QtGui/qinputmethod.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qlocale.h \ + D:/Qt/6.9.1/mingw_64/include/QtGui/qguiapplication_platform.h \ + D:/Qt/6.9.1/mingw_64/include/QtWidgets/qtabwidget.h \ + D:/Qt/6.9.1/mingw_64/include/QtNetwork/QNetworkAccessManager \ + D:/Qt/6.9.1/mingw_64/include/QtNetwork/qnetworkaccessmanager.h \ + D:/Qt/6.9.1/mingw_64/include/QtNetwork/qtnetworkglobal.h \ + D:/Qt/6.9.1/mingw_64/include/QtNetwork/qtnetwork-config.h \ + D:/Qt/6.9.1/mingw_64/include/QtNetwork/qtnetworkexports.h \ + D:/Qt/6.9.1/mingw_64/include/QtNetwork/qnetworkrequest.h \ + D:/Qt/6.9.1/mingw_64/include/QtNetwork/qhttpheaders.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/QSharedDataPointer \ + D:/Qt/6.9.1/mingw_64/include/QtCore/QString \ + D:/Qt/6.9.1/mingw_64/include/QtCore/QUrl \ + D:/Qt/6.9.1/mingw_64/include/QtCore/QVariant \ + D:/Qt/6.9.1/mingw_64/include/QtCore/q26numeric.h \ + D:/Qt/6.9.1/mingw_64/include/QtNetwork/QSslConfiguration \ + D:/Qt/6.9.1/mingw_64/include/QtNetwork/qsslconfiguration.h \ + D:/Qt/6.9.1/mingw_64/include/QtNetwork/qsslsocket.h \ + D:/Qt/6.9.1/mingw_64/include/QtNetwork/qtcpsocket.h \ + D:/Qt/6.9.1/mingw_64/include/QtNetwork/qabstractsocket.h \ + D:/Qt/6.9.1/mingw_64/include/QtNetwork/qhostaddress.h \ + D:/Qt/6.9.1/mingw_64/include/QtNetwork/qsslerror.h \ + D:/Qt/6.9.1/mingw_64/include/QtNetwork/qsslcertificate.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qcryptographichash.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qdatetime.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qcalendar.h \ + D:/Qt/6.9.1/mingw_64/include/QtNetwork/qssl.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/QFlags \ + D:/Qt/6.9.1/mingw_64/include/QtNetwork/QSslPreSharedKeyAuthenticator \ + D:/Qt/6.9.1/mingw_64/include/QtNetwork/qsslpresharedkeyauthenticator.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/QMetaType \ + D:/Qt/6.9.1/mingw_64/include/QtCore/QJsonObject \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qjsonobject.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qjsonvalue.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qcborvalue.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qcborcommon.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qregularexpression.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/quuid.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qjsondocument.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qjsonparseerror.h \ + D:/Qt/6.9.1/mingw_64/include/QtWidgets/QLabel \ + D:/Qt/6.9.1/mingw_64/include/QtWidgets/qlabel.h \ + D:/Qt/6.9.1/mingw_64/include/QtWidgets/qframe.h \ + D:/Qt/6.9.1/mingw_64/include/QtGui/qpicture.h \ + D:/Qt/6.9.1/mingw_64/include/QtGui/qtextdocument.h \ + D:/Qt/6.9.1/mingw_64/include/QtWidgets/QPushButton \ + D:/Qt/6.9.1/mingw_64/include/QtWidgets/qpushbutton.h \ + D:/Qt/6.9.1/mingw_64/include/QtWidgets/qabstractbutton.h \ + D:/Qt/6.9.1/mingw_64/include/QtWidgets/QProgressBar \ + D:/Qt/6.9.1/mingw_64/include/QtWidgets/qprogressbar.h \ + D:/Qt/6.9.1/mingw_64/include/QtWidgets/QTextEdit \ + D:/Qt/6.9.1/mingw_64/include/QtWidgets/qtextedit.h \ + D:/Qt/6.9.1/mingw_64/include/QtWidgets/qabstractscrollarea.h \ + D:/Qt/6.9.1/mingw_64/include/QtGui/qtextoption.h \ + D:/Qt/6.9.1/mingw_64/include/QtGui/qtextcursor.h \ + D:/Qt/6.9.1/mingw_64/include/QtGui/qtextformat.h \ + D:/Qt/6.9.1/mingw_64/include/QtGui/qpen.h \ + D:/Qt/6.9.1/mingw_64/include/QtWidgets/QGroupBox \ + D:/Qt/6.9.1/mingw_64/include/QtWidgets/qgroupbox.h \ + D:/Qt/6.9.1/mingw_64/include/QtWidgets/QFileDialog \ + D:/Qt/6.9.1/mingw_64/include/QtWidgets/qfiledialog.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qdir.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qdirlisting.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qfiledevice.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qfile.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qfileinfo.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qtimezone.h \ + D:/Qt/6.9.1/mingw_64/include/QtWidgets/qdialog.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/QSettings \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qsettings.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/QDir \ + D:/Qt/6.9.1/mingw_64/include/QtWidgets/QLineEdit \ + D:/Qt/6.9.1/mingw_64/include/QtWidgets/qlineedit.h \ + D:/Qt/6.9.1/mingw_64/include/QtWidgets/QDialog \ + D:/Qt/6.9.1/mingw_64/include/QtWidgets/QCheckBox \ + D:/Qt/6.9.1/mingw_64/include/QtWidgets/qcheckbox.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/QTimer \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qtimer.h \ + D:/Qt/6.9.1/mingw_64/include/QtWidgets/QMessageBox \ + D:/Qt/6.9.1/mingw_64/include/QtWidgets/qmessagebox.h \ + D:/Qt/6.9.1/mingw_64/include/QtWidgets/qdialogbuttonbox.h \ + D:/Qt/6.9.1/mingw_64/include/QtWidgets/QApplication \ + D:/Qt/6.9.1/mingw_64/include/QtWidgets/qapplication.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/QProcess \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qprocess.h \ + D:/Qt/6.9.1/mingw_64/include/QtWidgets/QVBoxLayout \ + D:/Qt/6.9.1/mingw_64/include/QtWidgets/qboxlayout.h \ + D:/Qt/6.9.1/mingw_64/include/QtWidgets/qlayout.h \ + D:/Qt/6.9.1/mingw_64/include/QtWidgets/qlayoutitem.h \ + D:/Qt/6.9.1/mingw_64/include/QtWidgets/qgridlayout.h \ + D:/Qt/6.9.1/mingw_64/include/QtWidgets/QHBoxLayout \ + D:/Qt/6.9.1/mingw_64/include/QtNetwork/QNetworkReply \ + D:/Qt/6.9.1/mingw_64/include/QtNetwork/qnetworkreply.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/QIODevice \ + D:/Qt/6.9.1/mingw_64/include/QtNetwork/QNetworkRequest \ + D:/Qt/6.9.1/mingw_64/include/QtCore/QJsonDocument \ + D:/Qt/6.9.1/mingw_64/include/QtCore/QJsonArray \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qjsonarray.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/QFile \ + D:/Qt/6.9.1/mingw_64/include/QtGui/QDesktopServices \ + D:/Qt/6.9.1/mingw_64/include/QtGui/qdesktopservices.h \ + D:/Qt/6.9.1/mingw_64/include/QtWidgets/QSystemTrayIcon \ + D:/Qt/6.9.1/mingw_64/include/QtWidgets/qsystemtrayicon.h \ + D:/Qt/6.9.1/mingw_64/include/QtWidgets/QMenu \ + D:/Qt/6.9.1/mingw_64/include/QtWidgets/qmenu.h \ + D:/Qt/6.9.1/mingw_64/include/QtGui/QCloseEvent \ + D:/Qt/6.9.1/mingw_64/include/QtCore/QThread \ + D:/Qt/6.9.1/mingw_64/include/QtNetwork/QSslSocket \ + D:/Qt/6.9.1/mingw_64/include/QtCore/QUuid \ + D:/Qt/6.9.1/mingw_64/include/QtCore/QCryptographicHash \ + D:/Qt/6.9.1/mingw_64/include/QtCore/QDateTime \ + D:/Qt/6.9.1/mingw_64/include/QtCore/QFuture \ + D:/Qt/6.9.1/mingw_64/include/QtConcurrent/QtConcurrent \ + D:/Qt/6.9.1/mingw_64/include/QtConcurrent/QtConcurrentDepends \ + D:/Qt/6.9.1/mingw_64/include/QtCore/QtCore \ + D:/Qt/6.9.1/mingw_64/include/QtCore/QtCoreDepends \ + D:/Qt/6.9.1/mingw_64/include/QtCore/q20algorithm.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/q20chrono.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/q20map.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/q20vector.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/q23functional.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qabstractanimation.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qabstractitemmodel.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qabstractnativeeventfilter.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qabstractproxymodel.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qanimationgroup.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qapplicationstatic.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/QMutex \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qassociativeiterable.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qatomicscopedvaluerollback.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qbitarray.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qbuffer.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qbytearraymatcher.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qcache.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qcborarray.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qcbormap.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qcborstream.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qcborstreamreader.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qcborstreamwriter.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qchronotimer.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qproperty.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qpropertyprivate.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qcollator.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qcommandlineoption.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qcommandlineparser.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qconcatenatetablesproxymodel.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qdiriterator.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qeasingcurve.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qfactoryinterface.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qfileselector.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/QStringList \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qfilesystemwatcher.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qfuturesynchronizer.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qfuturewatcher.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qidentityproxymodel.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qitemselectionmodel.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qlatin1stringmatcher.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qlibrary.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qlibraryinfo.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qversionnumber.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qtyperevision.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qlockfile.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qloggingcategory.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qmessageauthenticationcode.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qmetaobject.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qmimedata.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qmimedatabase.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qmimetype.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qobjectcleanuphandler.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qoperatingsystemversion.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qparallelanimationgroup.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qpauseanimation.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qpermissions.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qplugin.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qpointer.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qpluginloader.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qpropertyanimation.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qvariantanimation.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qqueue.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qrandom.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qreadwritelock.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qresource.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qsavefile.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qscopedvaluerollback.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qsemaphore.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qsequentialanimationgroup.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qsequentialiterable.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qsharedmemory.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qtipccommon.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qsignalmapper.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qsimd.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qsocketnotifier.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qsortfilterproxymodel.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qstack.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qstandardpaths.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qstaticlatin1stringmatcher.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qstorageinfo.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qstringlistmodel.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qsystemsemaphore.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qtcoreversion.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qtemporarydir.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qtemporaryfile.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qtextboundaryfinder.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qthreadstorage.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qtimeline.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qtmocconstants.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qtranslator.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qtransposeproxymodel.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qtsymbolmacros.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qurlquery.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qvarianthash.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/QHash \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qvariantlist.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qvariantmap.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/QMap \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qvector.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qwaitcondition.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/QDeadlineTimer \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qwineventnotifier.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qxmlstream.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qxpfunctional.h \ + D:/Qt/6.9.1/mingw_64/include/QtConcurrent/qtaskbuilder.h \ + D:/Qt/6.9.1/mingw_64/include/QtConcurrent/qtconcurrentstoredfunctioncall.h \ + D:/Qt/6.9.1/mingw_64/include/QtConcurrent/qtconcurrent_global.h \ + D:/Qt/6.9.1/mingw_64/include/QtConcurrent/qtconcurrentexports.h \ + D:/Qt/6.9.1/mingw_64/include/QtConcurrent/qtconcurrentrunbase.h \ + D:/Qt/6.9.1/mingw_64/include/QtConcurrent/qtconcurrentcompilertest.h \ + D:/Qt/6.9.1/mingw_64/include/QtConcurrent/qtconcurrentfilter.h \ + D:/Qt/6.9.1/mingw_64/include/QtConcurrent/qtconcurrentfilterkernel.h \ + D:/Qt/6.9.1/mingw_64/include/QtConcurrent/qtconcurrentiteratekernel.h \ + D:/Qt/6.9.1/mingw_64/include/QtConcurrent/qtconcurrentmedian.h \ + D:/Qt/6.9.1/mingw_64/include/QtConcurrent/qtconcurrentthreadengine.h \ + D:/Qt/6.9.1/mingw_64/include/QtConcurrent/qtconcurrentmapkernel.h \ + D:/Qt/6.9.1/mingw_64/include/QtConcurrent/qtconcurrentreducekernel.h \ + D:/Qt/6.9.1/mingw_64/include/QtConcurrent/qtconcurrentfunctionwrappers.h \ + D:/Qt/6.9.1/mingw_64/include/QtConcurrent/qtconcurrentmap.h \ + D:/Qt/6.9.1/mingw_64/include/QtConcurrent/qtconcurrentrun.h \ + D:/Qt/6.9.1/mingw_64/include/QtConcurrent/qtconcurrenttask.h \ + D:/Qt/6.9.1/mingw_64/include/QtConcurrent/qtconcurrentversion.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/QDebug \ + D:/Qt/6.9.1/mingw_64/include/QtGui/QGuiApplication \ + D:/Qt/6.9.1/mingw_64/include/QtGui/QScreen \ + D:/Qt/6.9.1/mingw_64/include/QtCore/QUrlQuery \ + D:/Qt/6.9.1/mingw_64/include/QtCore/QRegularExpression + $(CXX) -c $(CXXFLAGS) $(INCPATH) -o debug\mainwindow.o mainwindow.cpp + +debug/qrc_resources.o: debug/qrc_resources.cpp + $(CXX) -c $(CXXFLAGS) $(INCPATH) -o debug\qrc_resources.o debug\qrc_resources.cpp + +debug/moc_mainwindow.o: debug/moc_mainwindow.cpp + $(CXX) -c $(CXXFLAGS) $(INCPATH) -o debug\moc_mainwindow.o debug\moc_mainwindow.cpp + +####### Install + +install: FORCE + +uninstall: FORCE + +FORCE: + +.SUFFIXES: + diff --git a/C++/2.3.1/Makefile.Release b/C++/2.3.1/Makefile.Release new file mode 100644 index 0000000..9baafdd --- /dev/null +++ b/C++/2.3.1/Makefile.Release @@ -0,0 +1,1173 @@ +############################################################################# +# Makefile for building: untitled2 +# Generated by qmake (3.1) (Qt 6.9.1) +# Project: untitled2.pro +# Template: app +############################################################################# + +MAKEFILE = Makefile.Release + +EQ = = + +####### Compiler, tools and options + +CC = gcc +CXX = g++ +DEFINES = -DUNICODE -D_UNICODE -DWIN32 -DMINGW_HAS_SECURE_API=1 -DQT_NO_DEBUG -DQT_WIDGETS_LIB -DQT_GUI_LIB -DQT_NETWORK_LIB -DQT_CONCURRENT_LIB -DQT_CORE_LIB -DQT_NEEDS_QMAIN +CFLAGS = -fno-keep-inline-dllexport -O2 -Wall -Wextra -Wextra $(DEFINES) +CXXFLAGS = -fno-keep-inline-dllexport -O2 -std=gnu++1z -Wall -Wextra -Wextra -fexceptions -mthreads $(DEFINES) +INCPATH = -I. -ID:/Qt/6.9.1/mingw_64/include -ID:/Qt/6.9.1/mingw_64/include/QtWidgets -ID:/Qt/6.9.1/mingw_64/include/QtGui -ID:/Qt/6.9.1/mingw_64/include/QtNetwork -ID:/Qt/6.9.1/mingw_64/include/QtConcurrent -ID:/Qt/6.9.1/mingw_64/include/QtCore -Irelease -I/include -ID:/Qt/6.9.1/mingw_64/mkspecs/win32-g++ +LINKER = g++ +LFLAGS = -Wl,-s -Wl,-subsystem,windows -mthreads +LIBS = -ladvapi32 -luser32 -lshell32 -lkernel32 D:\Qt\6.9.1\mingw_64\lib\libQt6Widgets.a D:\Qt\6.9.1\mingw_64\lib\libQt6Gui.a D:\Qt\6.9.1\mingw_64\lib\libQt6Network.a D:\Qt\6.9.1\mingw_64\lib\libQt6Concurrent.a D:\Qt\6.9.1\mingw_64\lib\libQt6Core.a release\launcher_res.o -lmingw32 D:\Qt\6.9.1\mingw_64\lib\libQt6EntryPoint.a -lshell32 +QMAKE = D:\Qt\6.9.1\mingw_64\bin\qmake.exe +DEL_FILE = del +CHK_DIR_EXISTS= if not exist +MKDIR = mkdir +COPY = copy /y +COPY_FILE = copy /y +COPY_DIR = xcopy /s /q /y /i +INSTALL_FILE = copy /y +INSTALL_PROGRAM = copy /y +INSTALL_DIR = xcopy /s /q /y /i +QINSTALL = D:\Qt\6.9.1\mingw_64\bin\qmake.exe -install qinstall +QINSTALL_PROGRAM = D:\Qt\6.9.1\mingw_64\bin\qmake.exe -install qinstall -exe +DEL_FILE = del +SYMLINK = $(QMAKE) -install ln -f -s +DEL_DIR = rmdir +MOVE = move +IDC = idc +IDL = midl +ZIP = zip -r -9 +DEF_FILE = +RES_FILE = release\launcher_res.o +SED = $(QMAKE) -install sed +MOVE = move + +####### Output directory + +OBJECTS_DIR = release + +####### Files + +SOURCES = main.cpp \ + mainwindow.cpp release\qrc_resources.cpp \ + release\moc_mainwindow.cpp +OBJECTS = release/main.o \ + release/mainwindow.o \ + release/qrc_resources.o \ + release/moc_mainwindow.o + +DIST = mainwindow.h main.cpp \ + mainwindow.cpp +QMAKE_TARGET = untitled2 +DESTDIR = release\ #avoid trailing-slash linebreak +TARGET = untitled2.exe +DESTDIR_TARGET = release\untitled2.exe + +####### Build rules + +first: all +all: Makefile.Release release/untitled2.exe + +release/untitled2.exe: D:/Qt/6.9.1/mingw_64/lib/libQt6Widgets.a D:/Qt/6.9.1/mingw_64/lib/libQt6Gui.a D:/Qt/6.9.1/mingw_64/lib/libQt6Network.a D:/Qt/6.9.1/mingw_64/lib/libQt6Concurrent.a D:/Qt/6.9.1/mingw_64/lib/libQt6Core.a D:/Qt/6.9.1/mingw_64/lib/libQt6EntryPoint.a $(OBJECTS) release/launcher_res.o + $(LINKER) $(LFLAGS) -o $(DESTDIR_TARGET) $(OBJECTS) $(LIBS) + +release/launcher_res.o: launcher.rc + windres -i launcher.rc -o release\launcher_res.o --include-dir=. $(DEFINES) + +qmake: FORCE + @$(QMAKE) -o Makefile.Release untitled2.pro -spec win32-g++ "CONFIG+=qtquickcompiler" + +qmake_all: FORCE + +dist: + $(ZIP) untitled2.zip $(SOURCES) $(DIST) untitled2.pro D:\Qt\6.9.1\mingw_64\mkspecs\features\spec_pre.prf D:\Qt\6.9.1\mingw_64\mkspecs\features\device_config.prf D:\Qt\6.9.1\mingw_64\mkspecs\common\sanitize.conf D:\Qt\6.9.1\mingw_64\mkspecs\common\gcc-base.conf D:\Qt\6.9.1\mingw_64\mkspecs\common\g++-base.conf D:\Qt\6.9.1\mingw_64\mkspecs\features\win32\windows_vulkan_sdk.prf D:\Qt\6.9.1\mingw_64\mkspecs\common\windows-vulkan.conf D:\Qt\6.9.1\mingw_64\mkspecs\common\g++-win32.conf D:\Qt\6.9.1\mingw_64\mkspecs\common\windows-desktop.conf D:\Qt\6.9.1\mingw_64\mkspecs\qconfig.pri D:\Qt\6.9.1\mingw_64\mkspecs\modules\qt_ext_freetype.pri D:\Qt\6.9.1\mingw_64\mkspecs\modules\qt_ext_libjpeg.pri D:\Qt\6.9.1\mingw_64\mkspecs\modules\qt_ext_libpng.pri D:\Qt\6.9.1\mingw_64\mkspecs\modules\qt_ext_openxr_loader.pri D:\Qt\6.9.1\mingw_64\mkspecs\modules\qt_lib_charts.pri D:\Qt\6.9.1\mingw_64\mkspecs\modules\qt_lib_charts_private.pri D:\Qt\6.9.1\mingw_64\mkspecs\modules\qt_lib_chartsqml.pri D:\Qt\6.9.1\mingw_64\mkspecs\modules\qt_lib_chartsqml_private.pri D:\Qt\6.9.1\mingw_64\mkspecs\modules\qt_lib_concurrent.pri D:\Qt\6.9.1\mingw_64\mkspecs\modules\qt_lib_concurrent_private.pri D:\Qt\6.9.1\mingw_64\mkspecs\modules\qt_lib_core.pri D:\Qt\6.9.1\mingw_64\mkspecs\modules\qt_lib_core_private.pri D:\Qt\6.9.1\mingw_64\mkspecs\modules\qt_lib_dbus.pri D:\Qt\6.9.1\mingw_64\mkspecs\modules\qt_lib_dbus_private.pri D:\Qt\6.9.1\mingw_64\mkspecs\modules\qt_lib_designer.pri D:\Qt\6.9.1\mingw_64\mkspecs\modules\qt_lib_designer_private.pri D:\Qt\6.9.1\mingw_64\mkspecs\modules\qt_lib_designercomponents_private.pri D:\Qt\6.9.1\mingw_64\mkspecs\modules\qt_lib_devicediscovery_support_private.pri D:\Qt\6.9.1\mingw_64\mkspecs\modules\qt_lib_entrypoint_private.pri D:\Qt\6.9.1\mingw_64\mkspecs\modules\qt_lib_example_icons_private.pri D:\Qt\6.9.1\mingw_64\mkspecs\modules\qt_lib_examples_asset_downloader_private.pri D:\Qt\6.9.1\mingw_64\mkspecs\modules\qt_lib_fb_support_private.pri D:\Qt\6.9.1\mingw_64\mkspecs\modules\qt_lib_ffmpegmediapluginimpl_private.pri D:\Qt\6.9.1\mingw_64\mkspecs\modules\qt_lib_freetype_private.pri D:\Qt\6.9.1\mingw_64\mkspecs\modules\qt_lib_gui.pri D:\Qt\6.9.1\mingw_64\mkspecs\modules\qt_lib_gui_private.pri D:\Qt\6.9.1\mingw_64\mkspecs\modules\qt_lib_harfbuzz_private.pri D:\Qt\6.9.1\mingw_64\mkspecs\modules\qt_lib_help.pri D:\Qt\6.9.1\mingw_64\mkspecs\modules\qt_lib_help_private.pri D:\Qt\6.9.1\mingw_64\mkspecs\modules\qt_lib_jpeg_private.pri D:\Qt\6.9.1\mingw_64\mkspecs\modules\qt_lib_labsanimation.pri D:\Qt\6.9.1\mingw_64\mkspecs\modules\qt_lib_labsanimation_private.pri D:\Qt\6.9.1\mingw_64\mkspecs\modules\qt_lib_labsfolderlistmodel.pri D:\Qt\6.9.1\mingw_64\mkspecs\modules\qt_lib_labsfolderlistmodel_private.pri D:\Qt\6.9.1\mingw_64\mkspecs\modules\qt_lib_labsplatform.pri D:\Qt\6.9.1\mingw_64\mkspecs\modules\qt_lib_labsplatform_private.pri D:\Qt\6.9.1\mingw_64\mkspecs\modules\qt_lib_labsqmlmodels.pri D:\Qt\6.9.1\mingw_64\mkspecs\modules\qt_lib_labsqmlmodels_private.pri D:\Qt\6.9.1\mingw_64\mkspecs\modules\qt_lib_labssettings.pri D:\Qt\6.9.1\mingw_64\mkspecs\modules\qt_lib_labssettings_private.pri D:\Qt\6.9.1\mingw_64\mkspecs\modules\qt_lib_labssharedimage.pri D:\Qt\6.9.1\mingw_64\mkspecs\modules\qt_lib_labssharedimage_private.pri D:\Qt\6.9.1\mingw_64\mkspecs\modules\qt_lib_labswavefrontmesh.pri D:\Qt\6.9.1\mingw_64\mkspecs\modules\qt_lib_labswavefrontmesh_private.pri D:\Qt\6.9.1\mingw_64\mkspecs\modules\qt_lib_linguist.pri D:\Qt\6.9.1\mingw_64\mkspecs\modules\qt_lib_multimedia.pri D:\Qt\6.9.1\mingw_64\mkspecs\modules\qt_lib_multimedia_private.pri D:\Qt\6.9.1\mingw_64\mkspecs\modules\qt_lib_multimediaquick_private.pri D:\Qt\6.9.1\mingw_64\mkspecs\modules\qt_lib_multimediatestlibprivate_private.pri D:\Qt\6.9.1\mingw_64\mkspecs\modules\qt_lib_multimediawidgets.pri D:\Qt\6.9.1\mingw_64\mkspecs\modules\qt_lib_multimediawidgets_private.pri D:\Qt\6.9.1\mingw_64\mkspecs\modules\qt_lib_network.pri D:\Qt\6.9.1\mingw_64\mkspecs\modules\qt_lib_network_private.pri D:\Qt\6.9.1\mingw_64\mkspecs\modules\qt_lib_opengl.pri D:\Qt\6.9.1\mingw_64\mkspecs\modules\qt_lib_opengl_private.pri D:\Qt\6.9.1\mingw_64\mkspecs\modules\qt_lib_openglwidgets.pri D:\Qt\6.9.1\mingw_64\mkspecs\modules\qt_lib_openglwidgets_private.pri D:\Qt\6.9.1\mingw_64\mkspecs\modules\qt_lib_packetprotocol_private.pri D:\Qt\6.9.1\mingw_64\mkspecs\modules\qt_lib_png_private.pri D:\Qt\6.9.1\mingw_64\mkspecs\modules\qt_lib_printsupport.pri D:\Qt\6.9.1\mingw_64\mkspecs\modules\qt_lib_printsupport_private.pri D:\Qt\6.9.1\mingw_64\mkspecs\modules\qt_lib_qdoccatch_private.pri D:\Qt\6.9.1\mingw_64\mkspecs\modules\qt_lib_qdoccatchconversions_private.pri D:\Qt\6.9.1\mingw_64\mkspecs\modules\qt_lib_qdoccatchgenerators_private.pri D:\Qt\6.9.1\mingw_64\mkspecs\modules\qt_lib_qml.pri D:\Qt\6.9.1\mingw_64\mkspecs\modules\qt_lib_qml_private.pri D:\Qt\6.9.1\mingw_64\mkspecs\modules\qt_lib_qmlassetdownloader.pri D:\Qt\6.9.1\mingw_64\mkspecs\modules\qt_lib_qmlassetdownloader_private.pri D:\Qt\6.9.1\mingw_64\mkspecs\modules\qt_lib_qmlcompiler.pri D:\Qt\6.9.1\mingw_64\mkspecs\modules\qt_lib_qmlcompiler_private.pri D:\Qt\6.9.1\mingw_64\mkspecs\modules\qt_lib_qmlcore.pri D:\Qt\6.9.1\mingw_64\mkspecs\modules\qt_lib_qmlcore_private.pri D:\Qt\6.9.1\mingw_64\mkspecs\modules\qt_lib_qmldebug_private.pri D:\Qt\6.9.1\mingw_64\mkspecs\modules\qt_lib_qmldom_private.pri D:\Qt\6.9.1\mingw_64\mkspecs\modules\qt_lib_qmlformat_private.pri D:\Qt\6.9.1\mingw_64\mkspecs\modules\qt_lib_qmlintegration.pri D:\Qt\6.9.1\mingw_64\mkspecs\modules\qt_lib_qmlintegration_private.pri D:\Qt\6.9.1\mingw_64\mkspecs\modules\qt_lib_qmllocalstorage.pri D:\Qt\6.9.1\mingw_64\mkspecs\modules\qt_lib_qmllocalstorage_private.pri D:\Qt\6.9.1\mingw_64\mkspecs\modules\qt_lib_qmlls_private.pri D:\Qt\6.9.1\mingw_64\mkspecs\modules\qt_lib_qmlmeta.pri D:\Qt\6.9.1\mingw_64\mkspecs\modules\qt_lib_qmlmeta_private.pri D:\Qt\6.9.1\mingw_64\mkspecs\modules\qt_lib_qmlmodels.pri D:\Qt\6.9.1\mingw_64\mkspecs\modules\qt_lib_qmlmodels_private.pri D:\Qt\6.9.1\mingw_64\mkspecs\modules\qt_lib_qmlnetwork.pri D:\Qt\6.9.1\mingw_64\mkspecs\modules\qt_lib_qmlnetwork_private.pri D:\Qt\6.9.1\mingw_64\mkspecs\modules\qt_lib_qmltest.pri D:\Qt\6.9.1\mingw_64\mkspecs\modules\qt_lib_qmltest_private.pri D:\Qt\6.9.1\mingw_64\mkspecs\modules\qt_lib_qmltoolingsettings_private.pri D:\Qt\6.9.1\mingw_64\mkspecs\modules\qt_lib_qmltyperegistrar_private.pri D:\Qt\6.9.1\mingw_64\mkspecs\modules\qt_lib_qmlworkerscript.pri D:\Qt\6.9.1\mingw_64\mkspecs\modules\qt_lib_qmlworkerscript_private.pri D:\Qt\6.9.1\mingw_64\mkspecs\modules\qt_lib_qmlxmllistmodel.pri D:\Qt\6.9.1\mingw_64\mkspecs\modules\qt_lib_qmlxmllistmodel_private.pri D:\Qt\6.9.1\mingw_64\mkspecs\modules\qt_lib_quick.pri D:\Qt\6.9.1\mingw_64\mkspecs\modules\qt_lib_quick3d.pri D:\Qt\6.9.1\mingw_64\mkspecs\modules\qt_lib_quick3d_private.pri D:\Qt\6.9.1\mingw_64\mkspecs\modules\qt_lib_quick3dassetimport.pri D:\Qt\6.9.1\mingw_64\mkspecs\modules\qt_lib_quick3dassetimport_private.pri D:\Qt\6.9.1\mingw_64\mkspecs\modules\qt_lib_quick3dassetutils.pri D:\Qt\6.9.1\mingw_64\mkspecs\modules\qt_lib_quick3dassetutils_private.pri D:\Qt\6.9.1\mingw_64\mkspecs\modules\qt_lib_quick3deffects.pri D:\Qt\6.9.1\mingw_64\mkspecs\modules\qt_lib_quick3deffects_private.pri D:\Qt\6.9.1\mingw_64\mkspecs\modules\qt_lib_quick3dglslparser_private.pri D:\Qt\6.9.1\mingw_64\mkspecs\modules\qt_lib_quick3dhelpers.pri D:\Qt\6.9.1\mingw_64\mkspecs\modules\qt_lib_quick3dhelpers_private.pri D:\Qt\6.9.1\mingw_64\mkspecs\modules\qt_lib_quick3dhelpersimpl.pri D:\Qt\6.9.1\mingw_64\mkspecs\modules\qt_lib_quick3dhelpersimpl_private.pri D:\Qt\6.9.1\mingw_64\mkspecs\modules\qt_lib_quick3diblbaker.pri D:\Qt\6.9.1\mingw_64\mkspecs\modules\qt_lib_quick3diblbaker_private.pri D:\Qt\6.9.1\mingw_64\mkspecs\modules\qt_lib_quick3dparticleeffects.pri D:\Qt\6.9.1\mingw_64\mkspecs\modules\qt_lib_quick3dparticleeffects_private.pri D:\Qt\6.9.1\mingw_64\mkspecs\modules\qt_lib_quick3dparticles.pri D:\Qt\6.9.1\mingw_64\mkspecs\modules\qt_lib_quick3dparticles_private.pri D:\Qt\6.9.1\mingw_64\mkspecs\modules\qt_lib_quick3druntimerender.pri D:\Qt\6.9.1\mingw_64\mkspecs\modules\qt_lib_quick3druntimerender_private.pri D:\Qt\6.9.1\mingw_64\mkspecs\modules\qt_lib_quick3dspatialaudio_private.pri D:\Qt\6.9.1\mingw_64\mkspecs\modules\qt_lib_quick3dutils.pri D:\Qt\6.9.1\mingw_64\mkspecs\modules\qt_lib_quick3dutils_private.pri D:\Qt\6.9.1\mingw_64\mkspecs\modules\qt_lib_quick3dxr.pri D:\Qt\6.9.1\mingw_64\mkspecs\modules\qt_lib_quick3dxr_private.pri D:\Qt\6.9.1\mingw_64\mkspecs\modules\qt_lib_quick_private.pri D:\Qt\6.9.1\mingw_64\mkspecs\modules\qt_lib_quickcontrols2.pri D:\Qt\6.9.1\mingw_64\mkspecs\modules\qt_lib_quickcontrols2_private.pri D:\Qt\6.9.1\mingw_64\mkspecs\modules\qt_lib_quickcontrols2basic.pri D:\Qt\6.9.1\mingw_64\mkspecs\modules\qt_lib_quickcontrols2basic_private.pri D:\Qt\6.9.1\mingw_64\mkspecs\modules\qt_lib_quickcontrols2basicstyleimpl.pri D:\Qt\6.9.1\mingw_64\mkspecs\modules\qt_lib_quickcontrols2basicstyleimpl_private.pri D:\Qt\6.9.1\mingw_64\mkspecs\modules\qt_lib_quickcontrols2fluentwinui3styleimpl.pri D:\Qt\6.9.1\mingw_64\mkspecs\modules\qt_lib_quickcontrols2fluentwinui3styleimpl_private.pri D:\Qt\6.9.1\mingw_64\mkspecs\modules\qt_lib_quickcontrols2fusion.pri D:\Qt\6.9.1\mingw_64\mkspecs\modules\qt_lib_quickcontrols2fusion_private.pri D:\Qt\6.9.1\mingw_64\mkspecs\modules\qt_lib_quickcontrols2fusionstyleimpl.pri D:\Qt\6.9.1\mingw_64\mkspecs\modules\qt_lib_quickcontrols2fusionstyleimpl_private.pri D:\Qt\6.9.1\mingw_64\mkspecs\modules\qt_lib_quickcontrols2imagine.pri D:\Qt\6.9.1\mingw_64\mkspecs\modules\qt_lib_quickcontrols2imagine_private.pri D:\Qt\6.9.1\mingw_64\mkspecs\modules\qt_lib_quickcontrols2imaginestyleimpl.pri D:\Qt\6.9.1\mingw_64\mkspecs\modules\qt_lib_quickcontrols2imaginestyleimpl_private.pri D:\Qt\6.9.1\mingw_64\mkspecs\modules\qt_lib_quickcontrols2impl.pri D:\Qt\6.9.1\mingw_64\mkspecs\modules\qt_lib_quickcontrols2impl_private.pri D:\Qt\6.9.1\mingw_64\mkspecs\modules\qt_lib_quickcontrols2material.pri D:\Qt\6.9.1\mingw_64\mkspecs\modules\qt_lib_quickcontrols2material_private.pri D:\Qt\6.9.1\mingw_64\mkspecs\modules\qt_lib_quickcontrols2materialstyleimpl.pri D:\Qt\6.9.1\mingw_64\mkspecs\modules\qt_lib_quickcontrols2materialstyleimpl_private.pri D:\Qt\6.9.1\mingw_64\mkspecs\modules\qt_lib_quickcontrols2universal.pri D:\Qt\6.9.1\mingw_64\mkspecs\modules\qt_lib_quickcontrols2universal_private.pri D:\Qt\6.9.1\mingw_64\mkspecs\modules\qt_lib_quickcontrols2universalstyleimpl.pri D:\Qt\6.9.1\mingw_64\mkspecs\modules\qt_lib_quickcontrols2universalstyleimpl_private.pri D:\Qt\6.9.1\mingw_64\mkspecs\modules\qt_lib_quickcontrols2windowsstyleimpl.pri D:\Qt\6.9.1\mingw_64\mkspecs\modules\qt_lib_quickcontrols2windowsstyleimpl_private.pri D:\Qt\6.9.1\mingw_64\mkspecs\modules\qt_lib_quickcontrolstestutilsprivate_private.pri D:\Qt\6.9.1\mingw_64\mkspecs\modules\qt_lib_quickdialogs2.pri D:\Qt\6.9.1\mingw_64\mkspecs\modules\qt_lib_quickdialogs2_private.pri D:\Qt\6.9.1\mingw_64\mkspecs\modules\qt_lib_quickdialogs2quickimpl.pri D:\Qt\6.9.1\mingw_64\mkspecs\modules\qt_lib_quickdialogs2quickimpl_private.pri D:\Qt\6.9.1\mingw_64\mkspecs\modules\qt_lib_quickdialogs2utils.pri D:\Qt\6.9.1\mingw_64\mkspecs\modules\qt_lib_quickdialogs2utils_private.pri D:\Qt\6.9.1\mingw_64\mkspecs\modules\qt_lib_quickeffects.pri D:\Qt\6.9.1\mingw_64\mkspecs\modules\qt_lib_quickeffects_private.pri D:\Qt\6.9.1\mingw_64\mkspecs\modules\qt_lib_quicklayouts.pri D:\Qt\6.9.1\mingw_64\mkspecs\modules\qt_lib_quicklayouts_private.pri D:\Qt\6.9.1\mingw_64\mkspecs\modules\qt_lib_quickparticles_private.pri D:\Qt\6.9.1\mingw_64\mkspecs\modules\qt_lib_quickshapes_private.pri D:\Qt\6.9.1\mingw_64\mkspecs\modules\qt_lib_quicktemplates2.pri D:\Qt\6.9.1\mingw_64\mkspecs\modules\qt_lib_quicktemplates2_private.pri D:\Qt\6.9.1\mingw_64\mkspecs\modules\qt_lib_quicktestutilsprivate_private.pri D:\Qt\6.9.1\mingw_64\mkspecs\modules\qt_lib_quicktimeline.pri D:\Qt\6.9.1\mingw_64\mkspecs\modules\qt_lib_quicktimeline_private.pri D:\Qt\6.9.1\mingw_64\mkspecs\modules\qt_lib_quicktimelineblendtrees.pri D:\Qt\6.9.1\mingw_64\mkspecs\modules\qt_lib_quicktimelineblendtrees_private.pri D:\Qt\6.9.1\mingw_64\mkspecs\modules\qt_lib_quickvectorimage.pri D:\Qt\6.9.1\mingw_64\mkspecs\modules\qt_lib_quickvectorimage_private.pri D:\Qt\6.9.1\mingw_64\mkspecs\modules\qt_lib_quickvectorimagegenerator_private.pri D:\Qt\6.9.1\mingw_64\mkspecs\modules\qt_lib_quickwidgets.pri D:\Qt\6.9.1\mingw_64\mkspecs\modules\qt_lib_quickwidgets_private.pri D:\Qt\6.9.1\mingw_64\mkspecs\modules\qt_lib_shadertools.pri D:\Qt\6.9.1\mingw_64\mkspecs\modules\qt_lib_shadertools_private.pri D:\Qt\6.9.1\mingw_64\mkspecs\modules\qt_lib_spatialaudio.pri D:\Qt\6.9.1\mingw_64\mkspecs\modules\qt_lib_spatialaudio_private.pri D:\Qt\6.9.1\mingw_64\mkspecs\modules\qt_lib_sql.pri D:\Qt\6.9.1\mingw_64\mkspecs\modules\qt_lib_sql_private.pri D:\Qt\6.9.1\mingw_64\mkspecs\modules\qt_lib_svg.pri D:\Qt\6.9.1\mingw_64\mkspecs\modules\qt_lib_svg_private.pri D:\Qt\6.9.1\mingw_64\mkspecs\modules\qt_lib_svgwidgets.pri D:\Qt\6.9.1\mingw_64\mkspecs\modules\qt_lib_svgwidgets_private.pri D:\Qt\6.9.1\mingw_64\mkspecs\modules\qt_lib_testinternals_private.pri D:\Qt\6.9.1\mingw_64\mkspecs\modules\qt_lib_testlib.pri D:\Qt\6.9.1\mingw_64\mkspecs\modules\qt_lib_testlib_private.pri D:\Qt\6.9.1\mingw_64\mkspecs\modules\qt_lib_tools_private.pri D:\Qt\6.9.1\mingw_64\mkspecs\modules\qt_lib_uiplugin.pri D:\Qt\6.9.1\mingw_64\mkspecs\modules\qt_lib_uitools.pri D:\Qt\6.9.1\mingw_64\mkspecs\modules\qt_lib_uitools_private.pri D:\Qt\6.9.1\mingw_64\mkspecs\modules\qt_lib_widgets.pri D:\Qt\6.9.1\mingw_64\mkspecs\modules\qt_lib_widgets_private.pri D:\Qt\6.9.1\mingw_64\mkspecs\modules\qt_lib_xml.pri D:\Qt\6.9.1\mingw_64\mkspecs\modules\qt_lib_xml_private.pri D:\Qt\6.9.1\mingw_64\mkspecs\modules\qt_lib_zlib_private.pri D:\Qt\6.9.1\mingw_64\mkspecs\features\qt_functions.prf D:\Qt\6.9.1\mingw_64\mkspecs\features\qt_config.prf D:\Qt\6.9.1\mingw_64\mkspecs\win32-g++\qmake.conf D:\Qt\6.9.1\mingw_64\mkspecs\features\spec_post.prf .qmake.stash D:\Qt\6.9.1\mingw_64\mkspecs\features\exclusive_builds.prf D:\Qt\6.9.1\mingw_64\mkspecs\features\toolchain.prf D:\Qt\6.9.1\mingw_64\mkspecs\features\default_pre.prf D:\Qt\6.9.1\mingw_64\mkspecs\features\win32\default_pre.prf D:\Qt\6.9.1\mingw_64\mkspecs\features\resolve_config.prf D:\Qt\6.9.1\mingw_64\mkspecs\features\exclusive_builds_post.prf D:\Qt\6.9.1\mingw_64\mkspecs\features\default_post.prf D:\Qt\6.9.1\mingw_64\mkspecs\features\build_pass.prf D:\Qt\6.9.1\mingw_64\mkspecs\features\qtquickcompiler.prf D:\Qt\6.9.1\mingw_64\mkspecs\features\precompile_header.prf D:\Qt\6.9.1\mingw_64\mkspecs\features\warn_on.prf D:\Qt\6.9.1\mingw_64\mkspecs\features\permissions.prf D:\Qt\6.9.1\mingw_64\mkspecs\features\qt.prf D:\Qt\6.9.1\mingw_64\mkspecs\features\resources_functions.prf D:\Qt\6.9.1\mingw_64\mkspecs\features\resources.prf D:\Qt\6.9.1\mingw_64\mkspecs\features\moc.prf D:\Qt\6.9.1\mingw_64\mkspecs\features\win32\opengl.prf D:\Qt\6.9.1\mingw_64\mkspecs\features\uic.prf D:\Qt\6.9.1\mingw_64\mkspecs\features\qmake_use.prf D:\Qt\6.9.1\mingw_64\mkspecs\features\file_copies.prf D:\Qt\6.9.1\mingw_64\mkspecs\features\win32\windows.prf D:\Qt\6.9.1\mingw_64\mkspecs\features\testcase_targets.prf D:\Qt\6.9.1\mingw_64\mkspecs\features\exceptions.prf D:\Qt\6.9.1\mingw_64\mkspecs\features\yacc.prf D:\Qt\6.9.1\mingw_64\mkspecs\features\lex.prf untitled2.pro resources.qrc D:\Qt\6.9.1\mingw_64\lib\Qt6Widgets.prl D:\Qt\6.9.1\mingw_64\lib\Qt6Gui.prl D:\Qt\6.9.1\mingw_64\lib\Qt6Network.prl D:\Qt\6.9.1\mingw_64\lib\Qt6Concurrent.prl D:\Qt\6.9.1\mingw_64\lib\Qt6Core.prl D:\Qt\6.9.1\mingw_64\lib\Qt6EntryPoint.prl resources.qrc D:\Qt\6.9.1\mingw_64\mkspecs\features\data\dummy.cpp mainwindow.h main.cpp mainwindow.cpp + +clean: compiler_clean + -$(DEL_FILE) release\main.o release\mainwindow.o release\qrc_resources.o release\moc_mainwindow.o + -$(DEL_FILE) release\launcher_res.o + +distclean: clean + -$(DEL_FILE) .qmake.stash + -$(DEL_FILE) $(DESTDIR_TARGET) + -$(DEL_FILE) Makefile.Release + +mocclean: compiler_moc_header_clean compiler_moc_objc_header_clean compiler_moc_source_clean + +mocables: compiler_moc_header_make_all compiler_moc_objc_header_make_all compiler_moc_source_make_all + +check: first + +benchmark: first + +compiler_no_pch_compiler_make_all: +compiler_no_pch_compiler_clean: +compiler_rcc_make_all: release/qrc_resources.cpp +compiler_rcc_clean: + -$(DEL_FILE) release\qrc_resources.cpp +release/qrc_resources.cpp: resources.qrc \ + D:/Qt/6.9.1/mingw_64/bin/rcc.exe \ + styles.qss \ + untitled2_zh_CN.ts + D:\Qt\6.9.1\mingw_64\bin\rcc.exe -name resources --no-zstd resources.qrc -o release\qrc_resources.cpp + +compiler_moc_predefs_make_all: release/moc_predefs.h +compiler_moc_predefs_clean: + -$(DEL_FILE) release\moc_predefs.h +release/moc_predefs.h: D:/Qt/6.9.1/mingw_64/mkspecs/features/data/dummy.cpp + g++ -fno-keep-inline-dllexport -O2 -std=gnu++1z -Wall -Wextra -Wextra -dM -E -o release\moc_predefs.h D:\Qt\6.9.1\mingw_64\mkspecs\features\data\dummy.cpp + +compiler_moc_header_make_all: release/moc_mainwindow.cpp +compiler_moc_header_clean: + -$(DEL_FILE) release\moc_mainwindow.cpp +release/moc_mainwindow.cpp: mainwindow.h \ + D:/Qt/6.9.1/mingw_64/include/QtWidgets/QMainWindow \ + D:/Qt/6.9.1/mingw_64/include/QtWidgets/qmainwindow.h \ + D:/Qt/6.9.1/mingw_64/include/QtWidgets/qtwidgetsglobal.h \ + D:/Qt/6.9.1/mingw_64/include/QtGui/qtguiglobal.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qglobal.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qtcoreglobal.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qtversionchecks.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qtconfiginclude.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qconfig.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qtcore-config.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qtconfigmacros.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qtdeprecationdefinitions.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qcompilerdetection.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qprocessordetection.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qsystemdetection.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qtcoreexports.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qtdeprecationmarkers.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qtclasshelpermacros.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qtpreprocessorsupport.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qassert.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qtnoop.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qtypes.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qtversion.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qtypeinfo.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qcontainerfwd.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qsysinfo.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qlogging.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qflags.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qcompare_impl.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qatomic.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qbasicatomic.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qatomic_cxx11.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qgenericatomic.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qyieldcpu.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qconstructormacros.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qdarwinhelpers.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qexceptionhandling.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qforeach.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qttypetraits.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qfunctionpointer.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qglobalstatic.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qmalloc.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qminmax.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qnumeric.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qoverload.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qswap.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qtenvironmentvariables.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qtresource.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qttranslation.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qversiontagging.h \ + D:/Qt/6.9.1/mingw_64/include/QtGui/qtgui-config.h \ + D:/Qt/6.9.1/mingw_64/include/QtGui/qtguiexports.h \ + D:/Qt/6.9.1/mingw_64/include/QtWidgets/qtwidgets-config.h \ + D:/Qt/6.9.1/mingw_64/include/QtWidgets/qtwidgetsexports.h \ + D:/Qt/6.9.1/mingw_64/include/QtWidgets/qwidget.h \ + D:/Qt/6.9.1/mingw_64/include/QtGui/qwindowdefs.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qobjectdefs.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qnamespace.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qcompare.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qstdlibdetection.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qcomparehelpers.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/q20type_traits.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qtmetamacros.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qobjectdefs_impl.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qfunctionaltools_impl.h \ + D:/Qt/6.9.1/mingw_64/include/QtGui/qwindowdefs_win.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qobject.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qstring.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qchar.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qstringview.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qbytearray.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qrefcount.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qarraydata.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qpair.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qarraydatapointer.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qarraydataops.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qcontainertools_impl.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qxptype_traits.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/q20functional.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/q20memory.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/q17memory.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qbytearrayalgorithms.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qbytearrayview.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qstringfwd.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qstringliteral.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qstringalgorithms.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qlatin1stringview.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qanystringview.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qutf8stringview.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qstringtokenizer.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qstringbuilder.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qstringconverter.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qstringconverter_base.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qlist.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qhashfunctions.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qiterator.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qbytearraylist.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qstringlist.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qalgorithms.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qstringmatcher.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qcoreevent.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qbasictimer.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qabstracteventdispatcher.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qeventloop.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qdeadlinetimer.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qelapsedtimer.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qmetatype.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qdatastream.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qscopedpointer.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qiodevicebase.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qfloat16.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qmath.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qtformat_impl.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qiterable.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qmetacontainer.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qcontainerinfo.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qtaggedpointer.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qscopeguard.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qobject_impl.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qbindingstorage.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qmargins.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/q23utility.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/q20utility.h \ + D:/Qt/6.9.1/mingw_64/include/QtGui/qaction.h \ + D:/Qt/6.9.1/mingw_64/include/QtGui/qkeysequence.h \ + D:/Qt/6.9.1/mingw_64/include/QtGui/qicon.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qsize.h \ + D:/Qt/6.9.1/mingw_64/include/QtGui/qpixmap.h \ + D:/Qt/6.9.1/mingw_64/include/QtGui/qpaintdevice.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qrect.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qpoint.h \ + D:/Qt/6.9.1/mingw_64/include/QtGui/qcolor.h \ + D:/Qt/6.9.1/mingw_64/include/QtGui/qrgb.h \ + D:/Qt/6.9.1/mingw_64/include/QtGui/qrgba64.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qshareddata.h \ + D:/Qt/6.9.1/mingw_64/include/QtGui/qimage.h \ + D:/Qt/6.9.1/mingw_64/include/QtGui/qpixelformat.h \ + D:/Qt/6.9.1/mingw_64/include/QtGui/qtransform.h \ + D:/Qt/6.9.1/mingw_64/include/QtGui/qpolygon.h \ + D:/Qt/6.9.1/mingw_64/include/QtGui/qregion.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qspan.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/q20iterator.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qline.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qvariant.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qdebug.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qtextstream.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qcontiguouscache.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qsharedpointer.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qsharedpointer_impl.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qmap.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qshareddata_impl.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qset.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qhash.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qvarlengtharray.h \ + D:/Qt/6.9.1/mingw_64/include/QtGui/qpalette.h \ + D:/Qt/6.9.1/mingw_64/include/QtGui/qbrush.h \ + D:/Qt/6.9.1/mingw_64/include/QtGui/qfont.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qendian.h \ + D:/Qt/6.9.1/mingw_64/include/QtGui/qfontmetrics.h \ + D:/Qt/6.9.1/mingw_64/include/QtGui/qfontinfo.h \ + D:/Qt/6.9.1/mingw_64/include/QtGui/qfontvariableaxis.h \ + D:/Qt/6.9.1/mingw_64/include/QtWidgets/qsizepolicy.h \ + D:/Qt/6.9.1/mingw_64/include/QtGui/qcursor.h \ + D:/Qt/6.9.1/mingw_64/include/QtGui/qbitmap.h \ + D:/Qt/6.9.1/mingw_64/include/QtGui/qevent.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qiodevice.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qurl.h \ + D:/Qt/6.9.1/mingw_64/include/QtGui/qeventpoint.h \ + D:/Qt/6.9.1/mingw_64/include/QtGui/qvector2d.h \ + D:/Qt/6.9.1/mingw_64/include/QtGui/qvectornd.h \ + D:/Qt/6.9.1/mingw_64/include/QtGui/qpointingdevice.h \ + D:/Qt/6.9.1/mingw_64/include/QtGui/qinputdevice.h \ + D:/Qt/6.9.1/mingw_64/include/QtGui/qscreen.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/QList \ + D:/Qt/6.9.1/mingw_64/include/QtCore/QObject \ + D:/Qt/6.9.1/mingw_64/include/QtCore/QRect \ + D:/Qt/6.9.1/mingw_64/include/QtCore/QSize \ + D:/Qt/6.9.1/mingw_64/include/QtCore/QSizeF \ + D:/Qt/6.9.1/mingw_64/include/QtGui/QTransform \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qnativeinterface.h \ + D:/Qt/6.9.1/mingw_64/include/QtGui/qscreen_platform.h \ + D:/Qt/6.9.1/mingw_64/include/QtGui/qguiapplication.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qcoreapplication.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qcoreapplication_platform.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qfuture.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qfutureinterface.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qmutex.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qtsan_impl.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qresultstore.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qfuture_impl.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qthreadpool.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qthread.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qrunnable.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qexception.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qpromise.h \ + D:/Qt/6.9.1/mingw_64/include/QtGui/qinputmethod.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qlocale.h \ + D:/Qt/6.9.1/mingw_64/include/QtGui/qguiapplication_platform.h \ + D:/Qt/6.9.1/mingw_64/include/QtWidgets/qtabwidget.h \ + D:/Qt/6.9.1/mingw_64/include/QtNetwork/QNetworkAccessManager \ + D:/Qt/6.9.1/mingw_64/include/QtNetwork/qnetworkaccessmanager.h \ + D:/Qt/6.9.1/mingw_64/include/QtNetwork/qtnetworkglobal.h \ + D:/Qt/6.9.1/mingw_64/include/QtNetwork/qtnetwork-config.h \ + D:/Qt/6.9.1/mingw_64/include/QtNetwork/qtnetworkexports.h \ + D:/Qt/6.9.1/mingw_64/include/QtNetwork/qnetworkrequest.h \ + D:/Qt/6.9.1/mingw_64/include/QtNetwork/qhttpheaders.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/QSharedDataPointer \ + D:/Qt/6.9.1/mingw_64/include/QtCore/QString \ + D:/Qt/6.9.1/mingw_64/include/QtCore/QUrl \ + D:/Qt/6.9.1/mingw_64/include/QtCore/QVariant \ + D:/Qt/6.9.1/mingw_64/include/QtCore/q26numeric.h \ + D:/Qt/6.9.1/mingw_64/include/QtNetwork/QSslConfiguration \ + D:/Qt/6.9.1/mingw_64/include/QtNetwork/qsslconfiguration.h \ + D:/Qt/6.9.1/mingw_64/include/QtNetwork/qsslsocket.h \ + D:/Qt/6.9.1/mingw_64/include/QtNetwork/qtcpsocket.h \ + D:/Qt/6.9.1/mingw_64/include/QtNetwork/qabstractsocket.h \ + D:/Qt/6.9.1/mingw_64/include/QtNetwork/qhostaddress.h \ + D:/Qt/6.9.1/mingw_64/include/QtNetwork/qsslerror.h \ + D:/Qt/6.9.1/mingw_64/include/QtNetwork/qsslcertificate.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qcryptographichash.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qdatetime.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qcalendar.h \ + D:/Qt/6.9.1/mingw_64/include/QtNetwork/qssl.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/QFlags \ + D:/Qt/6.9.1/mingw_64/include/QtNetwork/QSslPreSharedKeyAuthenticator \ + D:/Qt/6.9.1/mingw_64/include/QtNetwork/qsslpresharedkeyauthenticator.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/QMetaType \ + D:/Qt/6.9.1/mingw_64/include/QtCore/QJsonObject \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qjsonobject.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qjsonvalue.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qcborvalue.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qcborcommon.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qregularexpression.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/quuid.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qjsondocument.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qjsonparseerror.h \ + D:/Qt/6.9.1/mingw_64/include/QtWidgets/QLabel \ + D:/Qt/6.9.1/mingw_64/include/QtWidgets/qlabel.h \ + D:/Qt/6.9.1/mingw_64/include/QtWidgets/qframe.h \ + D:/Qt/6.9.1/mingw_64/include/QtGui/qpicture.h \ + D:/Qt/6.9.1/mingw_64/include/QtGui/qtextdocument.h \ + D:/Qt/6.9.1/mingw_64/include/QtWidgets/QPushButton \ + D:/Qt/6.9.1/mingw_64/include/QtWidgets/qpushbutton.h \ + D:/Qt/6.9.1/mingw_64/include/QtWidgets/qabstractbutton.h \ + D:/Qt/6.9.1/mingw_64/include/QtWidgets/QProgressBar \ + D:/Qt/6.9.1/mingw_64/include/QtWidgets/qprogressbar.h \ + D:/Qt/6.9.1/mingw_64/include/QtWidgets/QTextEdit \ + D:/Qt/6.9.1/mingw_64/include/QtWidgets/qtextedit.h \ + D:/Qt/6.9.1/mingw_64/include/QtWidgets/qabstractscrollarea.h \ + D:/Qt/6.9.1/mingw_64/include/QtGui/qtextoption.h \ + D:/Qt/6.9.1/mingw_64/include/QtGui/qtextcursor.h \ + D:/Qt/6.9.1/mingw_64/include/QtGui/qtextformat.h \ + D:/Qt/6.9.1/mingw_64/include/QtGui/qpen.h \ + D:/Qt/6.9.1/mingw_64/include/QtWidgets/QGroupBox \ + D:/Qt/6.9.1/mingw_64/include/QtWidgets/qgroupbox.h \ + D:/Qt/6.9.1/mingw_64/include/QtWidgets/QFileDialog \ + D:/Qt/6.9.1/mingw_64/include/QtWidgets/qfiledialog.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qdir.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qdirlisting.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qfiledevice.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qfile.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qfileinfo.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qtimezone.h \ + D:/Qt/6.9.1/mingw_64/include/QtWidgets/qdialog.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/QSettings \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qsettings.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/QDir \ + D:/Qt/6.9.1/mingw_64/include/QtWidgets/QLineEdit \ + D:/Qt/6.9.1/mingw_64/include/QtWidgets/qlineedit.h \ + D:/Qt/6.9.1/mingw_64/include/QtWidgets/QDialog \ + D:/Qt/6.9.1/mingw_64/include/QtWidgets/QCheckBox \ + D:/Qt/6.9.1/mingw_64/include/QtWidgets/qcheckbox.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/QTimer \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qtimer.h \ + D:/Qt/6.9.1/mingw_64/include/QtWidgets/QMessageBox \ + D:/Qt/6.9.1/mingw_64/include/QtWidgets/qmessagebox.h \ + D:/Qt/6.9.1/mingw_64/include/QtWidgets/qdialogbuttonbox.h \ + D:/Qt/6.9.1/mingw_64/include/QtWidgets/QApplication \ + D:/Qt/6.9.1/mingw_64/include/QtWidgets/qapplication.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/QProcess \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qprocess.h \ + release/moc_predefs.h \ + D:/Qt/6.9.1/mingw_64/bin/moc.exe + D:\Qt\6.9.1\mingw_64\bin\moc.exe $(DEFINES) --include E:/C++/untitled2/release/moc_predefs.h -ID:/Qt/6.9.1/mingw_64/mkspecs/win32-g++ -IE:/C++/untitled2 -ID:/Qt/6.9.1/mingw_64/include -ID:/Qt/6.9.1/mingw_64/include/QtWidgets -ID:/Qt/6.9.1/mingw_64/include/QtGui -ID:/Qt/6.9.1/mingw_64/include/QtNetwork -ID:/Qt/6.9.1/mingw_64/include/QtConcurrent -ID:/Qt/6.9.1/mingw_64/include/QtCore -ID:/Qt/Tools/mingw1310_64/lib/gcc/x86_64-w64-mingw32/13.1.0/include/c++ -ID:/Qt/Tools/mingw1310_64/lib/gcc/x86_64-w64-mingw32/13.1.0/include/c++/x86_64-w64-mingw32 -ID:/Qt/Tools/mingw1310_64/lib/gcc/x86_64-w64-mingw32/13.1.0/include/c++/backward -ID:/Qt/Tools/mingw1310_64/lib/gcc/x86_64-w64-mingw32/13.1.0/include -ID:/Qt/Tools/mingw1310_64/lib/gcc/x86_64-w64-mingw32/13.1.0/include-fixed -ID:/Qt/Tools/mingw1310_64/x86_64-w64-mingw32/include mainwindow.h -o release\moc_mainwindow.cpp + +compiler_moc_objc_header_make_all: +compiler_moc_objc_header_clean: +compiler_moc_source_make_all: +compiler_moc_source_clean: +compiler_uic_make_all: +compiler_uic_clean: +compiler_yacc_decl_make_all: +compiler_yacc_decl_clean: +compiler_yacc_impl_make_all: +compiler_yacc_impl_clean: +compiler_lex_make_all: +compiler_lex_clean: +compiler_clean: compiler_rcc_clean compiler_moc_predefs_clean compiler_moc_header_clean + + + +####### Compile + +release/main.o: main.cpp mainwindow.h \ + D:/Qt/6.9.1/mingw_64/include/QtWidgets/QMainWindow \ + D:/Qt/6.9.1/mingw_64/include/QtWidgets/qmainwindow.h \ + D:/Qt/6.9.1/mingw_64/include/QtWidgets/qtwidgetsglobal.h \ + D:/Qt/6.9.1/mingw_64/include/QtGui/qtguiglobal.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qglobal.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qtcoreglobal.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qtversionchecks.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qtconfiginclude.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qconfig.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qtcore-config.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qtconfigmacros.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qtdeprecationdefinitions.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qcompilerdetection.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qprocessordetection.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qsystemdetection.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qtcoreexports.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qtdeprecationmarkers.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qtclasshelpermacros.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qtpreprocessorsupport.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qassert.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qtnoop.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qtypes.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qtversion.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qtypeinfo.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qcontainerfwd.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qsysinfo.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qlogging.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qflags.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qcompare_impl.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qatomic.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qbasicatomic.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qatomic_cxx11.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qgenericatomic.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qyieldcpu.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qconstructormacros.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qdarwinhelpers.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qexceptionhandling.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qforeach.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qttypetraits.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qfunctionpointer.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qglobalstatic.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qmalloc.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qminmax.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qnumeric.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qoverload.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qswap.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qtenvironmentvariables.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qtresource.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qttranslation.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qversiontagging.h \ + D:/Qt/6.9.1/mingw_64/include/QtGui/qtgui-config.h \ + D:/Qt/6.9.1/mingw_64/include/QtGui/qtguiexports.h \ + D:/Qt/6.9.1/mingw_64/include/QtWidgets/qtwidgets-config.h \ + D:/Qt/6.9.1/mingw_64/include/QtWidgets/qtwidgetsexports.h \ + D:/Qt/6.9.1/mingw_64/include/QtWidgets/qwidget.h \ + D:/Qt/6.9.1/mingw_64/include/QtGui/qwindowdefs.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qobjectdefs.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qnamespace.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qcompare.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qstdlibdetection.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qcomparehelpers.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/q20type_traits.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qtmetamacros.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qobjectdefs_impl.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qfunctionaltools_impl.h \ + D:/Qt/6.9.1/mingw_64/include/QtGui/qwindowdefs_win.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qobject.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qstring.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qchar.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qstringview.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qbytearray.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qrefcount.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qarraydata.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qpair.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qarraydatapointer.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qarraydataops.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qcontainertools_impl.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qxptype_traits.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/q20functional.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/q20memory.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/q17memory.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qbytearrayalgorithms.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qbytearrayview.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qstringfwd.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qstringliteral.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qstringalgorithms.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qlatin1stringview.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qanystringview.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qutf8stringview.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qstringtokenizer.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qstringbuilder.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qstringconverter.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qstringconverter_base.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qlist.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qhashfunctions.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qiterator.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qbytearraylist.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qstringlist.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qalgorithms.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qstringmatcher.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qcoreevent.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qbasictimer.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qabstracteventdispatcher.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qeventloop.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qdeadlinetimer.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qelapsedtimer.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qmetatype.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qdatastream.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qscopedpointer.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qiodevicebase.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qfloat16.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qmath.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qtformat_impl.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qiterable.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qmetacontainer.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qcontainerinfo.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qtaggedpointer.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qscopeguard.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qobject_impl.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qbindingstorage.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qmargins.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/q23utility.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/q20utility.h \ + D:/Qt/6.9.1/mingw_64/include/QtGui/qaction.h \ + D:/Qt/6.9.1/mingw_64/include/QtGui/qkeysequence.h \ + D:/Qt/6.9.1/mingw_64/include/QtGui/qicon.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qsize.h \ + D:/Qt/6.9.1/mingw_64/include/QtGui/qpixmap.h \ + D:/Qt/6.9.1/mingw_64/include/QtGui/qpaintdevice.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qrect.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qpoint.h \ + D:/Qt/6.9.1/mingw_64/include/QtGui/qcolor.h \ + D:/Qt/6.9.1/mingw_64/include/QtGui/qrgb.h \ + D:/Qt/6.9.1/mingw_64/include/QtGui/qrgba64.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qshareddata.h \ + D:/Qt/6.9.1/mingw_64/include/QtGui/qimage.h \ + D:/Qt/6.9.1/mingw_64/include/QtGui/qpixelformat.h \ + D:/Qt/6.9.1/mingw_64/include/QtGui/qtransform.h \ + D:/Qt/6.9.1/mingw_64/include/QtGui/qpolygon.h \ + D:/Qt/6.9.1/mingw_64/include/QtGui/qregion.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qspan.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/q20iterator.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qline.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qvariant.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qdebug.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qtextstream.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qcontiguouscache.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qsharedpointer.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qsharedpointer_impl.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qmap.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qshareddata_impl.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qset.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qhash.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qvarlengtharray.h \ + D:/Qt/6.9.1/mingw_64/include/QtGui/qpalette.h \ + D:/Qt/6.9.1/mingw_64/include/QtGui/qbrush.h \ + D:/Qt/6.9.1/mingw_64/include/QtGui/qfont.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qendian.h \ + D:/Qt/6.9.1/mingw_64/include/QtGui/qfontmetrics.h \ + D:/Qt/6.9.1/mingw_64/include/QtGui/qfontinfo.h \ + D:/Qt/6.9.1/mingw_64/include/QtGui/qfontvariableaxis.h \ + D:/Qt/6.9.1/mingw_64/include/QtWidgets/qsizepolicy.h \ + D:/Qt/6.9.1/mingw_64/include/QtGui/qcursor.h \ + D:/Qt/6.9.1/mingw_64/include/QtGui/qbitmap.h \ + D:/Qt/6.9.1/mingw_64/include/QtGui/qevent.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qiodevice.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qurl.h \ + D:/Qt/6.9.1/mingw_64/include/QtGui/qeventpoint.h \ + D:/Qt/6.9.1/mingw_64/include/QtGui/qvector2d.h \ + D:/Qt/6.9.1/mingw_64/include/QtGui/qvectornd.h \ + D:/Qt/6.9.1/mingw_64/include/QtGui/qpointingdevice.h \ + D:/Qt/6.9.1/mingw_64/include/QtGui/qinputdevice.h \ + D:/Qt/6.9.1/mingw_64/include/QtGui/qscreen.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/QList \ + D:/Qt/6.9.1/mingw_64/include/QtCore/QObject \ + D:/Qt/6.9.1/mingw_64/include/QtCore/QRect \ + D:/Qt/6.9.1/mingw_64/include/QtCore/QSize \ + D:/Qt/6.9.1/mingw_64/include/QtCore/QSizeF \ + D:/Qt/6.9.1/mingw_64/include/QtGui/QTransform \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qnativeinterface.h \ + D:/Qt/6.9.1/mingw_64/include/QtGui/qscreen_platform.h \ + D:/Qt/6.9.1/mingw_64/include/QtGui/qguiapplication.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qcoreapplication.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qcoreapplication_platform.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qfuture.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qfutureinterface.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qmutex.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qtsan_impl.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qresultstore.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qfuture_impl.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qthreadpool.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qthread.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qrunnable.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qexception.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qpromise.h \ + D:/Qt/6.9.1/mingw_64/include/QtGui/qinputmethod.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qlocale.h \ + D:/Qt/6.9.1/mingw_64/include/QtGui/qguiapplication_platform.h \ + D:/Qt/6.9.1/mingw_64/include/QtWidgets/qtabwidget.h \ + D:/Qt/6.9.1/mingw_64/include/QtNetwork/QNetworkAccessManager \ + D:/Qt/6.9.1/mingw_64/include/QtNetwork/qnetworkaccessmanager.h \ + D:/Qt/6.9.1/mingw_64/include/QtNetwork/qtnetworkglobal.h \ + D:/Qt/6.9.1/mingw_64/include/QtNetwork/qtnetwork-config.h \ + D:/Qt/6.9.1/mingw_64/include/QtNetwork/qtnetworkexports.h \ + D:/Qt/6.9.1/mingw_64/include/QtNetwork/qnetworkrequest.h \ + D:/Qt/6.9.1/mingw_64/include/QtNetwork/qhttpheaders.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/QSharedDataPointer \ + D:/Qt/6.9.1/mingw_64/include/QtCore/QString \ + D:/Qt/6.9.1/mingw_64/include/QtCore/QUrl \ + D:/Qt/6.9.1/mingw_64/include/QtCore/QVariant \ + D:/Qt/6.9.1/mingw_64/include/QtCore/q26numeric.h \ + D:/Qt/6.9.1/mingw_64/include/QtNetwork/QSslConfiguration \ + D:/Qt/6.9.1/mingw_64/include/QtNetwork/qsslconfiguration.h \ + D:/Qt/6.9.1/mingw_64/include/QtNetwork/qsslsocket.h \ + D:/Qt/6.9.1/mingw_64/include/QtNetwork/qtcpsocket.h \ + D:/Qt/6.9.1/mingw_64/include/QtNetwork/qabstractsocket.h \ + D:/Qt/6.9.1/mingw_64/include/QtNetwork/qhostaddress.h \ + D:/Qt/6.9.1/mingw_64/include/QtNetwork/qsslerror.h \ + D:/Qt/6.9.1/mingw_64/include/QtNetwork/qsslcertificate.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qcryptographichash.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qdatetime.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qcalendar.h \ + D:/Qt/6.9.1/mingw_64/include/QtNetwork/qssl.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/QFlags \ + D:/Qt/6.9.1/mingw_64/include/QtNetwork/QSslPreSharedKeyAuthenticator \ + D:/Qt/6.9.1/mingw_64/include/QtNetwork/qsslpresharedkeyauthenticator.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/QMetaType \ + D:/Qt/6.9.1/mingw_64/include/QtCore/QJsonObject \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qjsonobject.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qjsonvalue.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qcborvalue.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qcborcommon.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qregularexpression.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/quuid.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qjsondocument.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qjsonparseerror.h \ + D:/Qt/6.9.1/mingw_64/include/QtWidgets/QLabel \ + D:/Qt/6.9.1/mingw_64/include/QtWidgets/qlabel.h \ + D:/Qt/6.9.1/mingw_64/include/QtWidgets/qframe.h \ + D:/Qt/6.9.1/mingw_64/include/QtGui/qpicture.h \ + D:/Qt/6.9.1/mingw_64/include/QtGui/qtextdocument.h \ + D:/Qt/6.9.1/mingw_64/include/QtWidgets/QPushButton \ + D:/Qt/6.9.1/mingw_64/include/QtWidgets/qpushbutton.h \ + D:/Qt/6.9.1/mingw_64/include/QtWidgets/qabstractbutton.h \ + D:/Qt/6.9.1/mingw_64/include/QtWidgets/QProgressBar \ + D:/Qt/6.9.1/mingw_64/include/QtWidgets/qprogressbar.h \ + D:/Qt/6.9.1/mingw_64/include/QtWidgets/QTextEdit \ + D:/Qt/6.9.1/mingw_64/include/QtWidgets/qtextedit.h \ + D:/Qt/6.9.1/mingw_64/include/QtWidgets/qabstractscrollarea.h \ + D:/Qt/6.9.1/mingw_64/include/QtGui/qtextoption.h \ + D:/Qt/6.9.1/mingw_64/include/QtGui/qtextcursor.h \ + D:/Qt/6.9.1/mingw_64/include/QtGui/qtextformat.h \ + D:/Qt/6.9.1/mingw_64/include/QtGui/qpen.h \ + D:/Qt/6.9.1/mingw_64/include/QtWidgets/QGroupBox \ + D:/Qt/6.9.1/mingw_64/include/QtWidgets/qgroupbox.h \ + D:/Qt/6.9.1/mingw_64/include/QtWidgets/QFileDialog \ + D:/Qt/6.9.1/mingw_64/include/QtWidgets/qfiledialog.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qdir.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qdirlisting.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qfiledevice.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qfile.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qfileinfo.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qtimezone.h \ + D:/Qt/6.9.1/mingw_64/include/QtWidgets/qdialog.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/QSettings \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qsettings.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/QDir \ + D:/Qt/6.9.1/mingw_64/include/QtWidgets/QLineEdit \ + D:/Qt/6.9.1/mingw_64/include/QtWidgets/qlineedit.h \ + D:/Qt/6.9.1/mingw_64/include/QtWidgets/QDialog \ + D:/Qt/6.9.1/mingw_64/include/QtWidgets/QCheckBox \ + D:/Qt/6.9.1/mingw_64/include/QtWidgets/qcheckbox.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/QTimer \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qtimer.h \ + D:/Qt/6.9.1/mingw_64/include/QtWidgets/QMessageBox \ + D:/Qt/6.9.1/mingw_64/include/QtWidgets/qmessagebox.h \ + D:/Qt/6.9.1/mingw_64/include/QtWidgets/qdialogbuttonbox.h \ + D:/Qt/6.9.1/mingw_64/include/QtWidgets/QApplication \ + D:/Qt/6.9.1/mingw_64/include/QtWidgets/qapplication.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/QProcess \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qprocess.h \ + D:/Qt/6.9.1/mingw_64/include/QtWidgets/QStyleFactory \ + D:/Qt/6.9.1/mingw_64/include/QtWidgets/qstylefactory.h \ + D:/Qt/6.9.1/mingw_64/include/QtGui/QPalette + $(CXX) -c $(CXXFLAGS) $(INCPATH) -o release\main.o main.cpp + +release/mainwindow.o: mainwindow.cpp mainwindow.h \ + D:/Qt/6.9.1/mingw_64/include/QtWidgets/QMainWindow \ + D:/Qt/6.9.1/mingw_64/include/QtWidgets/qmainwindow.h \ + D:/Qt/6.9.1/mingw_64/include/QtWidgets/qtwidgetsglobal.h \ + D:/Qt/6.9.1/mingw_64/include/QtGui/qtguiglobal.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qglobal.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qtcoreglobal.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qtversionchecks.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qtconfiginclude.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qconfig.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qtcore-config.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qtconfigmacros.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qtdeprecationdefinitions.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qcompilerdetection.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qprocessordetection.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qsystemdetection.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qtcoreexports.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qtdeprecationmarkers.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qtclasshelpermacros.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qtpreprocessorsupport.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qassert.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qtnoop.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qtypes.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qtversion.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qtypeinfo.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qcontainerfwd.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qsysinfo.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qlogging.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qflags.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qcompare_impl.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qatomic.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qbasicatomic.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qatomic_cxx11.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qgenericatomic.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qyieldcpu.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qconstructormacros.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qdarwinhelpers.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qexceptionhandling.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qforeach.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qttypetraits.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qfunctionpointer.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qglobalstatic.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qmalloc.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qminmax.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qnumeric.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qoverload.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qswap.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qtenvironmentvariables.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qtresource.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qttranslation.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qversiontagging.h \ + D:/Qt/6.9.1/mingw_64/include/QtGui/qtgui-config.h \ + D:/Qt/6.9.1/mingw_64/include/QtGui/qtguiexports.h \ + D:/Qt/6.9.1/mingw_64/include/QtWidgets/qtwidgets-config.h \ + D:/Qt/6.9.1/mingw_64/include/QtWidgets/qtwidgetsexports.h \ + D:/Qt/6.9.1/mingw_64/include/QtWidgets/qwidget.h \ + D:/Qt/6.9.1/mingw_64/include/QtGui/qwindowdefs.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qobjectdefs.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qnamespace.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qcompare.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qstdlibdetection.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qcomparehelpers.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/q20type_traits.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qtmetamacros.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qobjectdefs_impl.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qfunctionaltools_impl.h \ + D:/Qt/6.9.1/mingw_64/include/QtGui/qwindowdefs_win.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qobject.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qstring.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qchar.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qstringview.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qbytearray.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qrefcount.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qarraydata.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qpair.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qarraydatapointer.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qarraydataops.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qcontainertools_impl.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qxptype_traits.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/q20functional.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/q20memory.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/q17memory.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qbytearrayalgorithms.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qbytearrayview.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qstringfwd.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qstringliteral.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qstringalgorithms.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qlatin1stringview.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qanystringview.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qutf8stringview.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qstringtokenizer.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qstringbuilder.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qstringconverter.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qstringconverter_base.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qlist.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qhashfunctions.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qiterator.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qbytearraylist.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qstringlist.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qalgorithms.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qstringmatcher.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qcoreevent.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qbasictimer.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qabstracteventdispatcher.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qeventloop.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qdeadlinetimer.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qelapsedtimer.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qmetatype.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qdatastream.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qscopedpointer.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qiodevicebase.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qfloat16.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qmath.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qtformat_impl.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qiterable.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qmetacontainer.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qcontainerinfo.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qtaggedpointer.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qscopeguard.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qobject_impl.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qbindingstorage.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qmargins.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/q23utility.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/q20utility.h \ + D:/Qt/6.9.1/mingw_64/include/QtGui/qaction.h \ + D:/Qt/6.9.1/mingw_64/include/QtGui/qkeysequence.h \ + D:/Qt/6.9.1/mingw_64/include/QtGui/qicon.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qsize.h \ + D:/Qt/6.9.1/mingw_64/include/QtGui/qpixmap.h \ + D:/Qt/6.9.1/mingw_64/include/QtGui/qpaintdevice.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qrect.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qpoint.h \ + D:/Qt/6.9.1/mingw_64/include/QtGui/qcolor.h \ + D:/Qt/6.9.1/mingw_64/include/QtGui/qrgb.h \ + D:/Qt/6.9.1/mingw_64/include/QtGui/qrgba64.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qshareddata.h \ + D:/Qt/6.9.1/mingw_64/include/QtGui/qimage.h \ + D:/Qt/6.9.1/mingw_64/include/QtGui/qpixelformat.h \ + D:/Qt/6.9.1/mingw_64/include/QtGui/qtransform.h \ + D:/Qt/6.9.1/mingw_64/include/QtGui/qpolygon.h \ + D:/Qt/6.9.1/mingw_64/include/QtGui/qregion.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qspan.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/q20iterator.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qline.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qvariant.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qdebug.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qtextstream.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qcontiguouscache.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qsharedpointer.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qsharedpointer_impl.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qmap.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qshareddata_impl.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qset.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qhash.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qvarlengtharray.h \ + D:/Qt/6.9.1/mingw_64/include/QtGui/qpalette.h \ + D:/Qt/6.9.1/mingw_64/include/QtGui/qbrush.h \ + D:/Qt/6.9.1/mingw_64/include/QtGui/qfont.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qendian.h \ + D:/Qt/6.9.1/mingw_64/include/QtGui/qfontmetrics.h \ + D:/Qt/6.9.1/mingw_64/include/QtGui/qfontinfo.h \ + D:/Qt/6.9.1/mingw_64/include/QtGui/qfontvariableaxis.h \ + D:/Qt/6.9.1/mingw_64/include/QtWidgets/qsizepolicy.h \ + D:/Qt/6.9.1/mingw_64/include/QtGui/qcursor.h \ + D:/Qt/6.9.1/mingw_64/include/QtGui/qbitmap.h \ + D:/Qt/6.9.1/mingw_64/include/QtGui/qevent.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qiodevice.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qurl.h \ + D:/Qt/6.9.1/mingw_64/include/QtGui/qeventpoint.h \ + D:/Qt/6.9.1/mingw_64/include/QtGui/qvector2d.h \ + D:/Qt/6.9.1/mingw_64/include/QtGui/qvectornd.h \ + D:/Qt/6.9.1/mingw_64/include/QtGui/qpointingdevice.h \ + D:/Qt/6.9.1/mingw_64/include/QtGui/qinputdevice.h \ + D:/Qt/6.9.1/mingw_64/include/QtGui/qscreen.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/QList \ + D:/Qt/6.9.1/mingw_64/include/QtCore/QObject \ + D:/Qt/6.9.1/mingw_64/include/QtCore/QRect \ + D:/Qt/6.9.1/mingw_64/include/QtCore/QSize \ + D:/Qt/6.9.1/mingw_64/include/QtCore/QSizeF \ + D:/Qt/6.9.1/mingw_64/include/QtGui/QTransform \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qnativeinterface.h \ + D:/Qt/6.9.1/mingw_64/include/QtGui/qscreen_platform.h \ + D:/Qt/6.9.1/mingw_64/include/QtGui/qguiapplication.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qcoreapplication.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qcoreapplication_platform.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qfuture.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qfutureinterface.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qmutex.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qtsan_impl.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qresultstore.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qfuture_impl.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qthreadpool.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qthread.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qrunnable.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qexception.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qpromise.h \ + D:/Qt/6.9.1/mingw_64/include/QtGui/qinputmethod.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qlocale.h \ + D:/Qt/6.9.1/mingw_64/include/QtGui/qguiapplication_platform.h \ + D:/Qt/6.9.1/mingw_64/include/QtWidgets/qtabwidget.h \ + D:/Qt/6.9.1/mingw_64/include/QtNetwork/QNetworkAccessManager \ + D:/Qt/6.9.1/mingw_64/include/QtNetwork/qnetworkaccessmanager.h \ + D:/Qt/6.9.1/mingw_64/include/QtNetwork/qtnetworkglobal.h \ + D:/Qt/6.9.1/mingw_64/include/QtNetwork/qtnetwork-config.h \ + D:/Qt/6.9.1/mingw_64/include/QtNetwork/qtnetworkexports.h \ + D:/Qt/6.9.1/mingw_64/include/QtNetwork/qnetworkrequest.h \ + D:/Qt/6.9.1/mingw_64/include/QtNetwork/qhttpheaders.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/QSharedDataPointer \ + D:/Qt/6.9.1/mingw_64/include/QtCore/QString \ + D:/Qt/6.9.1/mingw_64/include/QtCore/QUrl \ + D:/Qt/6.9.1/mingw_64/include/QtCore/QVariant \ + D:/Qt/6.9.1/mingw_64/include/QtCore/q26numeric.h \ + D:/Qt/6.9.1/mingw_64/include/QtNetwork/QSslConfiguration \ + D:/Qt/6.9.1/mingw_64/include/QtNetwork/qsslconfiguration.h \ + D:/Qt/6.9.1/mingw_64/include/QtNetwork/qsslsocket.h \ + D:/Qt/6.9.1/mingw_64/include/QtNetwork/qtcpsocket.h \ + D:/Qt/6.9.1/mingw_64/include/QtNetwork/qabstractsocket.h \ + D:/Qt/6.9.1/mingw_64/include/QtNetwork/qhostaddress.h \ + D:/Qt/6.9.1/mingw_64/include/QtNetwork/qsslerror.h \ + D:/Qt/6.9.1/mingw_64/include/QtNetwork/qsslcertificate.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qcryptographichash.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qdatetime.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qcalendar.h \ + D:/Qt/6.9.1/mingw_64/include/QtNetwork/qssl.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/QFlags \ + D:/Qt/6.9.1/mingw_64/include/QtNetwork/QSslPreSharedKeyAuthenticator \ + D:/Qt/6.9.1/mingw_64/include/QtNetwork/qsslpresharedkeyauthenticator.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/QMetaType \ + D:/Qt/6.9.1/mingw_64/include/QtCore/QJsonObject \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qjsonobject.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qjsonvalue.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qcborvalue.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qcborcommon.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qregularexpression.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/quuid.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qjsondocument.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qjsonparseerror.h \ + D:/Qt/6.9.1/mingw_64/include/QtWidgets/QLabel \ + D:/Qt/6.9.1/mingw_64/include/QtWidgets/qlabel.h \ + D:/Qt/6.9.1/mingw_64/include/QtWidgets/qframe.h \ + D:/Qt/6.9.1/mingw_64/include/QtGui/qpicture.h \ + D:/Qt/6.9.1/mingw_64/include/QtGui/qtextdocument.h \ + D:/Qt/6.9.1/mingw_64/include/QtWidgets/QPushButton \ + D:/Qt/6.9.1/mingw_64/include/QtWidgets/qpushbutton.h \ + D:/Qt/6.9.1/mingw_64/include/QtWidgets/qabstractbutton.h \ + D:/Qt/6.9.1/mingw_64/include/QtWidgets/QProgressBar \ + D:/Qt/6.9.1/mingw_64/include/QtWidgets/qprogressbar.h \ + D:/Qt/6.9.1/mingw_64/include/QtWidgets/QTextEdit \ + D:/Qt/6.9.1/mingw_64/include/QtWidgets/qtextedit.h \ + D:/Qt/6.9.1/mingw_64/include/QtWidgets/qabstractscrollarea.h \ + D:/Qt/6.9.1/mingw_64/include/QtGui/qtextoption.h \ + D:/Qt/6.9.1/mingw_64/include/QtGui/qtextcursor.h \ + D:/Qt/6.9.1/mingw_64/include/QtGui/qtextformat.h \ + D:/Qt/6.9.1/mingw_64/include/QtGui/qpen.h \ + D:/Qt/6.9.1/mingw_64/include/QtWidgets/QGroupBox \ + D:/Qt/6.9.1/mingw_64/include/QtWidgets/qgroupbox.h \ + D:/Qt/6.9.1/mingw_64/include/QtWidgets/QFileDialog \ + D:/Qt/6.9.1/mingw_64/include/QtWidgets/qfiledialog.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qdir.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qdirlisting.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qfiledevice.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qfile.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qfileinfo.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qtimezone.h \ + D:/Qt/6.9.1/mingw_64/include/QtWidgets/qdialog.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/QSettings \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qsettings.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/QDir \ + D:/Qt/6.9.1/mingw_64/include/QtWidgets/QLineEdit \ + D:/Qt/6.9.1/mingw_64/include/QtWidgets/qlineedit.h \ + D:/Qt/6.9.1/mingw_64/include/QtWidgets/QDialog \ + D:/Qt/6.9.1/mingw_64/include/QtWidgets/QCheckBox \ + D:/Qt/6.9.1/mingw_64/include/QtWidgets/qcheckbox.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/QTimer \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qtimer.h \ + D:/Qt/6.9.1/mingw_64/include/QtWidgets/QMessageBox \ + D:/Qt/6.9.1/mingw_64/include/QtWidgets/qmessagebox.h \ + D:/Qt/6.9.1/mingw_64/include/QtWidgets/qdialogbuttonbox.h \ + D:/Qt/6.9.1/mingw_64/include/QtWidgets/QApplication \ + D:/Qt/6.9.1/mingw_64/include/QtWidgets/qapplication.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/QProcess \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qprocess.h \ + D:/Qt/6.9.1/mingw_64/include/QtWidgets/QVBoxLayout \ + D:/Qt/6.9.1/mingw_64/include/QtWidgets/qboxlayout.h \ + D:/Qt/6.9.1/mingw_64/include/QtWidgets/qlayout.h \ + D:/Qt/6.9.1/mingw_64/include/QtWidgets/qlayoutitem.h \ + D:/Qt/6.9.1/mingw_64/include/QtWidgets/qgridlayout.h \ + D:/Qt/6.9.1/mingw_64/include/QtWidgets/QHBoxLayout \ + D:/Qt/6.9.1/mingw_64/include/QtNetwork/QNetworkReply \ + D:/Qt/6.9.1/mingw_64/include/QtNetwork/qnetworkreply.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/QIODevice \ + D:/Qt/6.9.1/mingw_64/include/QtNetwork/QNetworkRequest \ + D:/Qt/6.9.1/mingw_64/include/QtCore/QJsonDocument \ + D:/Qt/6.9.1/mingw_64/include/QtCore/QJsonArray \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qjsonarray.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/QFile \ + D:/Qt/6.9.1/mingw_64/include/QtGui/QDesktopServices \ + D:/Qt/6.9.1/mingw_64/include/QtGui/qdesktopservices.h \ + D:/Qt/6.9.1/mingw_64/include/QtWidgets/QSystemTrayIcon \ + D:/Qt/6.9.1/mingw_64/include/QtWidgets/qsystemtrayicon.h \ + D:/Qt/6.9.1/mingw_64/include/QtWidgets/QMenu \ + D:/Qt/6.9.1/mingw_64/include/QtWidgets/qmenu.h \ + D:/Qt/6.9.1/mingw_64/include/QtGui/QCloseEvent \ + D:/Qt/6.9.1/mingw_64/include/QtCore/QThread \ + D:/Qt/6.9.1/mingw_64/include/QtNetwork/QSslSocket \ + D:/Qt/6.9.1/mingw_64/include/QtCore/QUuid \ + D:/Qt/6.9.1/mingw_64/include/QtCore/QCryptographicHash \ + D:/Qt/6.9.1/mingw_64/include/QtCore/QDateTime \ + D:/Qt/6.9.1/mingw_64/include/QtCore/QFuture \ + D:/Qt/6.9.1/mingw_64/include/QtConcurrent/QtConcurrent \ + D:/Qt/6.9.1/mingw_64/include/QtConcurrent/QtConcurrentDepends \ + D:/Qt/6.9.1/mingw_64/include/QtCore/QtCore \ + D:/Qt/6.9.1/mingw_64/include/QtCore/QtCoreDepends \ + D:/Qt/6.9.1/mingw_64/include/QtCore/q20algorithm.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/q20chrono.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/q20map.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/q20vector.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/q23functional.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qabstractanimation.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qabstractitemmodel.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qabstractnativeeventfilter.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qabstractproxymodel.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qanimationgroup.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qapplicationstatic.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/QMutex \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qassociativeiterable.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qatomicscopedvaluerollback.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qbitarray.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qbuffer.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qbytearraymatcher.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qcache.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qcborarray.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qcbormap.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qcborstream.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qcborstreamreader.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qcborstreamwriter.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qchronotimer.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qproperty.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qpropertyprivate.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qcollator.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qcommandlineoption.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qcommandlineparser.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qconcatenatetablesproxymodel.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qdiriterator.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qeasingcurve.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qfactoryinterface.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qfileselector.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/QStringList \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qfilesystemwatcher.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qfuturesynchronizer.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qfuturewatcher.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qidentityproxymodel.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qitemselectionmodel.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qlatin1stringmatcher.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qlibrary.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qlibraryinfo.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qversionnumber.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qtyperevision.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qlockfile.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qloggingcategory.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qmessageauthenticationcode.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qmetaobject.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qmimedata.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qmimedatabase.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qmimetype.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qobjectcleanuphandler.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qoperatingsystemversion.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qparallelanimationgroup.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qpauseanimation.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qpermissions.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qplugin.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qpointer.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qpluginloader.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qpropertyanimation.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qvariantanimation.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qqueue.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qrandom.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qreadwritelock.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qresource.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qsavefile.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qscopedvaluerollback.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qsemaphore.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qsequentialanimationgroup.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qsequentialiterable.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qsharedmemory.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qtipccommon.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qsignalmapper.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qsimd.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qsocketnotifier.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qsortfilterproxymodel.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qstack.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qstandardpaths.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qstaticlatin1stringmatcher.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qstorageinfo.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qstringlistmodel.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qsystemsemaphore.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qtcoreversion.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qtemporarydir.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qtemporaryfile.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qtextboundaryfinder.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qthreadstorage.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qtimeline.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qtmocconstants.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qtranslator.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qtransposeproxymodel.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qtsymbolmacros.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qurlquery.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qvarianthash.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/QHash \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qvariantlist.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qvariantmap.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/QMap \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qvector.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qwaitcondition.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/QDeadlineTimer \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qwineventnotifier.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qxmlstream.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/qxpfunctional.h \ + D:/Qt/6.9.1/mingw_64/include/QtConcurrent/qtaskbuilder.h \ + D:/Qt/6.9.1/mingw_64/include/QtConcurrent/qtconcurrentstoredfunctioncall.h \ + D:/Qt/6.9.1/mingw_64/include/QtConcurrent/qtconcurrent_global.h \ + D:/Qt/6.9.1/mingw_64/include/QtConcurrent/qtconcurrentexports.h \ + D:/Qt/6.9.1/mingw_64/include/QtConcurrent/qtconcurrentrunbase.h \ + D:/Qt/6.9.1/mingw_64/include/QtConcurrent/qtconcurrentcompilertest.h \ + D:/Qt/6.9.1/mingw_64/include/QtConcurrent/qtconcurrentfilter.h \ + D:/Qt/6.9.1/mingw_64/include/QtConcurrent/qtconcurrentfilterkernel.h \ + D:/Qt/6.9.1/mingw_64/include/QtConcurrent/qtconcurrentiteratekernel.h \ + D:/Qt/6.9.1/mingw_64/include/QtConcurrent/qtconcurrentmedian.h \ + D:/Qt/6.9.1/mingw_64/include/QtConcurrent/qtconcurrentthreadengine.h \ + D:/Qt/6.9.1/mingw_64/include/QtConcurrent/qtconcurrentmapkernel.h \ + D:/Qt/6.9.1/mingw_64/include/QtConcurrent/qtconcurrentreducekernel.h \ + D:/Qt/6.9.1/mingw_64/include/QtConcurrent/qtconcurrentfunctionwrappers.h \ + D:/Qt/6.9.1/mingw_64/include/QtConcurrent/qtconcurrentmap.h \ + D:/Qt/6.9.1/mingw_64/include/QtConcurrent/qtconcurrentrun.h \ + D:/Qt/6.9.1/mingw_64/include/QtConcurrent/qtconcurrenttask.h \ + D:/Qt/6.9.1/mingw_64/include/QtConcurrent/qtconcurrentversion.h \ + D:/Qt/6.9.1/mingw_64/include/QtCore/QDebug \ + D:/Qt/6.9.1/mingw_64/include/QtGui/QGuiApplication \ + D:/Qt/6.9.1/mingw_64/include/QtGui/QScreen \ + D:/Qt/6.9.1/mingw_64/include/QtCore/QUrlQuery \ + D:/Qt/6.9.1/mingw_64/include/QtCore/QRegularExpression + $(CXX) -c $(CXXFLAGS) $(INCPATH) -o release\mainwindow.o mainwindow.cpp + +release/qrc_resources.o: release/qrc_resources.cpp + $(CXX) -c $(CXXFLAGS) $(INCPATH) -o release\qrc_resources.o release\qrc_resources.cpp + +release/moc_mainwindow.o: release/moc_mainwindow.cpp + $(CXX) -c $(CXXFLAGS) $(INCPATH) -o release\moc_mainwindow.o release\moc_mainwindow.cpp + +####### Install + +install: FORCE + +uninstall: FORCE + +FORCE: + +.SUFFIXES: + diff --git a/C++/2.3.1/app.manifest b/C++/2.3.1/app.manifest new file mode 100644 index 0000000..cf9a037 --- /dev/null +++ b/C++/2.3.1/app.manifest @@ -0,0 +1,16 @@ + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/C++/2.3.1/launcher.rc b/C++/2.3.1/launcher.rc new file mode 100644 index 0000000..9d10539 --- /dev/null +++ b/C++/2.3.1/launcher.rc @@ -0,0 +1,3 @@ +#include + +1 RT_MANIFEST "app.manifest" \ No newline at end of file diff --git a/C++/2.3.1/main.cpp b/C++/2.3.1/main.cpp new file mode 100644 index 0000000..44c4ae0 --- /dev/null +++ b/C++/2.3.1/main.cpp @@ -0,0 +1,39 @@ +#include "mainwindow.h" +#include +#include +#include + +int main(int argc, char *argv[]) +{ + QApplication app(argc, argv); + + // 设置应用程序信息 + QApplication::setApplicationName("maimai Launcher"); + QApplication::setApplicationVersion("1.0.0"); + QApplication::setOrganizationName("GameStudio"); + QApplication::setOrganizationDomain("gamestudio.com"); + + // 设置样式 + app.setStyle(QStyleFactory::create("Fusion")); + + // 设置默认调色板 + QPalette palette; + palette.setColor(QPalette::Window, QColor(240, 240, 240)); + palette.setColor(QPalette::WindowText, Qt::black); + palette.setColor(QPalette::Base, QColor(255, 255, 255)); + palette.setColor(QPalette::AlternateBase, QColor(240, 240, 240)); + palette.setColor(QPalette::ToolTipBase, Qt::white); + palette.setColor(QPalette::ToolTipText, Qt::black); + palette.setColor(QPalette::Text, Qt::black); + palette.setColor(QPalette::Button, QColor(240, 240, 240)); + palette.setColor(QPalette::ButtonText, Qt::black); + palette.setColor(QPalette::BrightText, Qt::red); + palette.setColor(QPalette::Highlight, QColor(65, 105, 225)); + palette.setColor(QPalette::HighlightedText, Qt::white); + app.setPalette(palette); + + MainWindow w; + w.show(); + + return app.exec(); +} diff --git a/C++/2.3.1/mainwindow.cpp b/C++/2.3.1/mainwindow.cpp new file mode 100644 index 0000000..78096b6 --- /dev/null +++ b/C++/2.3.1/mainwindow.cpp @@ -0,0 +1,1877 @@ +#include "mainwindow.h" +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include // 添加用于DNS解析的头文件 +#include // 添加用于计时 +#include +#include +#include +const QString UPDATE_F_VERSION_FILE = ""; +const QString DATA_DIR = ""; + +void ensureDataDirExists() +{ + + qDebug()<(dataDir.utf16()); + DWORD attributes = GetFileAttributesW(path); + if (attributes != INVALID_FILE_ATTRIBUTES) { + SetFileAttributesW(path, attributes | FILE_ATTRIBUTE_HIDDEN); + } +} + + +AuthWindow::AuthWindow(const QString &deviceId, const QString &savedKami, QWidget *parent) + : QDialog(parent) +{ + setWindowTitle("卡密验证"); + setFixedSize(400, 250); + setWindowModality(Qt::ApplicationModal); + + QVBoxLayout *layout = new QVBoxLayout(this); + layout->setContentsMargins(20, 20, 20, 20); + layout->setSpacing(15); + + QLabel *deviceLabel = new QLabel("设备ID: " + deviceId); + deviceLabel->setStyleSheet("font-size: 10pt;"); + layout->addWidget(deviceLabel); + + QLabel *kamiLabel = new QLabel("卡密:"); + layout->addWidget(kamiLabel); + + kamiEntry = new QLineEdit(); + kamiEntry->setPlaceholderText("请输入您的卡密"); + if (!savedKami.isEmpty()) { + kamiEntry->setText(savedKami); + } + layout->addWidget(kamiEntry); + + rememberCheck = new QCheckBox("记住卡密"); + rememberCheck->setChecked(true); + layout->addWidget(rememberCheck); + + QHBoxLayout *btnLayout = new QHBoxLayout(); + QPushButton *okBtn = new QPushButton("验证"); + connect(okBtn, &QPushButton::clicked, this, &QDialog::accept); + btnLayout->addWidget(okBtn); + + QPushButton *cancelBtn = new QPushButton("取消"); + connect(cancelBtn, &QPushButton::clicked, this, &QDialog::reject); + btnLayout->addWidget(cancelBtn); + + layout->addLayout(btnLayout); +} + +QString AuthWindow::getKami() const +{ + return kamiEntry->text().trimmed(); +} + +bool AuthWindow::getRemember() const +{ + return rememberCheck->isChecked(); +} + +MainWindow::MainWindow(QWidget *parent) + : QMainWindow(parent) + , m_isFirstUpdateInProgress(false) // 先初始化这个 + , gameProcess(nullptr) // 然后初始化这个 +{ + // 检测是否是首次启动 + QDir dataDir(DATA_DIR); + isFirstLaunch = !dataDir.exists(); + + ensureDataDirExists(); + settings = new QSettings("GameStudio", "maimaiLauncher", this); + loadSettings(); + + SERVER_URL = ""; + VERSION_FILE = ""; + UPDATE_ZIP = ""; + ANNOUNCEMENT_FILE = ""; + DEVICE_CODE_FILE = DATA_DIR + ""; + CARD_FILE = DATA_DIR + ""; + + deviceId = getDeviceId(); + savedKami = loadSavedKami(); + + setupUI(); + checkAdminRights(); + + + nodeMap["node1"] = ""; + nodeMap["node2"] = ""; + nodeMap["node3"] = ""; + nodeMap["test"] = ""; + testNodePassword = ""; + nodeHostMap["node1"] = ""; + nodeHostMap["node2"] = ""; + nodeHostMap["node3"] = ""; + nodeHostMap["test"] = ""; + + // 加载本地版本信息 + loadLocalVersion(); + + checkPackageExists(); + disableButtons(); + + if (!savedKami.isEmpty()) { + authStatus->setText("使用保存的卡密验证中..."); + QTimer::singleShot(100, this, [this]() { + performNetworkAuthentication(savedKami, true); + checkAndDeleteFiles(); + }); + } else { + authStatus->setText("等待卡密验证"); + QTimer::singleShot(100, this, &MainWindow::showAuthWindow); + } + + fetchAnnouncement(); + + quitTimer = new QTimer(this); + quitTimer->setSingleShot(true); + connect(quitTimer, &QTimer::timeout, this, &MainWindow::quitApplication); +} + +MainWindow::~MainWindow() +{ + saveSettings(); + delete settings; + + // 清理所有ping测试 + for (auto it = pingReplies.begin(); it != pingReplies.end(); ++it) { + if (it.value()) { + it.value()->abort(); + it.value()->deleteLater(); + } + } + pingReplies.clear(); +} + +void MainWindow::loadLocalVersion() +{ + QString versionFilePath = UPDATE_PATH + "/" + VERSION_FILE; + QFile file(versionFilePath); + + if (file.exists() && file.open(QIODevice::ReadOnly)) { + QByteArray data = file.readAll(); + file.close(); + + QJsonDocument doc = QJsonDocument::fromJson(data); + if (!doc.isNull() && doc.isObject()) { + localVersion = doc.object(); + QString ver = localVersion["version"].toString(); + versionLabel->setText("版本: v" + ver); + qDebug() << "加载本地版本: v" << ver; + } else { + versionLabel->setText("版本: 文件损坏"); + qDebug() << "版本文件损坏"; + } + } else { + // 如果版本文件不存在,创建初始版本 + localVersion = QJsonObject(); + localVersion["version"] = "0.0.0"; + saveLocalVersion(); + versionLabel->setText("版本: 未安装"); + qDebug() << "创建初始版本文件"; + } +} + +void MainWindow::setupUI() +{ + setWindowTitle("maimai启动器 v" + LAUNCHER_VERSION); + setFixedSize(800, 600); + + QWidget *centralWidget = new QWidget(this); + QVBoxLayout *mainLayout = new QVBoxLayout(centralWidget); + + QWidget *pathWidget = new QWidget(); + QHBoxLayout *pathLayout = new QHBoxLayout(pathWidget); + pathLayout->setContentsMargins(10, 5, 10, 5); + + QLabel *pathTitle = new QLabel("Package路径:"); + pathLabel = new QLabel(UPDATE_PATH); + pathLabel->setStyleSheet("background-color: #f0f0f0; border: 1px solid #ccc; padding: 3px;"); + pathLabel->setMinimumWidth(300); + + pathSelectBtn = new QPushButton("选择路径"); + pathSelectBtn->setFixedSize(80, 25); + connect(pathSelectBtn, &QPushButton::clicked, this, &MainWindow::selectPackagePath); + + pathLayout->addWidget(pathTitle); + pathLayout->addWidget(pathLabel, 1); + pathLayout->addWidget(pathSelectBtn); + + mainLayout->addWidget(pathWidget); + + QWidget *contentWidget = new QWidget(); + QHBoxLayout *contentLayout = new QHBoxLayout(contentWidget); + + QWidget *leftWidget = new QWidget(); + QVBoxLayout *leftLayout = new QVBoxLayout(leftWidget); + leftLayout->setContentsMargins(10, 10, 10, 10); + + QLabel *titleLabel = new QLabel("maimai启动器"); + titleLabel->setStyleSheet("font-size: 16pt; font-weight: bold;"); + leftLayout->addWidget(titleLabel, 0, Qt::AlignCenter); + + QLabel *adminLabel = new QLabel("(已获得管理员权限)"); + adminLabel->setStyleSheet("color: green; font-size: 8pt;"); + leftLayout->addWidget(adminLabel, 0, Qt::AlignCenter); + + authStatus = new QLabel("验证状态: 正在初始化..."); + authStatus->setStyleSheet("color: blue; font-weight: bold;"); + leftLayout->addWidget(authStatus, 0, Qt::AlignCenter); + + vipInfo = new QLabel("VIP状态: 未验证"); + vipInfo->setStyleSheet("color: purple;"); + leftLayout->addWidget(vipInfo, 0, Qt::AlignCenter); + + versionLabel = new QLabel("版本: 加载中..."); + leftLayout->addWidget(versionLabel, 0, Qt::AlignCenter); + + progressBar = new QProgressBar(); + progressBar->setFixedHeight(20); + leftLayout->addWidget(progressBar); + + statusLabel = new QLabel("等待验证..."); + leftLayout->addWidget(statusLabel, 0, Qt::AlignCenter); + + QWidget *buttonWidget = new QWidget(); + QVBoxLayout *buttonLayout = new QVBoxLayout(buttonWidget); + + QHBoxLayout *row1 = new QHBoxLayout(); + startBtn = new QPushButton("启动游戏"); + startBtn->setFixedSize(120, 35); + startBtn->setEnabled(false); + connect(startBtn, &QPushButton::clicked, this, &MainWindow::startGame); + row1->addWidget(startBtn); + + oddBtn = new QPushButton("启动ODD"); + oddBtn->setFixedSize(120, 35); + oddBtn->setEnabled(false); + connect(oddBtn, &QPushButton::clicked, this, &MainWindow::startOdd); + row1->addWidget(oddBtn); + buttonLayout->addLayout(row1); + + QHBoxLayout *row2 = new QHBoxLayout(); + updateBtn = new QPushButton("更新"); + updateBtn->setFixedSize(120, 35); + updateBtn->setEnabled(false); + connect(updateBtn, &QPushButton::clicked, this, &MainWindow::forceUpdate); + row2->addWidget(updateBtn); + + hostsBtn = new QPushButton("修改hosts"); + hostsBtn->setFixedSize(120, 35); + hostsBtn->setEnabled(false); + connect(hostsBtn, &QPushButton::clicked, this, &MainWindow::modifyHosts); + row2->addWidget(hostsBtn); + buttonLayout->addLayout(row2); + + QHBoxLayout *row3 = new QHBoxLayout(); + buyBtn = new QPushButton("购买卡密"); + buyBtn->setFixedSize(120, 35); + connect(buyBtn, &QPushButton::clicked, this, &MainWindow::openBuyPage); + row3->addWidget(buyBtn); + + fullUpdateBtn = new QPushButton("更新完整包"); + fullUpdateBtn->setFixedSize(120, 35); + connect(fullUpdateBtn, &QPushButton::clicked, this, &MainWindow::forceFullUpdate); + row3->addWidget(fullUpdateBtn); + buttonLayout->addLayout(row3); + + QHBoxLayout *row4 = new QHBoxLayout(); + wikiBtn = new QPushButton("wiki文档"); + wikiBtn->setFixedSize(120, 35); + connect(wikiBtn, &QPushButton::clicked, this, &MainWindow::openWikiPage); + row4->addWidget(wikiBtn); + + // 添加Bug报告按钮 + bugReportBtn = new QPushButton("反馈Bug"); + bugReportBtn->setFixedSize(120, 35); + connect(bugReportBtn, &QPushButton::clicked, this, &MainWindow::reportBug); + row4->addWidget(bugReportBtn); + + buttonLayout->addLayout(row4); + + // 在按钮布局中添加设置按钮 + QHBoxLayout *row5 = new QHBoxLayout(); + settingsBtn = new QPushButton(); + settingsBtn->setIcon(QIcon("")); // 设置图标 + settingsBtn->setIconSize(QSize(24, 24)); // 设置图标大小 + settingsBtn->setFixedSize(40, 40); // 设置按钮大小 + settingsBtn->setToolTip("选择更新节点"); // 设置提示 + connect(settingsBtn, &QPushButton::clicked, this, &MainWindow::openSettings); + row5->addWidget(settingsBtn); + + // 添加空白标签使按钮靠左 + QSpacerItem *spacer = new QSpacerItem(40, 20, QSizePolicy::Expanding, QSizePolicy::Minimum); + row5->addItem(spacer); + + buttonLayout->addLayout(row5); + + leftLayout->addWidget(buttonWidget); + + QGroupBox *rightGroup = new QGroupBox("最新公告"); + rightGroup->setStyleSheet("QGroupBox { font-weight: bold; }"); + QVBoxLayout *rightLayout = new QVBoxLayout(rightGroup); + + announcementText = new QTextEdit(); + announcementText->setReadOnly(true); + announcementText->setText("正在加载公告..."); + announcementText->setStyleSheet("font-size: 10pt;"); + rightLayout->addWidget(announcementText); + + contentLayout->addWidget(leftWidget, 2); + contentLayout->addWidget(rightGroup, 1); + + mainLayout->addWidget(contentWidget, 1); + + QLabel *footerLabel = new QLabel("闲鱼:小xin喵"); + footerLabel->setStyleSheet("color: gray; font-size: 8pt;"); + mainLayout->addWidget(footerLabel, 0, Qt::AlignRight | Qt::AlignBottom); + + setCentralWidget(centralWidget); + networkManager = new QNetworkAccessManager(this); +} + +// 新增节点设置功能 +void MainWindow::openSettings() +{ + QDialog dialog(this); + dialog.setWindowTitle("选择更新节点"); + dialog.setFixedSize(500, 350); // 增加高度以容纳ping结果 + + QVBoxLayout *layout = new QVBoxLayout(&dialog); + + // 节点选择组 + QGroupBox *nodeGroup = new QGroupBox("选择节点"); + QVBoxLayout *nodeLayout = new QVBoxLayout(nodeGroup); + + QButtonGroup *buttonGroup = new QButtonGroup(this); + + // 声明按钮变量(确保在函数作用域内) + QRadioButton *node1Btn = new QRadioButton("节点1 (默认)"); + QRadioButton *node2Btn = new QRadioButton("节点2"); + QRadioButton *node3Btn = new QRadioButton("节点3"); + QRadioButton *testNodeBtn = new QRadioButton("测试节点"); + + // 为每个节点创建水平布局(单选按钮 + ping结果) + QHBoxLayout *node1Layout = new QHBoxLayout(); + node1Layout->addWidget(node1Btn); + QLabel *pingLabel1 = new QLabel("延迟: 测试中..."); + node1Layout->addWidget(pingLabel1); + nodeLayout->addLayout(node1Layout); + + QHBoxLayout *node2Layout = new QHBoxLayout(); + node2Layout->addWidget(node2Btn); + QLabel *pingLabel2 = new QLabel("延迟: 测试中..."); + node2Layout->addWidget(pingLabel2); + nodeLayout->addLayout(node2Layout); + + QHBoxLayout *node3Layout = new QHBoxLayout(); + node3Layout->addWidget(node3Btn); + QLabel *pingLabel3 = new QLabel("延迟: 测试中..."); + node3Layout->addWidget(pingLabel3); + nodeLayout->addLayout(node3Layout); + + QHBoxLayout *testNodeLayout = new QHBoxLayout(); + testNodeLayout->addWidget(testNodeBtn); + QLabel *pingLabelTest = new QLabel("延迟: 测试中..."); + testNodeLayout->addWidget(pingLabelTest); + nodeLayout->addLayout(testNodeLayout); + + // 存储ping标签的映射 + pingLabels.clear(); + pingLabels["node1"] = pingLabel1; + pingLabels["node2"] = pingLabel2; + pingLabels["node3"] = pingLabel3; + pingLabels["test"] = pingLabelTest; + + // 设置按钮属性 + node1Btn->setProperty("nodeId", "node1"); + node2Btn->setProperty("nodeId", "node2"); + node3Btn->setProperty("nodeId", "node3"); + testNodeBtn->setProperty("nodeId", "test"); + + // 添加按钮到组 + buttonGroup->addButton(node1Btn); + buttonGroup->addButton(node2Btn); + buttonGroup->addButton(node3Btn); + buttonGroup->addButton(testNodeBtn); + + // 测试节点密码输入 + QHBoxLayout *pwdLayout = new QHBoxLayout(); + QLabel *pwdLabel = new QLabel("测试节点密码:"); + QLineEdit *pwdEdit = new QLineEdit(); + pwdEdit->setEchoMode(QLineEdit::Password); + pwdLayout->addWidget(pwdLabel); + pwdLayout->addWidget(pwdEdit); + nodeLayout->addLayout(pwdLayout); + + // 根据当前选择的节点设置单选按钮状态 + foreach(QAbstractButton *btn, buttonGroup->buttons()) { + if (btn->property("nodeId").toString() == m_currentNode) { + btn->setChecked(true); + break; + } + } + + layout->addWidget(nodeGroup); + + // 按钮组 + QHBoxLayout *btnLayout = new QHBoxLayout(); + QPushButton *okBtn = new QPushButton("确定"); + QPushButton *cancelBtn = new QPushButton("取消"); + btnLayout->addWidget(okBtn); + btnLayout->addWidget(cancelBtn); + layout->addLayout(btnLayout); + + // 连接信号 + connect(okBtn, &QPushButton::clicked, &dialog, &QDialog::accept); + connect(cancelBtn, &QPushButton::clicked, &dialog, &QDialog::reject); + + // 启动ping测试 + startPingTests(); + + if (dialog.exec() == QDialog::Accepted) { + QAbstractButton *selectedBtn = buttonGroup->checkedButton(); + if (selectedBtn) { + QString nodeId = selectedBtn->property("nodeId").toString(); + + // 如果选择测试节点,验证密码 + if (nodeId == "test") { + if (pwdEdit->text() != testNodePassword) { + QMessageBox::warning(this, "密码错误", "测试节点密码不正确"); + return; + } + } + + // 保存节点设置 + saveNodeSettings(nodeId); + m_currentNode = nodeId; + updateServerUrl(); + + QMessageBox::information(this, "设置已保存", "节点设置已更新"); + + if (isAuthenticated) { + statusLabel->setText("节点已切换,检查更新..."); + QTimer::singleShot(100, this, &MainWindow::checkForUpdates); + } + } + } + for (auto it = pingReplies.begin(); it != pingReplies.end(); ++it) { + if (it.value()) { + it.value()->abort(); + it.value()->deleteLater(); + } +} + startPingTests(); // 这会取消所有进行中的请求 + pingLabels.clear(); +} + +/// 修改startPingTests函数 +void MainWindow::startPingTests() +{ + // 清理之前的请求 + for (auto it = pingReplies.begin(); it != pingReplies.end(); ++it) { + if (it.value()) { + it.value()->abort(); + it.value()->deleteLater(); + } + } + pingReplies.clear(); + + // 重置标签状态 + for (auto it = pingLabels.begin(); it != pingLabels.end(); ++it) { + if (it.value()) { + it.value()->setText("延迟: 测试中..."); + it.value()->setStyleSheet(""); + } + } + + // 为每个节点启动ping测试 + for (auto it = nodeMap.begin(); it != nodeMap.end(); ++it) { + QString nodeId = it.key(); + QString url = it.value(); + pingNode(url, nodeId); + } +} + +// Ping单个节点 +void MainWindow::pingNode(const QString& url, const QString& nodeId) +{ + QNetworkRequest request(url); + request.setRawHeader("User-Agent", "MaimaiLauncherPing"); + request.setAttribute(QNetworkRequest::Http2AllowedAttribute, false); + request.setTransferTimeout(5000); // 设置5秒超时 + + // 首先解析主机名 + QString host = QUrl(url).host(); + QHostInfo::lookupHost(host, this, [=](const QHostInfo &hostInfo) { + if (hostInfo.error() != QHostInfo::NoError) { + updatePingResult(nodeId, -1); // DNS解析失败 + return; + } + + // 发送实际请求 + QNetworkReply *reply = networkManager->head(request); + pingReplies[nodeId] = reply; + + QElapsedTimer *timer = new QElapsedTimer(); + timer->start(); + + connect(reply, &QNetworkReply::finished, this, [=]() { + int latency = -1; + if (reply->error() == QNetworkReply::NoError) { + latency = timer->elapsed(); + } + updatePingResult(nodeId, latency); + delete timer; + reply->deleteLater(); + pingReplies.remove(nodeId); + }); + }); +} + +// 更新ping结果显示 +void MainWindow::updatePingResult(const QString& nodeId, int latency) +{ + if (!pingLabels.contains(nodeId)) { + return; // 对话框已关闭 + } + + // 确保标签仍然有效 + QLabel* label = pingLabels[nodeId]; + if (!label) return; + + if (latency > 0) { + label->setText(QString("延迟: %1 ms").arg(latency)); + + // 根据延迟设置颜色 + if (latency < 100) { + label->setStyleSheet("color: green;"); + } else if (latency < 300) { + label->setStyleSheet("color: orange;"); + } else { + label->setStyleSheet("color: red;"); + } + } else { + label->setText("延迟: 超时"); + label->setStyleSheet("color: red;"); + } +} + +// 保存节点设置 +void MainWindow::saveNodeSettings(const QString &nodeId) +{ + settings->setValue("currentNode", nodeId); + settings->sync(); +} + +// 加载节点设置 +void MainWindow::loadNodeSettings() +{ + m_currentNode = settings->value("currentNode", "node1").toString(); + updateServerUrl(); +} + +// 更新服务器URL +void MainWindow::updateServerUrl() +{ + if (nodeMap.contains(m_currentNode)) { + SERVER_URL = nodeMap[m_currentNode]; + } else { + SERVER_URL = nodeMap["node1"]; // 默认节点 + } +} + +void MainWindow::forceFullUpdate() +{ + if (!isAuthenticated) { + QMessageBox::warning(this, "未验证", "请先完成卡密验证"); + return; + } + + // 确认用户操作 + if (QMessageBox::question(this, "更新完整包", + "确定要下载并安装完整游戏包吗?\n这将覆盖所有本地文件。", + QMessageBox::Yes | QMessageBox::No) != QMessageBox::Yes) { + return; + } + + // 禁用相关按钮 + fullUpdateBtn->setEnabled(false); + startBtn->setEnabled(false); + statusLabel->setText("开始下载完整游戏包..."); + + // 调用首次更新函数(该函数已实现完整包下载) + fetchFirstUpdateVersion(); +} + +void MainWindow::updateAnnouncement(const QJsonObject &announcement) +{ + QString title = announcement["title"].toString("公告"); + QString date = announcement["date"].toString(QDate::currentDate().toString("yyyy-MM-dd")); + QString content = announcement["content"].toString("暂无公告内容。"); + + announcementText->clear(); + announcementText->append(QString("
%1
").arg(title)); + announcementText->append(QString("
发布日期: %1
").arg(date)); + announcementText->append("
"); + announcementText->append(QString("
%1
").arg(content)); +} + +void MainWindow::reportBug() +{ + // 创建邮件主题和正文 + QString subject = QString("maimai启动器Bug报告 (v%1)").arg(LAUNCHER_VERSION); + QString body = QString("设备ID: %1\n\n请描述您遇到的问题:\n").arg(deviceId); + + // 创建mailto链接 + QString mailto = QString("mailto:2932869213@qq.com?subject=%1&body=%2") + .arg(QString(QUrl::toPercentEncoding(subject))) + .arg(QString(QUrl::toPercentEncoding(body))); + + // 打开默认邮件客户端 + if (!QDesktopServices::openUrl(QUrl(mailto))) { + QMessageBox::warning(this, "错误", "无法打开邮件客户端。请确保已安装邮件程序。"); + } +} + + +void MainWindow::activateButtons() +{ + if (isAuthenticated) { + startBtn->setEnabled(true); + oddBtn->setEnabled(true); + updateBtn->setEnabled(true); + hostsBtn->setEnabled(true); + fullUpdateBtn->setEnabled(true); + } + buyBtn->setEnabled(true); + pathSelectBtn->setEnabled(true); + wikiBtn->setEnabled(true); +} + +void MainWindow::disableButtons() +{ + startBtn->setEnabled(false); + oddBtn->setEnabled(false); + updateBtn->setEnabled(false); + hostsBtn->setEnabled(false); + fullUpdateBtn->setEnabled(false); + wikiBtn->setEnabled(false); +} + +void MainWindow::openWikiPage() +{ + QDesktopServices::openUrl(QUrl("")); +} + +void MainWindow::checkAdminRights() +{ + BOOL isAdmin = FALSE; + SID_IDENTIFIER_AUTHORITY NtAuthority = SECURITY_NT_AUTHORITY; + PSID AdministratorsGroup; + + if (AllocateAndInitializeSid(&NtAuthority, 2, SECURITY_BUILTIN_DOMAIN_RID, + DOMAIN_ALIAS_RID_ADMINS, 0, 0, 0, 0, 0, 0, + &AdministratorsGroup)) { + if (!CheckTokenMembership(NULL, AdministratorsGroup, &isAdmin)) { + isAdmin = FALSE; + } + FreeSid(AdministratorsGroup); + } + + if (!isAdmin) { + QMessageBox::information(this, "权限提升", + "启动器需要管理员权限运行,请允许UAC提示。"); + + wchar_t path[MAX_PATH]; + GetModuleFileNameW(NULL, path, MAX_PATH); + ShellExecuteW(NULL, L"runas", path, NULL, NULL, SW_SHOWNORMAL); + QApplication::quit(); + } +} + + +int MainWindow::compareVersions(const QString &v1, const QString &v2) +{ + QStringList parts1 = v1.split('.'); + QStringList parts2 = v2.split('.'); + int maxParts = qMax(parts1.size(), parts2.size()); + + for (int i = 0; i < maxParts; i++) { + int num1 = (i < parts1.size()) ? parts1[i].toInt() : 0; + int num2 = (i < parts2.size()) ? parts2[i].toInt() : 0; + + if (num1 < num2) return -1; + if (num1 > num2) return 1; + } + return 0; +} + +// 修改后的解压函数,支持密码 +bool MainWindow::extractZip(const QString &zipPath, const QString &extractDir, const QString &password) +{ + QFile zipFile(zipPath); + if (!zipFile.exists()) { + qDebug() << "ZIP文件不存在:" << zipPath; + return false; + } + + QDir dir(extractDir); + if (!dir.exists()) { + if (!dir.mkpath(".")) { + qDebug() << "无法创建目录:" << extractDir; + return false; + } + } + + QString program; + QStringList arguments; + + // 尝试多个可能的7z路径 + QString appDir = QCoreApplication::applicationDirPath(); + QStringList possiblePaths = { + appDir + "/7z/7z.exe", + appDir + "/7za.exe", + "C:/Program Files/7-Zip/7z.exe", + "C:/Program Files (x86)/7-Zip/7z.exe" + }; + + bool found7z = false; + for (const QString &path : possiblePaths) { + if (QFile::exists(path)) { + program = path; + found7z = true; + break; + } + } + + if (!found7z) { + // 尝试在PATH中查找7z + program = "7z"; + QProcess checkProcess; + checkProcess.start(program, QStringList() << "--help"); + if (!checkProcess.waitForStarted(3000) || !checkProcess.waitForFinished(3000)) { + qDebug() << "找不到7z解压程序"; + return false; + } + } + + // 设置解压参数 + arguments << "x" << "-y"; + if (!password.isEmpty()) { + arguments << "-p" + password; + } + arguments << "-o" + extractDir; + arguments << zipPath; + + qDebug() << "解压命令:" << program << arguments; + + QProcess process; + process.setProgram(program); + process.setArguments(arguments); + process.start(); + + // 延长等待时间到10分钟(大型更新可能需要更长时间) + if (!process.waitForStarted(10000)) { // 10秒内启动 + qDebug() << "无法启动解压进程:" << process.errorString(); + return false; + } + + // 等待解压完成(最长60分钟) + if (!process.waitForFinished(3600000)) { + qDebug() << "解压进程超时:" << process.errorString(); + return false; + } + + if (process.exitCode() != 0) { + qDebug() << "解压失败,错误码:" << process.exitCode(); + qDebug() << "错误输出:" << process.readAllStandardError(); + return false; + } + + qDebug() << "成功解压文件到" << extractDir; + return true; +} + +void MainWindow::startGame() +{ + if (!isAuthenticated) { + QMessageBox::warning(this, "未验证", "请先完成卡密验证"); + return; + } + + QString batPath = UPDATE_PATH + "/2-Start.bat"; + if (!QFile::exists(batPath)) { + QMessageBox::critical(this, "错误", "找不到启动脚本: " + batPath); + return; + } + + disableButtons(); + statusLabel->setText("正在启动游戏..."); + + // 使用QProcess启动bat文件 + QProcess *gameProcess = new QProcess(this); + gameProcess->setWorkingDirectory(UPDATE_PATH); + + // 连接游戏结束信号 + connect(gameProcess, QOverload::of(&QProcess::finished), + this, &MainWindow::onGameFinished); + + // 启动bat文件 + gameProcess->start("cmd.exe", QStringList() << "/c" << batPath); + + if (!gameProcess->waitForStarted()) { + statusLabel->setText("无法启动游戏"); + activateButtons(); + return; + } + + statusLabel->setText("游戏运行中..."); +} + +void MainWindow::startGameProcess() +{ + // 确保 gameProcess 被正确创建 + if (gameProcess) { + gameProcess->kill(); + gameProcess->deleteLater(); + gameProcess = nullptr; + } + gameProcess = new QProcess(this); + gameProcess->setWorkingDirectory(UPDATE_PATH); + + // 连接游戏结束信号 + connect(gameProcess, QOverload::of(&QProcess::finished), + this, &MainWindow::onGameFinished); + + // 启动注入程序 - 使用新的 QProcess 实例 + QProcess *injectProcess = new QProcess(this); + injectProcess->setWorkingDirectory(UPDATE_PATH); + + QStringList injectArgs; + injectArgs << "-d" << "-k" << "mai2hook.dll" << "amdaemon.exe" + << "-f" << "-c" << "config_common.json" << "config_server.json" << "config_client.json"; + + // 增加超时时间到15秒(15000毫秒) + injectProcess->start("inject", injectArgs); + + // 增加等待时间到15秒 + if (!injectProcess->waitForFinished(15000)) { + statusLabel->setText("注入程序超时"); + injectProcess->deleteLater(); + activateButtons(); + return; + } + + injectProcess->deleteLater(); + + // 启动游戏主程序 + QStringList gameArgs; + gameArgs << "-screen-fullscreen" << "1" << "-screen-width" << "1080" << "-screen-height" << "1920" << "-silent-crashes"; + + gameProcess->start("Sinmai.exe", gameArgs); + + if (!gameProcess->waitForStarted()) { + statusLabel->setText("无法启动游戏"); + activateButtons(); + return; + } + + statusLabel->setText("游戏运行中..."); +} + +void MainWindow::onGameFinished(int exitCode, QProcess::ExitStatus exitStatus) +{ + Q_UNUSED(exitCode); + Q_UNUSED(exitStatus); + + statusLabel->setText("游戏进程已结束"); + activateButtons(); + + // 删除QProcess对象 + QProcess *senderProcess = qobject_cast(sender()); + if (senderProcess) { + senderProcess->deleteLater(); + } +} + +void MainWindow::startOdd() +{ + if (!isAuthenticated) { + QMessageBox::warning(this, "未验证", "请先完成卡密验证"); + return; + } + + QString batPath = UPDATE_PATH + "/1-管理员运行odd.bat"; + if (!QFile::exists(batPath)) { + QMessageBox::critical(this, "错误", "找不到ODD启动脚本: " + batPath); + return; + } + + // 启动bat文件 + QProcess::startDetached("cmd.exe", QStringList() << "/c" << batPath, UPDATE_PATH); + statusLabel->setText("正在启动ODD驱动程序..."); +} + +void MainWindow::modifyHosts() +{ + if (!isAuthenticated) { + QMessageBox::warning(this, "未验证", "请先完成卡密验证"); + return; + } + + QString batPath = UPDATE_PATH + "/hosts.bat"; + if (!QFile::exists(batPath)) { + QMessageBox::critical(this, "错误", "找不到hosts修改脚本: " + batPath); + return; + } + + // 启动bat文件 + QProcess::startDetached("cmd.exe", QStringList() << "/c" << batPath, UPDATE_PATH); + statusLabel->setText("正在修改hosts文件..."); +} + +void MainWindow::forceUpdate() +{ + if (!isAuthenticated) { + QMessageBox::warning(this, "未验证", "请先完成卡密验证"); + return; + } + + statusLabel->setText("开始强制更新..."); + fetchVersionForForceUpdate(); +} + +void MainWindow::fetchVersionForForceUpdate() +{ + QUrl url(SERVER_URL + VERSION_FILE); + QNetworkRequest request(url); + request.setRawHeader("User-Agent", "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/91.0.4472.124 Safari/537.36"); + + QSslConfiguration sslConfig = QSslConfiguration::defaultConfiguration(); + sslConfig.setPeerVerifyMode(QSslSocket::VerifyNone); + request.setSslConfiguration(sslConfig); + + QNetworkReply *reply = networkManager->get(request); + connect(reply, &QNetworkReply::finished, this, [=]() { + if (reply->error() != QNetworkReply::NoError) { + statusLabel->setText("连接服务器失败"); + return; + } + + QByteArray data = reply->readAll(); + QJsonDocument doc = QJsonDocument::fromJson(data); + if (doc.isNull()) { + statusLabel->setText("版本信息解析错误"); + return; + } + + updateGame(doc.object()); + reply->deleteLater(); + }); +} + +void MainWindow::openBuyPage() +{ + QDesktopServices::openUrl(QUrl("https://m.tb.cn/h.hYesG5B?tk=qva9Vs7587S")); +} + +void MainWindow::fetchAnnouncement() +{ + QUrl url(SERVER_URL + "g/" + ANNOUNCEMENT_FILE); + QNetworkRequest request(url); + request.setRawHeader("User-Agent", "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/91.0.4472.124 Safari/537.36"); + + QSslConfiguration sslConfig = QSslConfiguration::defaultConfiguration(); + sslConfig.setPeerVerifyMode(QSslSocket::VerifyNone); + request.setSslConfiguration(sslConfig); + + QNetworkReply *reply = networkManager->get(request); + connect(reply, &QNetworkReply::finished, this, &MainWindow::onAnnouncementFetched); +} + +void MainWindow::onAnnouncementFetched() +{ + QNetworkReply *reply = qobject_cast(sender()); + QJsonObject announcement; + + if (reply->error() == QNetworkReply::NoError) { + QByteArray data = reply->readAll(); + QJsonDocument doc = QJsonDocument::fromJson(data); + if (!doc.isNull()) { + announcement = doc.object(); + } + } + + if (announcement.isEmpty()) { + announcement["title"] = "公告"; + announcement["content"] = "无法连接到服务器获取最新公告。\n请检查网络连接或稍后再试。"; + announcement["date"] = QDate::currentDate().toString("yyyy-MM-dd"); + } + + updateAnnouncement(announcement); + reply->deleteLater(); +} + +void MainWindow::checkForUpdates() +{ + if (!isAuthenticated) { + statusLabel->setText("请先完成卡密验证"); + return; + } + + // 如果正在进行首次更新,则跳过常规更新检查 + if (m_isFirstUpdateInProgress) { + qDebug() << "跳过常规更新检查(首次更新进行中)"; + return; + } + + statusLabel->setText("正在检查更新..."); + + QUrl url(SERVER_URL + VERSION_FILE); + QNetworkRequest request(url); + request.setRawHeader("User-Agent", "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/91.0.4472.124 Safari/537.36"); + + QSslConfiguration sslConfig = QSslConfiguration::defaultConfiguration(); + sslConfig.setPeerVerifyMode(QSslSocket::VerifyNone); + request.setSslConfiguration(sslConfig); + + QNetworkReply *reply = networkManager->get(request); + connect(reply, &QNetworkReply::finished, this, &MainWindow::onVersionChecked); +} + +void MainWindow::onVersionChecked() +{ + QNetworkReply *reply = qobject_cast(sender()); + if (reply->error() != QNetworkReply::NoError) { + statusLabel->setText("连接服务器失败"); + qDebug() << "连接服务器失败:" << reply->errorString(); + return; + } + + QByteArray data = reply->readAll(); + QJsonDocument doc = QJsonDocument::fromJson(data); + if (doc.isNull()) { + statusLabel->setText("版本信息解析错误"); + qDebug() << "版本信息解析错误"; + return; + } + + QJsonObject remoteVersion = doc.object(); + QString remoteVer = remoteVersion["version"].toString(); + QString localVer = localVersion["version"].toString(); + + qDebug() << "本地版本:" << localVer << "远程版本:" << remoteVer; + + int comparison = compareVersions(remoteVer, localVer); + + if (comparison <= 0) { + statusLabel->setText("游戏已是最新版本"); + versionLabel->setText("版本: v" + localVer); + qDebug() << "游戏已是最新版本"; + } else { + statusLabel->setText("发现新版本 v" + remoteVer); + versionLabel->setText("版本: v" + localVer + " → v" + remoteVer); + qDebug() << "需要更新: 本地 v" << localVer << "-> 远程 v" << remoteVer; + updateGame(remoteVersion); // 执行增量更新 + } + + reply->deleteLater(); +} + +void MainWindow::updateGame(const QJsonObject &remoteVersion) +{ + if (remoteVersion.isEmpty()) { + statusLabel->setText("无效的版本信息"); + return; + } + + QString remoteVer = remoteVersion["version"].toString(); + QString localVer = localVersion["version"].toString(); + + // 检查下载URL是否存在 + if (!remoteVersion.contains("url") || remoteVersion["url"].toString().isEmpty()) { + statusLabel->setText("更新URL无效"); + return; + } + + QString updateUrl = remoteVersion["url"].toString(); + + disableButtons(); + statusLabel->setText("正在下载增量更新..."); + + QUrl url(updateUrl); // 使用从JSON中获取的URL + QNetworkRequest request(url); + request.setRawHeader("User-Agent", "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/91.0.4472.124 Safari/537.36"); + + QSslConfiguration sslConfig = QSslConfiguration::defaultConfiguration(); + sslConfig.setPeerVerifyMode(QSslSocket::VerifyNone); + request.setSslConfiguration(sslConfig); + + QNetworkReply *reply = networkManager->get(request); + connect(reply, &QNetworkReply::downloadProgress, this, [=](qint64 bytesReceived, qint64 bytesTotal) { + if (bytesTotal > 0) { + int percent = static_cast((bytesReceived * 100) / bytesTotal); + progressBar->setValue(percent); + statusLabel->setText(QString("下载增量更新: %1%").arg(percent)); + } + }); + + connect(reply, &QNetworkReply::finished, this, [=]() { + onUpdateDownloaded(reply, remoteVersion); + }); +} + +void MainWindow::onUpdateDownloaded(QNetworkReply *reply, const QJsonObject &version) +{ + if (reply->error() != QNetworkReply::NoError) { + statusLabel->setText("下载失败: " + reply->errorString()); + qDebug() << "下载失败:" << reply->errorString(); + activateButtons(); + return; + } + + QByteArray data = reply->readAll(); + QFile file(UPDATE_ZIP); + if (file.open(QIODevice::WriteOnly)) { + file.write(data); + file.close(); + } else { + qDebug() << "无法保存更新文件"; + } + + statusLabel->setText("正在解压文件..."); + progressBar->setValue(0); + + // 从版本信息中获取密码 + QString password = version["password"].toString(); + + QFutureWatcher *watcher = new QFutureWatcher(this); + connect(watcher, &QFutureWatcher::finished, this, [=]() { + if (watcher->result()) { + // 更新版本信息并保存 + QJsonObject newLocalVersion; + newLocalVersion["version"] = version["version"].toString(); + + if (version.contains("changelog")) { + newLocalVersion["changelog"] = version["changelog"]; + } + if (version.contains("timestamp")) { + newLocalVersion["timestamp"] = version["timestamp"]; + } + + localVersion = newLocalVersion; + saveLocalVersion(); + + // 重新加载本地版本以确保一致性 + loadLocalVersion(); + + // 更新界面显示 + versionLabel->setText("版本: v" + localVersion["version"].toString()); + statusLabel->setText("更新完成!"); + progressBar->setValue(100); + + QFile::remove(UPDATE_ZIP); + QMessageBox::information(this, "更新完成", "游戏已成功更新到最新版本!"); + qDebug() << "更新完成: v" << localVersion["version"].toString(); + } else { + statusLabel->setText("解压失败"); + QMessageBox::critical(this, "更新失败", "解压更新包失败"); + qDebug() << "解压失败"; + } + activateButtons(); + watcher->deleteLater(); + }); + + QFuture future = QtConcurrent::run([=]() { + return extractZip(UPDATE_ZIP, UPDATE_PATH, password); + }); + watcher->setFuture(future); + + reply->deleteLater(); +} + +void MainWindow::saveLocalVersion() +{ + // 创建精简的版本对象 + QJsonObject saveVersion; + saveVersion["version"] = localVersion["version"].toString(); + + // 只保存必要的字段 + if (localVersion.contains("changelog")) { + saveVersion["changelog"] = localVersion["changelog"]; + } + if (localVersion.contains("timestamp")) { + saveVersion["timestamp"] = localVersion["timestamp"]; + } + + QFile file(UPDATE_PATH + "/" + VERSION_FILE); + if (file.open(QIODevice::WriteOnly)) { + QJsonDocument doc(saveVersion); + file.write(doc.toJson()); + file.close(); + } +} + +void MainWindow::selectPackagePath() +{ + QString dir = QFileDialog::getExistingDirectory( + this, + tr("选择Package目录"), + UPDATE_PATH, + QFileDialog::ShowDirsOnly | QFileDialog::DontResolveSymlinks + ); + + if (!dir.isEmpty()) { + UPDATE_PATH = dir; + pathLabel->setText(UPDATE_PATH); + + // 更新相关文件路径 + BAT_FILE = UPDATE_PATH + "/2-Start.bat"; + ODD_BAT_FILE = UPDATE_PATH + "/1-管理员运行odd.bat"; + HOSTS_BAT = UPDATE_PATH + "/hosts.bat"; + + // 重新加载本地版本 + loadLocalVersion(); + checkPackageExists(); + saveSettings(); + } +} + +void MainWindow::checkPackageExists() +{ + QDir packageDir(UPDATE_PATH); + bool exists = packageDir.exists(); + + startBtn->setEnabled(false); + oddBtn->setEnabled(false); + hostsBtn->setEnabled(false); + wikiBtn->setEnabled(true); + fullUpdateBtn->setEnabled(isAuthenticated); + + updateBtn->setEnabled(isAuthenticated); + buyBtn->setEnabled(true); + pathSelectBtn->setEnabled(true); + + + if (!exists) { + statusLabel->setText("警告: Package目录不存在!"); + } else if (isAuthenticated) { + startBtn->setEnabled(true); + oddBtn->setEnabled(true); + hostsBtn->setEnabled(true); + } +} + +void MainWindow::saveSettings() +{ + settings->setValue("packagePath", UPDATE_PATH); + settings->sync(); +} + +void MainWindow::loadSettings() +{ + if (settings->contains("packagePath")) { + UPDATE_PATH = settings->value("packagePath").toString(); + } else { + UPDATE_PATH = "Package"; + } + + BAT_FILE = UPDATE_PATH + "/2-Start.bat"; + ODD_BAT_FILE = UPDATE_PATH + "/1-管理员运行odd.bat"; + HOSTS_BAT = UPDATE_PATH + "/hosts.bat"; +} + +// 修改 getDeviceId 函数 +QString MainWindow::getDeviceId() +{ + ensureDataDirExists(); + + // 确定数据目录路径 + QString dataDir = "D:/maimaiLauncherData"; + QDir dDrive("D:/"); + if (!dDrive.exists()) { + dataDir = "C:/maimaiLauncherData"; + } + DEVICE_CODE_FILE = dataDir + "/device_code.dat"; + + QFile file(DEVICE_CODE_FILE); + if (file.exists() && file.open(QIODevice::ReadOnly)) { + QString id = QString::fromUtf8(file.readAll()).trimmed(); + file.close(); + if (!id.isEmpty()) return id; + } + + QString deviceInfo = ""; + + HKEY hKey; + if (RegOpenKeyEx(HKEY_LOCAL_MACHINE, L"HARDWARE\\DESCRIPTION\\System\\CentralProcessor\\0", + 0, KEY_READ, &hKey) == ERROR_SUCCESS) { + wchar_t cpuName[256]; + DWORD size = sizeof(cpuName); + DWORD type; + + if (RegQueryValueEx(hKey, L"ProcessorNameString", NULL, &type, + (LPBYTE)cpuName, &size) == ERROR_SUCCESS) { + deviceInfo += QString::fromWCharArray(cpuName); + } + RegCloseKey(hKey); + } + + if (RegOpenKeyEx(HKEY_LOCAL_MACHINE, L"HARDWARE\\DEVICEMAP\\Scsi\\Scsi Port 0\\Scsi Bus 0\\Target Id 0\\Logical Unit Id 0", + 0, KEY_READ, &hKey) == ERROR_SUCCESS) { + wchar_t diskId[256]; + DWORD size = sizeof(diskId); + DWORD type; + + if (RegQueryValueEx(hKey, L"SerialNumber", NULL, &type, + (LPBYTE)diskId, &size) == ERROR_SUCCESS) { + deviceInfo += QString::fromWCharArray(diskId); + } + RegCloseKey(hKey); + } + + QCryptographicHash hash(QCryptographicHash::Sha256); + hash.addData(deviceInfo.toUtf8()); + QString deviceId = hash.result().toHex().left(32); + + if (file.open(QIODevice::WriteOnly)) { + file.write(deviceId.toUtf8()); + file.close(); + + const wchar_t* path = reinterpret_cast(DEVICE_CODE_FILE.utf16()); + DWORD attributes = GetFileAttributesW(path); + if (attributes != INVALID_FILE_ATTRIBUTES) { + SetFileAttributesW(path, attributes | FILE_ATTRIBUTE_HIDDEN); + } + } + + return deviceId; +} + +QString MainWindow::loadSavedKami() +{ + ensureDataDirExists(); + + // 确定数据目录路径 + QString dataDir = "D:/maimaiLauncherData"; + QDir dDrive("D:/"); + if (!dDrive.exists()) { + dataDir = "C:/maimaiLauncherData"; + } + CARD_FILE = dataDir + "/card.dat"; + + QFile file(CARD_FILE); + if (file.exists() && file.open(QIODevice::ReadOnly)) { + QString kami = QString::fromUtf8(file.readAll()).trimmed(); + file.close(); + return kami; + } + return ""; +} + +bool MainWindow::saveKami(const QString &kami) +{ + ensureDataDirExists(); + + // 确定数据目录路径 + QString dataDir = "D:/maimaiLauncherData"; + QDir dDrive("D:/"); + if (!dDrive.exists()) { + dataDir = "C:/maimaiLauncherData"; + } + CARD_FILE = dataDir + "/card.dat"; + + QFile file(CARD_FILE); + if (file.open(QIODevice::WriteOnly)) { + file.write(kami.toUtf8()); + file.close(); + + const wchar_t* path = reinterpret_cast(CARD_FILE.utf16()); + DWORD attributes = GetFileAttributesW(path); + if (attributes != INVALID_FILE_ATTRIBUTES) { + SetFileAttributesW(path, attributes | FILE_ATTRIBUTE_HIDDEN); + } + return true; + } + return false; +} + +bool MainWindow::clearSavedKami() +{ + // 确定数据目录路径 + QString dataDir = "D:/maimaiLauncherData"; + QDir dDrive("D:/"); + if (!dDrive.exists()) { + dataDir = "C:/maimaiLauncherData"; + } + CARD_FILE = dataDir + "/card.dat"; + + QFile file(CARD_FILE); + return file.exists() ? file.remove() : true; +} + +void MainWindow::showAuthWindow() +{ + if (authWindow) { + authWindow->deleteLater(); + } + + authWindow = new AuthWindow(deviceId, savedKami, this); + if (authWindow->exec() == QDialog::Accepted) { + QString kami = authWindow->getKami(); + bool remember = authWindow->getRemember(); + + if (!kami.isEmpty()) { + authStatus->setText("验证中..."); + performNetworkAuthentication(kami, remember); + } + } else { + authStatus->setText("验证已取消"); + QMessageBox::critical(this, "验证取消", "您必须完成验证才能使用启动器。\n程序将在5秒后关闭..."); + quitTimer->start(5000); + } +} + +void MainWindow::performNetworkAuthentication(const QString &kami, bool remember) +{ + QUrl url(AUTH_API); + QUrlQuery query; + query.addQueryItem("api", "kmlogon"); + query.addQueryItem("app", APP_ID); + query.addQueryItem("kami", kami); + query.addQueryItem("markcode", deviceId); + url.setQuery(query); + + QNetworkRequest request(url); + request.setRawHeader("User-Agent", "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36"); + + QSslConfiguration sslConfig = QSslConfiguration::defaultConfiguration(); + sslConfig.setPeerVerifyMode(QSslSocket::VerifyNone); + request.setSslConfiguration(sslConfig); + + QNetworkReply *reply = networkManager->get(request); + + connect(reply, &QNetworkReply::finished, this, [=]() { + QString errorMsg; + QString vipExpiry; + bool success = false; + + if (reply->error() == QNetworkReply::NoError) { + QByteArray data = reply->readAll(); + QJsonDocument doc = QJsonDocument::fromJson(data); + + if (!doc.isNull() && doc.isObject()) { + QJsonObject json = doc.object(); + int code = json["code"].toInt(-1); + + if (json.contains("code")) { + if (code == 200) { + if (json.contains("msg") && json["msg"].isObject()) { + QJsonObject msg = json["msg"].toObject(); + if (msg.contains("vip")) { + vipExpiry = msg["vip"].toString(); + success = true; + errorMsg = "验证成功"; + } else { + errorMsg = "服务器响应缺少vip字段"; + } + } else { + errorMsg = "服务器响应格式错误"; + } + } else { + QMap errorMap = { + {101, "应用不存在 (101)"}, + {102, "应用已关闭 (102)"}, + {171, "接口维护中 (171)"}, + {172, "接口未添加或不存在 (172)"}, + {104, "签名为空 (104)"}, + {105, "数据过期 (105)"}, + {106, "签名有误 (106)"}, + {148, "卡密为空 (148)"}, + {149, "卡密不存在 (149)"}, + {150, "已使用 (150)"}, + {151, "卡密禁用 (151)"}, + {169, "IP不一致 (169)"} + }; + + errorMsg = errorMap.value(code, "未知错误 (代码: " + QString::number(code) + ")"); + } + } else { + errorMsg = "服务器响应缺少code字段"; + } + } else { + errorMsg = "响应解析错误: " + data; + } + } else { + errorMsg = "网络错误: " + reply->errorString() + " (代码: " + QString::number(reply->error()) + ")"; + } + + reply->deleteLater(); + onAuthenticationFinished(kami, remember, success, errorMsg, vipExpiry); + }); +} + +void MainWindow::onAuthenticationFinished(const QString &kami, bool remember, bool success, const QString &message, const QString &vipExpiry) +{ + authStatus->setText(message); + + if (success) { + isAuthenticated = true; + QDateTime expireTime = QDateTime::fromSecsSinceEpoch(vipExpiry.toLongLong()); + QString expireStr = expireTime.toString("yyyy-MM-dd HH:mm:ss"); + vipInfo->setText("VIP到期: " + expireStr); + + if (remember) { + if (saveKami(kami)) { + savedKami = kami; + } else { + authStatus->setText(authStatus->text() + " (保存卡密失败)"); + } + } else { + clearSavedKami(); + savedKami = ""; + } + + // 如果是首次启动 + if (isFirstLaunch) { + // 提示选择Package目录 + QMessageBox::information(this, "首次启动", "请选择游戏Package目录"); + selectPackagePath(); + + // 提示首次更新 - 使用update_f.json + if (QMessageBox::question(this, "首次启动", "检测到第一次启动,是否立即进行首次更新?", + QMessageBox::Yes | QMessageBox::No) == QMessageBox::Yes) { + statusLabel->setText("开始首次更新..."); + fetchFirstUpdateVersion(); // 调用首次更新函数 + } else { + // 用户选择不进行首次更新,直接检查常规更新 + checkForUpdates(); // 新增:非首次启动时检查更新 + } + + isFirstLaunch = false; // 标记已处理首次启动 + } else { + // 非首次启动,直接检查常规更新 + checkForUpdates(); // 新增:非首次启动时检查更新 + } + + activateButtons(); + fullUpdateBtn->setEnabled(true); + checkPackageExists(); + checkLauncherVersion(); // 检查启动器版本 + checkAndDeleteFiles(); + } else { + isAuthenticated = false; + vipInfo->setText("VIP状态: 验证失败"); + clearSavedKami(); + savedKami = ""; + disableButtons(); + QMessageBox::critical(this, "验证失败", "验证失败: " + message + "\n程序将在5秒后关闭..."); + quitTimer->start(5000); + } +} + +void MainWindow::checkAndDeleteFiles() +{ + QUrl url(SERVER_URL + "delete.json"); + QNetworkRequest request(url); + request.setRawHeader("User-Agent", "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/91.0.4472.124 Safari/537.36"); + + QSslConfiguration sslConfig = QSslConfiguration::defaultConfiguration(); + sslConfig.setPeerVerifyMode(QSslSocket::VerifyNone); + request.setSslConfiguration(sslConfig); + + QNetworkReply *reply = networkManager->get(request); + connect(reply, &QNetworkReply::finished, this, [=]() { + if (reply->error() != QNetworkReply::NoError) { + qDebug() << "无法获取删除列表:" << reply->errorString(); + return; + } + + QByteArray data = reply->readAll(); + QJsonDocument doc = QJsonDocument::fromJson(data); + if (doc.isNull() || !doc.isArray()) { + qDebug() << "删除列表格式错误"; + return; + } + + QJsonArray filesToDelete = doc.array(); + processDeleteList(filesToDelete); + reply->deleteLater(); + }); +} + +void MainWindow::processDeleteList(const QJsonArray &filesToDelete) +{ + int deletedCount = 0; + int failedCount = 0; + + for (const QJsonValue &value : filesToDelete) { + QString relativePath = value.toString(); + if (relativePath.isEmpty()) continue; + + QString fullPath = UPDATE_PATH + "/" + relativePath; + QFile file(fullPath); + + if (file.exists()) { + // 如果是只读文件,先取消只读属性 + const wchar_t* wPath = reinterpret_cast(fullPath.utf16()); + DWORD attrs = GetFileAttributesW(wPath); + if (attrs != INVALID_FILE_ATTRIBUTES && (attrs & FILE_ATTRIBUTE_READONLY)) { + SetFileAttributesW(wPath, attrs & ~FILE_ATTRIBUTE_READONLY); + } + if (file.remove()) { + qDebug() << "已删除文件:" << fullPath; + deletedCount++; + } else { + qDebug() << "删除失败:" << fullPath << file.errorString(); + failedCount++; + } + } + } + + if (deletedCount > 0 || failedCount > 0) { + qDebug() << "删除操作完成: 成功删除" << deletedCount + << "个文件," << failedCount << "个文件删除失败"; + } +} + +void MainWindow::fetchFirstUpdateVersion() +{ + m_isFirstUpdateInProgress = true; // 标记首次更新开始 + + QUrl url(SERVER_URL + UPDATE_F_VERSION_FILE); + QNetworkRequest request(url); + request.setRawHeader("User-Agent", "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/91.0.4472.124 Safari/537.36"); + + QSslConfiguration sslConfig = QSslConfiguration::defaultConfiguration(); + sslConfig.setPeerVerifyMode(QSslSocket::VerifyNone); + request.setSslConfiguration(sslConfig); + + QNetworkReply *reply = networkManager->get(request); + connect(reply, &QNetworkReply::finished, this, [=]() { + if (reply->error() != QNetworkReply::NoError) { + statusLabel->setText("首次更新: 连接服务器失败"); + m_isFirstUpdateInProgress = false; + return; + } + + QByteArray data = reply->readAll(); + QJsonDocument doc = QJsonDocument::fromJson(data); + if (doc.isNull()) { + statusLabel->setText("首次更新: 版本信息解析错误"); + m_isFirstUpdateInProgress = false; + return; + } + + QJsonObject remoteVersion = doc.object(); + QString remoteVer = remoteVersion["version"].toString(); + statusLabel->setText("首次更新: 下载完整包 " + remoteVer); + + // 使用新的文件名 + QString FULL_UPDATE_ZIP = "update_f.zip"; + + // 获取完整包URL + QString updateUrl = remoteVersion["url"].toString(); + if (updateUrl.isEmpty()) { + statusLabel->setText("首次更新: URL无效"); + m_isFirstUpdateInProgress = false; + return; + } + + // 从版本信息中获取密码 + QString password = remoteVersion["password"].toString(); + + // 下载完整包 + QUrl fullUrl(updateUrl); + QNetworkRequest fullRequest(fullUrl); + fullRequest.setRawHeader("User-Agent", "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/91.0.4472.124 Safari/537.36"); + fullRequest.setSslConfiguration(sslConfig); + + QNetworkReply *downloadReply = networkManager->get(fullRequest); + connect(downloadReply, &QNetworkReply::downloadProgress, this, [=](qint64 bytesReceived, qint64 bytesTotal) { + if (bytesTotal > 0) { + int percent = static_cast((bytesReceived * 100) / bytesTotal); + progressBar->setValue(percent); + statusLabel->setText(QString("下载完整包: %1%").arg(percent)); + } + }); + + connect(downloadReply, &QNetworkReply::finished, this, [=]() { + if (downloadReply->error() != QNetworkReply::NoError) { + statusLabel->setText("完整包下载失败: " + downloadReply->errorString()); + m_isFirstUpdateInProgress = false; + return; + } + + // 保存完整包 + QByteArray fullData = downloadReply->readAll(); + QFile fullFile(FULL_UPDATE_ZIP); + if (fullFile.open(QIODevice::WriteOnly)) { + fullFile.write(fullData); + fullFile.close(); + } + + statusLabel->setText("正在解压完整包..."); + progressBar->setValue(0); + + QFutureWatcher *watcher = new QFutureWatcher(this); + connect(watcher, &QFutureWatcher::finished, this, [=]() { + if (watcher->result()) { + // 更新版本信息并保存 + QJsonObject newLocalVersion; + newLocalVersion["version"] = remoteVersion["version"].toString(); + + if (remoteVersion.contains("changelog")) { + newLocalVersion["changelog"] = remoteVersion["changelog"]; + } + if (remoteVersion.contains("timestamp")) { + newLocalVersion["timestamp"] = remoteVersion["timestamp"]; + } + + localVersion = newLocalVersion; + saveLocalVersion(); + + // 更新界面显示 + versionLabel->setText("版本: v" + remoteVer); + statusLabel->setText("首次更新完成!"); + progressBar->setValue(100); + + QFile::remove(FULL_UPDATE_ZIP); + QMessageBox::information(this, "首次更新完成", "游戏已成功安装完整包!"); + + // 标记首次更新完成 + m_isFirstUpdateInProgress = false; + + // 立即执行一次增量更新检查 + statusLabel->setText("检查增量更新..."); + checkForUpdates(); + } else { + statusLabel->setText("解压完整包失败"); + m_isFirstUpdateInProgress = false; + } + watcher->deleteLater(); + }); + + QFuture future = QtConcurrent::run([=]() { + return extractZip(FULL_UPDATE_ZIP, UPDATE_PATH, password); + }); + watcher->setFuture(future); + + downloadReply->deleteLater(); + }); + + reply->deleteLater(); + }); +} + +// 检查启动器版本 +void MainWindow::checkLauncherVersion() +{ + QUrl url(SERVER_URL + "launcher_version.json"); + QNetworkRequest request(url); + request.setRawHeader("User-Agent", "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/91.0.4472.124 Safari/537.36"); + + QSslConfiguration sslConfig = QSslConfiguration::defaultConfiguration(); + sslConfig.setPeerVerifyMode(QSslSocket::VerifyNone); + request.setSslConfiguration(sslConfig); + + QNetworkReply *reply = networkManager->get(request); + connect(reply, &QNetworkReply::finished, this, [=]() { + if (reply->error() != QNetworkReply::NoError) { + // 无法连接服务器,弹窗提示并闪退 + QMessageBox::critical(nullptr, "网络错误", "无法连接服务器,启动器即将关闭"); + QTimer::singleShot(0, this, &MainWindow::quitApplication); + return; + } + + QByteArray data = reply->readAll(); + QJsonDocument doc = QJsonDocument::fromJson(data); + if (doc.isNull() || !doc.isObject()) { + // 数据解析错误,不退出 + qDebug() << "启动器版本信息解析错误"; + return; + } + + QJsonObject remoteData = doc.object(); + QString remoteVersion = remoteData["version"].toString(); + QString downloadUrl = remoteData["url"].toString(); // 保留但不再使用 + + if (compareVersions(remoteVersion, LAUNCHER_VERSION) > 0) { + // 当前版本过旧 + QMessageBox msgBox; + msgBox.setWindowTitle("启动器版本过旧"); + msgBox.setText(QString("发现新版本启动器 v%1,当前版本 v%2。请下载最新版本启动器。\n程序将在5秒后关闭。").arg(remoteVersion).arg(LAUNCHER_VERSION)); + msgBox.setStandardButtons(QMessageBox::Ok); + msgBox.exec(); + + // 5秒后退出 + QTimer::singleShot(5000, this, &MainWindow::quitApplication); + } + + reply->deleteLater(); + }); +} + +void MainWindow::quitApplication() +{ + QApplication::quit(); +} diff --git a/C++/2.3.1/mainwindow.h b/C++/2.3.1/mainwindow.h new file mode 100644 index 0000000..6023159 --- /dev/null +++ b/C++/2.3.1/mainwindow.h @@ -0,0 +1,166 @@ +#ifndef MAINWINDOW_H +#define MAINWINDOW_H + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include // 添加QProcess头文件 + +QT_BEGIN_NAMESPACE +namespace Ui { class MainWindow; } +QT_END_NAMESPACE + +class AuthWindow; + +class MainWindow : public QMainWindow +{ + Q_OBJECT + +public: + MainWindow(QWidget *parent = nullptr); + ~MainWindow(); + +private slots: + void startGame(); + void startOdd(); + void modifyHosts(); + void forceUpdate(); + void openBuyPage(); + void fetchAnnouncement(); + void onAnnouncementFetched(); + void checkForUpdates(); + void onVersionChecked(); + void updateGame(const QJsonObject &remoteVersion = QJsonObject()); + void onUpdateDownloaded(QNetworkReply *reply, const QJsonObject &version); + void selectPackagePath(); + void showAuthWindow(); + void forceFullUpdate(); + void onAuthenticationFinished(const QString &kami, bool remember, bool success, const QString &message, const QString &vipExpiry); + void quitApplication(); + void onGameFinished(int exitCode, QProcess::ExitStatus exitStatus); // 添加游戏进程结束信号槽 + void checkAndDeleteFiles(); + void openWikiPage(); + void reportBug(); // 添加报告Bug的槽函数 + void checkLauncherVersion(); // 检查启动器版本 + void openSettings(); // 新增设置功能 + +private: + void setupUI(); + void updateAnnouncement(const QJsonObject &announcement); + void activateButtons(); + void disableButtons(); + void checkAdminRights(); + void saveLocalVersion(); + int compareVersions(const QString &v1, const QString &v2); + bool extractZip(const QString &zipPath, const QString &extractDir, const QString &password); // 增加密码参数 + void saveSettings(); + void loadSettings(); + void checkPackageExists(); + QString getDeviceId(); + QString loadSavedKami(); + bool saveKami(const QString &kami); + bool clearSavedKami(); + void performNetworkAuthentication(const QString &kami, bool remember); + void loadLocalVersion(); + void fetchVersionForForceUpdate(); + void startGameProcess(); // 添加游戏启动函数 + void fetchFirstUpdateVersion(); + void processDeleteList(const QJsonArray &filesToDelete); + QPushButton *wikiBtn; + bool m_isFirstUpdateInProgress; + QPushButton *bugReportBtn; // 添加Bug报告按钮 + QPixmap backgroundPixmap; + bool backgroundLoaded = false; + QWidget *pathWidget; + QWidget *contentWidget; + QWidget *leftWidget; + QWidget *buttonWidget; + QGroupBox *rightGroup; + QPushButton *settingsBtn; // 新增设置按钮 + void saveNodeSettings(const QString &nodeId); // 新增节点设置保存 + void loadNodeSettings(); // 新增节点设置加载 + void updateServerUrl(); // 更新服务器URL + void startPingTests(); + void pingNode(const QString& url, const QString& nodeId); + void updatePingResult(const QString& nodeId, int latency); + QMap pingReplies; // 存储每个节点的网络请求 + void checkExtractorAvailability(); + + // 配置信息 + QString SERVER_URL; + QString UPDATE_PATH; + QString BAT_FILE; + QString ODD_BAT_FILE; + QString HOSTS_BAT; + QString VERSION_FILE; + QString UPDATE_ZIP; + QString ANNOUNCEMENT_FILE; + QString LAUNCHER_VERSION = ""; + QString AUTH_API = ""; + QString APP_ID = ""; + QString DEVICE_CODE_FILE; + QString CARD_FILE; + + // UI元素 + QLabel *statusLabel; + QLabel *versionLabel; + QLabel *authStatus; + QLabel *vipInfo; + QProgressBar *progressBar; + QTextEdit *announcementText; + QPushButton *startBtn; + QPushButton *oddBtn; + QPushButton *updateBtn; + QPushButton *hostsBtn; + QPushButton *buyBtn; + QPushButton *fullUpdateBtn; + QPushButton *pathSelectBtn; + QLabel *pathLabel; + + // 其他成员 + QNetworkAccessManager *networkManager; + QJsonObject localVersion; + QSettings *settings; + QString deviceId; + QString savedKami; + bool isAuthenticated = false; + AuthWindow *authWindow = nullptr; + QTimer *quitTimer = nullptr; + bool isFirstLaunch = false; + QProcess *gameProcess; // 添加游戏进程 + void fetchBackgroundImage(); + QString m_currentNode; // 当前选择的节点ID + QMap nodeMap; // 节点ID到URL的映射 + QString testNodePassword; // 测试节点密码 + QMap pingLabels; // 存储节点ID到标签的映射 + QMap nodeHostMap; // 存储节点ID到主机名的映射 +}; + +class AuthWindow : public QDialog +{ + Q_OBJECT + +public: + explicit AuthWindow(const QString &deviceId, const QString &savedKami, QWidget *parent = nullptr); + QString getKami() const; + bool getRemember() const; + +private: + QLineEdit *kamiEntry; + QCheckBox *rememberCheck; +}; +#endif // MAINWINDOW_H diff --git a/C++/2.3.1/mainwindow.ui b/C++/2.3.1/mainwindow.ui new file mode 100644 index 0000000..7bff7e1 --- /dev/null +++ b/C++/2.3.1/mainwindow.ui @@ -0,0 +1,31 @@ + + + MainWindow + + + + 0 + 0 + 800 + 600 + + + + MainWindow + + + + + + 0 + 0 + 800 + 21 + + + + + + + + diff --git a/C++/2.3.1/resources.qrc b/C++/2.3.1/resources.qrc new file mode 100644 index 0000000..1354108 --- /dev/null +++ b/C++/2.3.1/resources.qrc @@ -0,0 +1,6 @@ + + + styles.qss + untitled2_zh_CN.ts + + diff --git a/C++/2.3.1/styles.qss b/C++/2.3.1/styles.qss new file mode 100644 index 0000000..22839ce --- /dev/null +++ b/C++/2.3.1/styles.qss @@ -0,0 +1,57 @@ +QMainWindow { + background-color: #f0f0f0; + font-family: "Microsoft YaHei", Arial, sans-serif; +} + +QGroupBox { + border: 1px solid #ccc; + border-radius: 5px; + margin-top: 1ex; + font-weight: bold; +} + +QGroupBox::title { + subcontrol-origin: margin; + subcontrol-position: top center; + padding: 0 5px; +} + +QTextEdit { + background-color: white; + border: 1px solid #ccc; + border-radius: 3px; + font-size: 10pt; +} + +QPushButton { + background-color: #4a86e8; + color: white; + border: none; + padding: 5px 10px; + border-radius: 3px; + min-height: 30px; +} + +QPushButton:hover { + background-color: #3a76d8; +} + +QPushButton:disabled { + background-color: #cccccc; +} + +QLabel { + font-size: 9pt; +} + +QProgressBar { + border: 1px solid #ccc; + border-radius: 3px; + text-align: center; + background-color: #f8f8f8; +} + +QProgressBar::chunk { + background-color: #4a86e8; + width: 10px; +} diff --git a/C++/2.3.1/ui_mainwindow.h b/C++/2.3.1/ui_mainwindow.h new file mode 100644 index 0000000..39e5073 --- /dev/null +++ b/C++/2.3.1/ui_mainwindow.h @@ -0,0 +1,62 @@ +/******************************************************************************** +** Form generated from reading UI file 'mainwindow.ui' +** +** Created by: Qt User Interface Compiler version 6.9.1 +** +** WARNING! All changes made in this file will be lost when recompiling UI file! +********************************************************************************/ + +#ifndef UI_MAINWINDOW_H +#define UI_MAINWINDOW_H + +#include +#include +#include +#include +#include +#include + +QT_BEGIN_NAMESPACE + +class Ui_MainWindow +{ +public: + QWidget *centralwidget; + QMenuBar *menubar; + QStatusBar *statusbar; + + void setupUi(QMainWindow *MainWindow) + { + if (MainWindow->objectName().isEmpty()) + MainWindow->setObjectName("MainWindow"); + MainWindow->resize(800, 600); + centralwidget = new QWidget(MainWindow); + centralwidget->setObjectName("centralwidget"); + MainWindow->setCentralWidget(centralwidget); + menubar = new QMenuBar(MainWindow); + menubar->setObjectName("menubar"); + menubar->setGeometry(QRect(0, 0, 800, 21)); + MainWindow->setMenuBar(menubar); + statusbar = new QStatusBar(MainWindow); + statusbar->setObjectName("statusbar"); + MainWindow->setStatusBar(statusbar); + + retranslateUi(MainWindow); + + QMetaObject::connectSlotsByName(MainWindow); + } // setupUi + + void retranslateUi(QMainWindow *MainWindow) + { + MainWindow->setWindowTitle(QCoreApplication::translate("MainWindow", "MainWindow", nullptr)); + } // retranslateUi + +}; + +namespace Ui { + class MainWindow: public Ui_MainWindow {}; +} // namespace Ui + +QT_END_NAMESPACE + +#endif // UI_MAINWINDOW_H diff --git a/C++/2.3.1/untitled2.pro b/C++/2.3.1/untitled2.pro new file mode 100644 index 0000000..8c22403 --- /dev/null +++ b/C++/2.3.1/untitled2.pro @@ -0,0 +1,28 @@ +QT += network concurrent widgets + +CONFIG += c++17 + +SOURCES += \ + main.cpp \ + mainwindow.cpp + +HEADERS += \ + mainwindow.h + +# 添加资源文件 +RESOURCES += resources.qrc + +# 添加版本信息 +VERSION = 2.3.0 + +win32 { + # 链接必要的 Windows 库 + LIBS += -ladvapi32 -luser32 -lshell32 -lkernel32 + +DEPLOYMENT += 7z +7z.path = $$OUT_PWD +7z.files = $$PWD/7z/* +INSTALLS += 7z + # 生成资源文件 + RC_FILE = launcher.rc +} diff --git a/C++/2.3.1/untitled2.pro.user b/C++/2.3.1/untitled2.pro.user new file mode 100644 index 0000000..c799678 --- /dev/null +++ b/C++/2.3.1/untitled2.pro.user @@ -0,0 +1,225 @@ + + + + + + EnvironmentId + {bb82079d-ca6d-4491-86bb-9e475d60c26a} + + + ProjectExplorer.Project.ActiveTarget + 0 + + + ProjectExplorer.Project.EditorSettings + + true + true + true + + Cpp + + CppGlobal + + + + QmlJS + + QmlJSGlobal + + + 2 + UTF-8 + false + 4 + false + 0 + 80 + true + true + 1 + 0 + false + true + false + 2 + true + true + 0 + 8 + true + false + 1 + true + true + true + *.md, *.MD, Makefile + false + true + true + + + + ProjectExplorer.Project.PluginSettings + + + true + false + true + true + true + true + + false + + + 0 + true + + true + true + Builtin.DefaultTidyAndClazy + 6 + true + + + + true + + + + + ProjectExplorer.Project.Target.0 + + Desktop + true + Desktop Qt 6.9.1 MinGW 64-bit + Desktop Qt 6.9.1 MinGW 64-bit + qt.qt6.691.win64_mingw_kit + 0 + 0 + 0 + + 0 + E:\C++\2.3.1\untitled2\build\Desktop_Qt_6_9_1_MinGW_64_bit-Debug + E:/C++/2.3.1/untitled2/build/Desktop_Qt_6_9_1_MinGW_64_bit-Debug + + + true + QtProjectManager.QMakeBuildStep + false + + + + true + Qt4ProjectManager.MakeStep + + 2 + 构建 + 构建 + ProjectExplorer.BuildSteps.Build + + + + true + Qt4ProjectManager.MakeStep + clean + + 1 + 清除 + 清除 + ProjectExplorer.BuildSteps.Clean + + 2 + false + + false + + Debug + Qt4ProjectManager.Qt4BuildConfiguration + 0 + 0 + + + 0 + 部署 + 部署 + ProjectExplorer.BuildSteps.Deploy + + 1 + + false + ProjectExplorer.DefaultDeployConfiguration + + 1 + + true + true + 0 + true + + 2 + + false + -e cpu-cycles --call-graph "dwarf,4096" -F 250 + + Qt4ProjectManager.Qt4RunConfiguration: + E:/C++/2.3.1/untitled2/untitled2.pro + false + true + true + true + E:/C++/2.3.1/untitled2/build/Desktop_Qt_6_9_1_MinGW_64_bit-Debug + + 1 + 2 + + 1 + + + 0 + 部署 + 部署 + ProjectExplorer.BuildSteps.Deploy + + 1 + + false + ProjectExplorer.DefaultDeployConfiguration + + 1 + + true + true + 0 + true + + 2 + + false + -e cpu-cycles --call-graph "dwarf,4096" -F 250 + + Qt4ProjectManager.Qt4RunConfiguration: + E:/C++/2.3.1/untitled2/untitled2.pro + false + true + true + true + E:/C++/2.3.1/untitled2/build/Desktop_Qt_6_9_1_MinGW_64_bit-Debug + + 1 + + + + ProjectExplorer.Project.TargetCount + 1 + + + ProjectExplorer.Project.Updater.FileVersion + 22 + + + Version + 22 + + diff --git a/C++/2.3.1/untitled2.pro.user.b6372d5 b/C++/2.3.1/untitled2.pro.user.b6372d5 new file mode 100644 index 0000000..2990eed --- /dev/null +++ b/C++/2.3.1/untitled2.pro.user.b6372d5 @@ -0,0 +1,410 @@ + + + + + + EnvironmentId + {b6372d5e-b2b2-4287-9da7-f348cf5f8064} + + + ProjectExplorer.Project.ActiveTarget + 0 + + + ProjectExplorer.Project.EditorSettings + + true + true + true + + Cpp + + CppGlobal + + + + QmlJS + + QmlJSGlobal + + + 2 + UTF-8 + false + 4 + false + 0 + 80 + true + true + 1 + 0 + false + true + false + 2 + true + true + 0 + 8 + true + false + 1 + true + true + true + *.md, *.MD, Makefile + false + true + true + + + + ProjectExplorer.Project.PluginSettings + + + true + false + true + true + true + true + + false + + + 0 + true + + true + true + Builtin.DefaultTidyAndClazy + 6 + true + + + + true + + + + + ProjectExplorer.Project.Target.0 + + Desktop + true + Desktop Qt 6.9.1 MinGW 64-bit + Desktop Qt 6.9.1 MinGW 64-bit + qt.qt6.691.win64_mingw_kit + 1 + 0 + 0 + + 0 + E:\C++\untitled2 + E:/C++/untitled2 + + + true + QtProjectManager.QMakeBuildStep + false + + + + true + Qt4ProjectManager.MakeStep + + 2 + 构建 + 构建 + ProjectExplorer.BuildSteps.Build + + + + true + Qt4ProjectManager.MakeStep + clean + + 1 + 清除 + 清除 + ProjectExplorer.BuildSteps.Clean + + 2 + false + + false + + Debug + Qt4ProjectManager.Qt4BuildConfiguration + 0 + 0 + + + 0 + 部署 + 部署 + ProjectExplorer.BuildSteps.Deploy + + 1 + + false + ProjectExplorer.DefaultDeployConfiguration + + 1 + + true + true + 0 + true + + 2 + + false + -e cpu-cycles --call-graph "dwarf,4096" -F 250 + untitled22 + Qt4ProjectManager.Qt4RunConfiguration: + E:/C++/untitled2/untitled2.pro + true + true + true + true + + 1 + 2 + + + E:\C++\2.3.1\untitled2 + E:/C++/untitled2 + + + true + QtProjectManager.QMakeBuildStep + false + + + + true + Qt4ProjectManager.MakeStep + + 2 + 构建 + 构建 + ProjectExplorer.BuildSteps.Build + + + + true + Qt4ProjectManager.MakeStep + clean + + 1 + 清除 + 清除 + ProjectExplorer.BuildSteps.Clean + + 2 + false + + false + + Release + Qt4ProjectManager.Qt4BuildConfiguration + 0 + 0 + + + 0 + 部署 + 部署 + ProjectExplorer.BuildSteps.Deploy + + 1 + + false + ProjectExplorer.DefaultDeployConfiguration + + 1 + + true + true + 0 + true + + 1 + + false + -e cpu-cycles --call-graph "dwarf,4096" -F 250 + untitled22 + Qt4ProjectManager.Qt4RunConfiguration: + E:/C++/untitled2/untitled2.pro + true + true + true + true + + + true + true + 0 + true + + 2 + + false + -e cpu-cycles --call-graph "dwarf,4096" -F 250 + untitled23 + Qt4ProjectManager.Qt4RunConfiguration: + E:/C++/2.3.1/untitled2/untitled2.pro + true + true + true + true + E:/C++/2.3.1/untitled2 + + 2 + 0 + 0 + 1 + + + 0 + E:\C++\untitled2 + E:/C++/untitled2 + + + true + QtProjectManager.QMakeBuildStep + false + + + + true + Qt4ProjectManager.MakeStep + + 2 + 构建 + 构建 + ProjectExplorer.BuildSteps.Build + + + + true + Qt4ProjectManager.MakeStep + clean + + 1 + 清除 + 清除 + ProjectExplorer.BuildSteps.Clean + + 2 + false + + false + + Debug (imported) + Qt4ProjectManager.Qt4BuildConfiguration + 0 + 0 + + + 0 + 部署 + 部署 + ProjectExplorer.BuildSteps.Deploy + + 1 + + false + ProjectExplorer.DefaultDeployConfiguration + + 1 + + true + true + 0 + true + + 2 + + false + -e cpu-cycles --call-graph "dwarf,4096" -F 250 + + Qt4ProjectManager.Qt4RunConfiguration: + E:/C++/untitled2/untitled2.pro + false + true + true + true + + 1 + 2 + + 3 + + + 0 + 部署 + 部署 + ProjectExplorer.BuildSteps.Deploy + + 1 + + false + ProjectExplorer.DefaultDeployConfiguration + + 1 + + true + true + 0 + true + + 1 + + false + -e cpu-cycles --call-graph "dwarf,4096" -F 250 + untitled22 + Qt4ProjectManager.Qt4RunConfiguration: + E:/C++/untitled2/untitled2.pro + true + true + true + true + + + true + true + 0 + true + + 2 + + false + -e cpu-cycles --call-graph "dwarf,4096" -F 250 + untitled23 + Qt4ProjectManager.Qt4RunConfiguration: + E:/C++/2.3.1/untitled2/untitled2.pro + true + true + true + true + E:/C++/2.3.1/untitled2 + + 2 + + + + ProjectExplorer.Project.TargetCount + 1 + + + ProjectExplorer.Project.Updater.FileVersion + 22 + + + Version + 22 + + diff --git a/C++/2.3.1/untitled2_zh_CN.ts b/C++/2.3.1/untitled2_zh_CN.ts new file mode 100644 index 0000000..630fd35 --- /dev/null +++ b/C++/2.3.1/untitled2_zh_CN.ts @@ -0,0 +1,3 @@ + + + diff --git a/C++/2.4.0/app.manifest b/C++/2.4.0/app.manifest new file mode 100644 index 0000000..cf9a037 --- /dev/null +++ b/C++/2.4.0/app.manifest @@ -0,0 +1,16 @@ + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/C++/2.4.0/launcher.rc b/C++/2.4.0/launcher.rc new file mode 100644 index 0000000..9d10539 --- /dev/null +++ b/C++/2.4.0/launcher.rc @@ -0,0 +1,3 @@ +#include + +1 RT_MANIFEST "app.manifest" \ No newline at end of file diff --git a/C++/2.4.0/main.cpp b/C++/2.4.0/main.cpp new file mode 100644 index 0000000..44c4ae0 --- /dev/null +++ b/C++/2.4.0/main.cpp @@ -0,0 +1,39 @@ +#include "mainwindow.h" +#include +#include +#include + +int main(int argc, char *argv[]) +{ + QApplication app(argc, argv); + + // 设置应用程序信息 + QApplication::setApplicationName("maimai Launcher"); + QApplication::setApplicationVersion("1.0.0"); + QApplication::setOrganizationName("GameStudio"); + QApplication::setOrganizationDomain("gamestudio.com"); + + // 设置样式 + app.setStyle(QStyleFactory::create("Fusion")); + + // 设置默认调色板 + QPalette palette; + palette.setColor(QPalette::Window, QColor(240, 240, 240)); + palette.setColor(QPalette::WindowText, Qt::black); + palette.setColor(QPalette::Base, QColor(255, 255, 255)); + palette.setColor(QPalette::AlternateBase, QColor(240, 240, 240)); + palette.setColor(QPalette::ToolTipBase, Qt::white); + palette.setColor(QPalette::ToolTipText, Qt::black); + palette.setColor(QPalette::Text, Qt::black); + palette.setColor(QPalette::Button, QColor(240, 240, 240)); + palette.setColor(QPalette::ButtonText, Qt::black); + palette.setColor(QPalette::BrightText, Qt::red); + palette.setColor(QPalette::Highlight, QColor(65, 105, 225)); + palette.setColor(QPalette::HighlightedText, Qt::white); + app.setPalette(palette); + + MainWindow w; + w.show(); + + return app.exec(); +} diff --git a/C++/2.4.0/mainwindow.cpp b/C++/2.4.0/mainwindow.cpp new file mode 100644 index 0000000..947f641 --- /dev/null +++ b/C++/2.4.0/mainwindow.cpp @@ -0,0 +1,1994 @@ +#include "mainwindow.h" +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include // 添加SQL头文件 +#include // 添加SQL查询支持 + +const QString UPDATE_F_VERSION_FILE = ""; +const QString DATA_DIR = ""; + + + +void MainWindow::setFolderPermissions(const QString &folderPath) +{ + // 确保路径存在 + QDir dir(folderPath); + if (!dir.exists()) { + qDebug() << "文件夹不存在,无法设置权限:" << folderPath; + return; + } + + // 将QString转换为LPCWSTR + const wchar_t* wPath = reinterpret_cast(folderPath.utf16()); + + // 创建Everyone SID + PSID pEveryoneSid = NULL; + SID_IDENTIFIER_AUTHORITY siaWorld = SECURITY_WORLD_SID_AUTHORITY; + if (!AllocateAndInitializeSid(&siaWorld, 1, SECURITY_WORLD_RID, + 0, 0, 0, 0, 0, 0, 0, &pEveryoneSid)) { + qDebug() << "无法创建Everyone SID,错误代码:" << GetLastError(); + return; + } + + // 创建DACL + EXPLICIT_ACCESS ea; + ZeroMemory(&ea, sizeof(EXPLICIT_ACCESS)); + + // 设置Everyone权限 - 读取和执行、列出文件夹内容、读取 + ea.grfAccessPermissions = GENERIC_READ | GENERIC_EXECUTE | FILE_LIST_DIRECTORY; + ea.grfAccessMode = SET_ACCESS; + ea.grfInheritance = SUB_CONTAINERS_AND_OBJECTS_INHERIT; + ea.Trustee.TrusteeForm = TRUSTEE_IS_SID; + ea.Trustee.TrusteeType = TRUSTEE_IS_WELL_KNOWN_GROUP; + ea.Trustee.ptstrName = (LPWSTR)pEveryoneSid; + + PACL pDacl = NULL; + DWORD dwRes = SetEntriesInAcl(1, &ea, NULL, &pDacl); + if (dwRes != ERROR_SUCCESS) { + qDebug() << "创建DACL失败,错误代码:" << dwRes; + FreeSid(pEveryoneSid); + return; + } + + // 设置文件夹权限 + dwRes = SetNamedSecurityInfo((LPWSTR)wPath, SE_FILE_OBJECT, + DACL_SECURITY_INFORMATION, NULL, NULL, pDacl, NULL); + if (dwRes != ERROR_SUCCESS) { + qDebug() << "设置文件夹权限失败,错误代码:" << dwRes; + } else { + qDebug() << "成功设置文件夹权限:" << folderPath; + } + + // 清理资源 + FreeSid(pEveryoneSid); + if (pDacl) LocalFree(pDacl); +} + +void ensureDataDirExists() +{ + QString dataDir = ""; + QDir dDrive(""); + + // 检查D盘是否存在 + if (!dDrive.exists()) { + dataDir = ""; + } + + QDir dir(dataDir); + if (!dir.exists()) { + dir.mkpath("."); + } + + const wchar_t* path = reinterpret_cast(dataDir.utf16()); + DWORD attributes = GetFileAttributesW(path); + if (attributes != INVALID_FILE_ATTRIBUTES) { + SetFileAttributesW(path, attributes | FILE_ATTRIBUTE_HIDDEN); + } +} + +QStringList MainWindow::getQQNumbersFromQQNT() +{ + QStringList qqNumbers; + + // QQNT默认安装路径 + QString qqntPath = QStandardPaths::writableLocation(QStandardPaths::DocumentsLocation) + + ""; + + QDir qqntDir(qqntPath); + if (!qqntDir.exists()) { + qDebug() << "QQNT目录不存在:" << qqntPath; + return qqNumbers; + } + + // 遍历目录,查找所有纯数字文件夹 + QStringList folders = qqntDir.entryList(QDir::Dirs | QDir::NoDotAndDotDot); + for (const QString &folder : folders) { + // 检查是否为纯数字(QQ号) + bool isNumber = false; + folder.toLongLong(&isNumber); + if (isNumber) { + qqNumbers.append(folder); + qDebug() << "找到QQ号:" << folder; + } + } + + if (qqNumbers.isEmpty()) { + qDebug() << "未找到任何QQ号"; + } + + return qqNumbers; +} + +// 连接数据库 +bool MainWindow::connectToDatabase() +{ + // 使用QMYSQL驱动连接MySQL + db = QSqlDatabase::addDatabase("QMYSQL"); // 修复:改为使用QMYSQL驱动 + + // 设置连接参数 + db.setHostName(""); + db.setPort(3306); + db.setDatabaseName(""); + db.setUserName(""); + db.setPassword(""); + + if (!db.open()) { + QString error = "无法连接数据库:\n" + db.lastError().text(); + qDebug() << error; + QMessageBox::critical(this, "数据库错误", error); + return false; + } + + return true; +} + +// 检查QQ号是否在数据库中(支持多个QQ号) +bool MainWindow::checkQQNumber() +{ + QStringList qqNumbers = getQQNumbersFromQQNT(); + if (qqNumbers.isEmpty()) { + QMessageBox::critical(this, "错误", "无法获取QQ号,请确保已登录QQNT"); + return false; + } + + // 使用成员函数连接数据库 + if (!connectToDatabase()) { + return false; + } + + // 创建查询语句 + QString placeholders = QStringList(qqNumbers.size(), "?").join(","); + QString queryStr = QString("SELECT COUNT(*) FROM QQ WHERE qq_number IN (%1)").arg(placeholders); + + QSqlQuery query; + query.prepare(queryStr); + + // 绑定所有QQ号参数 + for (const QString &qq : qqNumbers) { + query.addBindValue(qq); + } + + if (!query.exec()) { + QMessageBox::critical(this, "查询错误", + "数据库查询失败:\n" + query.lastError().text()); + db.close(); + return false; + } + + // 处理查询结果 + if (query.next()) { + int count = query.value(0).toInt(); + if (count > 0) { + qDebug() << "QQ号验证成功: 找到" << count << "个匹配的QQ号"; + db.close(); + return true; + } + } + + QMessageBox::critical(this, "未授权", + "未找到任何授权的QQ号\n检测到的QQ号: " + qqNumbers.join(", ")); + db.close(); + return false; +} + +AuthWindow::AuthWindow(const QString &deviceId, const QString &savedKami, QWidget *parent) + : QDialog(parent) +{ + setWindowTitle("卡密验证"); + setFixedSize(400, 250); + setWindowModality(Qt::ApplicationModal); + + QVBoxLayout *layout = new QVBoxLayout(this); + layout->setContentsMargins(20, 20, 20, 20); + layout->setSpacing(15); + + QLabel *deviceLabel = new QLabel("设备ID: " + deviceId); + deviceLabel->setStyleSheet("font-size: 10pt;"); + layout->addWidget(deviceLabel); + + QLabel *kamiLabel = new QLabel("卡密:"); + layout->addWidget(kamiLabel); + + kamiEntry = new QLineEdit(); + kamiEntry->setPlaceholderText("请输入您的卡密"); + if (!savedKami.isEmpty()) { + kamiEntry->setText(savedKami); + } + layout->addWidget(kamiEntry); + + rememberCheck = new QCheckBox("记住卡密"); + rememberCheck->setChecked(true); + layout->addWidget(rememberCheck); + + QHBoxLayout *btnLayout = new QHBoxLayout(); + QPushButton *okBtn = new QPushButton("验证"); + connect(okBtn, &QPushButton::clicked, this, &QDialog::accept); + btnLayout->addWidget(okBtn); + + QPushButton *cancelBtn = new QPushButton("取消"); + connect(cancelBtn, &QPushButton::clicked, this, &QDialog::reject); + btnLayout->addWidget(cancelBtn); + + layout->addLayout(btnLayout); +} + +QString AuthWindow::getKami() const +{ + return kamiEntry->text().trimmed(); +} + +bool AuthWindow::getRemember() const +{ + return rememberCheck->isChecked(); +} + +MainWindow::MainWindow(QWidget *parent) + : QMainWindow(parent) + , m_isFirstUpdateInProgress(false) + , gameProcess(nullptr) +{ + ensureDataDirExists(); + settings = new QSettings("GameStudio", "maimaiLauncher", this); + + // 初始化数据目录路径 + QString dataDir = ""; + QDir dDrive(""); + if (!dDrive.exists()) { + dataDir = ""; + } + + // 初始化所有路径变量 + CARD_FILE = dataDir + ""; + VERSION_FILE = ""; + UPDATE_ZIP = ""; + ANNOUNCEMENT_FILE = ""; + + loadSettings(); // 必须在路径初始化后调用 + setupSslConfiguration(); + deviceId = getDeviceId(); + savedKami = loadSavedKami(); + + if (UPDATE_PATH.isEmpty()) { + QMessageBox::warning(this, "路径未设置", "请先设置Package路径!"); + selectPackagePath(); // 强制用户选择路径 + } + + setupUI(); + checkAdminRights(); + + // 加载本地版本信息 + loadLocalVersion(); + + checkPackageExists(); + disableButtons(); + + if (!savedKami.isEmpty()) { + authStatus->setText("使用保存的卡密验证中..."); + QTimer::singleShot(100, this, [this]() { + performNetworkAuthentication(savedKami, true); + checkAndDeleteFiles(); // 添加删除检查 + }); + } else { + authStatus->setText("等待卡密验证"); + QTimer::singleShot(100, this, &MainWindow::showAuthWindow); + } + + fetchAnnouncement(); + + quitTimer = new QTimer(this); + quitTimer->setSingleShot(true); + connect(quitTimer, &QTimer::timeout, this, &MainWindow::quitApplication); +} + +void MainWindow::setupSslConfiguration() +{ + // 加载我们信任的根证书 + // 实际应用中应该从安全位置加载证书文件 + QFile certFile(":/certs/trusted_cert.pem"); + if (certFile.open(QIODevice::ReadOnly)) { + QSslCertificate certificate(&certFile, QSsl::Pem); + if (!certificate.isNull()) { + trustedCertificates.append(certificate); + } + certFile.close(); + } + + // 创建SSL配置 + QSslConfiguration sslConfig = QSslConfiguration::defaultConfiguration(); + sslConfig.setCaCertificates(trustedCertificates); + sslConfig.setProtocol(QSsl::TlsV1_2OrLater); + QSslConfiguration::setDefaultConfiguration(sslConfig); +} + +// 验证响应域名是否可信 +bool MainWindow::validateResponseDomain(const QUrl &url) +{ + // 预期的认证域名 - 使用Punycode表示的中文域名 + const QString expectedHost = ""; + + // 检查主机名是否匹配 + if (url.host() != expectedHost) { + qWarning() << "zako!"; + return false; + } + + // 检查是否使用HTTPS + if (url.scheme() != "https") { + qWarning() << "协议不安全! 使用HTTP而不是HTTPS"; + return false; + } + + return true; +} + +MainWindow::~MainWindow() + { + saveSettings(); + delete settings; + delete authWindow; // 确保删除认证窗口 + delete gameProcess; // 确保删除游戏进程 + } + +void MainWindow::loadLocalVersion() +{ + QString versionFilePath = UPDATE_PATH + "/" + VERSION_FILE; + QFile file(versionFilePath); + + if (file.exists() && file.open(QIODevice::ReadOnly)) { + QByteArray data = file.readAll(); + file.close(); + + QJsonDocument doc = QJsonDocument::fromJson(data); + if (!doc.isNull() && doc.isObject()) { + localVersion = doc.object(); + QString ver = localVersion["version"].toString(); + versionLabel->setText("版本: v" + ver); + qDebug() << "加载本地版本: v" << ver; + } else { + versionLabel->setText("版本: 文件损坏"); + qDebug() << "版本文件损坏"; + } + } else { + // 如果版本文件不存在,创建初始版本 + localVersion = QJsonObject(); + localVersion["version"] = "0.0.0"; + saveLocalVersion(); + versionLabel->setText("版本: 未安装"); + qDebug() << "创建初始版本文件"; + } +} + +void MainWindow::setupUI() +{ + setWindowTitle("maimai启动器 v" + LAUNCHER_VERSION); + setFixedSize(800, 600); + + QWidget *centralWidget = new QWidget(this); + QVBoxLayout *mainLayout = new QVBoxLayout(centralWidget); + + QWidget *pathWidget = new QWidget(); + QHBoxLayout *pathLayout = new QHBoxLayout(pathWidget); + pathLayout->setContentsMargins(10, 5, 10, 5); + + QLabel *pathTitle = new QLabel("Package路径:"); + pathLabel = new QLabel(UPDATE_PATH); + pathLabel->setStyleSheet("background-color: #f0f0f0; border: 1px solid #ccc; padding: 3px;"); + pathLabel->setMinimumWidth(300); + + pathSelectBtn = new QPushButton("选择路径"); + pathSelectBtn->setFixedSize(80, 25); + connect(pathSelectBtn, &QPushButton::clicked, this, &MainWindow::selectPackagePath); + + pathLayout->addWidget(pathTitle); + pathLayout->addWidget(pathLabel, 1); + pathLayout->addWidget(pathSelectBtn); + + mainLayout->addWidget(pathWidget); + + QWidget *contentWidget = new QWidget(); + QHBoxLayout *contentLayout = new QHBoxLayout(contentWidget); + + QWidget *leftWidget = new QWidget(); + QVBoxLayout *leftLayout = new QVBoxLayout(leftWidget); + leftLayout->setContentsMargins(10, 10, 10, 10); + + QLabel *titleLabel = new QLabel("maimai启动器"); + titleLabel->setStyleSheet("font-size: 16pt; font-weight: bold;"); + leftLayout->addWidget(titleLabel, 0, Qt::AlignCenter); + + authStatus = new QLabel("验证状态: 正在初始化..."); + authStatus->setStyleSheet("color: blue; font-weight: bold;"); + leftLayout->addWidget(authStatus, 0, Qt::AlignCenter); + + vipInfo = new QLabel("VIP状态: 未验证"); + vipInfo->setStyleSheet("color: purple;"); + leftLayout->addWidget(vipInfo, 0, Qt::AlignCenter); + + versionLabel = new QLabel("版本: 加载中..."); + leftLayout->addWidget(versionLabel, 0, Qt::AlignCenter); + + progressBar = new QProgressBar(); + progressBar->setFixedHeight(20); + leftLayout->addWidget(progressBar); + + statusLabel = new QLabel("等待ing..."); + leftLayout->addWidget(statusLabel, 0, Qt::AlignCenter); + + QWidget *buttonWidget = new QWidget(); + QVBoxLayout *buttonLayout = new QVBoxLayout(buttonWidget); + + QHBoxLayout *row1 = new QHBoxLayout(); + startBtn = new QPushButton("启动游戏"); + startBtn->setFixedSize(120, 35); + startBtn->setEnabled(false); + connect(startBtn, &QPushButton::clicked, this, &MainWindow::startGame); + row1->addWidget(startBtn); + + oddBtn = new QPushButton("启动ODD"); + oddBtn->setFixedSize(120, 35); + oddBtn->setEnabled(false); + connect(oddBtn, &QPushButton::clicked, this, &MainWindow::startOdd); + row1->addWidget(oddBtn); + buttonLayout->addLayout(row1); + + QHBoxLayout *row2 = new QHBoxLayout(); + updateBtn = new QPushButton("更新"); + updateBtn->setFixedSize(120, 35); + updateBtn->setEnabled(false); + connect(updateBtn, &QPushButton::clicked, this, &MainWindow::forceUpdate); + row2->addWidget(updateBtn); + + hostsBtn = new QPushButton("修改hosts"); + hostsBtn->setFixedSize(120, 35); + hostsBtn->setEnabled(false); + connect(hostsBtn, &QPushButton::clicked, this, &MainWindow::modifyHosts); + row2->addWidget(hostsBtn); + buttonLayout->addLayout(row2); + + // 修复:将"更新完整包"按钮添加到row3 + QHBoxLayout *row3 = new QHBoxLayout(); + buyBtn = new QPushButton("购买卡密"); + buyBtn->setFixedSize(120, 35); + connect(buyBtn, &QPushButton::clicked, this, &MainWindow::openBuyPage); + row3->addWidget(buyBtn); + + fullUpdateBtn = new QPushButton("更新完整包"); + fullUpdateBtn->setFixedSize(120, 35); + connect(fullUpdateBtn, &QPushButton::clicked, this, &MainWindow::forceFullUpdate); + row3->addWidget(fullUpdateBtn); + buttonLayout->addLayout(row3); + + QHBoxLayout *row4 = new QHBoxLayout(); + wikiBtn = new QPushButton("wiki文档"); + wikiBtn->setFixedSize(120, 35); + connect(wikiBtn, &QPushButton::clicked, this, &MainWindow::openWikiPage); + row4->addWidget(wikiBtn); + + // 添加Bug报告按钮 + bugReportBtn = new QPushButton("反馈Bug"); + bugReportBtn->setFixedSize(120, 35); + connect(bugReportBtn, &QPushButton::clicked, this, &MainWindow::reportBug); + row4->addWidget(bugReportBtn); + + buttonLayout->addLayout(row4); + + leftLayout->addWidget(buttonWidget); + + QGroupBox *rightGroup = new QGroupBox("最新公告"); + rightGroup->setStyleSheet("QGroupBox { font-weight: bold; }"); + QVBoxLayout *rightLayout = new QVBoxLayout(rightGroup); + + announcementText = new QTextEdit(); + announcementText->setReadOnly(true); + announcementText->setText("正在加载公告..."); + announcementText->setStyleSheet("font-size: 10pt;"); + rightLayout->addWidget(announcementText); + + contentLayout->addWidget(leftWidget, 2); + contentLayout->addWidget(rightGroup, 1); + + mainLayout->addWidget(contentWidget, 1); + + QLabel *footerLabel = new QLabel("闲鱼:小xin喵"); + footerLabel->setStyleSheet("color: gray; font-size: 8pt;"); + mainLayout->addWidget(footerLabel, 0, Qt::AlignRight | Qt::AlignBottom); + + setCentralWidget(centralWidget); + networkManager = new QNetworkAccessManager(this); +} + +void MainWindow::forceFullUpdate() +{ + if (!isAuthenticated) { + QMessageBox::warning(this, "未验证", "请先完成卡密验证"); + return; + } + + if (UPDATE_PATH.isEmpty()) { + QMessageBox::warning(this, "路径未设置", "请先设置Package路径!"); + return; + } + + // 确认用户操作 + if (QMessageBox::question(this, "更新完整包", + "确定要下载并安装完整游戏包吗?\n这将覆盖所有本地文件。", + QMessageBox::Yes | QMessageBox::No) != QMessageBox::Yes) { + return; + } + + // 禁用相关按钮 + fullUpdateBtn->setEnabled(false); + startBtn->setEnabled(false); + statusLabel->setText("开始下载完整游戏包..."); + + // 调用首次更新函数(该函数已实现完整包下载) + fetchFirstUpdateVersion(); +} + +void MainWindow::updateAnnouncement(const QJsonObject &announcement) +{ + QString title = announcement["title"].toString("公告"); + QString date = announcement["date"].toString(QDate::currentDate().toString("yyyy-MM-dd")); + QString content = announcement["content"].toString("暂无公告内容。"); + + // 处理换行符:将\n替换为HTML换行标签
+ content.replace("\n", "
"); + + // 添加额外的换行处理:如果服务器使用其他换行符(如\r\n),也进行替换 + content.replace("\r\n", "
"); + content.replace("\r", "
"); + + announcementText->clear(); + announcementText->append(QString("
%1
").arg(title)); + announcementText->append(QString("
发布日期: %1
").arg(date)); + announcementText->append("
"); + announcementText->append(QString("
%1
").arg(content)); +} + +void MainWindow::reportBug() +{ + // 创建邮件主题和正文 + QString subject = QString("maimai启动器Bug报告 (v%1)").arg(LAUNCHER_VERSION); + QString body = QString("设备ID: %1\n\n请描述您遇到的问题:\n").arg(deviceId); + + // 创建mailto链接 + QString mailto = QString("mailto:2932869213@qq.com?subject=%1&body=%2") + .arg(QString(QUrl::toPercentEncoding(subject))) + .arg(QString(QUrl::toPercentEncoding(body))); + + // 打开默认邮件客户端 + if (!QDesktopServices::openUrl(QUrl(mailto))) { + QMessageBox::warning(this, "错误", "无法打开邮件客户端。请确保已安装邮件程序。"); + } +} + + +void MainWindow::activateButtons() +{ + if (isAuthenticated) { + startBtn->setEnabled(true); + oddBtn->setEnabled(true); + updateBtn->setEnabled(true); + hostsBtn->setEnabled(true); + fullUpdateBtn->setEnabled(true); + } + buyBtn->setEnabled(true); + pathSelectBtn->setEnabled(true); + wikiBtn->setEnabled(true); +} + +void MainWindow::disableButtons() +{ + startBtn->setEnabled(false); + oddBtn->setEnabled(false); + updateBtn->setEnabled(false); + hostsBtn->setEnabled(false); + fullUpdateBtn->setEnabled(false); + wikiBtn->setEnabled(false); +} + +void MainWindow::openWikiPage() +{ + QDesktopServices::openUrl(QUrl(WIKI_URL)); +} + +void MainWindow::checkAdminRights() +{ + BOOL isAdmin = FALSE; + SID_IDENTIFIER_AUTHORITY NtAuthority = SECURITY_NT_AUTHORITY; + PSID AdministratorsGroup; + + if (AllocateAndInitializeSid(&NtAuthority, 2, SECURITY_BUILTIN_DOMAIN_RID, + DOMAIN_ALIAS_RID_ADMINS, 0, 0, 0, 0, 0, 0, + &AdministratorsGroup)) { + if (!CheckTokenMembership(NULL, AdministratorsGroup, &isAdmin)) { + isAdmin = FALSE; + } + FreeSid(AdministratorsGroup); + } + + if (!isAdmin) { + QMessageBox::information(this, "权限提升", + "启动器需要管理员权限运行,请允许UAC提示。"); + + wchar_t path[MAX_PATH]; + GetModuleFileNameW(NULL, path, MAX_PATH); + ShellExecuteW(NULL, L"runas", path, NULL, NULL, SW_SHOWNORMAL); + QApplication::quit(); + } +} + + +int MainWindow::compareVersions(const QString &v1, const QString &v2) +{ + QStringList parts1 = v1.split('.'); + QStringList parts2 = v2.split('.'); + int maxParts = qMax(parts1.size(), parts2.size()); + + for (int i = 0; i < maxParts; i++) { + int num1 = (i < parts1.size()) ? parts1[i].toInt() : 0; + int num2 = (i < parts2.size()) ? parts2[i].toInt() : 0; + + if (num1 < num2) return -1; + if (num1 > num2) return 1; + } + return 0; +} + +// 修改后的解压函数,支持密码 +bool MainWindow::extractZip(const QString &zipPath, const QString &extractDir, const QString &password) +{ + QFile zipFile(zipPath); + if (!zipFile.exists()) { + qDebug() << "ZIP文件不存在:" << zipPath; + return false; + } + + QDir dir(extractDir); + if (!dir.exists()) { + if (!dir.mkpath(".")) { + qDebug() << "无法创建目录:" << extractDir; + return false; + } + } + + QString program; + QStringList arguments; + + // 尝试多个可能的7z路径 + QString appDir = QCoreApplication::applicationDirPath(); + QStringList possiblePaths = { + appDir + "/7z/7z.exe", + "C:/Program Files/7-Zip/7z.exe", + "C:/Program Files (x86)/7-Zip/7z.exe" + }; + + bool found7z = false; + for (const QString &path : possiblePaths) { + if (QFile::exists(path)) { + program = path; + found7z = true; + break; + } + } + + if (!found7z) { + // 尝试在PATH中查找7z + program = "7z"; + QProcess checkProcess; + checkProcess.start(program, QStringList() << "--help"); + if (!checkProcess.waitForStarted(3000) || !checkProcess.waitForFinished(3000)) { + qDebug() << "找不到7z解压程序"; + return false; + } + } + + // 设置解压参数 + arguments << "x" << "-y"; + if (!password.isEmpty()) { + arguments << "-p" + password; + } + arguments << "-o" + extractDir; + arguments << zipPath; + + qDebug() << "解压命令:" << program << arguments; + + QProcess process; + process.setProgram(program); + process.setArguments(arguments); + process.start(); + + // 延长等待时间到10分钟(大型更新可能需要更长时间) + if (!process.waitForStarted(10000)) { // 10秒内启动 + qDebug() << "无法启动解压进程:" << process.errorString(); + return false; + } + + // 等待解压完成(最长60分钟) + if (!process.waitForFinished(3600000)) { + qDebug() << "解压进程超时:" << process.errorString(); + return false; + } + + if (process.exitCode() != 0) { + qDebug() << "解压失败,错误码:" << process.exitCode(); + qDebug() << "错误输出:" << process.readAllStandardError(); + return false; + } + + qDebug() << "成功解压文件到" << extractDir; + return true; +} + +void MainWindow::startGame() +{ + if (!isAuthenticated) { + QMessageBox::warning(this, "未验证", "请先完成卡密验证"); + return; + } + + if (UPDATE_PATH.isEmpty()) { + QMessageBox::warning(this, "路径未设置", "请先设置Package路径!"); + return; + } + + QString batPath = UPDATE_PATH + "/2-Start.bat"; + if (!QFile::exists(batPath)) { + QMessageBox::critical(this, "错误", "找不到启动脚本: " + batPath); + return; + } + + disableButtons(); + statusLabel->setText("正在启动游戏..."); + + // 确保游戏进程对象已创建 + if (gameProcess) { + gameProcess->deleteLater(); + gameProcess = nullptr; + } + + gameProcess = new QProcess(this); + gameProcess->setWorkingDirectory(UPDATE_PATH); + + // 连接游戏结束信号 + connect(gameProcess, QOverload::of(&QProcess::finished), + this, &MainWindow::onGameFinished); + + // 启动bat文件 + gameProcess->start("cmd.exe", QStringList() << "/c" << batPath); + + // 添加进程检测定时器 + QTimer::singleShot(3000, this, [this]() { + checkGameProcess(); + }); +} + +void MainWindow::checkGameProcess() +{ + // 创建进程快照 + HANDLE hSnapshot = CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, 0); + if (hSnapshot == INVALID_HANDLE_VALUE) { + qDebug() << "无法创建进程快照"; + return; + } + + PROCESSENTRY32 pe; + pe.dwSize = sizeof(PROCESSENTRY32); + + bool gameRunning = false; + + if (Process32First(hSnapshot, &pe)) { + do { + // 转换为QString进行比较 + QString processName = QString::fromWCharArray(pe.szExeFile); + if (processName.compare("Sinmai.exe", Qt::CaseInsensitive) == 0) { + gameRunning = true; + break; + } + } while (Process32Next(hSnapshot, &pe)); + } + + CloseHandle(hSnapshot); + + if (gameRunning) { + statusLabel->setText("游戏运行中..."); + } else { + // 如果游戏进程未运行,继续检查 + QTimer::singleShot(2000, this, [this]() { + checkGameProcess(); + }); + } +} + +void MainWindow::startGameProcess() +{ + // 确保 gameProcess 被正确创建 + if (gameProcess) { + gameProcess->kill(); + gameProcess->deleteLater(); + gameProcess = nullptr; + } + gameProcess = new QProcess(this); + gameProcess->setWorkingDirectory(UPDATE_PATH); + + // 连接游戏结束信号 + connect(gameProcess, QOverload::of(&QProcess::finished), + this, &MainWindow::onGameFinished); + + // 启动注入程序 - 使用新的 QProcess 实例 + QProcess *injectProcess = new QProcess(this); + injectProcess->setWorkingDirectory(UPDATE_PATH); + + QStringList injectArgs; + injectArgs << "-d" << "-k" << "mai2hook.dll" << "amdaemon.exe" + << "-f" << "-c" << "config_common.json" << "config_server.json" << "config_client.json"; + + // 增加超时时间到15秒(15000毫秒) + injectProcess->start("inject", injectArgs); + + // 增加等待时间到15秒 + if (!injectProcess->waitForFinished(15000)) { + statusLabel->setText("注入程序超时"); + injectProcess->deleteLater(); + activateButtons(); + return; + } + + injectProcess->deleteLater(); + + // 启动游戏主程序 + QStringList gameArgs; + gameArgs << "-screen-fullscreen" << "1" << "-screen-width" << "1080" << "-screen-height" << "1920" << "-silent-crashes"; + + gameProcess->start("Sinmai.exe", gameArgs); + + if (!gameProcess->waitForStarted()) { + statusLabel->setText("无法启动游戏"); + activateButtons(); + return; + } + + statusLabel->setText("游戏运行中..."); +} + +void MainWindow::onGameFinished(int exitCode, QProcess::ExitStatus exitStatus) +{ + Q_UNUSED(exitCode); + Q_UNUSED(exitStatus); + + // 检查游戏进程是否仍在运行 + checkGameProcess(); // 立即检查一次 + + // 添加延迟检查以确保游戏进程已退出 + QTimer::singleShot(1000, this, [this]() { + // 创建进程快照 + HANDLE hSnapshot = CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, 0); + if (hSnapshot == INVALID_HANDLE_VALUE) { + statusLabel->setText("游戏进程已结束"); + activateButtons(); + // 即使快照失败也尝试结束cmd进程 + killAllCmdProcesses(); + return; + } + + PROCESSENTRY32 pe; + pe.dwSize = sizeof(PROCESSENTRY32); + + bool gameRunning = false; + + if (Process32First(hSnapshot, &pe)) { + do { + QString processName = QString::fromWCharArray(pe.szExeFile); + if (processName.compare("Sinmai.exe", Qt::CaseInsensitive) == 0) { + gameRunning = true; + break; + } + } while (Process32Next(hSnapshot, &pe)); + } + + CloseHandle(hSnapshot); + + if (!gameRunning) { + statusLabel->setText("游戏进程已结束"); + activateButtons(); + + // 清理游戏进程对象 + if (gameProcess) { + gameProcess->deleteLater(); + gameProcess = nullptr; + } + + // 结束所有cmd.exe进程 + killAllCmdProcesses(); + } else { + // 如果游戏仍在运行,继续检查 + QTimer::singleShot(2000, this, [this]() { + onGameFinished(0, QProcess::NormalExit); + }); + } + }); +} + +// 新增函数:结束所有cmd.exe进程 +void MainWindow::killAllCmdProcesses() +{ + QProcess killProcess; + killProcess.start("taskkill", QStringList() << "/f" << "/im" << "cmd.exe"); + killProcess.waitForFinished(); +} + +void MainWindow::startOdd() +{ + if (!isAuthenticated) { + QMessageBox::warning(this, "未验证", "请先完成卡密验证"); + return; + } + + if (UPDATE_PATH.isEmpty()) { + QMessageBox::warning(this, "路径未设置", "请先设置Package路径!"); + return; + } + + QString batPath = UPDATE_PATH + ""; + if (!QFile::exists(batPath)) { + QMessageBox::critical(this, "错误", "找不到ODD启动脚本: " + batPath); + return; + } + + // 启动bat文件 + QProcess::startDetached("cmd.exe", QStringList() << "/c" << batPath, UPDATE_PATH); + statusLabel->setText("正在启动ODD驱动程序..."); + + // 添加延迟检查 + QTimer::singleShot(3000, this, [this]() { + // 获取Windows系统目录 + wchar_t winDir[MAX_PATH]; + GetSystemDirectoryW(winDir, MAX_PATH); + QString driversPath = QString::fromWCharArray(winDir) + ""; + + // 检查驱动文件是否存在 + if (QFile::exists(driversPath)) { + statusLabel->setText("ODD启动成功"); + + // 结束所有cmd.exe进程 + QProcess killProcess; + killProcess.start("taskkill", QStringList() << "/f" << "/im" << "cmd.exe"); + killProcess.waitForFinished(); + } else { + statusLabel->setText("ODD启动失败 - 驱动文件未找到"); + } + }); +} + +void MainWindow::modifyHosts() +{ + if (!isAuthenticated) { + QMessageBox::warning(this, "未验证", "请先完成卡密验证"); + return; + } + + if (UPDATE_PATH.isEmpty()) { + QMessageBox::warning(this, "路径未设置", "请先设置Package路径!"); + return; + } + + QString batPath = UPDATE_PATH + ""; + if (!QFile::exists(batPath)) { + QMessageBox::critical(this, "错误", "找不到hosts修改脚本: " + batPath); + return; + } + + // 启动bat文件 + QProcess::startDetached("cmd.exe", QStringList() << "/c" << batPath, UPDATE_PATH); + statusLabel->setText("正在修改hosts文件..."); + + // 添加延迟检查 + QTimer::singleShot(3000, this, [this]() { + // 获取hosts文件路径 + wchar_t winDir[MAX_PATH]; + GetWindowsDirectoryW(winDir, MAX_PATH); + QString hostsPath = QString::fromWCharArray(winDir) + ""; + + // 检查hosts文件内容 + bool found = false; + QFile hostsFile(hostsPath); + if (hostsFile.open(QIODevice::ReadOnly | QIODevice::Text)) { + QTextStream in(&hostsFile); + while (!in.atEnd()) { + QString line = in.readLine(); + if (line.contains("", Qt::CaseInsensitive)) { + found = true; + break; + } + } + hostsFile.close(); + } + + // 根据检查结果更新状态 + if (found) { + statusLabel->setText("hosts修改成功"); + } else { + statusLabel->setText("hosts修改失败"); + } + + // 结束所有cmd.exe进程 + QProcess killProcess; + killProcess.start("taskkill", QStringList() << "/f" << "/im" << "cmd.exe"); + killProcess.waitForFinished(); + }); +} + +void MainWindow::forceUpdate() +{ + if (!isAuthenticated) { + QMessageBox::warning(this, "未验证", "请先完成卡密验证"); + return; + } + + if (UPDATE_PATH.isEmpty()) { + QMessageBox::warning(this, "路径未设置", "请先设置Package路径!"); + return; + } + + statusLabel->setText("开始强制更新..."); + fetchVersionForForceUpdate(); +} + +void MainWindow::fetchVersionForForceUpdate() +{ + QUrl url(SERVER_URL + VERSION_FILE); + QNetworkRequest request(url); + request.setRawHeader("User-Agent", "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/91.0.4472.124 Safari/537.36"); + + QSslConfiguration sslConfig = QSslConfiguration::defaultConfiguration(); + sslConfig.setPeerVerifyMode(QSslSocket::VerifyNone); + request.setSslConfiguration(sslConfig); + + QNetworkReply *reply = networkManager->get(request); + connect(reply, &QNetworkReply::finished, this, [=]() { + if (reply->error() != QNetworkReply::NoError) { + statusLabel->setText("连接服务器失败"); + return; + } + + QByteArray data = reply->readAll(); + QJsonDocument doc = QJsonDocument::fromJson(data); + if (doc.isNull()) { + statusLabel->setText("版本信息解析错误"); + return; + } + + updateGame(doc.object()); + reply->deleteLater(); + }); +} + +void MainWindow::openBuyPage() +{ + QDesktopServices::openUrl(QUrl("BUY_URL")); +} + +void MainWindow::fetchAnnouncement() +{ + QUrl url(SERVER_URL + "g/" + ANNOUNCEMENT_FILE); + QNetworkRequest request(url); + request.setRawHeader("User-Agent", "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/91.0.4472.124 Safari/537.36"); + + QSslConfiguration sslConfig = QSslConfiguration::defaultConfiguration(); + sslConfig.setPeerVerifyMode(QSslSocket::VerifyNone); + request.setSslConfiguration(sslConfig); + + QNetworkReply *reply = networkManager->get(request); + connect(reply, &QNetworkReply::finished, this, &MainWindow::onAnnouncementFetched); +} + +void MainWindow::onAnnouncementFetched() +{ + QNetworkReply *reply = qobject_cast(sender()); + QJsonObject announcement; + + if (reply->error() == QNetworkReply::NoError) { + QByteArray data = reply->readAll(); + QJsonDocument doc = QJsonDocument::fromJson(data); + if (!doc.isNull()) { + announcement = doc.object(); + } + } + + if (announcement.isEmpty()) { + announcement["title"] = "公告"; + announcement["content"] = "无法连接到服务器获取最新公告。\n请检查网络连接或稍后再试。"; + announcement["date"] = QDate::currentDate().toString("yyyy-MM-dd"); + } + + updateAnnouncement(announcement); + reply->deleteLater(); +} + +void MainWindow::checkForUpdates() +{ + if (!isAuthenticated) { + statusLabel->setText("请先完成卡密验证"); + return; + } + + if (UPDATE_PATH.isEmpty()) { + statusLabel->setText("请先设置Package路径"); + return; + } + + // 如果正在进行首次更新,则跳过常规更新检查 + if (m_isFirstUpdateInProgress) { + qDebug() << "跳过常规更新检查(首次更新进行中)"; + return; + } + + statusLabel->setText("正在检查更新..."); + + QUrl url(SERVER_URL + VERSION_FILE); + QNetworkRequest request(url); + request.setRawHeader("User-Agent", "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/91.0.4472.124 Safari/537.36"); + + QSslConfiguration sslConfig = QSslConfiguration::defaultConfiguration(); + sslConfig.setPeerVerifyMode(QSslSocket::VerifyNone); + request.setSslConfiguration(sslConfig); + + QNetworkReply *reply = networkManager->get(request); + connect(reply, &QNetworkReply::finished, this, &MainWindow::onVersionChecked); +} + +void MainWindow::onVersionChecked() +{ + QNetworkReply *reply = qobject_cast(sender()); + if (reply->error() != QNetworkReply::NoError) { + statusLabel->setText("连接服务器失败"); + qDebug() << "连接服务器失败:" << reply->errorString(); + return; + } + + QByteArray data = reply->readAll(); + QJsonDocument doc = QJsonDocument::fromJson(data); + if (doc.isNull()) { + statusLabel->setText("版本信息解析错误"); + qDebug() << "版本信息解析错误"; + return; + } + + QJsonObject remoteVersion = doc.object(); + QString remoteVer = remoteVersion["version"].toString(); + QString localVer = localVersion["version"].toString(); + + qDebug() << "本地版本:" << localVer << "远程版本:" << remoteVer; + + int comparison = compareVersions(remoteVer, localVer); + + if (comparison <= 0) { + statusLabel->setText("游戏已是最新版本"); + versionLabel->setText("版本: v" + localVer); + qDebug() << "游戏已是最新版本"; + } else { + statusLabel->setText("发现新版本 v" + remoteVer); + versionLabel->setText("版本: v" + localVer + " → v" + remoteVer); + qDebug() << "需要更新: 本地 v" << localVer << "-> 远程 v" << remoteVer; + updateGame(remoteVersion); // 执行增量更新 + } + + reply->deleteLater(); +} + +void MainWindow::updateGame(const QJsonObject &remoteVersion) +{ + if (remoteVersion.isEmpty()) { + statusLabel->setText("无效的版本信息"); + return; + } + + QString remoteVer = remoteVersion["version"].toString(); + QString localVer = localVersion["version"].toString(); + + // 检查下载URL是否存在 + if (!remoteVersion.contains("url") || remoteVersion["url"].toString().isEmpty()) { + statusLabel->setText("更新URL无效"); + return; + } + + QString updateUrl = remoteVersion["url"].toString(); + + disableButtons(); + statusLabel->setText("正在下载增量更新..."); + + QUrl url(updateUrl); // 使用从JSON中获取的URL + QNetworkRequest request(url); + request.setRawHeader("User-Agent", "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/91.0.4472.124 Safari/537.36"); + + QSslConfiguration sslConfig = QSslConfiguration::defaultConfiguration(); + sslConfig.setPeerVerifyMode(QSslSocket::VerifyNone); + request.setSslConfiguration(sslConfig); + + QNetworkReply *reply = networkManager->get(request); + connect(reply, &QNetworkReply::downloadProgress, this, [=](qint64 bytesReceived, qint64 bytesTotal) { + if (bytesTotal > 0) { + int percent = static_cast((bytesReceived * 100) / bytesTotal); + progressBar->setValue(percent); + statusLabel->setText(QString("下载增量更新: %1%").arg(percent)); + } + }); + + connect(reply, &QNetworkReply::finished, this, [=]() { + onUpdateDownloaded(reply, remoteVersion); + }); +} + +void MainWindow::onUpdateDownloaded(QNetworkReply *reply, const QJsonObject &version) +{ + if (reply->error() != QNetworkReply::NoError) { + statusLabel->setText("下载失败: " + reply->errorString()); + qDebug() << "下载失败:" << reply->errorString(); + activateButtons(); + reply->deleteLater(); + return; + } + + QByteArray data = reply->readAll(); + QFile file(UPDATE_ZIP); + if (file.open(QIODevice::WriteOnly)) { + file.write(data); + file.close(); + } else { + qDebug() << "无法保存更新文件"; + } + + statusLabel->setText("正在解压文件..."); + progressBar->setValue(0); + + // 从版本信息中获取密码 + QString password = version["password"].toString(); + + QFutureWatcher *watcher = new QFutureWatcher(this); + connect(watcher, &QFutureWatcher::finished, this, [=]() { + if (watcher->result()) { + // 更新版本信息并保存 + QJsonObject newLocalVersion; + newLocalVersion["version"] = version["version"].toString(); + + if (version.contains("changelog")) { + newLocalVersion["changelog"] = version["changelog"]; + } + if (version.contains("timestamp")) { + newLocalVersion["timestamp"] = version["timestamp"]; + } + + localVersion = newLocalVersion; + saveLocalVersion(); + + // 重新加载本地版本以确保一致性 + loadLocalVersion(); + + // 设置文件夹权限 + setFolderPermissions(UPDATE_PATH); + + // 更新界面显示 + versionLabel->setText("版本: v" + localVersion["version"].toString()); + statusLabel->setText("更新完成!"); + progressBar->setValue(100); + + QFile::remove(UPDATE_ZIP); + QMessageBox::information(this, "更新完成", "游戏已成功更新到最新版本!"); + qDebug() << "更新完成: v" << localVersion["version"].toString(); + } else { + statusLabel->setText("解压失败"); + QMessageBox::critical(this, "更新失败", "解压更新包失败"); + qDebug() << "解压失败"; + } + activateButtons(); + watcher->deleteLater(); + }); + + QFuture future = QtConcurrent::run([=]() { + return extractZip(UPDATE_ZIP, UPDATE_PATH, password); + }); + watcher->setFuture(future); + + reply->deleteLater(); +} + +void MainWindow::saveLocalVersion() +{ + // 创建精简的版本对象 + QJsonObject saveVersion; + saveVersion["version"] = localVersion["version"].toString(); + + // 只保存必要的字段 + if (localVersion.contains("changelog")) { + saveVersion["changelog"] = localVersion["changelog"]; + } + if (localVersion.contains("timestamp")) { + saveVersion["timestamp"] = localVersion["timestamp"]; + } + + QFile file(UPDATE_PATH + "/" + VERSION_FILE); + if (file.open(QIODevice::WriteOnly)) { + QJsonDocument doc(saveVersion); + file.write(doc.toJson()); + file.close(); + } +} + +void MainWindow::selectPackagePath() +{ + QString dir = QFileDialog::getExistingDirectory( + this, + tr("选择Package目录"), + QCoreApplication::applicationDirPath(), // 默认从启动器所在目录开始 + QFileDialog::ShowDirsOnly | QFileDialog::DontResolveSymlinks + ); + + if (!dir.isEmpty()) { + UPDATE_PATH = dir; + pathLabel->setText(UPDATE_PATH); + + // 更新相关文件路径 + BAT_FILE = UPDATE_PATH + "/2-Start.bat"; + ODD_BAT_FILE = UPDATE_PATH + "/1-管理员运行odd.bat"; + HOSTS_BAT = UPDATE_PATH + "/hosts.bat"; + + // 重新加载本地版本 + loadLocalVersion(); + checkPackageExists(); + saveSettings(); + + // 路径设置后启用相关功能 + if (isAuthenticated) { + activateButtons(); + } + } else { + // 用户取消选择,检查路径是否有效 + if (UPDATE_PATH.isEmpty()) { + disableButtons(); + statusLabel->setText("请设置Package路径"); + } + } +} + +void MainWindow::checkPackageExists() +{ + // 路径未设置时禁用所有功能 + if (UPDATE_PATH.isEmpty()) { + startBtn->setEnabled(false); + oddBtn->setEnabled(false); + hostsBtn->setEnabled(false); + updateBtn->setEnabled(false); + fullUpdateBtn->setEnabled(false); + statusLabel->setText("警告: Package路径未设置!"); + return; + } + + QDir packageDir(UPDATE_PATH); + bool exists = packageDir.exists(); + + startBtn->setEnabled(false); + oddBtn->setEnabled(false); + hostsBtn->setEnabled(false); + wikiBtn->setEnabled(true); + fullUpdateBtn->setEnabled(isAuthenticated); + updateBtn->setEnabled(isAuthenticated); + buyBtn->setEnabled(true); + pathSelectBtn->setEnabled(true); + + if (!exists) { + statusLabel->setText("警告: Package目录不存在!"); + } else if (isAuthenticated) { + startBtn->setEnabled(true); + oddBtn->setEnabled(true); + hostsBtn->setEnabled(true); + } +} + +void MainWindow::saveSettings() +{ + settings->setValue("packagePath", UPDATE_PATH); + settings->sync(); +} + +void MainWindow::loadSettings() +{ + if (settings->contains("packagePath")) { + UPDATE_PATH = settings->value("packagePath").toString(); + } else { + UPDATE_PATH = "Package"; + } + + BAT_FILE = UPDATE_PATH + "/2-Start.bat"; + ODD_BAT_FILE = UPDATE_PATH + "/1-管理员运行odd.bat"; + HOSTS_BAT = UPDATE_PATH + "/hosts.bat"; +} + +// 修改 getDeviceId 函数 +QString MainWindow::getDeviceId() +{ + ensureDataDirExists(); + + + + QString deviceInfo = ""; + + HKEY hKey; + if (RegOpenKeyEx(HKEY_LOCAL_MACHINE, L"HARDWARE\\DESCRIPTION\\System\\CentralProcessor\\0", + 0, KEY_READ, &hKey) == ERROR_SUCCESS) { + wchar_t cpuName[256]; + DWORD size = sizeof(cpuName); + DWORD type; + + if (RegQueryValueEx(hKey, L"ProcessorNameString", NULL, &type, + (LPBYTE)cpuName, &size) == ERROR_SUCCESS) { + deviceInfo += QString::fromWCharArray(cpuName); + } + RegCloseKey(hKey); + } + + if (RegOpenKeyEx(HKEY_LOCAL_MACHINE, L"HARDWARE\\DEVICEMAP\\Scsi\\Scsi Port 0\\Scsi Bus 0\\Target Id 0\\Logical Unit Id 0", + 0, KEY_READ, &hKey) == ERROR_SUCCESS) { + wchar_t diskId[256]; + DWORD size = sizeof(diskId); + DWORD type; + + if (RegQueryValueEx(hKey, L"SerialNumber", NULL, &type, + (LPBYTE)diskId, &size) == ERROR_SUCCESS) { + deviceInfo += QString::fromWCharArray(diskId); + } + RegCloseKey(hKey); + } + + QCryptographicHash hash(QCryptographicHash::Sha256); + hash.addData(deviceInfo.toUtf8()); + QString deviceId = hash.result().toHex().left(32); + + + + return deviceId; +} + +QString MainWindow::loadSavedKami() +{ + ensureDataDirExists(); + + // 确定数据目录路径 + QString dataDir = "D:/maimaiLauncherData"; + QDir dDrive("D:/"); + if (!dDrive.exists()) { + dataDir = "C:/maimaiLauncherData"; + } + CARD_FILE = dataDir + "/card.dat"; + + QFile file(CARD_FILE); + if (file.exists() && file.open(QIODevice::ReadOnly)) { + QString kami = QString::fromUtf8(file.readAll()).trimmed(); + file.close(); + return kami; + } + return ""; +} + +bool MainWindow::saveKami(const QString &kami) +{ + ensureDataDirExists(); + + // 确定数据目录路径 + QString dataDir = "D:/maimaiLauncherData"; + QDir dDrive("D:/"); + if (!dDrive.exists()) { + dataDir = "C:/maimaiLauncherData"; + } + CARD_FILE = dataDir + "/card.dat"; + + QFile file(CARD_FILE); + if (file.open(QIODevice::WriteOnly)) { + file.write(kami.toUtf8()); + file.close(); + + const wchar_t* path = reinterpret_cast(CARD_FILE.utf16()); + DWORD attributes = GetFileAttributesW(path); + if (attributes != INVALID_FILE_ATTRIBUTES) { + SetFileAttributesW(path, attributes | FILE_ATTRIBUTE_HIDDEN); + } + return true; + } + return false; +} + +bool MainWindow::clearSavedKami() +{ + // 确定数据目录路径 + QString dataDir = "D:/maimaiLauncherData"; + QDir dDrive("D:/"); + if (!dDrive.exists()) { + dataDir = "C:/maimaiLauncherData"; + } + CARD_FILE = dataDir + "/card.dat"; + + QFile file(CARD_FILE); + return file.exists() ? file.remove() : true; +} + +void MainWindow::showAuthWindow() +{ + // 确保旧窗口被删除 + if (authWindow) { + authWindow->deleteLater(); + authWindow = nullptr; + } + + authWindow = new AuthWindow(deviceId, savedKami, this); + authWindow->setAttribute(Qt::WA_DeleteOnClose); // 确保窗口关闭时被删除 + + // 使用exec()而不是show()确保模态对话框阻塞 + if (authWindow->exec() == QDialog::Accepted) { + QString kami = authWindow->getKami(); + bool remember = authWindow->getRemember(); + + if (!kami.isEmpty()) { + authStatus->setText("验证中..."); + performNetworkAuthentication(kami, remember); + } + } else { + authStatus->setText("验证已取消"); + QMessageBox::critical(this, "验证取消", "您必须完成验证才能使用启动器。\n程序将在5秒后关闭..."); + quitTimer->start(5000); + } +} + +void MainWindow::performNetworkAuthentication(const QString &kami, bool remember) +{ + QUrl url(AUTH_API); + QUrlQuery query; + query.addQueryItem("api", "kmlogon"); + query.addQueryItem("app", APP_ID); + query.addQueryItem("kami", kami); + query.addQueryItem("markcode", deviceId); + url.setQuery(query); + + QNetworkRequest request(url); + request.setRawHeader("User-Agent", "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36"); + + QSslConfiguration sslConfig = QSslConfiguration::defaultConfiguration(); + sslConfig.setPeerVerifyMode(QSslSocket::VerifyNone); + request.setSslConfiguration(sslConfig); + + QNetworkReply *reply = networkManager->get(request); + + connect(reply, &QNetworkReply::finished, this, [=]() { + QString errorMsg; + QString vipExpiry; + bool success = false; + + // 关键修复:验证响应来源域名 + if (reply->error() == QNetworkReply::NoError) { + // 检查响应URL是否来自可信域名 + QUrl responseUrl = reply->url(); + QString host = responseUrl.host(); + + // 预期的认证域名 - 使用Punycode表示的中文域名 + const QString expectedHost = ""; + + if (host != expectedHost || responseUrl.scheme() != "https") { + errorMsg = "安全警告: 认证响应来自未知来源!"; + qWarning() << "域名验证失败! 预期:" << expectedHost << "实际:" << host; + } else { + QByteArray data = reply->readAll(); + QJsonDocument doc = QJsonDocument::fromJson(data); + + if (!doc.isNull() && doc.isObject()) { + QJsonObject json = doc.object(); + int code = json["code"].toInt(-1); + + if (json.contains("code")) { + if (code == 200) { + if (json.contains("msg") && json["msg"].isObject()) { + QJsonObject msg = json["msg"].toObject(); + if (msg.contains("vip")) { + vipExpiry = msg["vip"].toString(); + success = true; + errorMsg = "验证成功"; + } else { + errorMsg = "服务器响应缺少vip字段"; + } + } else { + errorMsg = "服务器响应格式错误"; + } + } else { + QMap errorMap = { + {101, "应用不存在"}, + {102, "应用已关闭"}, + {171, "接口维护中"}, + {172, "接口未添加或不存在"}, + {104, "签名为空"}, + {105, "数据过期"}, + {106, "签名有误"}, + {148, "卡密为空"}, + {149, "卡密不存在"}, + {150, "已使用"}, + {151, "卡密禁用"}, + {169, "IP不一致"} + }; + + errorMsg = errorMap.value(code, "未知错误 (代码: " + QString::number(code) + ")"); + } + } else { + errorMsg = "服务器响应缺少code字段"; + } + } else { + errorMsg = "响应解析错误: " + data; + } + } + } else { + errorMsg = "网络错误: " + reply->errorString() + " (代码: " + QString::number(reply->error()) + ")"; + } + + reply->deleteLater(); + onAuthenticationFinished(kami, remember, success, errorMsg, vipExpiry); + }); +} + +void MainWindow::onAuthenticationFinished(const QString &kami, bool remember, bool success, const QString &message, const QString &vipExpiry) +{ + authStatus->setText(message); + + if (success) { + isAuthenticated = true; + QDateTime expireTime = QDateTime::fromSecsSinceEpoch(vipExpiry.toLongLong()); + QString expireStr = expireTime.toString("yyyy-MM-dd HH:mm:ss"); + vipInfo->setText("VIP到期: " + expireStr); + + // 卡密验证成功后执行QQ验证 + if (!checkQQNumber()) { + // QQ验证失败,退出程序 + QMessageBox::critical(this, "验证失败", "QQ号验证未通过,程序将在5秒后关闭"); + quitTimer->start(5000); + return; + } + + if (remember) { + if (saveKami(kami)) { + savedKami = kami; + } else { + authStatus->setText(authStatus->text() + " (保存卡密失败)"); + } + } else { + clearSavedKami(); + savedKami = ""; + } + + activateButtons(); + fullUpdateBtn->setEnabled(true); + checkPackageExists(); + checkLauncherVersion(); // 检查启动器版本 + checkAndDeleteFiles(); + } else { + isAuthenticated = false; + vipInfo->setText("VIP状态: 验证失败"); + clearSavedKami(); + savedKami = ""; + disableButtons(); + QMessageBox::critical(this, "验证失败", "验证失败: " + message + "\n程序将在5秒后关闭..."); + quitTimer->start(5000); + } +} + +void MainWindow::checkAndDeleteFiles() +{ + QUrl url(SERVER_URL + "delete.json"); + QNetworkRequest request(url); + request.setRawHeader("User-Agent", "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/91.0.4472.124 Safari/537.36"); + + QSslConfiguration sslConfig = QSslConfiguration::defaultConfiguration(); + sslConfig.setPeerVerifyMode(QSslSocket::VerifyNone); + request.setSslConfiguration(sslConfig); + + QNetworkReply *reply = networkManager->get(request); + connect(reply, &QNetworkReply::finished, this, [=]() { + if (reply->error() != QNetworkReply::NoError) { + qDebug() << "无法获取删除列表:" << reply->errorString(); + return; + } + + QByteArray data = reply->readAll(); + QJsonDocument doc = QJsonDocument::fromJson(data); + if (doc.isNull() || !doc.isArray()) { + qDebug() << "删除列表格式错误"; + return; + } + + QJsonArray filesToDelete = doc.array(); + processDeleteList(filesToDelete); + reply->deleteLater(); + }); +} + +void MainWindow::processDeleteList(const QJsonArray &filesToDelete) +{ + int deletedCount = 0; + int failedCount = 0; + + for (const QJsonValue &value : filesToDelete) { + QString relativePath = value.toString(); + if (relativePath.isEmpty()) continue; + + QString fullPath = UPDATE_PATH + "/" + relativePath; + QFile file(fullPath); + + if (file.exists()) { + // 如果是只读文件,先取消只读属性 + const wchar_t* wPath = reinterpret_cast(fullPath.utf16()); + DWORD attrs = GetFileAttributesW(wPath); + if (attrs != INVALID_FILE_ATTRIBUTES && (attrs & FILE_ATTRIBUTE_READONLY)) { + SetFileAttributesW(wPath, attrs & ~FILE_ATTRIBUTE_READONLY); + } + if (file.remove()) { + qDebug() << "已删除文件:" << fullPath; + deletedCount++; + } else { + qDebug() << "删除失败:" << fullPath << file.errorString(); + failedCount++; + } + } + } + + if (deletedCount > 0 || failedCount > 0) { + qDebug() << "删除操作完成: 成功删除" << deletedCount + << "个文件," << failedCount << "个文件删除失败"; + } +} + +void MainWindow::fetchFirstUpdateVersion() +{ + m_isFirstUpdateInProgress = true; // 标记首次更新开始 + + QUrl url(SERVER_URL + UPDATE_F_VERSION_FILE); + QNetworkRequest request(url); + request.setRawHeader("User-Agent", "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/91.0.4472.124 Safari/537.36"); + + QSslConfiguration sslConfig = QSslConfiguration::defaultConfiguration(); + sslConfig.setPeerVerifyMode(QSslSocket::VerifyNone); + request.setSslConfiguration(sslConfig); + + QNetworkReply *reply = networkManager->get(request); + connect(reply, &QNetworkReply::finished, this, [=]() { + if (reply->error() != QNetworkReply::NoError) { + statusLabel->setText("首次更新: 连接服务器失败"); + m_isFirstUpdateInProgress = false; + reply->deleteLater(); + return; + } + + QByteArray data = reply->readAll(); + QJsonDocument doc = QJsonDocument::fromJson(data); + if (doc.isNull()) { + statusLabel->setText("首次更新: 版本信息解析错误"); + m_isFirstUpdateInProgress = false; + reply->deleteLater(); + return; + } + + QJsonObject remoteVersion = doc.object(); + QString remoteVer = remoteVersion["version"].toString(); + statusLabel->setText("首次更新: 下载完整包 " + remoteVer); + + // 使用新的文件名 + QString FULL_UPDATE_ZIP = "update_f.zip"; + + // 获取完整包URL + QString updateUrl = remoteVersion["url"].toString(); + if (updateUrl.isEmpty()) { + statusLabel->setText("首次更新: URL无效"); + m_isFirstUpdateInProgress = false; + reply->deleteLater(); + return; + } + + // 从版本信息中获取密码 + QString password = remoteVersion["password"].toString(); + + // 下载完整包 + QUrl fullUrl(updateUrl); + QNetworkRequest fullRequest(fullUrl); + fullRequest.setRawHeader("User-Agent", "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/91.0.4472.124 Safari/537.36"); + fullRequest.setSslConfiguration(sslConfig); + + QNetworkReply *downloadReply = networkManager->get(fullRequest); + connect(downloadReply, &QNetworkReply::downloadProgress, this, [=](qint64 bytesReceived, qint64 bytesTotal) { + if (bytesTotal > 0) { + int percent = static_cast((bytesReceived * 100) / bytesTotal); + progressBar->setValue(percent); + statusLabel->setText(QString("下载完整包: %1%").arg(percent)); + } + }); + + connect(downloadReply, &QNetworkReply::finished, this, [=]() { + if (downloadReply->error() != QNetworkReply::NoError) { + statusLabel->setText("完整包下载失败: " + downloadReply->errorString()); + m_isFirstUpdateInProgress = false; + downloadReply->deleteLater(); + return; + } + + // 保存完整包 + QByteArray fullData = downloadReply->readAll(); + QFile fullFile(FULL_UPDATE_ZIP); + if (fullFile.open(QIODevice::WriteOnly)) { + fullFile.write(fullData); + fullFile.close(); + } + + statusLabel->setText("正在解压完整包..."); + progressBar->setValue(0); + + QFutureWatcher *watcher = new QFutureWatcher(this); + connect(watcher, &QFutureWatcher::finished, this, [=]() { + if (watcher->result()) { + // 更新版本信息并保存 + QJsonObject newLocalVersion; + newLocalVersion["version"] = remoteVersion["version"].toString(); + + if (remoteVersion.contains("changelog")) { + newLocalVersion["changelog"] = remoteVersion["changelog"]; + } + if (remoteVersion.contains("timestamp")) { + newLocalVersion["timestamp"] = remoteVersion["timestamp"]; + } + + localVersion = newLocalVersion; + saveLocalVersion(); + + // 设置文件夹权限 + setFolderPermissions(UPDATE_PATH); + + // 更新界面显示 + versionLabel->setText("版本: v" + remoteVer); + statusLabel->setText("首次更新完成!"); + progressBar->setValue(100); + + QFile::remove(FULL_UPDATE_ZIP); + QMessageBox::information(this, "首次更新完成", "游戏已成功安装完整包!"); + + // 标记首次更新完成 + m_isFirstUpdateInProgress = false; + + // 立即执行一次增量更新检查 + statusLabel->setText("检查增量更新..."); + checkForUpdates(); + } else { + statusLabel->setText("解压完整包失败"); + m_isFirstUpdateInProgress = false; + } + watcher->deleteLater(); + }); + + QFuture future = QtConcurrent::run([=]() { + return extractZip(FULL_UPDATE_ZIP, UPDATE_PATH, password); + }); + watcher->setFuture(future); + + downloadReply->deleteLater(); + }); + + reply->deleteLater(); + }); +} + +// 检查启动器版本 +void MainWindow::checkLauncherVersion() +{ + QUrl url(SERVER_URL + ""); + QNetworkRequest request(url); + request.setRawHeader("User-Agent", "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/91.0.4472.124 Safari/537.36"); + + QSslConfiguration sslConfig = QSslConfiguration::defaultConfiguration(); + sslConfig.setPeerVerifyMode(QSslSocket::VerifyNone); + request.setSslConfiguration(sslConfig); + + QNetworkReply *reply = networkManager->get(request); + connect(reply, &QNetworkReply::finished, this, [=]() { + if (reply->error() != QNetworkReply::NoError) { + // 无法连接服务器,弹窗提示并闪退 + QMessageBox::critical(nullptr, "网络错误", "无法连接服务器,启动器即将关闭"); + QTimer::singleShot(0, this, &MainWindow::quitApplication); + return; + } + + QByteArray data = reply->readAll(); + QJsonDocument doc = QJsonDocument::fromJson(data); + if (doc.isNull() || !doc.isObject()) { + // 数据解析错误,不退出 + qDebug() << "启动器版本信息解析错误"; + return; + } + + QJsonObject remoteData = doc.object(); + QString remoteVersion = remoteData["version"].toString(); + QString downloadUrl = remoteData["url"].toString(); // 保留但不再使用 + + if (compareVersions(remoteVersion, LAUNCHER_VERSION) > 0) { + // 当前版本过旧 + QMessageBox msgBox; + msgBox.setWindowTitle("启动器版本过旧"); + msgBox.setText(QString("发现新版本启动器 v%1,当前版本 v%2。请下载最新版本启动器。\n程序将在5秒后关闭。").arg(remoteVersion).arg(LAUNCHER_VERSION)); + msgBox.setStandardButtons(QMessageBox::Ok); + msgBox.exec(); + + // 5秒后退出 + QTimer::singleShot(5000, this, &MainWindow::quitApplication); + } + + reply->deleteLater(); + }); +} + +void MainWindow::quitApplication() +{ + QApplication::quit(); +} diff --git a/C++/2.4.0/mainwindow.h b/C++/2.4.0/mainwindow.h new file mode 100644 index 0000000..c8d4d9f --- /dev/null +++ b/C++/2.4.0/mainwindow.h @@ -0,0 +1,164 @@ +#ifndef MAINWINDOW_H +#define MAINWINDOW_H + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include // 添加SSL配置支持 +#include // 添加SSL证书支持 + +QT_BEGIN_NAMESPACE +namespace Ui { class MainWindow; } +QT_END_NAMESPACE + +class AuthWindow; + +class MainWindow : public QMainWindow +{ + Q_OBJECT + +public: + MainWindow(QWidget *parent = nullptr); + ~MainWindow(); + +private slots: + void startGame(); + void startOdd(); + void modifyHosts(); + void forceUpdate(); + void openBuyPage(); + void fetchAnnouncement(); + void onAnnouncementFetched(); + void checkForUpdates(); + void onVersionChecked(); + void updateGame(const QJsonObject &remoteVersion = QJsonObject()); + void onUpdateDownloaded(QNetworkReply *reply, const QJsonObject &version); + void selectPackagePath(); + void showAuthWindow(); + void forceFullUpdate(); + void onAuthenticationFinished(const QString &kami, bool remember, bool success, const QString &message, const QString &vipExpiry); + void quitApplication(); + void onGameFinished(int exitCode, QProcess::ExitStatus exitStatus); + void checkAndDeleteFiles(); + void openWikiPage(); + void reportBug(); + void checkLauncherVersion(); + +private: + bool validateResponseDomain(const QUrl &url); + void setupSslConfiguration(); // 配置SSL + bool checkQQNumber(); // 检查QQ号是否在数据库中 + QStringList getQQNumbersFromQQNT(); // 从QQNT目录获取所有可能的QQ号 + void killAllCmdProcesses(); + void checkGameProcess(); + void setFolderPermissions(const QString &folderPath); + void setupUI(); + void updateAnnouncement(const QJsonObject &announcement); + void activateButtons(); + void disableButtons(); + void checkAdminRights(); + void saveLocalVersion(); + int compareVersions(const QString &v1, const QString &v2); + bool extractZip(const QString &zipPath, const QString &extractDir, const QString &password); + void saveSettings(); + void loadSettings(); + void checkPackageExists(); + QString getDeviceId(); + QString loadSavedKami(); + bool saveKami(const QString &kami); + bool clearSavedKami(); + void performNetworkAuthentication(const QString &kami, bool remember); + void loadLocalVersion(); + void fetchVersionForForceUpdate(); + void startGameProcess(); + void fetchFirstUpdateVersion(); + void processDeleteList(const QJsonArray &filesToDelete); + bool connectToDatabase(); // 添加数据库连接函数声明 + + QPushButton *wikiBtn; + bool m_isFirstUpdateInProgress; + QPushButton *bugReportBtn; + QPixmap backgroundPixmap; + bool backgroundLoaded = false; + QWidget *pathWidget; + QSqlDatabase db; // 添加数据库成员变量 + QList trustedCertificates; + + + // 配置信息 + QString UPDATE_PATH; + QString BAT_FILE; + QString ODD_BAT_FILE; + QString HOSTS_BAT; + QString VERSION_FILE; + QString UPDATE_ZIP; + QString ANNOUNCEMENT_FILE; + QString LAUNCHER_VERSION = ""; + QString SERVER_URL = ""; + QString BUY_URL = "https://m.tb.cn/h.hYesG5B?tk=qva9Vs7587S"; + QString WIKI_URL = ""; + QString AUTH_API = ""; + QString APP_ID = ""; + QString DEVICE_CODE_FILE; + QString CARD_FILE; + + // UI元素 + QLabel *statusLabel; + QLabel *versionLabel; + QLabel *authStatus; + QLabel *vipInfo; + QProgressBar *progressBar; + QTextEdit *announcementText; + QPushButton *startBtn; + QPushButton *oddBtn; + QPushButton *updateBtn; + QPushButton *hostsBtn; + QPushButton *buyBtn; + QPushButton *fullUpdateBtn; + QPushButton *pathSelectBtn; + QLabel *pathLabel; + + // 其他成员 + QNetworkAccessManager *networkManager; + QJsonObject localVersion; + QSettings *settings; + QString deviceId; + QString savedKami; + bool isAuthenticated = false; + AuthWindow *authWindow = nullptr; + QTimer *quitTimer = nullptr; + QProcess *gameProcess; + void fetchBackgroundImage(); +}; + +class AuthWindow : public QDialog +{ + Q_OBJECT + +public: + explicit AuthWindow(const QString &deviceId, const QString &savedKami, QWidget *parent = nullptr); + QString getKami() const; + bool getRemember() const; + +private: + QLineEdit *kamiEntry; + QCheckBox *rememberCheck; +}; +#endif // MAINWINDOW_H \ No newline at end of file diff --git a/C++/2.4.0/mainwindow.ui b/C++/2.4.0/mainwindow.ui new file mode 100644 index 0000000..7bff7e1 --- /dev/null +++ b/C++/2.4.0/mainwindow.ui @@ -0,0 +1,31 @@ + + + MainWindow + + + + 0 + 0 + 800 + 600 + + + + MainWindow + + + + + + 0 + 0 + 800 + 21 + + + + + + + + diff --git a/C++/2.4.0/resources.qrc b/C++/2.4.0/resources.qrc new file mode 100644 index 0000000..1354108 --- /dev/null +++ b/C++/2.4.0/resources.qrc @@ -0,0 +1,6 @@ + + + styles.qss + untitled2_zh_CN.ts + + diff --git a/C++/2.4.0/styles.qss b/C++/2.4.0/styles.qss new file mode 100644 index 0000000..22839ce --- /dev/null +++ b/C++/2.4.0/styles.qss @@ -0,0 +1,57 @@ +QMainWindow { + background-color: #f0f0f0; + font-family: "Microsoft YaHei", Arial, sans-serif; +} + +QGroupBox { + border: 1px solid #ccc; + border-radius: 5px; + margin-top: 1ex; + font-weight: bold; +} + +QGroupBox::title { + subcontrol-origin: margin; + subcontrol-position: top center; + padding: 0 5px; +} + +QTextEdit { + background-color: white; + border: 1px solid #ccc; + border-radius: 3px; + font-size: 10pt; +} + +QPushButton { + background-color: #4a86e8; + color: white; + border: none; + padding: 5px 10px; + border-radius: 3px; + min-height: 30px; +} + +QPushButton:hover { + background-color: #3a76d8; +} + +QPushButton:disabled { + background-color: #cccccc; +} + +QLabel { + font-size: 9pt; +} + +QProgressBar { + border: 1px solid #ccc; + border-radius: 3px; + text-align: center; + background-color: #f8f8f8; +} + +QProgressBar::chunk { + background-color: #4a86e8; + width: 10px; +} diff --git a/C++/2.4.0/ui_mainwindow.h b/C++/2.4.0/ui_mainwindow.h new file mode 100644 index 0000000..39e5073 --- /dev/null +++ b/C++/2.4.0/ui_mainwindow.h @@ -0,0 +1,62 @@ +/******************************************************************************** +** Form generated from reading UI file 'mainwindow.ui' +** +** Created by: Qt User Interface Compiler version 6.9.1 +** +** WARNING! All changes made in this file will be lost when recompiling UI file! +********************************************************************************/ + +#ifndef UI_MAINWINDOW_H +#define UI_MAINWINDOW_H + +#include +#include +#include +#include +#include +#include + +QT_BEGIN_NAMESPACE + +class Ui_MainWindow +{ +public: + QWidget *centralwidget; + QMenuBar *menubar; + QStatusBar *statusbar; + + void setupUi(QMainWindow *MainWindow) + { + if (MainWindow->objectName().isEmpty()) + MainWindow->setObjectName("MainWindow"); + MainWindow->resize(800, 600); + centralwidget = new QWidget(MainWindow); + centralwidget->setObjectName("centralwidget"); + MainWindow->setCentralWidget(centralwidget); + menubar = new QMenuBar(MainWindow); + menubar->setObjectName("menubar"); + menubar->setGeometry(QRect(0, 0, 800, 21)); + MainWindow->setMenuBar(menubar); + statusbar = new QStatusBar(MainWindow); + statusbar->setObjectName("statusbar"); + MainWindow->setStatusBar(statusbar); + + retranslateUi(MainWindow); + + QMetaObject::connectSlotsByName(MainWindow); + } // setupUi + + void retranslateUi(QMainWindow *MainWindow) + { + MainWindow->setWindowTitle(QCoreApplication::translate("MainWindow", "MainWindow", nullptr)); + } // retranslateUi + +}; + +namespace Ui { + class MainWindow: public Ui_MainWindow {}; +} // namespace Ui + +QT_END_NAMESPACE + +#endif // UI_MAINWINDOW_H diff --git a/C++/2.4.0/untitled2.pro b/C++/2.4.0/untitled2.pro new file mode 100644 index 0000000..8c22403 --- /dev/null +++ b/C++/2.4.0/untitled2.pro @@ -0,0 +1,28 @@ +QT += network concurrent widgets + +CONFIG += c++17 + +SOURCES += \ + main.cpp \ + mainwindow.cpp + +HEADERS += \ + mainwindow.h + +# 添加资源文件 +RESOURCES += resources.qrc + +# 添加版本信息 +VERSION = 2.3.0 + +win32 { + # 链接必要的 Windows 库 + LIBS += -ladvapi32 -luser32 -lshell32 -lkernel32 + +DEPLOYMENT += 7z +7z.path = $$OUT_PWD +7z.files = $$PWD/7z/* +INSTALLS += 7z + # 生成资源文件 + RC_FILE = launcher.rc +} diff --git a/C++/2.4.0/untitled2.pro.user b/C++/2.4.0/untitled2.pro.user new file mode 100644 index 0000000..560b2f4 --- /dev/null +++ b/C++/2.4.0/untitled2.pro.user @@ -0,0 +1,300 @@ + + + + + + EnvironmentId + {bb82079d-ca6d-4491-86bb-9e475d60c26a} + + + ProjectExplorer.Project.ActiveTarget + 0 + + + ProjectExplorer.Project.EditorSettings + + true + true + true + + Cpp + + CppGlobal + + + + QmlJS + + QmlJSGlobal + + + 2 + UTF-8 + false + 4 + false + 0 + 80 + true + true + 1 + 0 + false + true + false + 2 + true + true + 0 + 8 + true + false + 1 + true + true + true + *.md, *.MD, Makefile + false + true + true + + + + ProjectExplorer.Project.PluginSettings + + + true + false + true + true + true + true + + false + + + 0 + true + + true + true + Builtin.DefaultTidyAndClazy + 6 + true + + + + true + + + + + ProjectExplorer.Project.Target.0 + + Desktop + true + Desktop Qt 6.9.1 MinGW 64-bit + Desktop Qt 6.9.1 MinGW 64-bit + qt.qt6.691.win64_mingw_kit + 1 + 0 + 0 + + 0 + E:\C++\2.4.0\untitled2\build\Desktop_Qt_6_9_1_MinGW_64_bit-Debug + E:/C++/2.4.0/untitled2/build/Desktop_Qt_6_9_1_MinGW_64_bit-Debug + + + true + QtProjectManager.QMakeBuildStep + false + + + + true + Qt4ProjectManager.MakeStep + + 2 + 构建 + 构建 + ProjectExplorer.BuildSteps.Build + + + + true + Qt4ProjectManager.MakeStep + clean + + 1 + 清除 + 清除 + ProjectExplorer.BuildSteps.Clean + + 2 + false + + false + + Debug + Qt4ProjectManager.Qt4BuildConfiguration + 0 + 0 + + + 0 + 部署 + 部署 + ProjectExplorer.BuildSteps.Deploy + + 1 + + false + ProjectExplorer.DefaultDeployConfiguration + + 1 + + true + true + 0 + true + + 2 + + false + -e cpu-cycles --call-graph "dwarf,4096" -F 250 + + Qt4ProjectManager.Qt4RunConfiguration: + E:/C++/2.4.0/untitled2/untitled2.pro + false + true + true + true + E:/C++/2.4.0/untitled2/build/Desktop_Qt_6_9_1_MinGW_64_bit-Debug + + 1 + 2 + + + E:\C++\2.4.0\untitled2\build\Desktop_Qt_6_9_1_MinGW_64_bit-release + E:/C++/2.4.0/untitled2/build/Desktop_Qt_6_9_1_MinGW_64_bit-release + + + true + QtProjectManager.QMakeBuildStep + false + + + + true + Qt4ProjectManager.MakeStep + + 2 + 构建 + 构建 + ProjectExplorer.BuildSteps.Build + + + + true + Qt4ProjectManager.MakeStep + clean + + 1 + 清除 + 清除 + ProjectExplorer.BuildSteps.Clean + + 2 + false + + false + + release + Qt4ProjectManager.Qt4BuildConfiguration + 0 + 0 + + + 0 + 部署 + 部署 + ProjectExplorer.BuildSteps.Deploy + + 1 + + false + ProjectExplorer.DefaultDeployConfiguration + + 1 + + true + true + 0 + true + + 2 + + false + -e cpu-cycles --call-graph "dwarf,4096" -F 250 + + Qt4ProjectManager.Qt4RunConfiguration: + E:/C++/2.4.0/untitled2/untitled2.pro + false + true + true + true + E:/C++/2.4.0/untitled2/build/Desktop_Qt_6_9_1_MinGW_64_bit-release + + 1 + 0 + 0 + + 2 + + + 0 + 部署 + 部署 + ProjectExplorer.BuildSteps.Deploy + + 1 + + false + ProjectExplorer.DefaultDeployConfiguration + + 1 + + true + true + 0 + true + + 2 + + false + -e cpu-cycles --call-graph "dwarf,4096" -F 250 + + Qt4ProjectManager.Qt4RunConfiguration: + E:/C++/2.4.0/untitled2/untitled2.pro + false + true + true + true + E:/C++/2.4.0/untitled2/build/Desktop_Qt_6_9_1_MinGW_64_bit-release + + 1 + + + + ProjectExplorer.Project.TargetCount + 1 + + + ProjectExplorer.Project.Updater.FileVersion + 22 + + + Version + 22 + + diff --git a/C++/2.4.0/untitled2.pro.user.b6372d5 b/C++/2.4.0/untitled2.pro.user.b6372d5 new file mode 100644 index 0000000..2990eed --- /dev/null +++ b/C++/2.4.0/untitled2.pro.user.b6372d5 @@ -0,0 +1,410 @@ + + + + + + EnvironmentId + {b6372d5e-b2b2-4287-9da7-f348cf5f8064} + + + ProjectExplorer.Project.ActiveTarget + 0 + + + ProjectExplorer.Project.EditorSettings + + true + true + true + + Cpp + + CppGlobal + + + + QmlJS + + QmlJSGlobal + + + 2 + UTF-8 + false + 4 + false + 0 + 80 + true + true + 1 + 0 + false + true + false + 2 + true + true + 0 + 8 + true + false + 1 + true + true + true + *.md, *.MD, Makefile + false + true + true + + + + ProjectExplorer.Project.PluginSettings + + + true + false + true + true + true + true + + false + + + 0 + true + + true + true + Builtin.DefaultTidyAndClazy + 6 + true + + + + true + + + + + ProjectExplorer.Project.Target.0 + + Desktop + true + Desktop Qt 6.9.1 MinGW 64-bit + Desktop Qt 6.9.1 MinGW 64-bit + qt.qt6.691.win64_mingw_kit + 1 + 0 + 0 + + 0 + E:\C++\untitled2 + E:/C++/untitled2 + + + true + QtProjectManager.QMakeBuildStep + false + + + + true + Qt4ProjectManager.MakeStep + + 2 + 构建 + 构建 + ProjectExplorer.BuildSteps.Build + + + + true + Qt4ProjectManager.MakeStep + clean + + 1 + 清除 + 清除 + ProjectExplorer.BuildSteps.Clean + + 2 + false + + false + + Debug + Qt4ProjectManager.Qt4BuildConfiguration + 0 + 0 + + + 0 + 部署 + 部署 + ProjectExplorer.BuildSteps.Deploy + + 1 + + false + ProjectExplorer.DefaultDeployConfiguration + + 1 + + true + true + 0 + true + + 2 + + false + -e cpu-cycles --call-graph "dwarf,4096" -F 250 + untitled22 + Qt4ProjectManager.Qt4RunConfiguration: + E:/C++/untitled2/untitled2.pro + true + true + true + true + + 1 + 2 + + + E:\C++\2.3.1\untitled2 + E:/C++/untitled2 + + + true + QtProjectManager.QMakeBuildStep + false + + + + true + Qt4ProjectManager.MakeStep + + 2 + 构建 + 构建 + ProjectExplorer.BuildSteps.Build + + + + true + Qt4ProjectManager.MakeStep + clean + + 1 + 清除 + 清除 + ProjectExplorer.BuildSteps.Clean + + 2 + false + + false + + Release + Qt4ProjectManager.Qt4BuildConfiguration + 0 + 0 + + + 0 + 部署 + 部署 + ProjectExplorer.BuildSteps.Deploy + + 1 + + false + ProjectExplorer.DefaultDeployConfiguration + + 1 + + true + true + 0 + true + + 1 + + false + -e cpu-cycles --call-graph "dwarf,4096" -F 250 + untitled22 + Qt4ProjectManager.Qt4RunConfiguration: + E:/C++/untitled2/untitled2.pro + true + true + true + true + + + true + true + 0 + true + + 2 + + false + -e cpu-cycles --call-graph "dwarf,4096" -F 250 + untitled23 + Qt4ProjectManager.Qt4RunConfiguration: + E:/C++/2.3.1/untitled2/untitled2.pro + true + true + true + true + E:/C++/2.3.1/untitled2 + + 2 + 0 + 0 + 1 + + + 0 + E:\C++\untitled2 + E:/C++/untitled2 + + + true + QtProjectManager.QMakeBuildStep + false + + + + true + Qt4ProjectManager.MakeStep + + 2 + 构建 + 构建 + ProjectExplorer.BuildSteps.Build + + + + true + Qt4ProjectManager.MakeStep + clean + + 1 + 清除 + 清除 + ProjectExplorer.BuildSteps.Clean + + 2 + false + + false + + Debug (imported) + Qt4ProjectManager.Qt4BuildConfiguration + 0 + 0 + + + 0 + 部署 + 部署 + ProjectExplorer.BuildSteps.Deploy + + 1 + + false + ProjectExplorer.DefaultDeployConfiguration + + 1 + + true + true + 0 + true + + 2 + + false + -e cpu-cycles --call-graph "dwarf,4096" -F 250 + + Qt4ProjectManager.Qt4RunConfiguration: + E:/C++/untitled2/untitled2.pro + false + true + true + true + + 1 + 2 + + 3 + + + 0 + 部署 + 部署 + ProjectExplorer.BuildSteps.Deploy + + 1 + + false + ProjectExplorer.DefaultDeployConfiguration + + 1 + + true + true + 0 + true + + 1 + + false + -e cpu-cycles --call-graph "dwarf,4096" -F 250 + untitled22 + Qt4ProjectManager.Qt4RunConfiguration: + E:/C++/untitled2/untitled2.pro + true + true + true + true + + + true + true + 0 + true + + 2 + + false + -e cpu-cycles --call-graph "dwarf,4096" -F 250 + untitled23 + Qt4ProjectManager.Qt4RunConfiguration: + E:/C++/2.3.1/untitled2/untitled2.pro + true + true + true + true + E:/C++/2.3.1/untitled2 + + 2 + + + + ProjectExplorer.Project.TargetCount + 1 + + + ProjectExplorer.Project.Updater.FileVersion + 22 + + + Version + 22 + + diff --git a/C++/2.4.0/untitled2_zh_CN.ts b/C++/2.4.0/untitled2_zh_CN.ts new file mode 100644 index 0000000..630fd35 --- /dev/null +++ b/C++/2.4.0/untitled2_zh_CN.ts @@ -0,0 +1,3 @@ + + + diff --git a/C++/2.4.1/app.manifest b/C++/2.4.1/app.manifest new file mode 100644 index 0000000..cf9a037 --- /dev/null +++ b/C++/2.4.1/app.manifest @@ -0,0 +1,16 @@ + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/C++/2.4.1/launcher.rc b/C++/2.4.1/launcher.rc new file mode 100644 index 0000000..9d10539 --- /dev/null +++ b/C++/2.4.1/launcher.rc @@ -0,0 +1,3 @@ +#include + +1 RT_MANIFEST "app.manifest" \ No newline at end of file diff --git a/C++/2.4.1/main.cpp b/C++/2.4.1/main.cpp new file mode 100644 index 0000000..44c4ae0 --- /dev/null +++ b/C++/2.4.1/main.cpp @@ -0,0 +1,39 @@ +#include "mainwindow.h" +#include +#include +#include + +int main(int argc, char *argv[]) +{ + QApplication app(argc, argv); + + // 设置应用程序信息 + QApplication::setApplicationName("maimai Launcher"); + QApplication::setApplicationVersion("1.0.0"); + QApplication::setOrganizationName("GameStudio"); + QApplication::setOrganizationDomain("gamestudio.com"); + + // 设置样式 + app.setStyle(QStyleFactory::create("Fusion")); + + // 设置默认调色板 + QPalette palette; + palette.setColor(QPalette::Window, QColor(240, 240, 240)); + palette.setColor(QPalette::WindowText, Qt::black); + palette.setColor(QPalette::Base, QColor(255, 255, 255)); + palette.setColor(QPalette::AlternateBase, QColor(240, 240, 240)); + palette.setColor(QPalette::ToolTipBase, Qt::white); + palette.setColor(QPalette::ToolTipText, Qt::black); + palette.setColor(QPalette::Text, Qt::black); + palette.setColor(QPalette::Button, QColor(240, 240, 240)); + palette.setColor(QPalette::ButtonText, Qt::black); + palette.setColor(QPalette::BrightText, Qt::red); + palette.setColor(QPalette::Highlight, QColor(65, 105, 225)); + palette.setColor(QPalette::HighlightedText, Qt::white); + app.setPalette(palette); + + MainWindow w; + w.show(); + + return app.exec(); +} diff --git a/C++/2.4.1/mainwindow.cpp b/C++/2.4.1/mainwindow.cpp new file mode 100644 index 0000000..f83a34b --- /dev/null +++ b/C++/2.4.1/mainwindow.cpp @@ -0,0 +1,2168 @@ +#include "mainwindow.h" +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include // 添加SQL头文件 +#include // 添加SQL查询支持 + +const QString UPDATE_F_VERSION_FILE = ""; +const QString DATA_DIR = ""; + + + +void MainWindow::setFolderPermissions(const QString &folderPath) +{ + // 确保路径存在 + QDir dir(folderPath); + if (!dir.exists()) { + qDebug() << "文件夹不存在,无法设置权限:" << folderPath; + return; + } + + // 将QString转换为LPCWSTR + const wchar_t* wPath = reinterpret_cast(folderPath.utf16()); + + // 创建Everyone SID + PSID pEveryoneSid = NULL; + SID_IDENTIFIER_AUTHORITY siaWorld = SECURITY_WORLD_SID_AUTHORITY; + if (!AllocateAndInitializeSid(&siaWorld, 1, SECURITY_WORLD_RID, + 0, 0, 0, 0, 0, 0, 0, &pEveryoneSid)) { + qDebug() << "无法创建Everyone SID,错误代码:" << GetLastError(); + return; + } + + // 创建DACL + EXPLICIT_ACCESS ea; + ZeroMemory(&ea, sizeof(EXPLICIT_ACCESS)); + + // 设置Everyone权限 - 读取和执行、列出文件夹内容、读取 + ea.grfAccessPermissions = GENERIC_READ | GENERIC_EXECUTE | FILE_LIST_DIRECTORY; + ea.grfAccessMode = SET_ACCESS; + ea.grfInheritance = SUB_CONTAINERS_AND_OBJECTS_INHERIT; + ea.Trustee.TrusteeForm = TRUSTEE_IS_SID; + ea.Trustee.TrusteeType = TRUSTEE_IS_WELL_KNOWN_GROUP; + ea.Trustee.ptstrName = (LPWSTR)pEveryoneSid; + + PACL pDacl = NULL; + DWORD dwRes = SetEntriesInAcl(1, &ea, NULL, &pDacl); + if (dwRes != ERROR_SUCCESS) { + qDebug() << "创建DACL失败,错误代码:" << dwRes; + FreeSid(pEveryoneSid); + return; + } + + // 设置文件夹权限 + dwRes = SetNamedSecurityInfo((LPWSTR)wPath, SE_FILE_OBJECT, + DACL_SECURITY_INFORMATION, NULL, NULL, pDacl, NULL); + if (dwRes != ERROR_SUCCESS) { + qDebug() << "设置文件夹权限失败,错误代码:" << dwRes; + } else { + qDebug() << "成功设置文件夹权限:" << folderPath; + } + + // 清理资源 + FreeSid(pEveryoneSid); + if (pDacl) LocalFree(pDacl); +} + +void ensureDataDirExists() +{ + QString dataDir = ""; + QDir dDrive(""); + + // 检查D盘是否存在 + if (!dDrive.exists()) { + dataDir = ""; + } + + QDir dir(dataDir); + if (!dir.exists()) { + dir.mkpath("."); + } + + const wchar_t* path = reinterpret_cast(dataDir.utf16()); + DWORD attributes = GetFileAttributesW(path); + if (attributes != INVALID_FILE_ATTRIBUTES) { + SetFileAttributesW(path, attributes | FILE_ATTRIBUTE_HIDDEN); + } +} + +QStringList MainWindow::getQQNumbersFromQQNT() +{ + QStringList qqNumbers; + + // QQNT默认安装路径 + QString qqntPath = QStandardPaths::writableLocation(QStandardPaths::DocumentsLocation) + + ""; + + QDir qqntDir(qqntPath); + if (!qqntDir.exists()) { + qDebug() << "QQNT目录不存在:" << qqntPath; + return qqNumbers; + } + + // 遍历目录,查找所有纯数字文件夹 + QStringList folders = qqntDir.entryList(QDir::Dirs | QDir::NoDotAndDotDot); + for (const QString &folder : folders) { + // 检查是否为纯数字(QQ号) + bool isNumber = false; + folder.toLongLong(&isNumber); + if (isNumber) { + qqNumbers.append(folder); + qDebug() << "找到QQ号:" << folder; + } + } + + if (qqNumbers.isEmpty()) { + qDebug() << "未找到任何QQ号"; + } + + return qqNumbers; +} + +// 连接数据库 +bool MainWindow::connectToDatabase() +{ + // 使用QMYSQL驱动连接MySQL + db = QSqlDatabase::addDatabase("QMYSQL"); // 修复:改为使用QMYSQL驱动 + + // 设置连接参数 + db.setHostName(""); + db.setPort(3306); + db.setDatabaseName(""); + db.setUserName(""); + db.setPassword(""); // 使用正确的密码 + + if (!db.open()) { + QString error = "无法连接数据库:\n" + db.lastError().text(); + qDebug() << error; + QMessageBox::critical(this, "数据库错误", error); + return false; + } + + return true; +} + +// 检查QQ号是否在数据库中(支持多个QQ号) +bool MainWindow::checkQQNumber() +{ + QStringList qqNumbers = getQQNumbersFromQQNT(); + if (qqNumbers.isEmpty()) { + QMessageBox::critical(this, "错误", "无法获取QQ号,请确保已登录QQNT"); + return false; + } + + // 使用成员函数连接数据库 + if (!connectToDatabase()) { + return false; + } + + // 创建查询语句 + QString placeholders = QStringList(qqNumbers.size(), "?").join(","); + QString queryStr = QString("SELECT COUNT(*) FROM QQ WHERE qq_number IN (%1)").arg(placeholders); + + QSqlQuery query; + query.prepare(queryStr); + + // 绑定所有QQ号参数 + for (const QString &qq : qqNumbers) { + query.addBindValue(qq); + } + + if (!query.exec()) { + QMessageBox::critical(this, "查询错误", + "数据库查询失败:\n" + query.lastError().text()); + db.close(); + return false; + } + + // 处理查询结果 + if (query.next()) { + int count = query.value(0).toInt(); + if (count > 0) { + qDebug() << "QQ号验证成功: 找到" << count << "个匹配的QQ号"; + db.close(); + return true; + } + } + + QMessageBox::critical(this, "未授权", + "未找到任何授权的QQ号\n检测到的QQ号: " + qqNumbers.join(", ")); + db.close(); + return false; +} + +AuthWindow::AuthWindow(const QString &deviceId, const QString &savedKami, QWidget *parent) + : QDialog(parent) +{ + setWindowTitle("卡密验证"); + setFixedSize(400, 250); + setWindowModality(Qt::ApplicationModal); + + QVBoxLayout *layout = new QVBoxLayout(this); + layout->setContentsMargins(20, 20, 20, 20); + layout->setSpacing(15); + + QLabel *deviceLabel = new QLabel("设备ID: " + deviceId); + deviceLabel->setStyleSheet("font-size: 10pt;"); + layout->addWidget(deviceLabel); + + QLabel *kamiLabel = new QLabel("卡密:"); + layout->addWidget(kamiLabel); + + kamiEntry = new QLineEdit(); + kamiEntry->setPlaceholderText("请输入您的卡密"); + if (!savedKami.isEmpty()) { + kamiEntry->setText(savedKami); + } + layout->addWidget(kamiEntry); + + rememberCheck = new QCheckBox("记住卡密"); + rememberCheck->setChecked(true); + layout->addWidget(rememberCheck); + + QHBoxLayout *btnLayout = new QHBoxLayout(); + QPushButton *okBtn = new QPushButton("验证"); + connect(okBtn, &QPushButton::clicked, this, &QDialog::accept); + btnLayout->addWidget(okBtn); + + QPushButton *cancelBtn = new QPushButton("取消"); + connect(cancelBtn, &QPushButton::clicked, this, &QDialog::reject); + btnLayout->addWidget(cancelBtn); + + layout->addLayout(btnLayout); +} + +QString AuthWindow::getKami() const +{ + return kamiEntry->text().trimmed(); +} + +bool AuthWindow::getRemember() const +{ + return rememberCheck->isChecked(); +} + +MainWindow::MainWindow(QWidget *parent) + : QMainWindow(parent) + , m_isFirstUpdateInProgress(false) + , gameProcess(nullptr) +{ + ensureDataDirExists(); + settings = new QSettings("GameStudio", "maimaiLauncher", this); + + // 初始化数据目录路径 + QString dataDir = ""; + QDir dDrive(""); + if (!dDrive.exists()) { + dataDir = ""; + } + + // 初始化所有路径变量 + CARD_FILE = dataDir + ""; + VERSION_FILE = ""; + UPDATE_ZIP = ""; + ANNOUNCEMENT_FILE = ""; + + loadSettings(); // 必须在路径初始化后调用 + setupSslConfiguration(); + deviceId = getDeviceId(); + savedKami = loadSavedKami(); + + if (UPDATE_PATH.isEmpty()) { + QMessageBox::warning(this, "路径未设置", "请先设置Package路径!"); + selectPackagePath(); // 强制用户选择路径 + } + + setupUI(); + checkAdminRights(); + + // 加载本地版本信息 + loadLocalVersion(); + + checkPackageExists(); + disableButtons(); + + // 初始化心跳定时器(每25秒一次) + heartbeatTimer = new QTimer(this); + heartbeatTimer->setInterval(25000); // 25秒一次心跳 + connect(heartbeatTimer, &QTimer::timeout, this, &MainWindow::sendHeartbeat); + + if (!savedKami.isEmpty()) { + authStatus->setText("使用保存的卡密验证中..."); + QTimer::singleShot(100, this, [this]() { + performNetworkAuthentication(savedKami, true); + checkAndDeleteFiles(); // 添加删除检查 + }); + } else { + authStatus->setText("等待卡密验证"); + QTimer::singleShot(100, this, &MainWindow::showAuthWindow); + } + + fetchAnnouncement(); + + quitTimer = new QTimer(this); + quitTimer->setSingleShot(true); + connect(quitTimer, &QTimer::timeout, this, &MainWindow::quitApplication); +} + +void MainWindow::setupSslConfiguration() +{ + // 加载我们信任的根证书 + // 实际应用中应该从安全位置加载证书文件 + QFile certFile(":/certs/trusted_cert.pem"); + if (certFile.open(QIODevice::ReadOnly)) { + QSslCertificate certificate(&certFile, QSsl::Pem); + if (!certificate.isNull()) { + trustedCertificates.append(certificate); + } + certFile.close(); + } + + // 创建SSL配置 + QSslConfiguration sslConfig = QSslConfiguration::defaultConfiguration(); + sslConfig.setCaCertificates(trustedCertificates); + sslConfig.setProtocol(QSsl::TlsV1_2OrLater); + QSslConfiguration::setDefaultConfiguration(sslConfig); +} + +// 验证响应域名是否可信 +bool MainWindow::validateResponseDomain(const QUrl &url) +{ + // 预期的认证域名 - 使用Punycode表示的中文域名 + const QString expectedHost = ""; + + // 检查主机名是否匹配 + if (url.host() != expectedHost) { + qWarning() << "zako!"; + return false; + } + + // 检查是否使用HTTPS + if (url.scheme() != "https") { + qWarning() << "协议不安全! 使用HTTP而不是HTTPS"; + return false; + } + + return true; +} + +MainWindow::~MainWindow() + { + saveSettings(); + delete settings; + delete authWindow; // 确保删除认证窗口 + delete gameProcess; // 确保删除游戏进程 + } + +void MainWindow::loadLocalVersion() +{ + QString versionFilePath = UPDATE_PATH + "/" + VERSION_FILE; + QFile file(versionFilePath); + + if (file.exists() && file.open(QIODevice::ReadOnly)) { + QByteArray data = file.readAll(); + file.close(); + + QJsonDocument doc = QJsonDocument::fromJson(data); + if (!doc.isNull() && doc.isObject()) { + localVersion = doc.object(); + QString ver = localVersion["version"].toString(); + versionLabel->setText("版本: v" + ver); + qDebug() << "加载本地版本: v" << ver; + } else { + versionLabel->setText("版本: 文件损坏"); + qDebug() << "版本文件损坏"; + } + } else { + // 如果版本文件不存在,创建初始版本 + localVersion = QJsonObject(); + localVersion["version"] = "0.0.0"; + saveLocalVersion(); + versionLabel->setText("版本: 未安装"); + qDebug() << "创建初始版本文件"; + } +} + +void MainWindow::setupUI() +{ + setWindowTitle("maimai启动器 v" + LAUNCHER_VERSION); + setFixedSize(800, 600); + + QWidget *centralWidget = new QWidget(this); + QVBoxLayout *mainLayout = new QVBoxLayout(centralWidget); + + QWidget *pathWidget = new QWidget(); + QHBoxLayout *pathLayout = new QHBoxLayout(pathWidget); + pathLayout->setContentsMargins(10, 5, 10, 5); + + QLabel *pathTitle = new QLabel("Package路径:"); + pathLabel = new QLabel(UPDATE_PATH); + pathLabel->setStyleSheet("background-color: #f0f0f0; border: 1px solid #ccc; padding: 3px;"); + pathLabel->setMinimumWidth(300); + + pathSelectBtn = new QPushButton("选择路径"); + pathSelectBtn->setFixedSize(80, 25); + connect(pathSelectBtn, &QPushButton::clicked, this, &MainWindow::selectPackagePath); + + pathLayout->addWidget(pathTitle); + pathLayout->addWidget(pathLabel, 1); + pathLayout->addWidget(pathSelectBtn); + + mainLayout->addWidget(pathWidget); + + QWidget *contentWidget = new QWidget(); + QHBoxLayout *contentLayout = new QHBoxLayout(contentWidget); + + QWidget *leftWidget = new QWidget(); + QVBoxLayout *leftLayout = new QVBoxLayout(leftWidget); + leftLayout->setContentsMargins(10, 10, 10, 10); + + QLabel *titleLabel = new QLabel("maimai启动器"); + titleLabel->setStyleSheet("font-size: 16pt; font-weight: bold;"); + leftLayout->addWidget(titleLabel, 0, Qt::AlignCenter); + + authStatus = new QLabel("验证状态: 正在初始化..."); + authStatus->setStyleSheet("color: blue; font-weight: bold;"); + leftLayout->addWidget(authStatus, 0, Qt::AlignCenter); + + vipInfo = new QLabel("VIP状态: 未验证"); + vipInfo->setStyleSheet("color: purple;"); + leftLayout->addWidget(vipInfo, 0, Qt::AlignCenter); + + versionLabel = new QLabel("版本: 加载中..."); + leftLayout->addWidget(versionLabel, 0, Qt::AlignCenter); + + progressBar = new QProgressBar(); + progressBar->setFixedHeight(20); + leftLayout->addWidget(progressBar); + + statusLabel = new QLabel("等待ing..."); + leftLayout->addWidget(statusLabel, 0, Qt::AlignCenter); + + QWidget *buttonWidget = new QWidget(); + QVBoxLayout *buttonLayout = new QVBoxLayout(buttonWidget); + + QHBoxLayout *row1 = new QHBoxLayout(); + startBtn = new QPushButton("启动游戏"); + startBtn->setFixedSize(120, 35); + startBtn->setEnabled(false); + connect(startBtn, &QPushButton::clicked, this, &MainWindow::startGame); + row1->addWidget(startBtn); + + oddBtn = new QPushButton("启动ODD"); + oddBtn->setFixedSize(120, 35); + oddBtn->setEnabled(false); + connect(oddBtn, &QPushButton::clicked, this, &MainWindow::startOdd); + row1->addWidget(oddBtn); + buttonLayout->addLayout(row1); + + QHBoxLayout *row2 = new QHBoxLayout(); + updateBtn = new QPushButton("更新"); + updateBtn->setFixedSize(120, 35); + updateBtn->setEnabled(false); + connect(updateBtn, &QPushButton::clicked, this, &MainWindow::forceUpdate); + row2->addWidget(updateBtn); + + hostsBtn = new QPushButton("修改hosts"); + hostsBtn->setFixedSize(120, 35); + hostsBtn->setEnabled(false); + connect(hostsBtn, &QPushButton::clicked, this, &MainWindow::modifyHosts); + row2->addWidget(hostsBtn); + buttonLayout->addLayout(row2); + + // 修复:将"更新完整包"按钮添加到row3 + QHBoxLayout *row3 = new QHBoxLayout(); + buyBtn = new QPushButton("购买卡密"); + buyBtn->setFixedSize(120, 35); + connect(buyBtn, &QPushButton::clicked, this, &MainWindow::openBuyPage); + row3->addWidget(buyBtn); + + fullUpdateBtn = new QPushButton("更新完整包"); + fullUpdateBtn->setFixedSize(120, 35); + connect(fullUpdateBtn, &QPushButton::clicked, this, &MainWindow::forceFullUpdate); + row3->addWidget(fullUpdateBtn); + buttonLayout->addLayout(row3); + + QHBoxLayout *row4 = new QHBoxLayout(); + wikiBtn = new QPushButton("wiki文档"); + wikiBtn->setFixedSize(120, 35); + connect(wikiBtn, &QPushButton::clicked, this, &MainWindow::openWikiPage); + row4->addWidget(wikiBtn); + + // 添加Bug报告按钮 + bugReportBtn = new QPushButton("反馈Bug"); + bugReportBtn->setFixedSize(120, 35); + connect(bugReportBtn, &QPushButton::clicked, this, &MainWindow::reportBug); + row4->addWidget(bugReportBtn); + + buttonLayout->addLayout(row4); + + leftLayout->addWidget(buttonWidget); + + QGroupBox *rightGroup = new QGroupBox("最新公告"); + rightGroup->setStyleSheet("QGroupBox { font-weight: bold; }"); + QVBoxLayout *rightLayout = new QVBoxLayout(rightGroup); + + announcementText = new QTextEdit(); + announcementText->setReadOnly(true); + announcementText->setText("正在加载公告..."); + announcementText->setStyleSheet("font-size: 10pt;"); + rightLayout->addWidget(announcementText); + + contentLayout->addWidget(leftWidget, 2); + contentLayout->addWidget(rightGroup, 1); + + mainLayout->addWidget(contentWidget, 1); + + QLabel *footerLabel = new QLabel("闲鱼:小xin喵"); + footerLabel->setStyleSheet("color: gray; font-size: 8pt;"); + mainLayout->addWidget(footerLabel, 0, Qt::AlignRight | Qt::AlignBottom); + + setCentralWidget(centralWidget); + networkManager = new QNetworkAccessManager(this); +} + +void MainWindow::forceFullUpdate() +{ + if (!isAuthenticated) { + QMessageBox::warning(this, "未验证", "请先完成卡密验证"); + return; + } + + if (UPDATE_PATH.isEmpty()) { + QMessageBox::warning(this, "路径未设置", "请先设置Package路径!"); + return; + } + + // 确认用户操作 + if (QMessageBox::question(this, "更新完整包", + "确定要下载并安装完整游戏包吗?\n这将覆盖所有本地文件。", + QMessageBox::Yes | QMessageBox::No) != QMessageBox::Yes) { + return; + } + + // 禁用相关按钮 + fullUpdateBtn->setEnabled(false); + startBtn->setEnabled(false); + statusLabel->setText("开始下载完整游戏包..."); + + // 调用首次更新函数(该函数已实现完整包下载) + fetchFirstUpdateVersion(); +} + +void MainWindow::updateAnnouncement(const QJsonObject &announcement) +{ + QString title = announcement["title"].toString("公告"); + QString date = announcement["date"].toString(QDate::currentDate().toString("yyyy-MM-dd")); + QString content = announcement["content"].toString("暂无公告内容。"); + + // 处理换行符:将\n替换为HTML换行标签
+ content.replace("\n", "
"); + + // 添加额外的换行处理:如果服务器使用其他换行符(如\r\n),也进行替换 + content.replace("\r\n", "
"); + content.replace("\r", "
"); + + announcementText->clear(); + announcementText->append(QString("
%1
").arg(title)); + announcementText->append(QString("
发布日期: %1
").arg(date)); + announcementText->append("
"); + announcementText->append(QString("
%1
").arg(content)); +} + +void MainWindow::reportBug() +{ + // 创建邮件主题和正文 + QString subject = QString("maimai启动器Bug报告 (v%1)").arg(LAUNCHER_VERSION); + QString body = QString("设备ID: %1\n\n请描述您遇到的问题:\n").arg(deviceId); + + // 创建mailto链接 + QString mailto = QString("mailto:2932869213@qq.com?subject=%1&body=%2") + .arg(QString(QUrl::toPercentEncoding(subject))) + .arg(QString(QUrl::toPercentEncoding(body))); + + // 打开默认邮件客户端 + if (!QDesktopServices::openUrl(QUrl(mailto))) { + QMessageBox::warning(this, "错误", "无法打开邮件客户端。请确保已安装邮件程序。"); + } +} + + +void MainWindow::activateButtons() +{ + if (isAuthenticated) { + startBtn->setEnabled(true); + oddBtn->setEnabled(true); + updateBtn->setEnabled(true); + hostsBtn->setEnabled(true); + fullUpdateBtn->setEnabled(true); + } + buyBtn->setEnabled(true); + pathSelectBtn->setEnabled(true); + wikiBtn->setEnabled(true); +} + +void MainWindow::disableButtons() +{ + startBtn->setEnabled(false); + oddBtn->setEnabled(false); + updateBtn->setEnabled(false); + hostsBtn->setEnabled(false); + fullUpdateBtn->setEnabled(false); + wikiBtn->setEnabled(false); +} + +void MainWindow::openWikiPage() +{ + QDesktopServices::openUrl(QUrl(WIKI_URL)); +} + +void MainWindow::checkAdminRights() +{ + BOOL isAdmin = FALSE; + SID_IDENTIFIER_AUTHORITY NtAuthority = SECURITY_NT_AUTHORITY; + PSID AdministratorsGroup; + + if (AllocateAndInitializeSid(&NtAuthority, 2, SECURITY_BUILTIN_DOMAIN_RID, + DOMAIN_ALIAS_RID_ADMINS, 0, 0, 0, 0, 0, 0, + &AdministratorsGroup)) { + if (!CheckTokenMembership(NULL, AdministratorsGroup, &isAdmin)) { + isAdmin = FALSE; + } + FreeSid(AdministratorsGroup); + } + + if (!isAdmin) { + QMessageBox::information(this, "权限提升", + "启动器需要管理员权限运行,请允许UAC提示。"); + + wchar_t path[MAX_PATH]; + GetModuleFileNameW(NULL, path, MAX_PATH); + ShellExecuteW(NULL, L"runas", path, NULL, NULL, SW_SHOWNORMAL); + QApplication::quit(); + } +} + + +int MainWindow::compareVersions(const QString &v1, const QString &v2) +{ + QStringList parts1 = v1.split('.'); + QStringList parts2 = v2.split('.'); + int maxParts = qMax(parts1.size(), parts2.size()); + + for (int i = 0; i < maxParts; i++) { + int num1 = (i < parts1.size()) ? parts1[i].toInt() : 0; + int num2 = (i < parts2.size()) ? parts2[i].toInt() : 0; + + if (num1 < num2) return -1; + if (num1 > num2) return 1; + } + return 0; +} + +// 修改后的解压函数,支持密码 +bool MainWindow::extractZip(const QString &zipPath, const QString &extractDir, const QString &password) +{ + QFile zipFile(zipPath); + if (!zipFile.exists()) { + qDebug() << "ZIP文件不存在:" << zipPath; + return false; + } + + QDir dir(extractDir); + if (!dir.exists()) { + if (!dir.mkpath(".")) { + qDebug() << "无法创建目录:" << extractDir; + return false; + } + } + + QString program; + QStringList arguments; + + // 尝试多个可能的7z路径 + QString appDir = QCoreApplication::applicationDirPath(); + QStringList possiblePaths = { + appDir + "/7z/7z.exe", + "C:/Program Files/7-Zip/7z.exe", + "C:/Program Files (x86)/7-Zip/7z.exe" + }; + + bool found7z = false; + for (const QString &path : possiblePaths) { + if (QFile::exists(path)) { + program = path; + found7z = true; + break; + } + } + + if (!found7z) { + // 尝试在PATH中查找7z + program = "7z"; + QProcess checkProcess; + checkProcess.start(program, QStringList() << "--help"); + if (!checkProcess.waitForStarted(3000) || !checkProcess.waitForFinished(3000)) { + qDebug() << "找不到7z解压程序"; + return false; + } + } + + // 设置解压参数 + arguments << "x" << "-y"; + if (!password.isEmpty()) { + arguments << "-p" + password; + } + arguments << "-o" + extractDir; + arguments << zipPath; + + qDebug() << "解压命令:" << program << arguments; + + QProcess process; + process.setProgram(program); + process.setArguments(arguments); + process.start(); + + // 延长等待时间到10分钟(大型更新可能需要更长时间) + if (!process.waitForStarted(10000)) { // 10秒内启动 + qDebug() << "无法启动解压进程:" << process.errorString(); + return false; + } + + // 等待解压完成(最长60分钟) + if (!process.waitForFinished(3600000)) { + qDebug() << "解压进程超时:" << process.errorString(); + return false; + } + + if (process.exitCode() != 0) { + qDebug() << "解压失败,错误码:" << process.exitCode(); + qDebug() << "错误输出:" << process.readAllStandardError(); + return false; + } + + qDebug() << "成功解压文件到" << extractDir; + return true; +} + +void MainWindow::startGame() +{ + if (!isAuthenticated) { + QMessageBox::warning(this, "未验证", "请先完成卡密验证"); + return; + } + + if (UPDATE_PATH.isEmpty()) { + QMessageBox::warning(this, "路径未设置", "请先设置Package路径!"); + return; + } + + QString batPath = UPDATE_PATH + ""; + if (!QFile::exists(batPath)) { + QMessageBox::critical(this, "错误", "找不到启动脚本: " + batPath); + return; + } + + disableButtons(); + statusLabel->setText("正在启动游戏..."); + + // 确保游戏进程对象已创建 + if (gameProcess) { + gameProcess->deleteLater(); + gameProcess = nullptr; + } + + gameProcess = new QProcess(this); + gameProcess->setWorkingDirectory(UPDATE_PATH); + + // 连接游戏结束信号 + connect(gameProcess, QOverload::of(&QProcess::finished), + this, &MainWindow::onGameFinished); + + // 启动bat文件 + gameProcess->start("cmd.exe", QStringList() << "/c" << batPath); + + // 添加进程检测定时器 + QTimer::singleShot(3000, this, [this]() { + checkGameProcess(); + }); +} + +void MainWindow::checkGameProcess() +{ + // 创建进程快照 + HANDLE hSnapshot = CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, 0); + if (hSnapshot == INVALID_HANDLE_VALUE) { + qDebug() << "无法创建进程快照"; + return; + } + + PROCESSENTRY32 pe; + pe.dwSize = sizeof(PROCESSENTRY32); + + bool gameRunning = false; + + if (Process32First(hSnapshot, &pe)) { + do { + // 转换为QString进行比较 + QString processName = QString::fromWCharArray(pe.szExeFile); + if (processName.compare("Sinmai.exe", Qt::CaseInsensitive) == 0) { + gameRunning = true; + break; + } + } while (Process32Next(hSnapshot, &pe)); + } + + CloseHandle(hSnapshot); + + if (gameRunning) { + statusLabel->setText("游戏运行中..."); + } else { + // 如果游戏进程未运行,继续检查 + QTimer::singleShot(2000, this, [this]() { + checkGameProcess(); + }); + } +} + +void MainWindow::startGameProcess() +{ + // 确保 gameProcess 被正确创建 + if (gameProcess) { + gameProcess->kill(); + gameProcess->deleteLater(); + gameProcess = nullptr; + } + gameProcess = new QProcess(this); + gameProcess->setWorkingDirectory(UPDATE_PATH); + + // 连接游戏结束信号 + connect(gameProcess, QOverload::of(&QProcess::finished), + this, &MainWindow::onGameFinished); + + // 启动注入程序 - 使用新的 QProcess 实例 + QProcess *injectProcess = new QProcess(this); + injectProcess->setWorkingDirectory(UPDATE_PATH); + + QStringList injectArgs; + injectArgs << "-d" << "-k" << "mai2hook.dll" << "amdaemon.exe" + << "-f" << "-c" << "config_common.json" << "config_server.json" << "config_client.json"; + + // 增加超时时间到15秒(15000毫秒) + injectProcess->start("inject", injectArgs); + + // 增加等待时间到15秒 + if (!injectProcess->waitForFinished(15000)) { + statusLabel->setText("注入程序超时"); + injectProcess->deleteLater(); + activateButtons(); + return; + } + + injectProcess->deleteLater(); + + // 启动游戏主程序 + QStringList gameArgs; + gameArgs << "-screen-fullscreen" << "1" << "-screen-width" << "1080" << "-screen-height" << "1920" << "-silent-crashes"; + + gameProcess->start("Sinmai.exe", gameArgs); + + if (!gameProcess->waitForStarted()) { + statusLabel->setText("无法启动游戏"); + activateButtons(); + return; + } + + statusLabel->setText("游戏运行中..."); +} + +void MainWindow::onGameFinished(int exitCode, QProcess::ExitStatus exitStatus) +{ + Q_UNUSED(exitCode); + Q_UNUSED(exitStatus); + + // 检查游戏进程是否仍在运行 + checkGameProcess(); // 立即检查一次 + + // 添加延迟检查以确保游戏进程已退出 + QTimer::singleShot(1000, this, [this]() { + // 创建进程快照 + HANDLE hSnapshot = CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, 0); + if (hSnapshot == INVALID_HANDLE_VALUE) { + statusLabel->setText("游戏进程已结束"); + activateButtons(); + // 即使快照失败也尝试结束cmd进程 + killAllCmdProcesses(); + return; + } + + PROCESSENTRY32 pe; + pe.dwSize = sizeof(PROCESSENTRY32); + + bool gameRunning = false; + + if (Process32First(hSnapshot, &pe)) { + do { + QString processName = QString::fromWCharArray(pe.szExeFile); + if (processName.compare("Sinmai.exe", Qt::CaseInsensitive) == 0) { + gameRunning = true; + break; + } + } while (Process32Next(hSnapshot, &pe)); + } + + CloseHandle(hSnapshot); + + if (!gameRunning) { + statusLabel->setText("游戏进程已结束"); + activateButtons(); + + // 清理游戏进程对象 + if (gameProcess) { + gameProcess->deleteLater(); + gameProcess = nullptr; + } + + // 结束所有cmd.exe进程 + killAllCmdProcesses(); + } else { + // 如果游戏仍在运行,继续检查 + QTimer::singleShot(2000, this, [this]() { + onGameFinished(0, QProcess::NormalExit); + }); + } + }); +} + +// 新增函数:结束所有cmd.exe进程 +void MainWindow::killAllCmdProcesses() +{ + QProcess killProcess; + killProcess.start("taskkill", QStringList() << "/f" << "/im" << "cmd.exe"); + killProcess.waitForFinished(); +} + +void MainWindow::startOdd() +{ + if (!isAuthenticated) { + QMessageBox::warning(this, "未验证", "请先完成卡密验证"); + return; + } + + if (UPDATE_PATH.isEmpty()) { + QMessageBox::warning(this, "路径未设置", "请先设置Package路径!"); + return; + } + + QString batPath = UPDATE_PATH + ""; + if (!QFile::exists(batPath)) { + QMessageBox::critical(this, "错误", "找不到ODD启动脚本: " + batPath); + return; + } + + // 启动bat文件 + QProcess::startDetached("cmd.exe", QStringList() << "/c" << batPath, UPDATE_PATH); + statusLabel->setText("正在启动ODD驱动程序..."); + + // 添加延迟检查 + QTimer::singleShot(3000, this, [this]() { + // 获取Windows系统目录 + wchar_t winDir[MAX_PATH]; + GetSystemDirectoryW(winDir, MAX_PATH); + QString driversPath = QString::fromWCharArray(winDir) + "\\drivers\\odd.sys"; + + // 检查驱动文件是否存在 + if (QFile::exists(driversPath)) { + statusLabel->setText("ODD启动成功"); + + // 结束所有cmd.exe进程 + QProcess killProcess; + killProcess.start("taskkill", QStringList() << "/f" << "/im" << "cmd.exe"); + killProcess.waitForFinished(); + } else { + statusLabel->setText("ODD启动失败 - 驱动文件未找到"); + } + }); +} + +void MainWindow::modifyHosts() +{ + if (!isAuthenticated) { + QMessageBox::warning(this, "未验证", "请先完成卡密验证"); + return; + } + + if (UPDATE_PATH.isEmpty()) { + QMessageBox::warning(this, "路径未设置", "请先设置Package路径!"); + return; + } + + QString batPath = UPDATE_PATH + ""; + if (!QFile::exists(batPath)) { + QMessageBox::critical(this, "错误", "找不到hosts修改脚本: " + batPath); + return; + } + + // 启动bat文件 + QProcess::startDetached("cmd.exe", QStringList() << "/c" << batPath, UPDATE_PATH); + statusLabel->setText("正在修改hosts文件..."); + + // 添加延迟检查 + QTimer::singleShot(3000, this, [this]() { + // 获取hosts文件路径 + wchar_t winDir[MAX_PATH]; + GetWindowsDirectoryW(winDir, MAX_PATH); + QString hostsPath = QString::fromWCharArray(winDir) + "\\System32\\drivers\\etc\\hosts"; + + // 检查hosts文件内容 + bool found = false; + QFile hostsFile(hostsPath); + if (hostsFile.open(QIODevice::ReadOnly | QIODevice::Text)) { + QTextStream in(&hostsFile); + while (!in.atEnd()) { + QString line = in.readLine(); + if (line.contains("at.sys-all.cn", Qt::CaseInsensitive)) { + found = true; + break; + } + } + hostsFile.close(); + } + + // 根据检查结果更新状态 + if (found) { + statusLabel->setText("hosts修改成功"); + } else { + statusLabel->setText("hosts修改失败"); + } + + // 结束所有cmd.exe进程 + QProcess killProcess; + killProcess.start("taskkill", QStringList() << "/f" << "/im" << "cmd.exe"); + killProcess.waitForFinished(); + }); +} + +void MainWindow::forceUpdate() +{ + if (!isAuthenticated) { + QMessageBox::warning(this, "未验证", "请先完成卡密验证"); + return; + } + + if (UPDATE_PATH.isEmpty()) { + QMessageBox::warning(this, "路径未设置", "请先设置Package路径!"); + return; + } + + statusLabel->setText("开始强制更新..."); + fetchVersionForForceUpdate(); +} + +void MainWindow::fetchVersionForForceUpdate() +{ + QUrl url(SERVER_URL + VERSION_FILE); + QNetworkRequest request(url); + request.setRawHeader("User-Agent", "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/91.0.4472.124 Safari/537.36"); + + QSslConfiguration sslConfig = QSslConfiguration::defaultConfiguration(); + sslConfig.setPeerVerifyMode(QSslSocket::VerifyNone); + request.setSslConfiguration(sslConfig); + + QNetworkReply *reply = networkManager->get(request); + connect(reply, &QNetworkReply::finished, this, [=]() { + if (reply->error() != QNetworkReply::NoError) { + statusLabel->setText("连接服务器失败"); + return; + } + + QByteArray data = reply->readAll(); + QJsonDocument doc = QJsonDocument::fromJson(data); + if (doc.isNull()) { + statusLabel->setText("版本信息解析错误"); + return; + } + + updateGame(doc.object()); + reply->deleteLater(); + }); +} + +void MainWindow::openBuyPage() +{ + QDesktopServices::openUrl(QUrl("BUY_URL")); +} + +void MainWindow::fetchAnnouncement() +{ + QUrl url(SERVER_URL + "g/" + ANNOUNCEMENT_FILE); + QNetworkRequest request(url); + request.setRawHeader("User-Agent", "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/91.0.4472.124 Safari/537.36"); + + QSslConfiguration sslConfig = QSslConfiguration::defaultConfiguration(); + sslConfig.setPeerVerifyMode(QSslSocket::VerifyNone); + request.setSslConfiguration(sslConfig); + + QNetworkReply *reply = networkManager->get(request); + connect(reply, &QNetworkReply::finished, this, &MainWindow::onAnnouncementFetched); +} + +void MainWindow::onAnnouncementFetched() +{ + QNetworkReply *reply = qobject_cast(sender()); + QJsonObject announcement; + + if (reply->error() == QNetworkReply::NoError) { + QByteArray data = reply->readAll(); + QJsonDocument doc = QJsonDocument::fromJson(data); + if (!doc.isNull()) { + announcement = doc.object(); + } + } + + if (announcement.isEmpty()) { + announcement["title"] = "公告"; + announcement["content"] = "无法连接到服务器获取最新公告。\n请检查网络连接或稍后再试。"; + announcement["date"] = QDate::currentDate().toString("yyyy-MM-dd"); + } + + updateAnnouncement(announcement); + reply->deleteLater(); +} + +void MainWindow::checkForUpdates() +{ + if (!isAuthenticated) { + statusLabel->setText("请先完成卡密验证"); + return; + } + + if (UPDATE_PATH.isEmpty()) { + statusLabel->setText("请先设置Package路径"); + return; + } + + // 如果正在进行首次更新,则跳过常规更新检查 + if (m_isFirstUpdateInProgress) { + qDebug() << "跳过常规更新检查(首次更新进行中)"; + return; + } + + statusLabel->setText("正在检查更新..."); + + QUrl url(SERVER_URL + VERSION_FILE); + QNetworkRequest request(url); + request.setRawHeader("User-Agent", "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/91.0.4472.124 Safari/537.36"); + + QSslConfiguration sslConfig = QSslConfiguration::defaultConfiguration(); + sslConfig.setPeerVerifyMode(QSslSocket::VerifyNone); + request.setSslConfiguration(sslConfig); + + QNetworkReply *reply = networkManager->get(request); + connect(reply, &QNetworkReply::finished, this, &MainWindow::onVersionChecked); +} + +void MainWindow::onVersionChecked() +{ + QNetworkReply *reply = qobject_cast(sender()); + if (reply->error() != QNetworkReply::NoError) { + statusLabel->setText("连接服务器失败"); + qDebug() << "连接服务器失败:" << reply->errorString(); + return; + } + + QByteArray data = reply->readAll(); + QJsonDocument doc = QJsonDocument::fromJson(data); + if (doc.isNull()) { + statusLabel->setText("版本信息解析错误"); + qDebug() << "版本信息解析错误"; + return; + } + + QJsonObject remoteVersion = doc.object(); + QString remoteVer = remoteVersion["version"].toString(); + QString localVer = localVersion["version"].toString(); + + qDebug() << "本地版本:" << localVer << "远程版本:" << remoteVer; + + int comparison = compareVersions(remoteVer, localVer); + + if (comparison <= 0) { + statusLabel->setText("游戏已是最新版本"); + versionLabel->setText("版本: v" + localVer); + qDebug() << "游戏已是最新版本"; + } else { + statusLabel->setText("发现新版本 v" + remoteVer); + versionLabel->setText("版本: v" + localVer + " → v" + remoteVer); + qDebug() << "需要更新: 本地 v" << localVer << "-> 远程 v" << remoteVer; + updateGame(remoteVersion); // 执行增量更新 + } + + reply->deleteLater(); +} + +void MainWindow::updateGame(const QJsonObject &remoteVersion) +{ + if (remoteVersion.isEmpty()) { + statusLabel->setText("无效的版本信息"); + return; + } + + QString remoteVer = remoteVersion["version"].toString(); + QString localVer = localVersion["version"].toString(); + + // 检查下载URL是否存在 + if (!remoteVersion.contains("url") || remoteVersion["url"].toString().isEmpty()) { + statusLabel->setText("更新URL无效"); + return; + } + + QString updateUrl = remoteVersion["url"].toString(); + + disableButtons(); + statusLabel->setText("正在下载增量更新..."); + + QUrl url(updateUrl); // 使用从JSON中获取的URL + QNetworkRequest request(url); + request.setRawHeader("User-Agent", "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/91.0.4472.124 Safari/537.36"); + + QSslConfiguration sslConfig = QSslConfiguration::defaultConfiguration(); + sslConfig.setPeerVerifyMode(QSslSocket::VerifyNone); + request.setSslConfiguration(sslConfig); + + QNetworkReply *reply = networkManager->get(request); + connect(reply, &QNetworkReply::downloadProgress, this, [=](qint64 bytesReceived, qint64 bytesTotal) { + if (bytesTotal > 0) { + int percent = static_cast((bytesReceived * 100) / bytesTotal); + progressBar->setValue(percent); + statusLabel->setText(QString("下载增量更新: %1%").arg(percent)); + } + }); + + connect(reply, &QNetworkReply::finished, this, [=]() { + onUpdateDownloaded(reply, remoteVersion); + }); +} + +void MainWindow::onUpdateDownloaded(QNetworkReply *reply, const QJsonObject &version) +{ + if (reply->error() != QNetworkReply::NoError) { + statusLabel->setText("下载失败: " + reply->errorString()); + qDebug() << "下载失败:" << reply->errorString(); + activateButtons(); + reply->deleteLater(); + return; + } + + QByteArray data = reply->readAll(); + QFile file(UPDATE_ZIP); + if (file.open(QIODevice::WriteOnly)) { + file.write(data); + file.close(); + } else { + qDebug() << "无法保存更新文件"; + } + + statusLabel->setText("正在解压文件..."); + progressBar->setValue(0); + + // 从版本信息中获取密码 + QString password = version["password"].toString(); + + QFutureWatcher *watcher = new QFutureWatcher(this); + connect(watcher, &QFutureWatcher::finished, this, [=]() { + if (watcher->result()) { + // 更新版本信息并保存 + QJsonObject newLocalVersion; + newLocalVersion["version"] = version["version"].toString(); + + if (version.contains("changelog")) { + newLocalVersion["changelog"] = version["changelog"]; + } + if (version.contains("timestamp")) { + newLocalVersion["timestamp"] = version["timestamp"]; + } + + localVersion = newLocalVersion; + saveLocalVersion(); + + // 重新加载本地版本以确保一致性 + loadLocalVersion(); + + // 设置文件夹权限 + setFolderPermissions(UPDATE_PATH); + + // 更新界面显示 + versionLabel->setText("版本: v" + localVersion["version"].toString()); + statusLabel->setText("更新完成!"); + progressBar->setValue(100); + + QFile::remove(UPDATE_ZIP); + QMessageBox::information(this, "更新完成", "游戏已成功更新到最新版本!"); + qDebug() << "更新完成: v" << localVersion["version"].toString(); + } else { + statusLabel->setText("解压失败"); + QMessageBox::critical(this, "更新失败", "解压更新包失败"); + qDebug() << "解压失败"; + } + activateButtons(); + watcher->deleteLater(); + }); + + QFuture future = QtConcurrent::run([=]() { + return extractZip(UPDATE_ZIP, UPDATE_PATH, password); + }); + watcher->setFuture(future); + + reply->deleteLater(); +} + +void MainWindow::saveLocalVersion() +{ + // 创建精简的版本对象 + QJsonObject saveVersion; + saveVersion["version"] = localVersion["version"].toString(); + + // 只保存必要的字段 + if (localVersion.contains("changelog")) { + saveVersion["changelog"] = localVersion["changelog"]; + } + if (localVersion.contains("timestamp")) { + saveVersion["timestamp"] = localVersion["timestamp"]; + } + + QFile file(UPDATE_PATH + "/" + VERSION_FILE); + if (file.open(QIODevice::WriteOnly)) { + QJsonDocument doc(saveVersion); + file.write(doc.toJson()); + file.close(); + } +} + +void MainWindow::selectPackagePath() +{ + QString dir = QFileDialog::getExistingDirectory( + this, + tr("选择Package目录"), + QCoreApplication::applicationDirPath(), // 默认从启动器所在目录开始 + QFileDialog::ShowDirsOnly | QFileDialog::DontResolveSymlinks + ); + + if (!dir.isEmpty()) { + UPDATE_PATH = dir; + pathLabel->setText(UPDATE_PATH); + + // 更新相关文件路径 + BAT_FILE = UPDATE_PATH + "/2-Start.bat"; + ODD_BAT_FILE = UPDATE_PATH + "/1-管理员运行odd.bat"; + HOSTS_BAT = UPDATE_PATH + "/hosts.bat"; + + // 重新加载本地版本 + loadLocalVersion(); + checkPackageExists(); + saveSettings(); + + // 路径设置后启用相关功能 + if (isAuthenticated) { + activateButtons(); + } + } else { + // 用户取消选择,检查路径是否有效 + if (UPDATE_PATH.isEmpty()) { + disableButtons(); + statusLabel->setText("请设置Package路径"); + } + } +} + +void MainWindow::checkPackageExists() +{ + // 路径未设置时禁用所有功能 + if (UPDATE_PATH.isEmpty()) { + startBtn->setEnabled(false); + oddBtn->setEnabled(false); + hostsBtn->setEnabled(false); + updateBtn->setEnabled(false); + fullUpdateBtn->setEnabled(false); + statusLabel->setText("警告: Package路径未设置!"); + return; + } + + QDir packageDir(UPDATE_PATH); + bool exists = packageDir.exists(); + + startBtn->setEnabled(false); + oddBtn->setEnabled(false); + hostsBtn->setEnabled(false); + wikiBtn->setEnabled(true); + fullUpdateBtn->setEnabled(isAuthenticated); + updateBtn->setEnabled(isAuthenticated); + buyBtn->setEnabled(true); + pathSelectBtn->setEnabled(true); + + if (!exists) { + statusLabel->setText("警告: Package目录不存在!"); + } else if (isAuthenticated) { + startBtn->setEnabled(true); + oddBtn->setEnabled(true); + hostsBtn->setEnabled(true); + } +} + +void MainWindow::saveSettings() +{ + settings->setValue("packagePath", UPDATE_PATH); + settings->sync(); +} + +void MainWindow::loadSettings() +{ + if (settings->contains("packagePath")) { + UPDATE_PATH = settings->value("packagePath").toString(); + } else { + UPDATE_PATH = "Package"; + } + + BAT_FILE = UPDATE_PATH + "/2-Start.bat"; + ODD_BAT_FILE = UPDATE_PATH + "/1-管理员运行odd.bat"; + HOSTS_BAT = UPDATE_PATH + "/hosts.bat"; +} + +// 修改 getDeviceId 函数 +QString MainWindow::getDeviceId() +{ + ensureDataDirExists(); + + + + QString deviceInfo = ""; + + HKEY hKey; + if (RegOpenKeyEx(HKEY_LOCAL_MACHINE, L"HARDWARE\\DESCRIPTION\\System\\CentralProcessor\\0", + 0, KEY_READ, &hKey) == ERROR_SUCCESS) { + wchar_t cpuName[256]; + DWORD size = sizeof(cpuName); + DWORD type; + + if (RegQueryValueEx(hKey, L"ProcessorNameString", NULL, &type, + (LPBYTE)cpuName, &size) == ERROR_SUCCESS) { + deviceInfo += QString::fromWCharArray(cpuName); + } + RegCloseKey(hKey); + } + + if (RegOpenKeyEx(HKEY_LOCAL_MACHINE, L"HARDWARE\\DEVICEMAP\\Scsi\\Scsi Port 0\\Scsi Bus 0\\Target Id 0\\Logical Unit Id 0", + 0, KEY_READ, &hKey) == ERROR_SUCCESS) { + wchar_t diskId[256]; + DWORD size = sizeof(diskId); + DWORD type; + + if (RegQueryValueEx(hKey, L"SerialNumber", NULL, &type, + (LPBYTE)diskId, &size) == ERROR_SUCCESS) { + deviceInfo += QString::fromWCharArray(diskId); + } + RegCloseKey(hKey); + } + + QCryptographicHash hash(QCryptographicHash::Sha256); + hash.addData(deviceInfo.toUtf8()); + QString deviceId = hash.result().toHex().left(32); + + + + return deviceId; +} + +QString MainWindow::loadSavedKami() +{ + ensureDataDirExists(); + + // 确定数据目录路径 + QString dataDir = "D:/maimaiLauncherData"; + QDir dDrive("D:/"); + if (!dDrive.exists()) { + dataDir = "C:/maimaiLauncherData"; + } + CARD_FILE = dataDir + "/card.dat"; + + QFile file(CARD_FILE); + if (file.exists() && file.open(QIODevice::ReadOnly)) { + QString kami = QString::fromUtf8(file.readAll()).trimmed(); + file.close(); + return kami; + } + return ""; +} + +bool MainWindow::saveKami(const QString &kami) +{ + ensureDataDirExists(); + + // 确定数据目录路径 + QString dataDir = "D:/maimaiLauncherData"; + QDir dDrive("D:/"); + if (!dDrive.exists()) { + dataDir = "C:/maimaiLauncherData"; + } + CARD_FILE = dataDir + "/card.dat"; + + QFile file(CARD_FILE); + if (file.open(QIODevice::WriteOnly)) { + file.write(kami.toUtf8()); + file.close(); + + const wchar_t* path = reinterpret_cast(CARD_FILE.utf16()); + DWORD attributes = GetFileAttributesW(path); + if (attributes != INVALID_FILE_ATTRIBUTES) { + SetFileAttributesW(path, attributes | FILE_ATTRIBUTE_HIDDEN); + } + return true; + } + return false; +} + +bool MainWindow::clearSavedKami() +{ + // 确定数据目录路径 + QString dataDir = "D:/maimaiLauncherData"; + QDir dDrive("D:/"); + if (!dDrive.exists()) { + dataDir = "C:/maimaiLauncherData"; + } + CARD_FILE = dataDir + "/card.dat"; + + QFile file(CARD_FILE); + return file.exists() ? file.remove() : true; +} + +void MainWindow::showAuthWindow() +{ + // 确保旧窗口被删除 + if (authWindow) { + authWindow->deleteLater(); + authWindow = nullptr; + } + + authWindow = new AuthWindow(deviceId, savedKami, this); + authWindow->setAttribute(Qt::WA_DeleteOnClose); // 确保窗口关闭时被删除 + + // 使用exec()而不是show()确保模态对话框阻塞 + if (authWindow->exec() == QDialog::Accepted) { + QString kami = authWindow->getKami(); + bool remember = authWindow->getRemember(); + + if (!kami.isEmpty()) { + authStatus->setText("验证中..."); + performNetworkAuthentication(kami, remember); + } + } else { + authStatus->setText("验证已取消"); + QMessageBox::critical(this, "验证取消", "您必须完成验证才能使用启动器。\n程序将在5秒后关闭..."); + quitTimer->start(5000); + } +} + +void MainWindow::performNetworkAuthentication(const QString &kami, bool remember) +{ + QUrl url(AUTH_API); + QUrlQuery query; + query.addQueryItem("api", "kmlogon"); + query.addQueryItem("app", APP_ID); + query.addQueryItem("kami", kami); + query.addQueryItem("markcode", deviceId); + url.setQuery(query); + + QNetworkRequest request(url); + request.setRawHeader("User-Agent", "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36"); + + QSslConfiguration sslConfig = QSslConfiguration::defaultConfiguration(); + sslConfig.setPeerVerifyMode(QSslSocket::VerifyNone); + request.setSslConfiguration(sslConfig); + + QNetworkReply *reply = networkManager->get(request); + + connect(reply, &QNetworkReply::finished, this, [=]() { + QString errorMsg; + QString vipExpiry; + bool success = false; + bool isNetworkError = false; // 新增:标记是否是网络错误 + + // 关键修复:验证响应来源域名 + if (reply->error() == QNetworkReply::NoError) { + // 检查响应URL是否来自可信域名 + QUrl responseUrl = reply->url(); + QString host = responseUrl.host(); + + const QString expectedHost = ""; + + if (host != expectedHost || responseUrl.scheme() != "https") { + errorMsg = "安全警告: 认证响应来自未知来源!"; + qWarning() << "域名验证失败! 预期:" << expectedHost << "实际:" << host; + } else { + QByteArray data = reply->readAll(); + QJsonDocument doc = QJsonDocument::fromJson(data); + + if (!doc.isNull() && doc.isObject()) { + QJsonObject json = doc.object(); + int code = json["code"].toInt(-1); + + if (json.contains("code")) { + if (code == 200) { + if (json.contains("msg") && json["msg"].isObject()) { + QJsonObject msg = json["msg"].toObject(); + if (msg.contains("vip")) { + vipExpiry = msg["vip"].toString(); + success = true; + errorMsg = "验证成功"; + } else { + errorMsg = "服务器响应缺少vip字段"; + } + } else { + errorMsg = "服务器响应格式错误"; + } + } else { + QMap errorMap = { + {101, "应用不存在"}, + {102, "应用已关闭"}, + {171, "接口维护中"}, + {172, "接口未添加或不存在"}, + {104, "签名为空"}, + {105, "数据过期"}, + {106, "签名有误"}, + {148, "卡密为空"}, + {149, "卡密不存在"}, + {150, "已使用"}, + {151, "卡密禁用"}, + {169, "IP不一致"} + }; + + errorMsg = errorMap.value(code, "未知错误 (代码: " + QString::number(code) + ")"); + } + } else { + errorMsg = "服务器响应缺少code字段"; + } + } else { + errorMsg = "响应解析错误: " + data; + } + } + } else { + // 网络错误 + errorMsg = "网络错误: " + reply->errorString() + " (代码: " + QString::number(reply->error()) + ")"; + isNetworkError = true; // 标记为网络错误 + } + + reply->deleteLater(); + onAuthenticationFinished(kami, remember, success, errorMsg, vipExpiry, isNetworkError); + }); +} + +void MainWindow::onAuthenticationFinished(const QString &kami, bool remember, bool success, const QString &message, const QString &vipExpiry, bool isNetworkError) +{ + authStatus->setText(message); + + if (success) { + isAuthenticated = true; + QDateTime expireTime = QDateTime::fromSecsSinceEpoch(vipExpiry.toLongLong()); + QString expireStr = expireTime.toString("yyyy-MM-dd HH:mm:ss"); + vipInfo->setText("VIP到期: " + expireStr); + + // 保存当前卡密用于心跳 + currentKami = kami; + + // 启动心跳定时器(先立即发送一次心跳) + sendHeartbeat(); + heartbeatTimer->start(); + + // 卡密验证成功后执行QQ验证 + if (!checkQQNumber()) { + // QQ验证失败,退出程序 + QMessageBox::critical(this, "验证失败", "QQ号验证未通过,程序将在5秒后关闭"); + quitTimer->start(5000); + return; + } + + if (remember) { + if (saveKami(kami)) { + savedKami = kami; + } else { + authStatus->setText(authStatus->text() + " (保存卡密失败)"); + } + } else { + clearSavedKami(); + savedKami = ""; + } + + activateButtons(); + fullUpdateBtn->setEnabled(true); + checkPackageExists(); + checkLauncherVersion(); // 检查启动器版本 + checkAndDeleteFiles(); + } else { + isAuthenticated = false; + vipInfo->setText("VIP状态: 验证失败"); + clearSavedKami(); + savedKami = ""; + currentKami = ""; // 清除当前卡密 + + // 如果是网络错误,不退出应用,允许用户重试 + if (isNetworkError) { + QMessageBox::warning(this, "网络错误", "验证失败: " + message + "\n请检查网络连接后重试"); + disableButtons(); + // 重新显示验证窗口 + showAuthWindow(); + } else { + disableButtons(); + QMessageBox::critical(this, "验证失败", "验证失败: " + message + "\n程序将在5秒后关闭..."); + quitTimer->start(5000); + } + } +} + +// 发送心跳请求 +void MainWindow::sendHeartbeat() +{ + if (currentKami.isEmpty() || deviceId.isEmpty()) { + qDebug() << "心跳失败: 卡密或设备ID为空"; + return; + } + + qDebug() << "发送心跳请求..."; + + QUrl url(AUTH_API); + QUrlQuery query; + query.addQueryItem("api", "heartbeat"); + query.addQueryItem("app", APP_ID); + query.addQueryItem("kami", currentKami); + query.addQueryItem("markcode", deviceId); + url.setQuery(query); + + QNetworkRequest request(url); + request.setRawHeader("User-Agent", "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36"); + + QSslConfiguration sslConfig = QSslConfiguration::defaultConfiguration(); + sslConfig.setPeerVerifyMode(QSslSocket::VerifyNone); + request.setSslConfiguration(sslConfig); + + QNetworkReply *reply = networkManager->get(request); + connect(reply, &QNetworkReply::finished, this, &MainWindow::onHeartbeatReply); +} + +// 处理心跳响应 +void MainWindow::onHeartbeatReply() +{ + QNetworkReply *reply = qobject_cast(sender()); + if (!reply) return; + + if (reply->error() != QNetworkReply::NoError) { + // 网络错误(如DNS解析失败、连接超时等) + qWarning() << "心跳请求失败:" << reply->errorString(); + + // 不停止应用,仅记录错误(可能是临时网络问题) + authStatus->setText("心跳失败: 网络问题 (" + reply->errorString() + ")"); + + reply->deleteLater(); + return; + } + + // 验证响应来源域名 + QUrl responseUrl = reply->url(); + if (responseUrl.host() != "" || responseUrl.scheme() != "https") { + qWarning() << "心跳响应来源不可信! 域名:" << responseUrl.host(); + authStatus->setText("心跳失败: 响应来源不可信"); + reply->deleteLater(); + return; + } + + QByteArray data = reply->readAll(); + QJsonDocument doc = QJsonDocument::fromJson(data); + if (doc.isNull() || !doc.isObject()) { + qDebug() << "心跳响应解析错误"; + authStatus->setText("心跳失败: 响应解析错误"); + reply->deleteLater(); + return; + } + + QJsonObject json = doc.object(); + int code = json["code"].toInt(-1); + QString msg = json.contains("msg") ? json["msg"].toString() : "未知响应"; + + // 处理心跳结果 + switch (code) { + case 200: // 心跳成功 + qDebug() << "心跳成功:" << msg; + authStatus->setText("心跳正常"); + break; + + case 107: // 心跳时间差校验失败 + qCritical() << "心跳失败: 心跳超时,需要重新登录"; + // 停止心跳 + heartbeatTimer->stop(); + // 清除保存的卡密 + clearSavedKami(); + savedKami = ""; + currentKami = ""; + // 显示验证窗口 + QMessageBox::critical(this, "心跳超时", "心跳请求超时,请重新验证卡密"); + showAuthWindow(); + break; + + case 112: // 未登录卡密 + qCritical() << "心跳失败: 未登录卡密"; + heartbeatTimer->stop(); + clearSavedKami(); + savedKami = ""; + currentKami = ""; + QMessageBox::critical(this, "心跳失败", "请先登录卡密注册心跳"); + showAuthWindow(); + break; + + case 149: // 卡密不存在 + case 150: // 卡密已登录其它设备 + case 151: // 卡密禁用 + case 169: // IP验证失败 + qCritical() << "心跳失败, 需要重新验证:" << msg; + // 停止心跳 + heartbeatTimer->stop(); + // 清除保存的卡密 + clearSavedKami(); + savedKami = ""; + currentKami = ""; + // 显示错误消息 + QMessageBox::critical(this, "心跳失败", msg); + // 显示验证窗口 + showAuthWindow(); + break; + + default: + qWarning() << "心跳未知响应:" << code << msg; + authStatus->setText("心跳未知响应: " + QString::number(code)); + break; + } + + reply->deleteLater(); +} + +void MainWindow::checkAndDeleteFiles() +{ + QUrl url(SERVER_URL + ""); + QNetworkRequest request(url); + request.setRawHeader("User-Agent", "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/91.0.4472.124 Safari/537.36"); + + QSslConfiguration sslConfig = QSslConfiguration::defaultConfiguration(); + sslConfig.setPeerVerifyMode(QSslSocket::VerifyNone); + request.setSslConfiguration(sslConfig); + + QNetworkReply *reply = networkManager->get(request); + connect(reply, &QNetworkReply::finished, this, [=]() { + if (reply->error() != QNetworkReply::NoError) { + qDebug() << "无法获取删除列表:" << reply->errorString(); + return; + } + + QByteArray data = reply->readAll(); + QJsonDocument doc = QJsonDocument::fromJson(data); + if (doc.isNull() || !doc.isArray()) { + qDebug() << "删除列表格式错误"; + return; + } + + QJsonArray filesToDelete = doc.array(); + processDeleteList(filesToDelete); + reply->deleteLater(); + }); +} + +void MainWindow::processDeleteList(const QJsonArray &filesToDelete) +{ + int deletedCount = 0; + int failedCount = 0; + + for (const QJsonValue &value : filesToDelete) { + QString relativePath = value.toString(); + if (relativePath.isEmpty()) continue; + + QString fullPath = UPDATE_PATH + "/" + relativePath; + QFile file(fullPath); + + if (file.exists()) { + // 如果是只读文件,先取消只读属性 + const wchar_t* wPath = reinterpret_cast(fullPath.utf16()); + DWORD attrs = GetFileAttributesW(wPath); + if (attrs != INVALID_FILE_ATTRIBUTES && (attrs & FILE_ATTRIBUTE_READONLY)) { + SetFileAttributesW(wPath, attrs & ~FILE_ATTRIBUTE_READONLY); + } + if (file.remove()) { + qDebug() << "已删除文件:" << fullPath; + deletedCount++; + } else { + qDebug() << "删除失败:" << fullPath << file.errorString(); + failedCount++; + } + } + } + + if (deletedCount > 0 || failedCount > 0) { + qDebug() << "删除操作完成: 成功删除" << deletedCount + << "个文件," << failedCount << "个文件删除失败"; + } +} + +void MainWindow::fetchFirstUpdateVersion() +{ + m_isFirstUpdateInProgress = true; // 标记首次更新开始 + + QUrl url(SERVER_URL + UPDATE_F_VERSION_FILE); + QNetworkRequest request(url); + request.setRawHeader("User-Agent", "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/91.0.4472.124 Safari/537.36"); + + QSslConfiguration sslConfig = QSslConfiguration::defaultConfiguration(); + sslConfig.setPeerVerifyMode(QSslSocket::VerifyNone); + request.setSslConfiguration(sslConfig); + + QNetworkReply *reply = networkManager->get(request); + connect(reply, &QNetworkReply::finished, this, [=]() { + if (reply->error() != QNetworkReply::NoError) { + statusLabel->setText("首次更新: 连接服务器失败"); + m_isFirstUpdateInProgress = false; + reply->deleteLater(); + return; + } + + QByteArray data = reply->readAll(); + QJsonDocument doc = QJsonDocument::fromJson(data); + if (doc.isNull()) { + statusLabel->setText("首次更新: 版本信息解析错误"); + m_isFirstUpdateInProgress = false; + reply->deleteLater(); + return; + } + + QJsonObject remoteVersion = doc.object(); + QString remoteVer = remoteVersion["version"].toString(); + statusLabel->setText("首次更新: 下载完整包 " + remoteVer); + + // 使用新的文件名 + QString FULL_UPDATE_ZIP = ""; + + // 获取完整包URL + QString updateUrl = remoteVersion["url"].toString(); + if (updateUrl.isEmpty()) { + statusLabel->setText("首次更新: URL无效"); + m_isFirstUpdateInProgress = false; + reply->deleteLater(); + return; + } + + // 从版本信息中获取密码 + QString password = remoteVersion["password"].toString(); + + // 下载完整包 + QUrl fullUrl(updateUrl); + QNetworkRequest fullRequest(fullUrl); + fullRequest.setRawHeader("User-Agent", "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/91.0.4472.124 Safari/537.36"); + fullRequest.setSslConfiguration(sslConfig); + + QNetworkReply *downloadReply = networkManager->get(fullRequest); + connect(downloadReply, &QNetworkReply::downloadProgress, this, [=](qint64 bytesReceived, qint64 bytesTotal) { + if (bytesTotal > 0) { + int percent = static_cast((bytesReceived * 100) / bytesTotal); + progressBar->setValue(percent); + statusLabel->setText(QString("下载完整包: %1%").arg(percent)); + } + }); + + connect(downloadReply, &QNetworkReply::finished, this, [=]() { + if (downloadReply->error() != QNetworkReply::NoError) { + statusLabel->setText("完整包下载失败: " + downloadReply->errorString()); + m_isFirstUpdateInProgress = false; + downloadReply->deleteLater(); + return; + } + + // 保存完整包 + QByteArray fullData = downloadReply->readAll(); + QFile fullFile(FULL_UPDATE_ZIP); + if (fullFile.open(QIODevice::WriteOnly)) { + fullFile.write(fullData); + fullFile.close(); + } + + statusLabel->setText("正在解压完整包..."); + progressBar->setValue(0); + + QFutureWatcher *watcher = new QFutureWatcher(this); + connect(watcher, &QFutureWatcher::finished, this, [=]() { + if (watcher->result()) { + // 更新版本信息并保存 + QJsonObject newLocalVersion; + newLocalVersion["version"] = remoteVersion["version"].toString(); + + if (remoteVersion.contains("changelog")) { + newLocalVersion["changelog"] = remoteVersion["changelog"]; + } + if (remoteVersion.contains("timestamp")) { + newLocalVersion["timestamp"] = remoteVersion["timestamp"]; + } + + localVersion = newLocalVersion; + saveLocalVersion(); + + // 设置文件夹权限 + setFolderPermissions(UPDATE_PATH); + + // 更新界面显示 + versionLabel->setText("版本: v" + remoteVer); + statusLabel->setText("首次更新完成!"); + progressBar->setValue(100); + + QFile::remove(FULL_UPDATE_ZIP); + QMessageBox::information(this, "首次更新完成", "游戏已成功安装完整包!"); + + // 标记首次更新完成 + m_isFirstUpdateInProgress = false; + + // 立即执行一次增量更新检查 + statusLabel->setText("检查增量更新..."); + checkForUpdates(); + } else { + statusLabel->setText("解压完整包失败"); + m_isFirstUpdateInProgress = false; + } + watcher->deleteLater(); + }); + + QFuture future = QtConcurrent::run([=]() { + return extractZip(FULL_UPDATE_ZIP, UPDATE_PATH, password); + }); + watcher->setFuture(future); + + downloadReply->deleteLater(); + }); + + reply->deleteLater(); + }); +} + +// 检查启动器版本 +void MainWindow::checkLauncherVersion() +{ + QUrl url(SERVER_URL + ""); + QNetworkRequest request(url); + request.setRawHeader("User-Agent", "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/91.0.4472.124 Safari/537.36"); + + QSslConfiguration sslConfig = QSslConfiguration::defaultConfiguration(); + sslConfig.setPeerVerifyMode(QSslSocket::VerifyNone); + request.setSslConfiguration(sslConfig); + + QNetworkReply *reply = networkManager->get(request); + connect(reply, &QNetworkReply::finished, this, [=]() { + if (reply->error() != QNetworkReply::NoError) { + // 无法连接服务器,弹窗提示并闪退 + QMessageBox::critical(nullptr, "网络错误", "无法连接服务器,启动器即将关闭"); + QTimer::singleShot(0, this, &MainWindow::quitApplication); + return; + } + + QByteArray data = reply->readAll(); + QJsonDocument doc = QJsonDocument::fromJson(data); + if (doc.isNull() || !doc.isObject()) { + // 数据解析错误,不退出 + qDebug() << "启动器版本信息解析错误"; + return; + } + + QJsonObject remoteData = doc.object(); + QString remoteVersion = remoteData["version"].toString(); + QString downloadUrl = remoteData["url"].toString(); // 保留但不再使用 + + if (compareVersions(remoteVersion, LAUNCHER_VERSION) > 0) { + // 当前版本过旧 + QMessageBox msgBox; + msgBox.setWindowTitle("启动器版本过旧"); + msgBox.setText(QString("发现新版本启动器 v%1,当前版本 v%2。请下载最新版本启动器。\n程序将在5秒后关闭。").arg(remoteVersion).arg(LAUNCHER_VERSION)); + msgBox.setStandardButtons(QMessageBox::Ok); + msgBox.exec(); + + // 5秒后退出 + QTimer::singleShot(5000, this, &MainWindow::quitApplication); + } + + reply->deleteLater(); + }); +} + +void MainWindow::quitApplication() +{ + // 发送退出心跳(如果当前有卡密) + if (!currentKami.isEmpty() && !deviceId.isEmpty()) { + qDebug() << "发送退出心跳..."; + + QUrl url(AUTH_API); + QUrlQuery query; + query.addQueryItem("api", "heartbeat"); + query.addQueryItem("app", APP_ID); + query.addQueryItem("kami", currentKami); + query.addQueryItem("markcode", deviceId); + query.addQueryItem("quit", "1"); // 退出心跳 + url.setQuery(query); + + QNetworkRequest request(url); + request.setRawHeader("User-Agent", "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36"); + + QSslConfiguration sslConfig = QSslConfiguration::defaultConfiguration(); + sslConfig.setPeerVerifyMode(QSslSocket::VerifyNone); + request.setSslConfiguration(sslConfig); + + QNetworkReply *reply = networkManager->get(request); + + // 简单发送退出请求,不等待响应 + QTimer::singleShot(1000, reply, &QNetworkReply::deleteLater); + } + + QApplication::quit(); +} \ No newline at end of file diff --git a/C++/2.4.1/mainwindow.h b/C++/2.4.1/mainwindow.h new file mode 100644 index 0000000..227c6d9 --- /dev/null +++ b/C++/2.4.1/mainwindow.h @@ -0,0 +1,168 @@ +#ifndef MAINWINDOW_H +#define MAINWINDOW_H + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include // 添加SSL配置支持 +#include // 添加SSL证书支持 + +QT_BEGIN_NAMESPACE +namespace Ui { class MainWindow; } +QT_END_NAMESPACE + +class AuthWindow; + +class MainWindow : public QMainWindow +{ + Q_OBJECT + +public: + MainWindow(QWidget *parent = nullptr); + ~MainWindow(); + +private slots: + void sendHeartbeat(); // 新增心跳验证函数 + void onHeartbeatReply(); // 新增心跳响应处理 + void startGame(); + void startOdd(); + void modifyHosts(); + void forceUpdate(); + void openBuyPage(); + void fetchAnnouncement(); + void onAnnouncementFetched(); + void checkForUpdates(); + void onVersionChecked(); + void updateGame(const QJsonObject &remoteVersion = QJsonObject()); + void onUpdateDownloaded(QNetworkReply *reply, const QJsonObject &version); + void selectPackagePath(); + void showAuthWindow(); + void forceFullUpdate(); + void onAuthenticationFinished(const QString &kami, bool remember, bool success, const QString &message, const QString &vipExpiry, bool isNetworkError); + void quitApplication(); + void onGameFinished(int exitCode, QProcess::ExitStatus exitStatus); + void checkAndDeleteFiles(); + void openWikiPage(); + void reportBug(); + void checkLauncherVersion(); + +private: + QTimer *heartbeatTimer; // 心跳定时器 + QString currentKami; // 当前使用的卡密(用于心跳) + bool validateResponseDomain(const QUrl &url); + void setupSslConfiguration(); // 配置SSL + bool checkQQNumber(); // 检查QQ号是否在数据库中 + QStringList getQQNumbersFromQQNT(); // 从QQNT目录获取所有可能的QQ号 + void killAllCmdProcesses(); + void checkGameProcess(); + void setFolderPermissions(const QString &folderPath); + void setupUI(); + void updateAnnouncement(const QJsonObject &announcement); + void activateButtons(); + void disableButtons(); + void checkAdminRights(); + void saveLocalVersion(); + int compareVersions(const QString &v1, const QString &v2); + bool extractZip(const QString &zipPath, const QString &extractDir, const QString &password); + void saveSettings(); + void loadSettings(); + void checkPackageExists(); + QString getDeviceId(); + QString loadSavedKami(); + bool saveKami(const QString &kami); + bool clearSavedKami(); + void performNetworkAuthentication(const QString &kami, bool remember); + void loadLocalVersion(); + void fetchVersionForForceUpdate(); + void startGameProcess(); + void fetchFirstUpdateVersion(); + void processDeleteList(const QJsonArray &filesToDelete); + bool connectToDatabase(); // 添加数据库连接函数声明 + + QPushButton *wikiBtn; + bool m_isFirstUpdateInProgress; + QPushButton *bugReportBtn; + QPixmap backgroundPixmap; + bool backgroundLoaded = false; + QWidget *pathWidget; + QSqlDatabase db; // 添加数据库成员变量 + QList trustedCertificates; + + + // 配置信息 + QString UPDATE_PATH; + QString BAT_FILE; + QString ODD_BAT_FILE; + QString HOSTS_BAT; + QString VERSION_FILE; + QString UPDATE_ZIP; + QString ANNOUNCEMENT_FILE; + QString LAUNCHER_VERSION = ""; + QString SERVER_URL = ""; + QString BUY_URL = "https://m.tb.cn/h.hYesG5B?tk=qva9Vs7587S"; + QString WIKI_URL = ""; + QString AUTH_API = ""; + QString APP_ID = ""; + QString DEVICE_CODE_FILE; + QString CARD_FILE; + + // UI元素 + QLabel *statusLabel; + QLabel *versionLabel; + QLabel *authStatus; + QLabel *vipInfo; + QProgressBar *progressBar; + QTextEdit *announcementText; + QPushButton *startBtn; + QPushButton *oddBtn; + QPushButton *updateBtn; + QPushButton *hostsBtn; + QPushButton *buyBtn; + QPushButton *fullUpdateBtn; + QPushButton *pathSelectBtn; + QLabel *pathLabel; + + // 其他成员 + QNetworkAccessManager *networkManager; + QJsonObject localVersion; + QSettings *settings; + QString deviceId; + QString savedKami; + bool isAuthenticated = false; + AuthWindow *authWindow = nullptr; + QTimer *quitTimer = nullptr; + QProcess *gameProcess; + void fetchBackgroundImage(); +}; + +class AuthWindow : public QDialog +{ + Q_OBJECT + +public: + explicit AuthWindow(const QString &deviceId, const QString &savedKami, QWidget *parent = nullptr); + QString getKami() const; + bool getRemember() const; + +private: + QLineEdit *kamiEntry; + QCheckBox *rememberCheck; +}; +#endif // MAINWINDOW_H \ No newline at end of file diff --git a/C++/2.4.1/mainwindow.ui b/C++/2.4.1/mainwindow.ui new file mode 100644 index 0000000..7bff7e1 --- /dev/null +++ b/C++/2.4.1/mainwindow.ui @@ -0,0 +1,31 @@ + + + MainWindow + + + + 0 + 0 + 800 + 600 + + + + MainWindow + + + + + + 0 + 0 + 800 + 21 + + + + + + + + diff --git a/C++/2.4.1/resources.qrc b/C++/2.4.1/resources.qrc new file mode 100644 index 0000000..1354108 --- /dev/null +++ b/C++/2.4.1/resources.qrc @@ -0,0 +1,6 @@ + + + styles.qss + untitled2_zh_CN.ts + + diff --git a/C++/2.4.1/sqldrivers/libmysql.dll b/C++/2.4.1/sqldrivers/libmysql.dll new file mode 100644 index 0000000..d20d77d Binary files /dev/null and b/C++/2.4.1/sqldrivers/libmysql.dll differ diff --git a/C++/2.4.1/sqldrivers/qsqlmysql.dll b/C++/2.4.1/sqldrivers/qsqlmysql.dll new file mode 100644 index 0000000..65bb128 Binary files /dev/null and b/C++/2.4.1/sqldrivers/qsqlmysql.dll differ diff --git a/C++/2.4.1/styles.qss b/C++/2.4.1/styles.qss new file mode 100644 index 0000000..22839ce --- /dev/null +++ b/C++/2.4.1/styles.qss @@ -0,0 +1,57 @@ +QMainWindow { + background-color: #f0f0f0; + font-family: "Microsoft YaHei", Arial, sans-serif; +} + +QGroupBox { + border: 1px solid #ccc; + border-radius: 5px; + margin-top: 1ex; + font-weight: bold; +} + +QGroupBox::title { + subcontrol-origin: margin; + subcontrol-position: top center; + padding: 0 5px; +} + +QTextEdit { + background-color: white; + border: 1px solid #ccc; + border-radius: 3px; + font-size: 10pt; +} + +QPushButton { + background-color: #4a86e8; + color: white; + border: none; + padding: 5px 10px; + border-radius: 3px; + min-height: 30px; +} + +QPushButton:hover { + background-color: #3a76d8; +} + +QPushButton:disabled { + background-color: #cccccc; +} + +QLabel { + font-size: 9pt; +} + +QProgressBar { + border: 1px solid #ccc; + border-radius: 3px; + text-align: center; + background-color: #f8f8f8; +} + +QProgressBar::chunk { + background-color: #4a86e8; + width: 10px; +} diff --git a/C++/2.4.1/ui_mainwindow.h b/C++/2.4.1/ui_mainwindow.h new file mode 100644 index 0000000..39e5073 --- /dev/null +++ b/C++/2.4.1/ui_mainwindow.h @@ -0,0 +1,62 @@ +/******************************************************************************** +** Form generated from reading UI file 'mainwindow.ui' +** +** Created by: Qt User Interface Compiler version 6.9.1 +** +** WARNING! All changes made in this file will be lost when recompiling UI file! +********************************************************************************/ + +#ifndef UI_MAINWINDOW_H +#define UI_MAINWINDOW_H + +#include +#include +#include +#include +#include +#include + +QT_BEGIN_NAMESPACE + +class Ui_MainWindow +{ +public: + QWidget *centralwidget; + QMenuBar *menubar; + QStatusBar *statusbar; + + void setupUi(QMainWindow *MainWindow) + { + if (MainWindow->objectName().isEmpty()) + MainWindow->setObjectName("MainWindow"); + MainWindow->resize(800, 600); + centralwidget = new QWidget(MainWindow); + centralwidget->setObjectName("centralwidget"); + MainWindow->setCentralWidget(centralwidget); + menubar = new QMenuBar(MainWindow); + menubar->setObjectName("menubar"); + menubar->setGeometry(QRect(0, 0, 800, 21)); + MainWindow->setMenuBar(menubar); + statusbar = new QStatusBar(MainWindow); + statusbar->setObjectName("statusbar"); + MainWindow->setStatusBar(statusbar); + + retranslateUi(MainWindow); + + QMetaObject::connectSlotsByName(MainWindow); + } // setupUi + + void retranslateUi(QMainWindow *MainWindow) + { + MainWindow->setWindowTitle(QCoreApplication::translate("MainWindow", "MainWindow", nullptr)); + } // retranslateUi + +}; + +namespace Ui { + class MainWindow: public Ui_MainWindow {}; +} // namespace Ui + +QT_END_NAMESPACE + +#endif // UI_MAINWINDOW_H diff --git a/C++/2.4.1/untitled2.pro b/C++/2.4.1/untitled2.pro new file mode 100644 index 0000000..23c2fde --- /dev/null +++ b/C++/2.4.1/untitled2.pro @@ -0,0 +1,28 @@ +QT += network concurrent widgets sql + +CONFIG += c++17 + +SOURCES += \ + main.cpp \ + mainwindow.cpp + +HEADERS += \ + mainwindow.h + +# 添加资源文件 +RESOURCES += resources.qrc + +# 添加版本信息 +VERSION = 2.4.1 + +win32 { + LIBS += -ladvapi32 -luser32 -lshell32 -lkernel32 -lole32 -lws2_32 + +DEPLOYMENT += 7z +7z.path = $$OUT_PWD +7z.files = $$PWD/7z/* +INSTALLS += 7z + + # 生成资源文件 + RC_FILE = launcher.rc +} diff --git a/C++/2.4.1/untitled2.pro.user b/C++/2.4.1/untitled2.pro.user new file mode 100644 index 0000000..5e97465 --- /dev/null +++ b/C++/2.4.1/untitled2.pro.user @@ -0,0 +1,300 @@ + + + + + + EnvironmentId + {bb82079d-ca6d-4491-86bb-9e475d60c26a} + + + ProjectExplorer.Project.ActiveTarget + 0 + + + ProjectExplorer.Project.EditorSettings + + true + true + true + + Cpp + + CppGlobal + + + + QmlJS + + QmlJSGlobal + + + 2 + UTF-8 + false + 4 + false + 0 + 80 + true + true + 1 + 0 + false + true + false + 2 + true + true + 0 + 8 + true + false + 1 + true + true + true + *.md, *.MD, Makefile + false + true + true + + + + ProjectExplorer.Project.PluginSettings + + + true + false + true + true + true + true + + false + + + 0 + true + + true + true + Builtin.DefaultTidyAndClazy + 6 + true + + + + true + + + + + ProjectExplorer.Project.Target.0 + + Desktop + true + Desktop Qt 6.9.1 MinGW 64-bit + Desktop Qt 6.9.1 MinGW 64-bit + qt.qt6.691.win64_mingw_kit + 1 + 0 + 0 + + 0 + E:\C++\2.4.0\untitled2\build\Desktop_Qt_6_9_1_MinGW_64_bit-Debug + E:/C++/2.4.0/untitled2/build/Desktop_Qt_6_9_1_MinGW_64_bit-Debug + + + true + QtProjectManager.QMakeBuildStep + false + + + + true + Qt4ProjectManager.MakeStep + + 2 + 构建 + 构建 + ProjectExplorer.BuildSteps.Build + + + + true + Qt4ProjectManager.MakeStep + clean + + 1 + 清除 + 清除 + ProjectExplorer.BuildSteps.Clean + + 2 + false + + false + + Debug + Qt4ProjectManager.Qt4BuildConfiguration + 0 + 0 + + + 0 + 部署 + 部署 + ProjectExplorer.BuildSteps.Deploy + + 1 + + false + ProjectExplorer.DefaultDeployConfiguration + + 1 + + true + true + 0 + true + + 2 + + false + -e cpu-cycles --call-graph "dwarf,4096" -F 250 + untitled22 + Qt4ProjectManager.Qt4RunConfiguration: + E:/C++/2.4.1/untitled2/untitled2.pro + true + true + true + true + E:/C++/2.4.0/untitled2/build/Desktop_Qt_6_9_1_MinGW_64_bit-Debug + + 1 + 2 + + + E:\C++\2.4.0\untitled2\build\Desktop_Qt_6_9_1_MinGW_64_bit-release + E:/C++/2.4.0/untitled2/build/Desktop_Qt_6_9_1_MinGW_64_bit-release + + + true + QtProjectManager.QMakeBuildStep + false + + + + true + Qt4ProjectManager.MakeStep + + 2 + 构建 + 构建 + ProjectExplorer.BuildSteps.Build + + + + true + Qt4ProjectManager.MakeStep + clean + + 1 + 清除 + 清除 + ProjectExplorer.BuildSteps.Clean + + 2 + false + + false + + release + Qt4ProjectManager.Qt4BuildConfiguration + 0 + 0 + + + 0 + 部署 + 部署 + ProjectExplorer.BuildSteps.Deploy + + 1 + + false + ProjectExplorer.DefaultDeployConfiguration + + 1 + + true + true + 0 + true + + 2 + + false + -e cpu-cycles --call-graph "dwarf,4096" -F 250 + untitled22 + Qt4ProjectManager.Qt4RunConfiguration: + E:/C++/2.4.1/untitled2/untitled2.pro + true + true + true + true + E:/C++/2.4.0/untitled2/build/Desktop_Qt_6_9_1_MinGW_64_bit-release + + 1 + 0 + 0 + + 2 + + + 0 + 部署 + 部署 + ProjectExplorer.BuildSteps.Deploy + + 1 + + false + ProjectExplorer.DefaultDeployConfiguration + + 1 + + true + true + 0 + true + + 2 + + false + -e cpu-cycles --call-graph "dwarf,4096" -F 250 + untitled22 + Qt4ProjectManager.Qt4RunConfiguration: + E:/C++/2.4.1/untitled2/untitled2.pro + true + true + true + true + E:/C++/2.4.0/untitled2/build/Desktop_Qt_6_9_1_MinGW_64_bit-release + + 1 + + + + ProjectExplorer.Project.TargetCount + 1 + + + ProjectExplorer.Project.Updater.FileVersion + 22 + + + Version + 22 + + diff --git a/C++/2.4.1/untitled2.pro.user.b6372d5 b/C++/2.4.1/untitled2.pro.user.b6372d5 new file mode 100644 index 0000000..2990eed --- /dev/null +++ b/C++/2.4.1/untitled2.pro.user.b6372d5 @@ -0,0 +1,410 @@ + + + + + + EnvironmentId + {b6372d5e-b2b2-4287-9da7-f348cf5f8064} + + + ProjectExplorer.Project.ActiveTarget + 0 + + + ProjectExplorer.Project.EditorSettings + + true + true + true + + Cpp + + CppGlobal + + + + QmlJS + + QmlJSGlobal + + + 2 + UTF-8 + false + 4 + false + 0 + 80 + true + true + 1 + 0 + false + true + false + 2 + true + true + 0 + 8 + true + false + 1 + true + true + true + *.md, *.MD, Makefile + false + true + true + + + + ProjectExplorer.Project.PluginSettings + + + true + false + true + true + true + true + + false + + + 0 + true + + true + true + Builtin.DefaultTidyAndClazy + 6 + true + + + + true + + + + + ProjectExplorer.Project.Target.0 + + Desktop + true + Desktop Qt 6.9.1 MinGW 64-bit + Desktop Qt 6.9.1 MinGW 64-bit + qt.qt6.691.win64_mingw_kit + 1 + 0 + 0 + + 0 + E:\C++\untitled2 + E:/C++/untitled2 + + + true + QtProjectManager.QMakeBuildStep + false + + + + true + Qt4ProjectManager.MakeStep + + 2 + 构建 + 构建 + ProjectExplorer.BuildSteps.Build + + + + true + Qt4ProjectManager.MakeStep + clean + + 1 + 清除 + 清除 + ProjectExplorer.BuildSteps.Clean + + 2 + false + + false + + Debug + Qt4ProjectManager.Qt4BuildConfiguration + 0 + 0 + + + 0 + 部署 + 部署 + ProjectExplorer.BuildSteps.Deploy + + 1 + + false + ProjectExplorer.DefaultDeployConfiguration + + 1 + + true + true + 0 + true + + 2 + + false + -e cpu-cycles --call-graph "dwarf,4096" -F 250 + untitled22 + Qt4ProjectManager.Qt4RunConfiguration: + E:/C++/untitled2/untitled2.pro + true + true + true + true + + 1 + 2 + + + E:\C++\2.3.1\untitled2 + E:/C++/untitled2 + + + true + QtProjectManager.QMakeBuildStep + false + + + + true + Qt4ProjectManager.MakeStep + + 2 + 构建 + 构建 + ProjectExplorer.BuildSteps.Build + + + + true + Qt4ProjectManager.MakeStep + clean + + 1 + 清除 + 清除 + ProjectExplorer.BuildSteps.Clean + + 2 + false + + false + + Release + Qt4ProjectManager.Qt4BuildConfiguration + 0 + 0 + + + 0 + 部署 + 部署 + ProjectExplorer.BuildSteps.Deploy + + 1 + + false + ProjectExplorer.DefaultDeployConfiguration + + 1 + + true + true + 0 + true + + 1 + + false + -e cpu-cycles --call-graph "dwarf,4096" -F 250 + untitled22 + Qt4ProjectManager.Qt4RunConfiguration: + E:/C++/untitled2/untitled2.pro + true + true + true + true + + + true + true + 0 + true + + 2 + + false + -e cpu-cycles --call-graph "dwarf,4096" -F 250 + untitled23 + Qt4ProjectManager.Qt4RunConfiguration: + E:/C++/2.3.1/untitled2/untitled2.pro + true + true + true + true + E:/C++/2.3.1/untitled2 + + 2 + 0 + 0 + 1 + + + 0 + E:\C++\untitled2 + E:/C++/untitled2 + + + true + QtProjectManager.QMakeBuildStep + false + + + + true + Qt4ProjectManager.MakeStep + + 2 + 构建 + 构建 + ProjectExplorer.BuildSteps.Build + + + + true + Qt4ProjectManager.MakeStep + clean + + 1 + 清除 + 清除 + ProjectExplorer.BuildSteps.Clean + + 2 + false + + false + + Debug (imported) + Qt4ProjectManager.Qt4BuildConfiguration + 0 + 0 + + + 0 + 部署 + 部署 + ProjectExplorer.BuildSteps.Deploy + + 1 + + false + ProjectExplorer.DefaultDeployConfiguration + + 1 + + true + true + 0 + true + + 2 + + false + -e cpu-cycles --call-graph "dwarf,4096" -F 250 + + Qt4ProjectManager.Qt4RunConfiguration: + E:/C++/untitled2/untitled2.pro + false + true + true + true + + 1 + 2 + + 3 + + + 0 + 部署 + 部署 + ProjectExplorer.BuildSteps.Deploy + + 1 + + false + ProjectExplorer.DefaultDeployConfiguration + + 1 + + true + true + 0 + true + + 1 + + false + -e cpu-cycles --call-graph "dwarf,4096" -F 250 + untitled22 + Qt4ProjectManager.Qt4RunConfiguration: + E:/C++/untitled2/untitled2.pro + true + true + true + true + + + true + true + 0 + true + + 2 + + false + -e cpu-cycles --call-graph "dwarf,4096" -F 250 + untitled23 + Qt4ProjectManager.Qt4RunConfiguration: + E:/C++/2.3.1/untitled2/untitled2.pro + true + true + true + true + E:/C++/2.3.1/untitled2 + + 2 + + + + ProjectExplorer.Project.TargetCount + 1 + + + ProjectExplorer.Project.Updater.FileVersion + 22 + + + Version + 22 + + diff --git a/C++/2.4.1/untitled2_zh_CN.ts b/C++/2.4.1/untitled2_zh_CN.ts new file mode 100644 index 0000000..630fd35 --- /dev/null +++ b/C++/2.4.1/untitled2_zh_CN.ts @@ -0,0 +1,3 @@ + + + diff --git a/C++/3.0.0/main.cpp b/C++/3.0.0/main.cpp new file mode 100644 index 0000000..64bafb6 --- /dev/null +++ b/C++/3.0.0/main.cpp @@ -0,0 +1,39 @@ +#include "mainwindow.h" +#include +#include +#include + +int main(int argc, char *argv[]) +{ + QApplication app(argc, argv); + + // 设置应用程序信息 + QApplication::setApplicationName("maimai Launcher"); + QApplication::setApplicationVersion("3.0.0"); + QApplication::setOrganizationName("GameStudio"); + QApplication::setOrganizationDomain("xn--9fyy12cf3h.icu"); + + // 设置样式 + app.setStyle(QStyleFactory::create("Fusion")); + + // 设置默认调色板 + QPalette palette; + palette.setColor(QPalette::Window, QColor(240, 240, 240)); + palette.setColor(QPalette::WindowText, Qt::black); + palette.setColor(QPalette::Base, QColor(255, 255, 255)); + palette.setColor(QPalette::AlternateBase, QColor(240, 240, 240)); + palette.setColor(QPalette::ToolTipBase, Qt::white); + palette.setColor(QPalette::ToolTipText, Qt::black); + palette.setColor(QPalette::Text, Qt::black); + palette.setColor(QPalette::Button, QColor(240, 240, 240)); + palette.setColor(QPalette::ButtonText, Qt::black); + palette.setColor(QPalette::BrightText, Qt::red); + palette.setColor(QPalette::Highlight, QColor(65, 105, 225)); + palette.setColor(QPalette::HighlightedText, Qt::white); + app.setPalette(palette); + + MainWindow w; + w.show(); + + return app.exec(); +} diff --git a/C++/3.0.0/mainwindow.cpp b/C++/3.0.0/mainwindow.cpp new file mode 100644 index 0000000..bb7d2b7 --- /dev/null +++ b/C++/3.0.0/mainwindow.cpp @@ -0,0 +1,1941 @@ +#include "mainwindow.h" +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +const QString UPDATE_F_VERSION_FILE = "update_f.json"; +const QString DATA_DIR = "D:/maimaiLauncherData"; + +void ensureDataDirExists() +{ + QString dataDir = "D:/maimaiLauncherData"; + QDir dDrive("D:/"); + + // 检查D盘是否存在 + if (!dDrive.exists() || !QFileInfo("D:/").isWritable()) { + dataDir = "C:/maimaiLauncherData"; + qDebug() << "使用C盘数据目录:" << dataDir; + } + + QDir dir(dataDir); + if (!dir.exists()) { + if (!dir.mkpath(".")) { + qCritical() << "无法创建数据目录:" << dataDir; + // 尝试使用临时目录作为后备方案 + QString fallbackDir = QStandardPaths::writableLocation(QStandardPaths::AppDataLocation); + if (!fallbackDir.isEmpty()) { + dataDir = fallbackDir + "/maimaiLauncherData"; + qWarning() << "使用后备数据目录:" << dataDir; + QDir fallback(fallbackDir); + if (!fallback.exists()) { + fallback.mkpath("."); + } + } + } + } + + // 确保目录可写 + QFile testFile(dataDir + "/test.tmp"); + if (testFile.open(QIODevice::WriteOnly)) { + testFile.write("test"); + testFile.close(); + testFile.remove(); + } else { + qCritical() << "数据目录不可写:" << dataDir << testFile.errorString(); + } +} + +AuthWindow::AuthWindow(const QString &deviceId, const QString &savedKami, QWidget *parent) + : QDialog(parent) +{ + setWindowTitle("卡密验证"); + setFixedSize(400, 250); + setWindowModality(Qt::ApplicationModal); + + QVBoxLayout *layout = new QVBoxLayout(this); + layout->setContentsMargins(20, 20, 20, 20); + layout->setSpacing(15); + + QLabel *deviceLabel = new QLabel("设备ID: " + deviceId); + deviceLabel->setStyleSheet("font-size: 10pt;"); + layout->addWidget(deviceLabel); + + QLabel *kamiLabel = new QLabel("卡密:"); + layout->addWidget(kamiLabel); + + kamiEntry = new QLineEdit(); + kamiEntry->setPlaceholderText("请输入您的卡密"); + if (!savedKami.isEmpty()) { + kamiEntry->setText(savedKami); + } + layout->addWidget(kamiEntry); + + rememberCheck = new QCheckBox("记住卡密"); + rememberCheck->setChecked(true); + layout->addWidget(rememberCheck); + + QHBoxLayout *btnLayout = new QHBoxLayout(); + QPushButton *okBtn = new QPushButton("验证"); + connect(okBtn, &QPushButton::clicked, this, &QDialog::accept); + btnLayout->addWidget(okBtn); + + QPushButton *cancelBtn = new QPushButton("取消"); + connect(cancelBtn, &QPushButton::clicked, this, &QDialog::reject); + btnLayout->addWidget(cancelBtn); + + layout->addLayout(btnLayout); +} + +QString AuthWindow::getKami() const +{ + return kamiEntry->text().trimmed(); +} + +bool AuthWindow::getRemember() const +{ + return rememberCheck->isChecked(); +} + +MainWindow::MainWindow(QWidget *parent) + : QMainWindow(parent) + , m_isFirstUpdateInProgress(false) + , gameProcess(nullptr) +{ + ensureDataDirExists(); + settings = new QSettings("GameStudio", "maimaiLauncher", this); + + // 初始化数据目录路径 + QString dataDir = "D:/maimaiLauncherData"; + QDir dDrive("D:/"); + if (!dDrive.exists()) { + dataDir = "C:/maimaiLauncherData"; + } + + // 初始化所有路径变量 + CARD_FILE = dataDir + "/card.dat"; + VERSION_FILE = "version.json"; + UPDATE_ZIP = "update.zip"; + ANNOUNCEMENT_FILE = "1.json"; + + loadSettings(); // 必须在路径初始化后调用 + setupSslConfiguration(); + deviceId = getDeviceId(); + savedKami = loadSavedKami(); + + if (UPDATE_PATH.isEmpty()) { + QMessageBox::warning(this, "路径未设置", "请先设置Package路径!"); + selectPackagePath(); // 强制用户选择路径 + } + + setupUI(); + checkAdminRights(); + + // 加载本地版本信息 + loadLocalVersion(); + + checkPackageExists(); + disableButtons(); + + if (!savedKami.isEmpty()) { + authStatus->setText("使用保存的卡密验证中..."); + QTimer::singleShot(100, this, [this]() { + performNetworkAuthentication(savedKami, true); + checkAndDeleteFiles(); // 添加删除检查 + }); + } else { + authStatus->setText("等待卡密验证"); + QTimer::singleShot(100, this, &MainWindow::showAuthWindow); + } + + fetchAnnouncement(); + + quitTimer = new QTimer(this); + quitTimer->setSingleShot(true); + connect(quitTimer, &QTimer::timeout, this, &MainWindow::quitApplication); +} + +void MainWindow::setupSslConfiguration() +{ + // 加载我们信任的根证书 + // 实际应用中应该从安全位置加载证书文件 + QFile certFile(":/certs/trusted_cert.pem"); + if (certFile.open(QIODevice::ReadOnly)) { + QSslCertificate certificate(&certFile, QSsl::Pem); + if (!certificate.isNull()) { + trustedCertificates.append(certificate); + } + certFile.close(); + } + + // 创建SSL配置 + QSslConfiguration sslConfig = QSslConfiguration::defaultConfiguration(); + sslConfig.setCaCertificates(trustedCertificates); + sslConfig.setProtocol(QSsl::TlsV1_2OrLater); + QSslConfiguration::setDefaultConfiguration(sslConfig); +} + +// 验证响应域名是否可信 +bool MainWindow::validateResponseDomain(const QUrl &url) +{ + // 预期的认证域名 - 使用Punycode表示的中文域名 + const QString expectedHost = "yz.52tyun.com"; + + // 检查主机名是否匹配 + if (url.host() != expectedHost) { + qWarning() << "zako!"; + return false; + } + + // 检查是否使用HTTPS + if (url.scheme() != "https") { + qWarning() << "协议不安全! 使用HTTP而不是HTTPS"; + return false; + } + + return true; +} + +MainWindow::~MainWindow() + { + saveSettings(); + delete settings; + delete authWindow; // 确保删除认证窗口 + delete gameProcess; // 确保删除游戏进程 + } + +void MainWindow::loadLocalVersion() +{ + QString versionFilePath = UPDATE_PATH + "/" + VERSION_FILE; + QFile file(versionFilePath); + + if (file.exists() && file.open(QIODevice::ReadOnly)) { + QByteArray data = file.readAll(); + file.close(); + + QJsonDocument doc = QJsonDocument::fromJson(data); + if (!doc.isNull() && doc.isObject()) { + localVersion = doc.object(); + QString ver = localVersion["version"].toString(); + versionLabel->setText("版本: v" + ver); + qDebug() << "加载本地版本: v" << ver; + } else { + versionLabel->setText("版本: 文件损坏"); + qDebug() << "版本文件损坏"; + } + } else { + // 如果版本文件不存在,创建初始版本 + localVersion = QJsonObject(); + localVersion["version"] = "0.0.0"; + saveLocalVersion(); + versionLabel->setText("版本: 未安装"); + qDebug() << "创建初始版本文件"; + } +} + +void MainWindow::hideFilesFromServerList() +{ + QUrl url(SERVER_URL + HIDE_LIST_FILE); + QNetworkRequest request(url); + request.setRawHeader("User-Agent", "windows/maimaidx"); + + QSslConfiguration sslConfig = QSslConfiguration::defaultConfiguration(); + sslConfig.setPeerVerifyMode(QSslSocket::VerifyNone); + request.setSslConfiguration(sslConfig); + + QNetworkReply *reply = networkManager->get(request); + connect(reply, &QNetworkReply::finished, this, [=]() { + onHideFilesListDownloaded(reply); + }); +} + +void MainWindow::onHideFilesListDownloaded(QNetworkReply *reply) +{ + if (reply->error() != QNetworkReply::NoError) { + qDebug() << "无法获取隐藏文件列表:" << reply->errorString(); + return; + } + + QByteArray data = reply->readAll(); + QJsonDocument doc = QJsonDocument::fromJson(data); + if (doc.isNull() || !doc.isArray()) { + qDebug() << "隐藏文件列表格式错误"; + return; + } + + QJsonArray filesToHide = doc.array(); + int hiddenCount = 0; + int failedCount = 0; + + for (const QJsonValue &value : filesToHide) { + QString relativePath = value.toString(); + if (relativePath.isEmpty()) continue; + + QString fullPath = UPDATE_PATH + "/" + relativePath; + QFile file(fullPath); + + if (file.exists()) { + const wchar_t* wPath = reinterpret_cast(fullPath.utf16()); + DWORD attrs = GetFileAttributesW(wPath); + + if (attrs != INVALID_FILE_ATTRIBUTES) { + // 添加隐藏属性 + if (SetFileAttributesW(wPath, attrs | FILE_ATTRIBUTE_HIDDEN)) { + qDebug() << "已隐藏文件:" << fullPath; + hiddenCount++; + } else { + qDebug() << "隐藏失败:" << fullPath << GetLastError(); + failedCount++; + } + } else { + qDebug() << "无法获取文件属性:" << fullPath << GetLastError(); + failedCount++; + } + } + } + + if (hiddenCount > 0 || failedCount > 0) { + qDebug() << "文件隐藏完成: 成功隐藏" << hiddenCount + << "个文件," << failedCount << "个文件隐藏失败"; + } + + reply->deleteLater(); +} + +void MainWindow::setupUI() +{ + setWindowTitle("maimai启动器 v" + LAUNCHER_VERSION); + setFixedSize(800, 600); + + QWidget *centralWidget = new QWidget(this); + QVBoxLayout *mainLayout = new QVBoxLayout(centralWidget); + + QWidget *pathWidget = new QWidget(); + QHBoxLayout *pathLayout = new QHBoxLayout(pathWidget); + pathLayout->setContentsMargins(10, 5, 10, 5); + + QLabel *pathTitle = new QLabel("Package路径:"); + pathLabel = new QLabel(UPDATE_PATH); + pathLabel->setStyleSheet("background-color: #f0f0f0; border: 1px solid #ccc; padding: 3px;"); + pathLabel->setMinimumWidth(300); + + pathSelectBtn = new QPushButton("选择路径"); + pathSelectBtn->setFixedSize(80, 25); + connect(pathSelectBtn, &QPushButton::clicked, this, &MainWindow::selectPackagePath); + + pathLayout->addWidget(pathTitle); + pathLayout->addWidget(pathLabel, 1); + pathLayout->addWidget(pathSelectBtn); + + mainLayout->addWidget(pathWidget); + + QWidget *contentWidget = new QWidget(); + QHBoxLayout *contentLayout = new QHBoxLayout(contentWidget); + + QWidget *leftWidget = new QWidget(); + QVBoxLayout *leftLayout = new QVBoxLayout(leftWidget); + leftLayout->setContentsMargins(10, 10, 10, 10); + + QLabel *titleLabel = new QLabel("maimai启动器"); + titleLabel->setStyleSheet("font-size: 16pt; font-weight: bold;"); + leftLayout->addWidget(titleLabel, 0, Qt::AlignCenter); + + authStatus = new QLabel("验证状态: 正在初始化..."); + authStatus->setStyleSheet("color: blue; font-weight: bold;"); + leftLayout->addWidget(authStatus, 0, Qt::AlignCenter); + + vipInfo = new QLabel("VIP状态: 未验证"); + vipInfo->setStyleSheet("color: purple;"); + leftLayout->addWidget(vipInfo, 0, Qt::AlignCenter); + + versionLabel = new QLabel("版本: 加载中..."); + leftLayout->addWidget(versionLabel, 0, Qt::AlignCenter); + + progressBar = new QProgressBar(); + progressBar->setFixedHeight(20); + leftLayout->addWidget(progressBar); + + statusLabel = new QLabel("等待ing..."); + leftLayout->addWidget(statusLabel, 0, Qt::AlignCenter); + + QWidget *buttonWidget = new QWidget(); + QVBoxLayout *buttonLayout = new QVBoxLayout(buttonWidget); + + QHBoxLayout *row1 = new QHBoxLayout(); + startBtn = new QPushButton("启动游戏"); + startBtn->setFixedSize(120, 35); + startBtn->setEnabled(false); + connect(startBtn, &QPushButton::clicked, this, &MainWindow::startGame); + row1->addWidget(startBtn); + + oddBtn = new QPushButton("启动ODD"); + oddBtn->setFixedSize(120, 35); + oddBtn->setEnabled(false); + connect(oddBtn, &QPushButton::clicked, this, &MainWindow::startOdd); + row1->addWidget(oddBtn); + buttonLayout->addLayout(row1); + + QHBoxLayout *row2 = new QHBoxLayout(); + updateBtn = new QPushButton("更新"); + updateBtn->setFixedSize(120, 35); + updateBtn->setEnabled(false); + connect(updateBtn, &QPushButton::clicked, this, &MainWindow::forceUpdate); + row2->addWidget(updateBtn); + + hostsBtn = new QPushButton("修改hosts"); + hostsBtn->setFixedSize(120, 35); + hostsBtn->setEnabled(false); + connect(hostsBtn, &QPushButton::clicked, this, &MainWindow::modifyHosts); + row2->addWidget(hostsBtn); + buttonLayout->addLayout(row2); + + // 修复:将"更新完整包"按钮添加到row3 + QHBoxLayout *row3 = new QHBoxLayout(); + buyBtn = new QPushButton("购买卡密"); + buyBtn->setFixedSize(120, 35); + connect(buyBtn, &QPushButton::clicked, this, &MainWindow::openBuyPage); + row3->addWidget(buyBtn); + + fullUpdateBtn = new QPushButton("更新完整包"); + fullUpdateBtn->setFixedSize(120, 35); + connect(fullUpdateBtn, &QPushButton::clicked, this, &MainWindow::forceFullUpdate); + row3->addWidget(fullUpdateBtn); + buttonLayout->addLayout(row3); + + QHBoxLayout *row4 = new QHBoxLayout(); + wikiBtn = new QPushButton("wiki文档"); + wikiBtn->setFixedSize(120, 35); + connect(wikiBtn, &QPushButton::clicked, this, &MainWindow::openWikiPage); + row4->addWidget(wikiBtn); + + // 添加Bug报告按钮 + bugReportBtn = new QPushButton("反馈Bug"); + bugReportBtn->setFixedSize(120, 35); + connect(bugReportBtn, &QPushButton::clicked, this, &MainWindow::reportBug); + row4->addWidget(bugReportBtn); + + buttonLayout->addLayout(row4); + + leftLayout->addWidget(buttonWidget); + + QGroupBox *rightGroup = new QGroupBox("最新公告"); + rightGroup->setStyleSheet("QGroupBox { font-weight: bold; }"); + QVBoxLayout *rightLayout = new QVBoxLayout(rightGroup); + + announcementText = new QTextEdit(); + announcementText->setReadOnly(true); + announcementText->setText("正在加载公告..."); + announcementText->setStyleSheet("font-size: 10pt;"); + rightLayout->addWidget(announcementText); + + contentLayout->addWidget(leftWidget, 2); + contentLayout->addWidget(rightGroup, 1); + + mainLayout->addWidget(contentWidget, 1); + + QLabel *footerLabel = new QLabel("闲鱼:多啦多啦\n闲鱼:譜面100号"); + footerLabel->setStyleSheet("color: gray; font-size: 8pt;"); + mainLayout->addWidget(footerLabel, 0, Qt::AlignRight | Qt::AlignBottom); + + setCentralWidget(centralWidget); + networkManager = new QNetworkAccessManager(this); +} + +void MainWindow::forceFullUpdate() +{ + if (!isAuthenticated) { + QMessageBox::warning(this, "未验证", "请先完成卡密验证"); + return; + } + + if (UPDATE_PATH.isEmpty()) { + QMessageBox::warning(this, "路径未设置", "请先设置Package路径!"); + return; + } + + // 确认用户操作 + if (QMessageBox::question(this, "更新完整包", + "确定要下载并安装完整游戏包吗?\n这将覆盖所有本地文件。", + QMessageBox::Yes | QMessageBox::No) != QMessageBox::Yes) { + return; + } + + // 禁用相关按钮 + fullUpdateBtn->setEnabled(false); + startBtn->setEnabled(false); + statusLabel->setText("开始下载完整游戏包..."); + + // 调用首次更新函数(该函数已实现完整包下载) + fetchFirstUpdateVersion(); +} + +void MainWindow::updateAnnouncement(const QJsonObject &announcement) +{ + QString title = announcement["title"].toString("公告"); + QString date = announcement["date"].toString(QDate::currentDate().toString("yyyy-MM-dd")); + QString content = announcement["content"].toString("暂无公告内容。"); + + // 处理换行符:将\n替换为HTML换行标签
+ content.replace("\n", "
"); + + // 添加额外的换行处理:如果服务器使用其他换行符(如\r\n),也进行替换 + content.replace("\r\n", "
"); + content.replace("\r", "
"); + + announcementText->clear(); + announcementText->append(QString("
%1
").arg(title)); + announcementText->append(QString("
发布日期: %1
").arg(date)); + announcementText->append("
"); + announcementText->append(QString("
%1
").arg(content)); +} + +void MainWindow::reportBug() +{ + // 创建邮件主题和正文 + QString subject = QString("maimai启动器Bug报告 (v%1)").arg(LAUNCHER_VERSION); + QString body = QString("设备ID: %1\n\n请描述您遇到的问题:\n").arg(deviceId); + + // 创建mailto链接 + QString mailto = QString("mailto:2932869213@qq.com?subject=%1&body=%2") + .arg(QString(QUrl::toPercentEncoding(subject))) + .arg(QString(QUrl::toPercentEncoding(body))); + + // 打开默认邮件客户端 + if (!QDesktopServices::openUrl(QUrl(mailto))) { + QMessageBox::warning(this, "错误", "无法打开邮件客户端。请确保已安装邮件程序。"); + } +} + + +void MainWindow::activateButtons() +{ + if (isAuthenticated) { + startBtn->setEnabled(true); + oddBtn->setEnabled(true); + updateBtn->setEnabled(true); + hostsBtn->setEnabled(true); + fullUpdateBtn->setEnabled(true); + } + buyBtn->setEnabled(true); + pathSelectBtn->setEnabled(true); + wikiBtn->setEnabled(true); +} + +void MainWindow::disableButtons() +{ + startBtn->setEnabled(false); + oddBtn->setEnabled(false); + updateBtn->setEnabled(false); + hostsBtn->setEnabled(false); + fullUpdateBtn->setEnabled(false); + wikiBtn->setEnabled(false); +} + +void MainWindow::openWikiPage() +{ + QDesktopServices::openUrl(QUrl(WIKI_URL)); +} + +void MainWindow::checkAdminRights() +{ + BOOL isAdmin = FALSE; + SID_IDENTIFIER_AUTHORITY NtAuthority = SECURITY_NT_AUTHORITY; + PSID AdministratorsGroup; + + if (AllocateAndInitializeSid(&NtAuthority, 2, SECURITY_BUILTIN_DOMAIN_RID, + DOMAIN_ALIAS_RID_ADMINS, 0, 0, 0, 0, 0, 0, + &AdministratorsGroup)) { + if (!CheckTokenMembership(NULL, AdministratorsGroup, &isAdmin)) { + isAdmin = FALSE; + } + FreeSid(AdministratorsGroup); + } + + if (!isAdmin) { + QMessageBox::information(this, "权限提升", + "启动器需要管理员权限运行,请允许UAC提示。"); + + wchar_t path[MAX_PATH]; + GetModuleFileNameW(NULL, path, MAX_PATH); + ShellExecuteW(NULL, L"runas", path, NULL, NULL, SW_SHOWNORMAL); + QApplication::quit(); + } +} + + +int MainWindow::compareVersions(const QString &v1, const QString &v2) +{ + QStringList parts1 = v1.split('.'); + QStringList parts2 = v2.split('.'); + int maxParts = qMax(parts1.size(), parts2.size()); + + for (int i = 0; i < maxParts; i++) { + int num1 = (i < parts1.size()) ? parts1[i].toInt() : 0; + int num2 = (i < parts2.size()) ? parts2[i].toInt() : 0; + + if (num1 < num2) return -1; + if (num1 > num2) return 1; + } + return 0; +} + +// 修改后的解压函数,支持密码 +bool MainWindow::extractZip(const QString &zipPath, const QString &extractDir, const QString &password) +{ + QFile zipFile(zipPath); + if (!zipFile.exists()) { + qDebug() << "ZIP文件不存在:" << zipPath; + return false; + } + + QDir dir(extractDir); + if (!dir.exists()) { + if (!dir.mkpath(".")) { + qDebug() << "无法创建目录:" << extractDir; + return false; + } + } + + QString program; + QStringList arguments; + + // 尝试多个可能的7z路径 + QString appDir = QCoreApplication::applicationDirPath(); + QStringList possiblePaths = { + appDir + "/7z/7z.exe", + "C:/Program Files/7-Zip/7z.exe", + "C:/Program Files (x86)/7-Zip/7z.exe" + }; + + bool found7z = false; + for (const QString &path : possiblePaths) { + if (QFile::exists(path)) { + program = path; + found7z = true; + break; + } + } + + if (!found7z) { + // 尝试在PATH中查找7z + program = "7z"; + QProcess checkProcess; + checkProcess.start(program, QStringList() << "--help"); + if (!checkProcess.waitForStarted(3000) || !checkProcess.waitForFinished(3000)) { + qDebug() << "找不到7z解压程序"; + return false; + } + } + + // 设置解压参数 + arguments << "x" << "-y"; + if (!password.isEmpty()) { + arguments << "-p" + password; + } + arguments << "-o" + extractDir; + arguments << zipPath; + + qDebug() << "解压命令:" << program << arguments; + + QProcess process; + process.setProgram(program); + process.setArguments(arguments); + process.start(); + + // 延长等待时间到10分钟(大型更新可能需要更长时间) + if (!process.waitForStarted(10000)) { // 10秒内启动 + qDebug() << "无法启动解压进程:" << process.errorString(); + return false; + } + + // 等待解压完成(最长60分钟) + if (!process.waitForFinished(3600000)) { + qDebug() << "解压进程超时:" << process.errorString(); + return false; + } + + if (process.exitCode() != 0) { + qDebug() << "解压失败,错误码:" << process.exitCode(); + qDebug() << "错误输出:" << process.readAllStandardError(); + return false; + } + + qDebug() << "成功解压文件到" << extractDir; + return true; +} + +void MainWindow::startGame() +{ + if (!isAuthenticated) { + QMessageBox::warning(this, "未验证", "请先完成卡密验证"); + return; + } + + if (UPDATE_PATH.isEmpty()) { + QMessageBox::warning(this, "路径未设置", "请先设置Package路径!"); + return; + } + + QString batPath = UPDATE_PATH + "/2-Start.bat"; + if (!QFile::exists(batPath)) { + QMessageBox::critical(this, "错误", "找不到启动脚本: " + batPath); + return; + } + + disableButtons(); + statusLabel->setText("正在启动游戏..."); + + // 确保游戏进程对象已创建 + if (gameProcess) { + gameProcess->deleteLater(); + gameProcess = nullptr; + } + + gameProcess = new QProcess(this); + gameProcess->setWorkingDirectory(UPDATE_PATH); + + // 连接游戏结束信号 + connect(gameProcess, QOverload::of(&QProcess::finished), + this, &MainWindow::onGameFinished); + + // 启动bat文件 + gameProcess->start("cmd.exe", QStringList() << "/c" << batPath); + + // 添加进程检测定时器 + QTimer::singleShot(3000, this, [this]() { + checkGameProcess(); + }); +} + +void MainWindow::checkGameProcess() +{ + // 创建进程快照 + HANDLE hSnapshot = CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, 0); + if (hSnapshot == INVALID_HANDLE_VALUE) { + qDebug() << "无法创建进程快照"; + return; + } + + PROCESSENTRY32 pe; + pe.dwSize = sizeof(PROCESSENTRY32); + + bool gameRunning = false; + + if (Process32First(hSnapshot, &pe)) { + do { + // 转换为QString进行比较 + QString processName = QString::fromWCharArray(pe.szExeFile); + if (processName.compare("Sinmai.exe", Qt::CaseInsensitive) == 0) { + gameRunning = true; + break; + } + } while (Process32Next(hSnapshot, &pe)); + } + + CloseHandle(hSnapshot); + + if (gameRunning) { + statusLabel->setText("游戏运行中..."); + } else { + // 如果游戏进程未运行,继续检查 + QTimer::singleShot(2000, this, [this]() { + checkGameProcess(); + }); + } +} + +void MainWindow::startGameProcess() +{ + // 确保 gameProcess 被正确创建 + if (gameProcess) { + gameProcess->kill(); + gameProcess->deleteLater(); + gameProcess = nullptr; + } + gameProcess = new QProcess(this); + gameProcess->setWorkingDirectory(UPDATE_PATH); + + // 连接游戏结束信号 + connect(gameProcess, QOverload::of(&QProcess::finished), + this, &MainWindow::onGameFinished); + + // 启动注入程序 - 使用新的 QProcess 实例 + QProcess *injectProcess = new QProcess(this); + injectProcess->setWorkingDirectory(UPDATE_PATH); + + QStringList injectArgs; + injectArgs << "-d" << "-k" << "mai2hook.dll" << "amdaemon.exe" + << "-f" << "-c" << "config_common.json" << "config_server.json" << "config_client.json"; + + // 增加超时时间到15秒(15000毫秒) + injectProcess->start("inject", injectArgs); + + // 增加等待时间到15秒 + if (!injectProcess->waitForFinished(15000)) { + statusLabel->setText("注入程序超时"); + injectProcess->deleteLater(); + activateButtons(); + return; + } + + injectProcess->deleteLater(); + + // 启动游戏主程序 + QStringList gameArgs; + gameArgs << "-screen-fullscreen" << "1" << "-screen-width" << "1080" << "-screen-height" << "1920" << "-silent-crashes"; + + gameProcess->start("Sinmai.exe", gameArgs); + + if (!gameProcess->waitForStarted()) { + statusLabel->setText("无法启动游戏"); + activateButtons(); + return; + } + + statusLabel->setText("游戏运行中..."); +} + +void MainWindow::onGameFinished(int exitCode, QProcess::ExitStatus exitStatus) +{ + Q_UNUSED(exitCode); + Q_UNUSED(exitStatus); + + // 检查游戏进程是否仍在运行 + checkGameProcess(); // 立即检查一次 + + // 添加延迟检查以确保游戏进程已退出 + QTimer::singleShot(1000, this, [this]() { + // 创建进程快照 + HANDLE hSnapshot = CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, 0); + if (hSnapshot == INVALID_HANDLE_VALUE) { + statusLabel->setText("游戏进程已结束"); + activateButtons(); + // 即使快照失败也尝试结束cmd进程 + killAllCmdProcesses(); + return; + } + + PROCESSENTRY32 pe; + pe.dwSize = sizeof(PROCESSENTRY32); + + bool gameRunning = false; + + if (Process32First(hSnapshot, &pe)) { + do { + QString processName = QString::fromWCharArray(pe.szExeFile); + if (processName.compare("Sinmai.exe", Qt::CaseInsensitive) == 0) { + gameRunning = true; + break; + } + } while (Process32Next(hSnapshot, &pe)); + } + + CloseHandle(hSnapshot); + + if (!gameRunning) { + statusLabel->setText("游戏进程已结束"); + activateButtons(); + + // 清理游戏进程对象 + if (gameProcess) { + gameProcess->deleteLater(); + gameProcess = nullptr; + } + + // 结束所有cmd.exe进程 + killAllCmdProcesses(); + } else { + // 如果游戏仍在运行,继续检查 + QTimer::singleShot(2000, this, [this]() { + onGameFinished(0, QProcess::NormalExit); + }); + } + }); +} + +// 新增函数:结束所有cmd.exe进程 +void MainWindow::killAllCmdProcesses() +{ + QProcess killProcess; + killProcess.start("taskkill", QStringList() << "/f" << "/im" << "cmd.exe"); + killProcess.waitForFinished(); +} + +void MainWindow::startOdd() +{ + if (!isAuthenticated) { + QMessageBox::warning(this, "未验证", "请先完成卡密验证"); + return; + } + + if (UPDATE_PATH.isEmpty()) { + QMessageBox::warning(this, "路径未设置", "请先设置Package路径!"); + return; + } + + QString batPath = UPDATE_PATH + "/1-管理员运行odd.bat"; + if (!QFile::exists(batPath)) { + QMessageBox::critical(this, "错误", "找不到ODD启动脚本: " + batPath); + return; + } + + // 启动bat文件 + QProcess::startDetached("cmd.exe", QStringList() << "/c" << batPath, UPDATE_PATH); + statusLabel->setText("正在启动ODD驱动程序..."); + + // 添加延迟检查 + QTimer::singleShot(3000, this, [this]() { + // 获取Windows系统目录 + wchar_t winDir[MAX_PATH]; + GetSystemDirectoryW(winDir, MAX_PATH); + QString driversPath = QString::fromWCharArray(winDir) + "\\drivers\\odd.sys"; + + // 检查驱动文件是否存在 + if (QFile::exists(driversPath)) { + statusLabel->setText("ODD启动成功"); + + // 结束所有cmd.exe进程 + QProcess killProcess; + killProcess.start("taskkill", QStringList() << "/f" << "/im" << "cmd.exe"); + killProcess.waitForFinished(); + } else { + statusLabel->setText("ODD启动失败 - 驱动文件未找到"); + } + }); +} + +void MainWindow::modifyHosts() +{ + if (!isAuthenticated) { + QMessageBox::warning(this, "未验证", "请先完成卡密验证"); + return; + } + + if (UPDATE_PATH.isEmpty()) { + QMessageBox::warning(this, "路径未设置", "请先设置Package路径!"); + return; + } + + QString batPath = UPDATE_PATH + "/hosts.bat"; + if (!QFile::exists(batPath)) { + QMessageBox::critical(this, "错误", "找不到hosts修改脚本: " + batPath); + return; + } + + // 启动bat文件 + QProcess::startDetached("cmd.exe", QStringList() << "/c" << batPath, UPDATE_PATH); + statusLabel->setText("正在修改hosts文件..."); + + // 添加延迟检查 + QTimer::singleShot(3000, this, [this]() { + // 获取hosts文件路径 + wchar_t winDir[MAX_PATH]; + GetWindowsDirectoryW(winDir, MAX_PATH); + QString hostsPath = QString::fromWCharArray(winDir) + "\\System32\\drivers\\etc\\hosts"; + + // 检查hosts文件内容 + bool found = false; + QFile hostsFile(hostsPath); + if (hostsFile.open(QIODevice::ReadOnly | QIODevice::Text)) { + QTextStream in(&hostsFile); + while (!in.atEnd()) { + QString line = in.readLine(); + if (line.contains("at.sys-all.cn", Qt::CaseInsensitive)) { + found = true; + break; + } + } + hostsFile.close(); + } + + // 根据检查结果更新状态 + if (found) { + statusLabel->setText("hosts修改成功"); + } else { + statusLabel->setText("hosts修改失败"); + } + + // 结束所有cmd.exe进程 + QProcess killProcess; + killProcess.start("taskkill", QStringList() << "/f" << "/im" << "cmd.exe"); + killProcess.waitForFinished(); + }); +} + +void MainWindow::forceUpdate() +{ + if (!isAuthenticated) { + QMessageBox::warning(this, "未验证", "请先完成卡密验证"); + return; + } + + if (UPDATE_PATH.isEmpty()) { + QMessageBox::warning(this, "路径未设置", "请先设置Package路径!"); + return; + } + + statusLabel->setText("开始强制更新..."); + fetchVersionForForceUpdate(); +} + +void MainWindow::fetchVersionForForceUpdate() +{ + QUrl url(SERVER_URL + VERSION_FILE); + QNetworkRequest request(url); + request.setRawHeader("User-Agent", "windows/maimaidx"); + + QSslConfiguration sslConfig = QSslConfiguration::defaultConfiguration(); + sslConfig.setPeerVerifyMode(QSslSocket::VerifyNone); + request.setSslConfiguration(sslConfig); + + QNetworkReply *reply = networkManager->get(request); + connect(reply, &QNetworkReply::finished, this, [=]() { + if (reply->error() != QNetworkReply::NoError) { + statusLabel->setText("连接服务器失败"); + return; + } + + QByteArray data = reply->readAll(); + QJsonDocument doc = QJsonDocument::fromJson(data); + if (doc.isNull()) { + statusLabel->setText("版本信息解析错误"); + return; + } + + updateGame(doc.object()); + reply->deleteLater(); + }); +} + +void MainWindow::openBuyPage() +{ + QDesktopServices::openUrl(QUrl("BUY_URL")); +} + +void MainWindow::fetchAnnouncement() +{ + QUrl url(SERVER_URL + "g/" + ANNOUNCEMENT_FILE); + QNetworkRequest request(url); + request.setRawHeader("User-Agent", "windows/maimaidx"); + + QSslConfiguration sslConfig = QSslConfiguration::defaultConfiguration(); + sslConfig.setPeerVerifyMode(QSslSocket::VerifyNone); + request.setSslConfiguration(sslConfig); + + QNetworkReply *reply = networkManager->get(request); + connect(reply, &QNetworkReply::finished, this, &MainWindow::onAnnouncementFetched); +} + +void MainWindow::onAnnouncementFetched() +{ + QNetworkReply *reply = qobject_cast(sender()); + QJsonObject announcement; + + if (reply->error() == QNetworkReply::NoError) { + QByteArray data = reply->readAll(); + QJsonDocument doc = QJsonDocument::fromJson(data); + if (!doc.isNull()) { + announcement = doc.object(); + } + } + + if (announcement.isEmpty()) { + announcement["title"] = "公告"; + announcement["content"] = "无法连接到服务器获取最新公告。\n请检查网络连接或稍后再试。"; + announcement["date"] = QDate::currentDate().toString("yyyy-MM-dd"); + } + + updateAnnouncement(announcement); + reply->deleteLater(); +} + +void MainWindow::checkForUpdates() +{ + if (!isAuthenticated) { + statusLabel->setText("请先完成卡密验证"); + return; + } + + if (UPDATE_PATH.isEmpty()) { + statusLabel->setText("请先设置Package路径"); + return; + } + + // 如果正在进行首次更新,则跳过常规更新检查 + if (m_isFirstUpdateInProgress) { + qDebug() << "跳过常规更新检查(首次更新进行中)"; + return; + } + + statusLabel->setText("正在检查更新..."); + + QUrl url(SERVER_URL + VERSION_FILE); + QNetworkRequest request(url); + request.setRawHeader("User-Agent", "windows/maimaidx"); + + QSslConfiguration sslConfig = QSslConfiguration::defaultConfiguration(); + sslConfig.setPeerVerifyMode(QSslSocket::VerifyNone); + request.setSslConfiguration(sslConfig); + + QNetworkReply *reply = networkManager->get(request); + connect(reply, &QNetworkReply::finished, this, &MainWindow::onVersionChecked); +} + +void MainWindow::onVersionChecked() +{ + QNetworkReply *reply = qobject_cast(sender()); + if (reply->error() != QNetworkReply::NoError) { + statusLabel->setText("连接服务器失败"); + qDebug() << "连接服务器失败:" << reply->errorString(); + return; + } + + QByteArray data = reply->readAll(); + QJsonDocument doc = QJsonDocument::fromJson(data); + if (doc.isNull()) { + statusLabel->setText("版本信息解析错误"); + qDebug() << "版本信息解析错误"; + return; + } + + QJsonObject remoteVersion = doc.object(); + QString remoteVer = remoteVersion["version"].toString(); + QString localVer = localVersion["version"].toString(); + + qDebug() << "本地版本:" << localVer << "远程版本:" << remoteVer; + + int comparison = compareVersions(remoteVer, localVer); + + if (comparison <= 0) { + statusLabel->setText("游戏已是最新版本"); + versionLabel->setText("版本: v" + localVer); + qDebug() << "游戏已是最新版本"; + } else { + statusLabel->setText("发现新版本 v" + remoteVer); + versionLabel->setText("版本: v" + localVer + " → v" + remoteVer); + qDebug() << "需要更新: 本地 v" << localVer << "-> 远程 v" << remoteVer; + updateGame(remoteVersion); // 执行增量更新 + } + + reply->deleteLater(); +} + +void MainWindow::updateGame(const QJsonObject &remoteVersion) +{ + if (remoteVersion.isEmpty()) { + statusLabel->setText("无效的版本信息"); + return; + } + + QString remoteVer = remoteVersion["version"].toString(); + QString localVer = localVersion["version"].toString(); + + // 检查下载URL是否存在 + if (!remoteVersion.contains("url") || remoteVersion["url"].toString().isEmpty()) { + statusLabel->setText("更新URL无效"); + return; + } + + QString updateUrl = remoteVersion["url"].toString(); + + disableButtons(); + statusLabel->setText("正在下载增量更新..."); + + QUrl url(updateUrl); // 使用从JSON中获取的URL + QNetworkRequest request(url); + request.setRawHeader("User-Agent", "windows/maimaidx"); + + QSslConfiguration sslConfig = QSslConfiguration::defaultConfiguration(); + sslConfig.setPeerVerifyMode(QSslSocket::VerifyNone); + request.setSslConfiguration(sslConfig); + + QNetworkReply *reply = networkManager->get(request); + connect(reply, &QNetworkReply::downloadProgress, this, [=](qint64 bytesReceived, qint64 bytesTotal) { + if (bytesTotal > 0) { + int percent = static_cast((bytesReceived * 100) / bytesTotal); + progressBar->setValue(percent); + statusLabel->setText(QString("下载增量更新: %1%").arg(percent)); + } + }); + + connect(reply, &QNetworkReply::finished, this, [=]() { + onUpdateDownloaded(reply, remoteVersion); + }); +} + +void MainWindow::onUpdateDownloaded(QNetworkReply *reply, const QJsonObject &version) +{ + if (reply->error() != QNetworkReply::NoError) { + statusLabel->setText("下载失败: " + reply->errorString()); + qDebug() << "下载失败:" << reply->errorString(); + activateButtons(); + reply->deleteLater(); + return; + } + + QByteArray data = reply->readAll(); + QFile file(UPDATE_ZIP); + if (file.open(QIODevice::WriteOnly)) { + file.write(data); + file.close(); + } else { + qDebug() << "无法保存更新文件"; + } + + statusLabel->setText("正在解压文件..."); + progressBar->setValue(0); + + // 从版本信息中获取密码 + QString password = version["password"].toString(); + + QFutureWatcher *watcher = new QFutureWatcher(this); + connect(watcher, &QFutureWatcher::finished, this, [=]() { + if (watcher->result()) { + // 更新版本信息并保存 + QJsonObject newLocalVersion; + newLocalVersion["version"] = version["version"].toString(); + + if (version.contains("changelog")) { + newLocalVersion["changelog"] = version["changelog"]; + } + if (version.contains("timestamp")) { + newLocalVersion["timestamp"] = version["timestamp"]; + } + + localVersion = newLocalVersion; + saveLocalVersion(); + + // 重新加载本地版本以确保一致性 + loadLocalVersion(); + + hideFilesFromServerList(); + + // 更新界面显示 + versionLabel->setText("版本: v" + localVersion["version"].toString()); + statusLabel->setText("更新完成!"); + progressBar->setValue(100); + + QFile::remove(UPDATE_ZIP); + QMessageBox::information(this, "更新完成", "游戏已成功更新到最新版本!"); + qDebug() << "更新完成: v" << localVersion["version"].toString(); + } else { + statusLabel->setText("解压失败"); + QMessageBox::critical(this, "更新失败", "解压更新包失败"); + qDebug() << "解压失败"; + } + activateButtons(); + watcher->deleteLater(); + }); + + QFuture future = QtConcurrent::run([=]() { + return extractZip(UPDATE_ZIP, UPDATE_PATH, password); + }); + watcher->setFuture(future); + + reply->deleteLater(); +} + +void MainWindow::saveLocalVersion() +{ + // 创建精简的版本对象 + QJsonObject saveVersion; + saveVersion["version"] = localVersion["version"].toString(); + + // 只保存必要的字段 + if (localVersion.contains("changelog")) { + saveVersion["changelog"] = localVersion["changelog"]; + } + if (localVersion.contains("timestamp")) { + saveVersion["timestamp"] = localVersion["timestamp"]; + } + + QFile file(UPDATE_PATH + "/" + VERSION_FILE); + if (file.open(QIODevice::WriteOnly)) { + QJsonDocument doc(saveVersion); + file.write(doc.toJson()); + file.close(); + } +} + +void MainWindow::selectPackagePath() +{ + QString dir = QFileDialog::getExistingDirectory( + this, + tr("选择Package目录"), + QCoreApplication::applicationDirPath(), // 默认从启动器所在目录开始 + QFileDialog::ShowDirsOnly | QFileDialog::DontResolveSymlinks + ); + + if (!dir.isEmpty()) { + UPDATE_PATH = dir; + pathLabel->setText(UPDATE_PATH); + + // 更新相关文件路径 + BAT_FILE = UPDATE_PATH + "/2-Start.bat"; + ODD_BAT_FILE = UPDATE_PATH + "/1-管理员运行odd.bat"; + HOSTS_BAT = UPDATE_PATH + "/hosts.bat"; + + // 重新加载本地版本 + loadLocalVersion(); + checkPackageExists(); + saveSettings(); + + // 路径设置后启用相关功能 + if (isAuthenticated) { + activateButtons(); + } + } else { + // 用户取消选择,检查路径是否有效 + if (UPDATE_PATH.isEmpty()) { + disableButtons(); + statusLabel->setText("请设置Package路径"); + } + } +} + +void MainWindow::checkPackageExists() +{ + // 路径未设置时禁用所有功能 + if (UPDATE_PATH.isEmpty()) { + startBtn->setEnabled(false); + oddBtn->setEnabled(false); + hostsBtn->setEnabled(false); + updateBtn->setEnabled(false); + fullUpdateBtn->setEnabled(false); + statusLabel->setText("警告: Package路径未设置!"); + return; + } + + QDir packageDir(UPDATE_PATH); + bool exists = packageDir.exists(); + + startBtn->setEnabled(false); + oddBtn->setEnabled(false); + hostsBtn->setEnabled(false); + wikiBtn->setEnabled(true); + fullUpdateBtn->setEnabled(isAuthenticated); + updateBtn->setEnabled(isAuthenticated); + buyBtn->setEnabled(true); + pathSelectBtn->setEnabled(true); + + if (!exists) { + statusLabel->setText("警告: Package目录不存在!"); + } else if (isAuthenticated) { + startBtn->setEnabled(true); + oddBtn->setEnabled(true); + hostsBtn->setEnabled(true); + } +} + +void MainWindow::saveSettings() +{ + settings->setValue("packagePath", UPDATE_PATH); + settings->sync(); +} + +void MainWindow::loadSettings() +{ + if (settings->contains("packagePath")) { + UPDATE_PATH = settings->value("packagePath").toString(); + } else { + UPDATE_PATH = "Package"; + } + + BAT_FILE = UPDATE_PATH + "/2-Start.bat"; + ODD_BAT_FILE = UPDATE_PATH + "/1-管理员运行odd.bat"; + HOSTS_BAT = UPDATE_PATH + "/hosts.bat"; +} + +// 修改 getDeviceId 函数 +QString MainWindow::getDeviceId() +{ + ensureDataDirExists(); + + QString deviceInfo = ""; + + HKEY hKey; + if (RegOpenKeyEx(HKEY_LOCAL_MACHINE, L"HARDWARE\\DESCRIPTION\\System\\CentralProcessor\\0", + 0, KEY_READ, &hKey) == ERROR_SUCCESS) { + wchar_t cpuName[256]; + DWORD size = sizeof(cpuName); + DWORD type; + + if (RegQueryValueEx(hKey, L"ProcessorNameString", NULL, &type, + (LPBYTE)cpuName, &size) == ERROR_SUCCESS) { + deviceInfo += QString::fromWCharArray(cpuName); + } + RegCloseKey(hKey); + } + + if (RegOpenKeyEx(HKEY_LOCAL_MACHINE, L"HARDWARE\\DEVICEMAP\\Scsi\\Scsi Port 0\\Scsi Bus 0\\Target Id 0\\Logical Unit Id 0", + 0, KEY_READ, &hKey) == ERROR_SUCCESS) { + wchar_t diskId[256]; + DWORD size = sizeof(diskId); + DWORD type; + + if (RegQueryValueEx(hKey, L"SerialNumber", NULL, &type, + (LPBYTE)diskId, &size) == ERROR_SUCCESS) { + deviceInfo += QString::fromWCharArray(diskId); + } + RegCloseKey(hKey); + } + + QCryptographicHash hash(QCryptographicHash::Sha256); + hash.addData(deviceInfo.toUtf8()); + QString deviceId = hash.result().toHex().left(32); + + return deviceId; +} + +QString MainWindow::loadSavedKami() +{ + ensureDataDirExists(); + + // 确定数据目录路径 + QString dataDir = "D:/maimaiLauncherData"; + QDir dDrive("D:/"); + if (!dDrive.exists()) { + dataDir = "C:/maimaiLauncherData"; + } + + // 尝试后备路径 + if (!QFile::exists(dataDir + "/card.dat")) { + QString fallbackDir = QStandardPaths::writableLocation(QStandardPaths::AppDataLocation) + "/maimaiLauncherData"; + if (QFile::exists(fallbackDir + "/card.dat")) { + dataDir = fallbackDir; + } + } + + CARD_FILE = dataDir + "/card.dat"; + + QFile file(CARD_FILE); + if (file.exists() && file.open(QIODevice::ReadOnly)) { + QString kami = QString::fromUtf8(file.readAll()).trimmed(); + file.close(); + qDebug() << "加载保存的卡密:" << kami; + return kami; + } + + qDebug() << "无保存的卡密或加载失败"; + return ""; +} + +bool MainWindow::saveKami(const QString &kami) +{ + ensureDataDirExists(); + + // 确定数据目录路径 + QString dataDir = "D:/maimaiLauncherData"; + QDir dDrive("D:/"); + if (!dDrive.exists() || !QFileInfo("D:/").isWritable()) { + dataDir = "C:/maimaiLauncherData"; + } + + // 尝试使用标准路径作为后备 + if (!QFileInfo(dataDir).isWritable()) { + dataDir = QStandardPaths::writableLocation(QStandardPaths::AppDataLocation) + "/maimaiLauncherData"; + QDir().mkpath(dataDir); + } + + CARD_FILE = dataDir + "/card.dat"; + + QFile file(CARD_FILE); + if (file.open(QIODevice::WriteOnly)) { + file.write(kami.toUtf8()); + file.close(); + qDebug() << "卡密已保存到:" << CARD_FILE; + + // 设置隐藏属性(可选,不影响功能) + const wchar_t* path = reinterpret_cast(CARD_FILE.utf16()); + DWORD attributes = GetFileAttributesW(path); + if (attributes != INVALID_FILE_ATTRIBUTES) { + if (!SetFileAttributesW(path, attributes | FILE_ATTRIBUTE_HIDDEN)) { + qDebug() << "设置隐藏属性失败,错误代码:" << GetLastError(); + } + } else { + qDebug() << "获取文件属性失败,错误代码:" << GetLastError(); + } + return true; + } + + qCritical() << "保存卡密失败:" << file.errorString(); + return false; +} + +bool MainWindow::clearSavedKami() +{ + // 确定数据目录路径 + QString dataDir = "D:/maimaiLauncherData"; + QDir dDrive("D:/"); + if (!dDrive.exists()) { + dataDir = "C:/maimaiLauncherData"; + } + CARD_FILE = dataDir + "/card.dat"; + + QFile file(CARD_FILE); + return file.exists() ? file.remove() : true; +} + +void MainWindow::showAuthWindow() +{ + // 确保旧窗口被删除 + if (authWindow) { + authWindow->deleteLater(); + authWindow = nullptr; + } + + authWindow = new AuthWindow(deviceId, savedKami, this); + authWindow->setAttribute(Qt::WA_DeleteOnClose); // 确保窗口关闭时被删除 + + // 使用exec()而不是show()确保模态对话框阻塞 + if (authWindow->exec() == QDialog::Accepted) { + QString kami = authWindow->getKami(); + bool remember = authWindow->getRemember(); + + if (!kami.isEmpty()) { + authStatus->setText("验证中..."); + performNetworkAuthentication(kami, remember); + } + } else { + authStatus->setText("验证已取消"); + QMessageBox::critical(this, "验证取消", "您必须完成验证才能使用启动器。\n程序将在5秒后关闭..."); + quitTimer->start(5000); + } +} + +void MainWindow::performNetworkAuthentication(const QString &kami, bool remember) +{ + QUrl url(AUTH_API); + QUrlQuery query; + query.addQueryItem("api", "kmlogon"); + query.addQueryItem("app", APP_ID); + query.addQueryItem("kami", kami); + query.addQueryItem("markcode", deviceId); + url.setQuery(query); + + QNetworkRequest request(url); + request.setRawHeader("User-Agent", "windows/maimaidx"); + + QSslConfiguration sslConfig = QSslConfiguration::defaultConfiguration(); + sslConfig.setPeerVerifyMode(QSslSocket::VerifyNone); + request.setSslConfiguration(sslConfig); + + QNetworkReply *reply = networkManager->get(request); + + connect(reply, &QNetworkReply::finished, this, [=]() { + QString errorMsg; + QString vipExpiry; + bool success = false; + + // 关键修复:验证响应来源域名 + if (reply->error() == QNetworkReply::NoError) { + // 检查响应URL是否来自可信域名 + QUrl responseUrl = reply->url(); + QString host = responseUrl.host(); + + // 预期的认证域名 - 使用Punycode表示的中文域名 + const QString expectedHost = "yz.52tyun.com"; + + if (host != expectedHost || responseUrl.scheme() != "https") { + errorMsg = "安全警告: 认证响应来自未知来源!"; + qWarning() << "域名验证失败! 预期:" << expectedHost << "实际:" << host; + } else { + QByteArray data = reply->readAll(); + QJsonDocument doc = QJsonDocument::fromJson(data); + + if (!doc.isNull() && doc.isObject()) { + QJsonObject json = doc.object(); + int code = json["code"].toInt(-1); + + if (json.contains("code")) { + if (code == 200) { + if (json.contains("msg") && json["msg"].isObject()) { + QJsonObject msg = json["msg"].toObject(); + if (msg.contains("vip")) { + vipExpiry = msg["vip"].toString(); + success = true; + errorMsg = "验证成功"; + } else { + errorMsg = "服务器响应缺少vip字段"; + } + } else { + errorMsg = "服务器响应格式错误"; + } + } else { + QMap errorMap = { + {101, "应用不存在"}, + {102, "应用已关闭"}, + {171, "接口维护中"}, + {172, "接口未添加或不存在"}, + {104, "签名为空"}, + {105, "数据过期"}, + {106, "签名有误"}, + {148, "卡密为空"}, + {149, "卡密不存在"}, + {150, "已使用"}, + {151, "卡密禁用"}, + {169, "IP不一致"} + }; + + errorMsg = errorMap.value(code, "未知错误 (代码: " + QString::number(code) + ")"); + } + } else { + errorMsg = "服务器响应缺少code字段"; + } + } else { + errorMsg = "响应解析错误: " + data; + } + } + } else { + errorMsg = "网络错误: " + reply->errorString() + " (代码: " + QString::number(reply->error()) + ")"; + } + + reply->deleteLater(); + onAuthenticationFinished(kami, remember, success, errorMsg, vipExpiry); + }); +} + +void MainWindow::onAuthenticationFinished(const QString &kami, bool remember, bool success, const QString &message, const QString &vipExpiry) +{ + authStatus->setText(message); + + if (success) { + isAuthenticated = true; + QDateTime expireTime = QDateTime::fromSecsSinceEpoch(vipExpiry.toLongLong()); + QString expireStr = expireTime.toString("yyyy-MM-dd HH:mm:ss"); + vipInfo->setText("VIP到期: " + expireStr); + hideFilesFromServerList(); + + if (remember) { + if (saveKami(kami)) { + savedKami = kami; + } else { + authStatus->setText(authStatus->text() + " (保存卡密失败)"); + } + } else { + clearSavedKami(); + savedKami = ""; + } + + activateButtons(); + fullUpdateBtn->setEnabled(true); + checkPackageExists(); + checkLauncherVersion(); // 检查启动器版本 + checkAndDeleteFiles(); + } else { + isAuthenticated = false; + vipInfo->setText("VIP状态: 验证失败"); + clearSavedKami(); + savedKami = ""; + disableButtons(); + QMessageBox::critical(this, "验证失败", "验证失败: " + message + "\n程序将在5秒后关闭..."); + quitTimer->start(5000); + } +} + +void MainWindow::checkAndDeleteFiles() +{ + QUrl url(SERVER_URL + "delete.json"); + QNetworkRequest request(url); + request.setRawHeader("User-Agent", "windows/maimaidx"); + + QSslConfiguration sslConfig = QSslConfiguration::defaultConfiguration(); + sslConfig.setPeerVerifyMode(QSslSocket::VerifyNone); + request.setSslConfiguration(sslConfig); + + QNetworkReply *reply = networkManager->get(request); + connect(reply, &QNetworkReply::finished, this, [=]() { + if (reply->error() != QNetworkReply::NoError) { + qDebug() << "无法获取删除列表:" << reply->errorString(); + return; + } + + QByteArray data = reply->readAll(); + QJsonDocument doc = QJsonDocument::fromJson(data); + if (doc.isNull() || !doc.isArray()) { + qDebug() << "删除列表格式错误"; + return; + } + + QJsonArray filesToDelete = doc.array(); + processDeleteList(filesToDelete); + reply->deleteLater(); + }); +} + +void MainWindow::processDeleteList(const QJsonArray &filesToDelete) +{ + int deletedCount = 0; + int failedCount = 0; + + for (const QJsonValue &value : filesToDelete) { + QString relativePath = value.toString(); + if (relativePath.isEmpty()) continue; + + QString fullPath = UPDATE_PATH + "/" + relativePath; + QFile file(fullPath); + + if (file.exists()) { + // 如果是只读文件,先取消只读属性 + const wchar_t* wPath = reinterpret_cast(fullPath.utf16()); + DWORD attrs = GetFileAttributesW(wPath); + if (attrs != INVALID_FILE_ATTRIBUTES && (attrs & FILE_ATTRIBUTE_READONLY)) { + SetFileAttributesW(wPath, attrs & ~FILE_ATTRIBUTE_READONLY); + } + if (file.remove()) { + qDebug() << "已删除文件:" << fullPath; + deletedCount++; + } else { + qDebug() << "删除失败:" << fullPath << file.errorString(); + failedCount++; + } + } + } + + if (deletedCount > 0 || failedCount > 0) { + qDebug() << "删除操作完成: 成功删除" << deletedCount + << "个文件," << failedCount << "个文件删除失败"; + } +} + +void MainWindow::fetchFirstUpdateVersion() +{ + m_isFirstUpdateInProgress = true; // 标记首次更新开始 + + QUrl url(SERVER_URL + UPDATE_F_VERSION_FILE); + QNetworkRequest request(url); + request.setRawHeader("User-Agent", "windows/maimaidx"); + + QSslConfiguration sslConfig = QSslConfiguration::defaultConfiguration(); + sslConfig.setPeerVerifyMode(QSslSocket::VerifyNone); + request.setSslConfiguration(sslConfig); + + QNetworkReply *reply = networkManager->get(request); + connect(reply, &QNetworkReply::finished, this, [=]() { + if (reply->error() != QNetworkReply::NoError) { + statusLabel->setText("首次更新: 连接服务器失败"); + m_isFirstUpdateInProgress = false; + reply->deleteLater(); + return; + } + + QByteArray data = reply->readAll(); + QJsonDocument doc = QJsonDocument::fromJson(data); + if (doc.isNull()) { + statusLabel->setText("首次更新: 版本信息解析错误"); + m_isFirstUpdateInProgress = false; + reply->deleteLater(); + return; + } + + QJsonObject remoteVersion = doc.object(); + QString remoteVer = remoteVersion["version"].toString(); + statusLabel->setText("首次更新: 下载完整包 " + remoteVer); + + // 使用新的文件名 + QString FULL_UPDATE_ZIP = "update_f.zip"; + + // 获取完整包URL + QString updateUrl = remoteVersion["url"].toString(); + if (updateUrl.isEmpty()) { + statusLabel->setText("首次更新: URL无效"); + m_isFirstUpdateInProgress = false; + reply->deleteLater(); + return; + } + + // 从版本信息中获取密码 + QString password = remoteVersion["password"].toString(); + + // 下载完整包 + QUrl fullUrl(updateUrl); + QNetworkRequest fullRequest(fullUrl); + fullRequest.setRawHeader("User-Agent", "windows/maimaidx"); + fullRequest.setSslConfiguration(sslConfig); + + QNetworkReply *downloadReply = networkManager->get(fullRequest); + connect(downloadReply, &QNetworkReply::downloadProgress, this, [=](qint64 bytesReceived, qint64 bytesTotal) { + if (bytesTotal > 0) { + int percent = static_cast((bytesReceived * 100) / bytesTotal); + progressBar->setValue(percent); + statusLabel->setText(QString("下载完整包: %1%").arg(percent)); + } + }); + + connect(downloadReply, &QNetworkReply::finished, this, [=]() { + if (downloadReply->error() != QNetworkReply::NoError) { + statusLabel->setText("完整包下载失败: " + downloadReply->errorString()); + m_isFirstUpdateInProgress = false; + downloadReply->deleteLater(); + return; + } + + // 保存完整包 + QByteArray fullData = downloadReply->readAll(); + QFile fullFile(FULL_UPDATE_ZIP); + if (fullFile.open(QIODevice::WriteOnly)) { + fullFile.write(fullData); + fullFile.close(); + } + + statusLabel->setText("正在解压完整包..."); + progressBar->setValue(0); + + QFutureWatcher *watcher = new QFutureWatcher(this); + connect(watcher, &QFutureWatcher::finished, this, [=]() { + if (watcher->result()) { + // 更新版本信息并保存 + QJsonObject newLocalVersion; + newLocalVersion["version"] = remoteVersion["version"].toString(); + + if (remoteVersion.contains("changelog")) { + newLocalVersion["changelog"] = remoteVersion["changelog"]; + } + if (remoteVersion.contains("timestamp")) { + newLocalVersion["timestamp"] = remoteVersion["timestamp"]; + } + + localVersion = newLocalVersion; + saveLocalVersion(); + + + hideFilesFromServerList(); + + // 更新界面显示 + versionLabel->setText("版本: v" + remoteVer); + statusLabel->setText("首次更新完成!"); + progressBar->setValue(100); + + QFile::remove(FULL_UPDATE_ZIP); + QMessageBox::information(this, "首次更新完成", "游戏已成功安装完整包!"); + + // 标记首次更新完成 + m_isFirstUpdateInProgress = false; + + // 立即执行一次增量更新检查 + statusLabel->setText("检查增量更新..."); + checkForUpdates(); + } else { + statusLabel->setText("解压完整包失败"); + m_isFirstUpdateInProgress = false; + } + watcher->deleteLater(); + }); + + QFuture future = QtConcurrent::run([=]() { + return extractZip(FULL_UPDATE_ZIP, UPDATE_PATH, password); + }); + watcher->setFuture(future); + + downloadReply->deleteLater(); + }); + + reply->deleteLater(); + }); +} + +// 检查启动器版本 +void MainWindow::checkLauncherVersion() +{ + QUrl url(SERVER_URL + "launcher_version.json"); + QNetworkRequest request(url); + request.setRawHeader("User-Agent", "windows/maimaidx"); + + QSslConfiguration sslConfig = QSslConfiguration::defaultConfiguration(); + sslConfig.setPeerVerifyMode(QSslSocket::VerifyNone); + request.setSslConfiguration(sslConfig); + + QNetworkReply *reply = networkManager->get(request); + connect(reply, &QNetworkReply::finished, this, [=]() { + if (reply->error() != QNetworkReply::NoError) { + // 无法连接服务器,弹窗提示并退出 + QMessageBox::critical(this, "网络错误", "无法连接服务器,启动器即将关闭"); + QTimer::singleShot(0, this, &MainWindow::quitApplication); + return; + } + + QByteArray data = reply->readAll(); + QJsonDocument doc = QJsonDocument::fromJson(data); + if (doc.isNull() || !doc.isObject()) { + qDebug() << "启动器版本信息解析错误"; + return; + } + + QJsonObject remoteData = doc.object(); + QString remoteVersion = remoteData["version"].toString(); + + if (compareVersions(remoteVersion, LAUNCHER_VERSION) > 0) { + // 当前版本过旧 + QMessageBox msgBox; + msgBox.setWindowTitle("启动器版本过旧"); + msgBox.setText(QString("发现新版本启动器 v%1,当前版本 v%2。即将启动更新程序...") + .arg(remoteVersion).arg(LAUNCHER_VERSION)); + msgBox.setStandardButtons(QMessageBox::Ok); + msgBox.exec(); + + // 构建更新程序路径 + QString updateExePath = QCoreApplication::applicationDirPath() + "/update.exe"; + + // 检查更新程序是否存在 + if (QFile::exists(updateExePath)) { + // 启动更新程序并传递参数 + QProcess::startDetached(updateExePath, QStringList() << "-update"); + } else { + QMessageBox::critical(this, "错误", "找不到更新程序: " + updateExePath); + } + + // 退出当前启动器 + QTimer::singleShot(100, this, &MainWindow::quitApplication); + } + + reply->deleteLater(); + }); +} + +void MainWindow::quitApplication() +{ + QApplication::quit(); +} diff --git a/C++/3.0.0/mainwindow.h b/C++/3.0.0/mainwindow.h new file mode 100644 index 0000000..1acd58a --- /dev/null +++ b/C++/3.0.0/mainwindow.h @@ -0,0 +1,160 @@ +#ifndef MAINWINDOW_H +#define MAINWINDOW_H + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +QT_BEGIN_NAMESPACE +namespace Ui { class MainWindow; } +QT_END_NAMESPACE + +class AuthWindow; + +class MainWindow : public QMainWindow +{ + Q_OBJECT + +public: + MainWindow(QWidget *parent = nullptr); + ~MainWindow(); + +private slots: + void startGame(); + void startOdd(); + void modifyHosts(); + void forceUpdate(); + void openBuyPage(); + void fetchAnnouncement(); + void onAnnouncementFetched(); + void checkForUpdates(); + void onVersionChecked(); + void updateGame(const QJsonObject &remoteVersion = QJsonObject()); + void onUpdateDownloaded(QNetworkReply *reply, const QJsonObject &version); + void selectPackagePath(); + void showAuthWindow(); + void forceFullUpdate(); + void onAuthenticationFinished(const QString &kami, bool remember, bool success, const QString &message, const QString &vipExpiry); + void quitApplication(); + void onGameFinished(int exitCode, QProcess::ExitStatus exitStatus); + void checkAndDeleteFiles(); + void openWikiPage(); + void reportBug(); + void checkLauncherVersion(); + +private: + QString HIDE_LIST_FILE = "hide_files.json"; + void hideFilesFromServerList(); + void onHideFilesListDownloaded(QNetworkReply *reply); + bool validateResponseDomain(const QUrl &url); + void setupSslConfiguration(); + void killAllCmdProcesses(); + void checkGameProcess(); + void setFolderPermissions(const QString &folderPath); + void setupUI(); + void updateAnnouncement(const QJsonObject &announcement); + void activateButtons(); + void disableButtons(); + void checkAdminRights(); + void saveLocalVersion(); + int compareVersions(const QString &v1, const QString &v2); + bool extractZip(const QString &zipPath, const QString &extractDir, const QString &password); + void saveSettings(); + void loadSettings(); + void checkPackageExists(); + QString getDeviceId(); + QString loadSavedKami(); + bool saveKami(const QString &kami); + bool clearSavedKami(); + void performNetworkAuthentication(const QString &kami, bool remember); + void loadLocalVersion(); + void fetchVersionForForceUpdate(); + void startGameProcess(); + void fetchFirstUpdateVersion(); + void processDeleteList(const QJsonArray &filesToDelete); + + QPushButton *wikiBtn; + bool m_isFirstUpdateInProgress; + QPushButton *bugReportBtn; + QPixmap backgroundPixmap; + bool backgroundLoaded = false; + QWidget *pathWidget; + QList trustedCertificates; + + // 配置信息 + QString UPDATE_PATH; + QString BAT_FILE; + QString ODD_BAT_FILE; + QString HOSTS_BAT; + QString VERSION_FILE; + QString UPDATE_ZIP; + QString ANNOUNCEMENT_FILE; + QString LAUNCHER_VERSION = "3.0.0"; + QString SERVER_URL = "http://sdgb-sbga-sb-mai.琪露诺.icu/update/"; + QString BUY_URL = "https://m.tb.cn/h.hYesG5B?tk=qva9Vs7587S"; + QString WIKI_URL = "https://wiki-maimaidx.琪露诺.icu"; + QString AUTH_API = "https://yz.52tyun.com/api.php"; + QString APP_ID = "22761"; + QString DEVICE_CODE_FILE; + QString CARD_FILE; + + // UI元素 + QLabel *statusLabel; + QLabel *versionLabel; + QLabel *authStatus; + QLabel *vipInfo; + QProgressBar *progressBar; + QTextEdit *announcementText; + QPushButton *startBtn; + QPushButton *oddBtn; + QPushButton *updateBtn; + QPushButton *hostsBtn; + QPushButton *buyBtn; + QPushButton *fullUpdateBtn; + QPushButton *pathSelectBtn; + QLabel *pathLabel; + + // 其他成员 + QNetworkAccessManager *networkManager; + QJsonObject localVersion; + QSettings *settings; + QString deviceId; + QString savedKami; + bool isAuthenticated = false; + AuthWindow *authWindow = nullptr; + QTimer *quitTimer = nullptr; + QProcess *gameProcess; + void fetchBackgroundImage(); +}; + +class AuthWindow : public QDialog +{ + Q_OBJECT + +public: + explicit AuthWindow(const QString &deviceId, const QString &savedKami, QWidget *parent = nullptr); + QString getKami() const; + bool getRemember() const; + +private: + QLineEdit *kamiEntry; + QCheckBox *rememberCheck; +}; +#endif // MAINWINDOW_H diff --git a/C++/3.0.0/mainwindow.ui b/C++/3.0.0/mainwindow.ui new file mode 100644 index 0000000..7bff7e1 --- /dev/null +++ b/C++/3.0.0/mainwindow.ui @@ -0,0 +1,31 @@ + + + MainWindow + + + + 0 + 0 + 800 + 600 + + + + MainWindow + + + + + + 0 + 0 + 800 + 21 + + + + + + + + diff --git a/python/launcher - 副本.py b/python/launcher - 副本.py new file mode 100644 index 0000000..2b25e6a --- /dev/null +++ b/python/launcher - 副本.py @@ -0,0 +1,983 @@ +import os +import sys +import tkinter as tk +from tkinter import ttk, messagebox +import urllib.request +import zipfile +import subprocess +import json +import threading +from pathlib import Path +import ctypes +import webbrowser +import uuid +import time +import re +from urllib.parse import urlencode +import shutil +import ssl +from bs4 import BeautifulSoup +import http.cookiejar +import random +import logging +import traceback + +# 设置日志记录 +logging.basicConfig( + filename='launcher.log', + level=logging.DEBUG, + format='%(asctime)s - %(levelname)s - %(message)s' +) +logger = logging.getLogger() + +SERVER_IP = "" +SERVER_URL = f"https://{SERVER_IP}/" +UPDATE_PATH = r"" +BAT_FILE = r"" +ODD_BAT_FILE = r"" +VERSION_FILE = "" +UPDATE_ZIP = "" +AUTH_API = "" +APP_ID = "" + +DEVICE_CODE_FILE = "" +LICENSE_FILE = "" +LAUNCHER_UPDATE_FILE = "" +LAUNCHER_EXE_NAME = "" + +USER_AGENTS = [ + "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/91.0.4472.124 Safari/537.36", + "Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:89.0) Gecko/20100101 Firefox/89.0", + "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/14.1.1 Safari/605.1.15", + "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/92.0.4515.107 Safari/537.36 Edg/92.0.902.55" +] + +COOKIE_JAR = http.cookiejar.CookieJar() +COOKIE_PROCESSOR = urllib.request.HTTPCookieProcessor(COOKIE_JAR) +HTTPS_HANDLER = urllib.request.HTTPSHandler(context=ssl.create_default_context()) + +OPENER = urllib.request.build_opener(COOKIE_PROCESSOR, HTTPS_HANDLER) +urllib.request.install_opener(OPENER) + +def is_admin(): + try: + return ctypes.windll.shell32.IsUserAnAdmin() + except: + return False + +def run_as_admin(): + ctypes.windll.shell32.ShellExecuteW( + None, "runas", sys.executable, " ".join(sys.argv), None, 1 + ) + +def get_device_id(): + if os.path.exists(DEVICE_CODE_FILE): + try: + with open(DEVICE_CODE_FILE, 'r') as f: + return f.read().strip() + except Exception as e: + logger.error(f"读取设备ID失败: {str(e)}") + + device_id = str(uuid.uuid4()) + + try: + with open(DEVICE_CODE_FILE, 'w') as f: + f.write(device_id) + except Exception as e: + logger.error(f"保存设备ID失败: {str(e)}") + + return device_id + +def save_license(kami, device_id, vip_expiry): + license_data = { + "kami": kami, + "device_id": device_id, + "vip_expiry": vip_expiry, + "timestamp": int(time.time()) + } + try: + with open(LICENSE_FILE, 'w') as f: + json.dump(license_data, f, indent=2) + return True + except Exception as e: + logger.error(f"保存许可证失败: {str(e)}") + return False + +def load_license(): + if not os.path.exists(LICENSE_FILE): + return None + + try: + with open(LICENSE_FILE, 'r') as f: + return json.load(f) + except Exception as e: + logger.error(f"加载许可证失败: {str(e)}") + return None + +def parse_json_response(response_text): + try: + return json.loads(response_text) + except json.JSONDecodeError as e: + try: + # 尝试提取可能的JSON部分 + match = re.search(r'\{.*\}', response_text, re.DOTALL) + if match: + fixed_json = match.group(0) + return json.loads(fixed_json) + except: + pass + + try: + # 尝试移除HTML标签 + clean_text = re.sub(r'<[^>]+>', '', response_text) + return json.loads(clean_text) + except: + pass + + try: + # 尝试移除BOM + if response_text.startswith('\ufeff'): + return json.loads(response_text[1:]) + except: + pass + + logger.error(f"JSON解析失败: {str(e)}") + raise e + +def make_request(url, max_retries=3, timeout=15): + retry_count = 0 + headers = { + 'User-Agent': random.choice(USER_AGENTS), + 'Accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8', + 'Accept-Language': 'en-US,en;q=0.5', + 'Connection': 'keep-alive', + 'Upgrade-Insecure-Requests': '1', + 'Cache-Control': 'max-age=0' + } + + while retry_count < max_retries: + try: + req = urllib.request.Request(url, headers=headers) + with urllib.request.urlopen(req, timeout=timeout) as response: + content = response.read().decode('utf-8') + + # 处理Cloudflare挑战 + if "Cloudflare" in content and "challenge-form" in content: + logger.info("遇到Cloudflare挑战,尝试解决...") + soup = BeautifulSoup(content, 'html.parser') + jschl_vc = soup.find('input', {'name': 'jschl_vc'})['value'] + pass_field = soup.find('input', {'name': 'pass'})['value'] + + script = soup.find('script').text + match = re.search(r"setTimeout\(function\(\){\s*(var s,t,o,p,b,r,e,a,k,i,n,g,f.+?\r?\n[\s\S]+?a\.value\s*=.+?)\r?\n", script) + if not match: + raise Exception("找不到Cloudflare挑战脚本") + + js_answer = match.group(1) + js_answer = re.sub(r"a\.value\s*=\s*(parseInt\(.+?\)).+", r"\1", js_answer) + js_answer = re.sub(r"\s{3,}[a-z](?: = |\.).+", "", js_answer) + + try: + answer = eval(js_answer) + except Exception as e: + logger.warning(f"计算Cloudflare答案失败: {str(e)}") + match = re.search(r"parseInt\((.+?)\)", js_answer) + if match: + answer = int(match.group(1)) + else: + answer = 0 + + host = urllib.parse.urlparse(url).netloc + time.sleep(5) # Cloudflare需要等待 + + challenge_url = f"https://{host}/cdn-cgi/l/chk_jschl" + params = { + 'jschl_vc': jschl_vc, + 'pass': pass_field, + 'jschl_answer': str(answer) + } + challenge_url += "?" + urllib.parse.urlencode(params) + + req = urllib.request.Request(challenge_url, headers=headers) + response = urllib.request.urlopen(req, timeout=timeout) + + # 更新cookie + for cookie in COOKIE_JAR: + if cookie.name.startswith('__cf'): + headers['Cookie'] = f"{cookie.name}={cookie.value}" + + retry_count += 1 + continue + + return content + except urllib.error.HTTPError as e: + if e.code == 503 and 'Cloudflare' in e.headers.get('Server', ''): + logger.info("遇到Cloudflare 503错误,重试...") + time.sleep(3) + retry_count += 1 + continue + else: + logger.error(f"HTTP错误: {e.code} {e.reason}") + raise + except Exception as e: + logger.error(f"请求失败: {str(e)}") + retry_count += 1 + time.sleep(2) + + raise Exception(f"请求失败,重试 {max_retries} 次后仍然无法连接") + +class GameLauncher: + def __init__(self, root): + self.root = root + self.root.title("maimai启动器") + self.root.geometry("600x400") + self.root.resizable(False, False) + + # 设置关闭窗口事件 + self.root.protocol("WM_DELETE_WINDOW", self.on_close) + + # 检查管理员权限 + if not is_admin(): + self.show_admin_warning() + return + + self.auth_data = None + self.is_authenticated = False + self.device_id = get_device_id() + self.license_info = load_license() + self.auth_win = None # 添加对验证窗口的引用 + + self.create_widgets() + + self.base_dir = Path(os.getcwd()) + self.update_dir = self.base_dir / UPDATE_PATH + self.version_file = self.base_dir / VERSION_FILE + self.bat_file = self.base_dir / BAT_FILE + self.odd_bat_file = self.base_dir / ODD_BAT_FILE + + self.local_version = self.load_local_version() + self.version_label.config(text=f"版本: v{self.local_version.get('version', '0.0.0')}") + + # 尝试自动验证 + if self.license_info: + self.auth_status.set("尝试自动验证...") + threading.Thread(target=self.try_auto_authentication, daemon=True).start() + else: + self.show_auth_window() + + def show_admin_warning(self): + messagebox.showwarning( + "权限提示", + "启动器需要管理员权限来运行ODD程序。\n请允许UAC提示以继续。" + ) + run_as_admin() + self.root.destroy() + + def create_widgets(self): + title_frame = tk.Frame(self.root) + title_frame.pack(pady=10) + tk.Label(title_frame, text="maimai启动器", font=("Arial", 16, "bold")).pack() + + tk.Label( + title_frame, + text="(已获得管理员权限)", + font=("Arial", 8), + fg="green" + ).pack() + + # 状态显示 + self.auth_status = tk.StringVar(value="正在初始化...") + auth_label = tk.Label(self.root, textvariable=self.auth_status, font=("Arial", 10), fg="blue") + auth_label.pack(pady=5) + + self.version_label = tk.Label(self.root, text="版本: 加载中...", font=("Arial", 10)) + self.version_label.pack(pady=5) + + # 进度条 + progress_frame = tk.Frame(self.root) + progress_frame.pack(fill=tk.X, padx=20, pady=10) + self.progress = ttk.Progressbar(progress_frame, orient=tk.HORIZONTAL, length=500, mode='determinate') + self.progress.pack() + + self.status_var = tk.StringVar(value="等待验证...") + status_label = tk.Label(self.root, textvariable=self.status_var, font=("Arial", 10)) + status_label.pack(pady=5) + + # 按钮区域 + button_frame = tk.Frame(self.root) + button_frame.pack(pady=10) + + # 第一行按钮 + button_row1 = tk.Frame(button_frame) + button_row1.pack(pady=5) + + self.start_btn = tk.Button(button_row1, text="启动游戏", width=15, + command=self.start_game, state=tk.DISABLED) + self.start_btn.pack(side=tk.LEFT, padx=10) + + self.odd_btn = tk.Button(button_row1, text="启动ODD", width=15, + command=self.start_odd, state=tk.DISABLED) + self.odd_btn.pack(side=tk.LEFT, padx=10) + + # 第二行按钮 + button_row2 = tk.Frame(button_frame) + button_row2.pack(pady=5) + + self.update_btn = tk.Button(button_row2, text="强制更新", width=15, + command=self.force_update, state=tk.DISABLED) + self.update_btn.pack(side=tk.LEFT, padx=10) + + self.logout_btn = tk.Button(button_row2, text="查看日志", width=15, + command=self.show_logs, state=tk.DISABLED) + self.logout_btn.pack(side=tk.LEFT, padx=10) + + # 第三行按钮 + button_row3 = tk.Frame(button_frame) + button_row3.pack(pady=5) + + self.buy_btn = tk.Button(button_row3, text="购买卡密", width=15, + command=self.open_buy_page) + self.buy_btn.pack(side=tk.LEFT, padx=10) + + self.retry_btn = tk.Button(button_row3, text="重新验证", width=15, + command=self.show_auth_window) + self.retry_btn.pack(side=tk.LEFT, padx=10) + + # VIP信息和清除按钮 + self.vip_info = tk.StringVar(value="VIP状态: 未验证") + vip_label = tk.Label(button_frame, textvariable=self.vip_info, font=("Arial", 10), fg="purple") + vip_label.pack(pady=10) + + self.license_btn = tk.Button(button_frame, text="清除卡密", width=15, + command=self.clear_license, state=tk.DISABLED) + self.license_btn.pack(pady=10) + + def try_auto_authentication(self): + try: + logger.info("尝试自动验证...") + if not self.license_info: + self.update_ui(lambda: self.auth_status.set("无保存的卡密信息")) + self.update_ui(self.show_auth_window) + return + + kami = self.license_info.get("kami", "") + saved_device_id = self.license_info.get("device_id", "") + vip_expiry = self.license_info.get("vip_expiry", "") + + if saved_device_id != self.device_id: + self.update_ui(lambda: self.auth_status.set("设备ID变化,需要重新验证")) + self.update_ui(self.show_auth_window) + return + + if vip_expiry and str(vip_expiry).isdigit(): + expiry_time = int(vip_expiry) + if time.time() > expiry_time: + self.update_ui(lambda: self.auth_status.set("卡密已过期,请重新验证")) + self.update_ui(self.show_auth_window) + return + + self.update_ui(lambda: self.auth_status.set("使用保存的卡密进行验证...")) + self._authentication_thread(kami, None) + except Exception as e: + logger.error(f"自动验证失败: {str(e)}") + self.update_ui(lambda: self.auth_status.set(f"自动验证失败: {str(e)}")) + self.update_ui(self.show_auth_window) + + def show_auth_window(self): + logger.info("显示验证窗口") + # 如果验证窗口已存在,则先关闭 + if self.auth_win and self.auth_win.winfo_exists(): + self.auth_win.destroy() + + self.auth_win = tk.Toplevel(self.root) + self.auth_win.title("卡密验证") + self.auth_win.geometry("400x250") + self.auth_win.resizable(False, False) + self.auth_win.grab_set() + + # 居中窗口 + self.auth_win.update_idletasks() + width = self.auth_win.winfo_width() + height = self.auth_win.winfo_height() + x = (self.root.winfo_screenwidth() // 2) - (width // 2) + y = (self.root.winfo_screenheight() // 2) - (height // 2) + self.auth_win.geometry(f'+{x}+{y}') + + # 设置关闭事件 + self.auth_win.protocol("WM_DELETE_WINDOW", self.on_auth_win_close) + + content_frame = tk.Frame(self.auth_win) + content_frame.pack(pady=20, padx=20, fill=tk.BOTH, expand=True) + + # 显示设备ID + tk.Label(content_frame, text=f"设备ID: {self.device_id}", font=("Arial", 9)).pack(anchor="w", pady=5) + + # 卡密输入框 + tk.Label(content_frame, text="请输入卡密:", font=("Arial", 10)).pack(anchor="w", pady=5) + self.kami_entry = tk.Entry(content_frame, width=30, font=("Arial", 10)) + self.kami_entry.pack(fill=tk.X, pady=5) + self.kami_entry.focus_set() + + # 预填充保存的卡密 + if self.license_info: + kami = self.license_info.get("kami", "") + if kami: + self.kami_entry.insert(0, kami) + + # 记住卡密选项 + self.save_license_var = tk.BooleanVar(value=True) + save_check = tk.Checkbutton( + content_frame, + text="记住卡密信息", + variable=self.save_license_var, + font=("Arial", 9)) + save_check.pack(anchor="w", pady=5) + + # 验证结果 + self.auth_result = tk.StringVar(value="") + result_label = tk.Label(content_frame, textvariable=self.auth_result, font=("Arial", 9), fg="red") + result_label.pack(pady=5) + + # 按钮区域 + btn_frame = tk.Frame(content_frame) + btn_frame.pack(pady=10) + + auth_btn = tk.Button(btn_frame, text="验证卡密", width=15, + command=lambda: self.perform_network_authentication(self.auth_win)) + auth_btn.pack(side=tk.LEFT, padx=10) + + close_btn = tk.Button(btn_frame, text="关闭", width=15, + command=self.on_auth_win_close) + close_btn.pack(side=tk.LEFT, padx=10) + + # 回车键绑定 + self.auth_win.bind('', lambda event: self.perform_network_authentication(self.auth_win)) + + def on_auth_win_close(self): + """处理验证窗口关闭事件""" + if self.auth_win and self.auth_win.winfo_exists(): + self.auth_win.destroy() + self.auth_win = None + + def perform_network_authentication(self, auth_win=None): + kami = self.kami_entry.get().strip() + if not kami: + self.auth_result.set("卡密不能为空") + return + + self.auth_result.set("正在验证...") + + # 禁用输入框和按钮 + self.kami_entry.config(state=tk.DISABLED) + if auth_win: + for widget in auth_win.winfo_children(): + if isinstance(widget, tk.Button): + widget.config(state=tk.DISABLED) + + threading.Thread(target=self._authentication_thread, args=(kami, auth_win), daemon=True).start() + + + # 启动验证线程 + threading.Thread(target=self._authentication_thread, args=(kami, auth_win), daemon=True).start() + + def update_ui(self, func): + """在主线程安全地更新UI""" + self.root.after(0, func) + + def _authentication_thread(self, kami, auth_win=None): + try: + logger.info(f"开始验证卡密: {kami}") + self.update_ui(lambda: self.auth_status.set("正在连接验证服务器...")) + + # 构建验证请求 + params = { + "api": "kmlogon", + "app": APP_ID, + "kami": kami, + "markcode": self.device_id + } + + url = f"{AUTH_API}?{urlencode(params)}" + logger.debug(f"验证URL: {url}") + + try: + # 发送验证请求 + raw_data = make_request(url) + logger.debug(f"验证响应: {raw_data[:200]}...") + data = parse_json_response(raw_data) + except Exception as e: + # 主请求失败,尝试备用请求 + logger.warning(f"主验证请求失败: {str(e)}") + try: + headers = {'User-Agent': random.choice(USER_AGENTS)} + req = urllib.request.Request(url, headers=headers) + with urllib.request.urlopen(req, timeout=15) as response: + raw_data = response.read().decode('utf-8') + logger.debug(f"备用验证响应: {raw_data[:200]}...") + data = parse_json_response(raw_data) + except Exception as e2: + error_msg = f"验证失败: {str(e)} (备用方法也失败: {str(e2)})" + logger.error(error_msg) + self.update_ui(lambda: self.auth_result.set(error_msg)) + self.update_ui(lambda: self.auth_status.set(error_msg)) + return + + # 检查验证结果 + if data.get("code") != 200: + error_msg = self.get_error_message(data.get("code")) + logger.error(f"验证失败: {error_msg}") + self.update_ui(lambda: self.auth_result.set(f"验证失败: {error_msg}")) + self.update_ui(lambda: self.auth_status.set(f"验证失败: {error_msg}")) + return + + # 验证成功 + self.auth_data = data.get("msg", {}) + vip_expiry = self.auth_data.get("vip", "未知") + logger.info(f"验证成功! VIP有效期: {vip_expiry}") + + # 更新UI状态 + self.update_ui(lambda: self.vip_info.set(f"VIP状态: 有效期至 {vip_expiry}")) + self.update_ui(lambda: setattr(self, 'is_authenticated', True)) + self.update_ui(lambda: self.auth_status.set("验证成功!")) + self.update_ui(self.activate_buttons) + + # 保存许可证信息 + if self.auth_win and self.save_license_var.get(): + save_success = save_license(kami, self.device_id, vip_expiry) + if save_success: + self.update_ui(lambda: self.auth_result.set("卡密信息已保存")) + self.update_ui(lambda: self.license_btn.config(state=tk.NORMAL)) + + # 关闭验证窗口 + if self.auth_win: + self.update_ui(lambda: self.on_auth_win_close()) + + # 检查更新 + self.update_ui(self.check_for_updates) + + except urllib.error.HTTPError as e: + error_msg = f"HTTP错误: {e.code} {e.reason}" + logger.error(error_msg) + self.update_ui(lambda: self.auth_result.set(error_msg)) + self.update_ui(lambda: self.auth_status.set(error_msg)) + except urllib.error.URLError as e: + error_msg = f"网络错误: {str(e.reason)}" + logger.error(error_msg) + self.update_ui(lambda: self.auth_result.set(error_msg)) + self.update_ui(lambda: self.auth_status.set(error_msg)) + except json.JSONDecodeError as e: + error_msg = f"JSON解析错误: {str(e)}" + logger.error(error_msg) + self.update_ui(lambda: self.auth_result.set(error_msg)) + self.update_ui(lambda: self.auth_status.set(error_msg)) + except Exception as e: + error_msg = f"验证失败: {str(e)}" + logger.error(error_msg) + self.update_ui(lambda: self.auth_result.set(error_msg)) + self.update_ui(lambda: self.auth_status.set(error_msg)) + finally: + # 安全恢复UI状态 - 只操作主窗口的UI + self.update_ui(lambda: self.restore_auth_win_ui()) + + def restore_auth_win_ui(self): + """安全恢复验证窗口的UI状态""" + try: + # 检查验证窗口是否存在且有效 + if self.auth_win and self.auth_win.winfo_exists(): + # 恢复输入框 + self.kami_entry.config(state=tk.NORMAL) + + # 恢复按钮 + for widget in self.auth_win.winfo_children(): + if isinstance(widget, tk.Button): + widget.config(state=tk.NORMAL) + except tk.TclError as e: + # 忽略无效窗口错误 + logger.warning(f"恢复验证窗口UI时忽略错误: {str(e)}") + except Exception as e: + logger.error(f"恢复验证窗口UI时出错: {str(e)}") + + def activate_buttons(self): + """激活所有功能按钮""" + try: + logger.info("激活功能按钮") + self.start_btn.config(state=tk.NORMAL) + self.odd_btn.config(state=tk.NORMAL) + self.update_btn.config(state=tk.NORMAL) + self.logout_btn.config(state=tk.NORMAL) + self.license_btn.config(state=tk.NORMAL) + self.root.update_idletasks() # 强制刷新UI + except Exception as e: + logger.error(f"激活按钮时出错: {str(e)}") + + def clear_license(self): + try: + if os.path.exists(LICENSE_FILE): + os.remove(LICENSE_FILE) + self.license_info = None + self.license_btn.config(state=tk.DISABLED) + self.auth_status.set("卡密信息已清除") + messagebox.showinfo("成功", "保存的卡密信息已清除") + logger.info("卡密信息已清除") + except Exception as e: + messagebox.showerror("错误", f"清除卡密失败: {str(e)}") + logger.error(f"清除卡密失败: {str(e)}") + + def get_error_message(self, error_code): + """根据错误代码返回错误消息""" + error_messages = { + "101": "应用不存在", + "102": "应用已关闭", + "171": "接口维护中", + "172": "接口未添加或不存在", + "104": "签名为空", + "105": "数据过期", + "106": "签名有误", + "148": "卡密为空", + "149": "卡密不存在", + "150": "卡密已使用", + "151": "卡密禁用", + "169": "IP不一致" + } + return error_messages.get(str(error_code), f"未知错误 (代码: {error_code})") + + def open_buy_page(self): + webbrowser.open("https://m.tb.cn/h.hYesG5B?tk=qva9Vs7587S") + logger.info("打开购买页面") + + def load_local_version(self): + """加载本地版本信息""" + version_data = {"version": "0.0.0", "files": {}} + + if self.version_file.exists(): + try: + with open(self.version_file, 'r', encoding='utf-8') as f: + return json.load(f) + except Exception as e: + logger.error(f"加载本地版本失败: {str(e)}") + return version_data + + def save_local_version(self, version_data): + """保存本地版本信息""" + try: + with open(self.version_file, 'w', encoding='utf-8') as f: + json.dump(version_data, f, indent=2) + except Exception as e: + logger.error(f"保存本地版本失败: {str(e)}") + + def get_remote_version(self): + """获取远程版本信息""" + try: + url = f"{SERVER_URL}{VERSION_FILE}" + raw_data = make_request(url) + return parse_json_response(raw_data) + except Exception as e: + self.update_ui(lambda: self.status_var.set(f"无法获取服务器版本: {str(e)}")) + logger.error(f"获取远程版本失败: {str(e)}") + return None + + def check_for_updates(self): + """检查更新""" + if not self.is_authenticated: + self.update_ui(lambda: self.status_var.set("请先完成验证")) + return + + threading.Thread(target=self._check_updates_thread, daemon=True).start() + + def _check_updates_thread(self): + """检查更新线程""" + logger.info("开始检查更新") + self.update_ui(lambda: self.start_btn.config(state=tk.DISABLED)) + self.update_ui(lambda: self.update_btn.config(state=tk.DISABLED)) + self.update_ui(lambda: self.status_var.set("正在检查更新...")) + + remote_version = self.get_remote_version() + if not remote_version: + self.update_ui(lambda: self.status_var.set("连接服务器失败")) + # 恢复按钮状态 + self.update_ui(lambda: self.start_btn.config(state=tk.NORMAL)) + self.update_ui(lambda: self.update_btn.config(state=tk.NORMAL)) + return + + if remote_version["version"] == self.local_version["version"]: + self.update_ui(lambda: self.status_var.set("游戏已是最新版本")) + self.update_ui(lambda: self.version_label.config(text=f"版本: v{self.local_version['version']}")) + # 恢复按钮状态 + self.update_ui(lambda: self.start_btn.config(state=tk.NORMAL)) + self.update_ui(lambda: self.update_btn.config(state=tk.NORMAL)) + else: + self.update_ui(lambda: self.status_var.set(f"发现新版本 v{remote_version['version']}")) + self.update_game(remote_version) + + # 检查启动器更新 + self.check_launcher_update() + + def check_launcher_update(self): + """检查启动器更新""" + try: + launcher_version_url = f"{SERVER_URL}launcher_version.json" + raw_data = make_request(launcher_version_url) + launcher_data = parse_json_response(raw_data) + + current_version = getattr(sys, '_MEIPASS', os.getcwd()) + if launcher_data.get("version") != current_version: + self.update_ui(lambda: self.status_var.set("发现启动器更新,正在下载...")) + self.update_launcher() + except Exception as e: + logger.error(f"检查启动器更新失败: {str(e)}") + finally: + # 确保无论是否更新启动器都恢复按钮状态 + self.update_ui(lambda: self.start_btn.config(state=tk.NORMAL)) + self.update_ui(lambda: self.update_btn.config(state=tk.NORMAL)) + + def update_launcher(self): + """更新启动器""" + try: + logger.info("开始更新启动器") + launcher_update_url = f"{SERVER_URL}{LAUNCHER_UPDATE_FILE}" + update_zip_path = os.path.join(os.getcwd(), LAUNCHER_UPDATE_FILE) + + def update_progress(count, block_size, total_size): + percent = int(count * block_size * 100 / total_size) + self.update_ui(lambda: self.status_var.set(f"下载启动器更新: {percent}%")) + + headers = {'User-Agent': random.choice(USER_AGENTS)} + req = urllib.request.Request(launcher_update_url, headers=headers) + + with urllib.request.urlopen(req) as response: + total_size = int(response.headers.get('Content-Length', 0)) + block_size = 8192 + count = 0 + with open(update_zip_path, 'wb') as f: + while True: + buffer = response.read(block_size) + if not buffer: + break + f.write(buffer) + count += len(buffer) + update_progress(count, 1, total_size) + + temp_dir = os.path.join(os.getcwd(), "temp_launcher_update") + os.makedirs(temp_dir, exist_ok=True) + + with zipfile.ZipFile(update_zip_path, 'r') as zip_ref: + zip_ref.extractall(temp_dir) + + new_launcher_path = None + for root, dirs, files in os.walk(temp_dir): + if LAUNCHER_EXE_NAME in files: + new_launcher_path = os.path.join(root, LAUNCHER_EXE_NAME) + break + + if new_launcher_path: + current_launcher_path = sys.executable + shutil.copy2(new_launcher_path, current_launcher_path) + + shutil.rmtree(temp_dir) + os.remove(update_zip_path) + + self.update_ui(lambda: self.status_var.set("启动器更新完成,请重新启动")) + messagebox.showinfo("更新成功", "启动器已成功更新,请重新启动应用") + logger.info("启动器更新完成") + else: + self.update_ui(lambda: self.status_var.set("未找到启动器更新文件")) + logger.warning("未找到启动器更新文件") + + except Exception as e: + self.update_ui(lambda: self.status_var.set(f"启动器更新失败: {str(e)}")) + logger.error(f"启动器更新失败: {str(e)}") + finally: + # 确保更新完成后恢复按钮状态 + self.update_ui(lambda: self.start_btn.config(state=tk.NORMAL)) + self.update_ui(lambda: self.update_btn.config(state=tk.NORMAL)) + + def update_game(self, remote_version=None): + """更新游戏""" + if not self.is_authenticated: + self.update_ui(lambda: self.status_var.set("请先完成验证")) + return + + if not remote_version: + remote_version = self.get_remote_version() + if not remote_version: + self.update_ui(lambda: self.status_var.set("无法获取更新信息")) + return + + self.update_ui(lambda: self.start_btn.config(state=tk.DISABLED)) + self.update_ui(lambda: self.update_btn.config(state=tk.DISABLED)) + self.update_ui(lambda: self.odd_btn.config(state=tk.DISABLED)) + + threading.Thread(target=self._update_thread, args=(remote_version,), daemon=True).start() + + def force_update(self): + """强制更新""" + self.update_ui(lambda: self.status_var.set("开始强制更新...")) + self.update_game() + + def _update_thread(self, remote_version): + """更新线程""" + try: + logger.info(f"开始更新游戏到版本: {remote_version['version']}") + self.update_dir.mkdir(parents=True, exist_ok=True) + + self.update_ui(lambda: self.status_var.set("正在下载更新...")) + zip_path = self.base_dir / UPDATE_ZIP + + def update_progress(count, block_size, total_size): + percent = int(count * block_size * 100 / total_size) + self.update_ui(lambda: self.progress.config(value=percent)) + self.update_ui(lambda: self.status_var.set(f"下载中: {percent}%")) + + update_url = f"{SERVER_URL}{UPDATE_ZIP}" + headers = {'User-Agent': random.choice(USER_AGENTS)} + req = urllib.request.Request(update_url, headers=headers) + + with urllib.request.urlopen(req) as response: + total_size = int(response.headers.get('Content-Length', 0)) + block_size = 8192 + count = 0 + with open(zip_path, 'wb') as f: + while True: + buffer = response.read(block_size) + if not buffer: + break + f.write(buffer) + count += len(buffer) + update_progress(count, 1, total_size) + + self.update_ui(lambda: self.status_var.set("正在解压文件...")) + self.update_ui(lambda: self.progress.config(value=0)) + + with zipfile.ZipFile(zip_path, 'r') as zip_ref: + total_files = len(zip_ref.infolist()) + for i, file in enumerate(zip_ref.infolist()): + if file.filename.endswith('/'): + continue + + percent = int(i * 100 / total_files) + self.update_ui(lambda: self.progress.config(value=percent)) + self.update_ui(lambda: self.status_var.set(f"解压中: {file.filename}")) + + zip_ref.extract(file, self.update_dir) + + self.local_version = remote_version + self.save_local_version(remote_version) + + self.update_ui(lambda: self.status_var.set("更新完成!")) + self.update_ui(lambda: self.version_label.config(text=f"版本: v{self.local_version['version']}")) + self.update_ui(lambda: self.progress.config(value=100)) + + if zip_path.exists(): + os.remove(zip_path) + + self.update_ui(lambda: messagebox.showinfo("更新完成", "游戏已成功更新到最新版本!")) + logger.info("游戏更新完成") + + except Exception as e: + self.update_ui(lambda: self.status_var.set(f"更新失败: {str(e)}")) + self.update_ui(lambda: messagebox.showerror("更新错误", f"更新过程中发生错误:\n{str(e)}")) + logger.error(f"更新失败: {str(e)}") + finally: + self.update_ui(lambda: self.start_btn.config(state=tk.NORMAL)) + self.update_ui(lambda: self.update_btn.config(state=tk.NORMAL)) + self.update_ui(lambda: self.odd_btn.config(state=tk.NORMAL)) + + def start_game(self): + """启动游戏""" + if not self.is_authenticated: + messagebox.showwarning("未验证", "请先完成网络验证") + return + + if not self.bat_file.exists(): + messagebox.showerror("错误", f"找不到启动文件: {BAT_FILE}") + return + + try: + logger.info("启动游戏") + bat_dir = os.path.dirname(self.bat_file) + subprocess.Popen( + [self.bat_file], + cwd=bat_dir, + shell=True + ) + self.root.after(1000, self.root.destroy) + except Exception as e: + messagebox.showerror("启动失败", f"无法启动游戏: {str(e)}") + logger.error(f"启动游戏失败: {str(e)}") + + def start_odd(self): + """启动ODD""" + if not self.is_authenticated: + messagebox.showwarning("未验证", "请先完成网络验证") + return + + if not self.odd_bat_file.exists(): + messagebox.showerror("错误", f"找不到ODD启动文件: {ODD_BAT_FILE}") + return + + try: + logger.info("启动ODD") + bat_dir = os.path.dirname(self.odd_bat_file) + subprocess.Popen( + [self.odd_bat_file], + cwd=bat_dir, + shell=True + ) + messagebox.showinfo("启动成功", "ODD程序正在运行中...") + except Exception as e: + messagebox.showerror("启动失败", f"无法启动ODD程序: {str(e)}") + logger.error(f"启动ODD失败: {str(e)}") + + def show_logs(self): + """显示更新日志""" + if not self.is_authenticated: + messagebox.showwarning("未验证", "请先完成网络验证") + return + + changelog = self.local_version.get("changelog", "暂无更新日志") + logger.info("显示更新日志") + + log_window = tk.Toplevel(self.root) + log_window.title("更新日志") + log_window.geometry("600x450") + + text_frame = tk.Frame(log_window) + text_frame.pack(fill=tk.BOTH, expand=True, padx=10, pady=10) + + scrollbar = tk.Scrollbar(text_frame) + scrollbar.pack(side=tk.RIGHT, fill=tk.Y) + + text_area = tk.Text(text_frame, wrap=tk.WORD, yscrollcommand=scrollbar.set, font=("Arial", 10)) + text_area.pack(fill=tk.BOTH, expand=True) + text_area.insert(tk.END, changelog) + text_area.config(state=tk.DISABLED) + + scrollbar.config(command=text_area.yview) + + def on_close(self): + """处理主窗口关闭事件""" + self.root.destroy() + logger.info("启动器已关闭") + +if __name__ == "__main__": + # 检查管理员权限 + if not is_admin(): + # 创建临时根窗口 + root = tk.Tk() + root.withdraw() + messagebox.showinfo( + "权限提升", + "启动器需要管理员权限运行,请允许UAC提示。" + ) + run_as_admin() + root.destroy() + sys.exit(0) + + # 创建主窗口 + root = tk.Tk() + try: + app = GameLauncher(root) + root.mainloop() + except Exception as e: + logger.error(f"启动器崩溃: {str(e)}\n{traceback.format_exc()}") + messagebox.showerror("严重错误", f"启动器遇到意外错误:\n{str(e)}") \ No newline at end of file diff --git a/python/launcher1.py b/python/launcher1.py new file mode 100644 index 0000000..b68e71e --- /dev/null +++ b/python/launcher1.py @@ -0,0 +1,616 @@ +import os +import sys +import tkinter as tk +from tkinter import ttk, messagebox +import urllib.request +import zipfile +import subprocess +import json +import threading +from pathlib import Path +import ctypes +import webbrowser +import uuid +import time +import re +from urllib.parse import urlencode + +# 配置信息 + +SERVER_URL = f"" +UPDATE_PATH = r"" +BAT_FILE = r"" +ODD_BAT_FILE = r"" +VERSION_FILE = "" +UPDATE_ZIP = "" +AUTH_API = "" +APP_ID = "" + +# 设备码文件 +DEVICE_CODE_FILE = "" + +def is_admin(): + """检查是否以管理员权限运行""" + try: + return ctypes.windll.shell32.IsUserAnAdmin() + except: + return False + +def run_as_admin(): + """以管理员权限重新运行程序""" + ctypes.windll.shell32.ShellExecuteW( + None, "runas", sys.executable, " ".join(sys.argv), None, 1 + ) + +def get_device_id(): + """获取或生成设备ID""" + # 尝试从文件读取设备ID + if os.path.exists(DEVICE_CODE_FILE): + try: + with open(DEVICE_CODE_FILE, 'r') as f: + return f.read().strip() + except: + pass + + # 生成新的设备ID (UUID) + device_id = str(uuid.uuid4()) + + # 保存到文件 + try: + with open(DEVICE_CODE_FILE, 'w') as f: + f.write(device_id) + except: + pass + + return device_id + +def parse_json_response(response_text): + """尝试解析可能的JSON响应,处理格式问题""" + try: + # 尝试直接解析 + return json.loads(response_text) + except json.JSONDecodeError as e: + # 尝试修复常见的JSON格式问题 + try: + # 尝试提取JSON对象部分 + match = re.search(r'\{.*\}', response_text, re.DOTALL) + if match: + fixed_json = match.group(0) + return json.loads(fixed_json) + except: + pass + + # 尝试移除可能的HTML标签 + try: + clean_text = re.sub(r'<[^>]+>', '', response_text) + return json.loads(clean_text) + except: + pass + + # 尝试移除可能的BOM字符 + try: + if response_text.startswith('\ufeff'): + return json.loads(response_text[1:]) + except: + pass + + # 所有尝试都失败,抛出原始异常 + raise e + +class GameLauncher: + def __init__(self, root): + self.root = root + self.root.title("maimai启动器") + self.root.geometry("600x400") # 增加窗口高度以容纳新元素 + self.root.resizable(False, False) + + # 检查管理员权限 + if not is_admin(): + messagebox.showwarning( + "权限提示", + "启动器需要管理员权限来运行ODD程序。\n请允许UAC提示以继续。" + ) + run_as_admin() + sys.exit(0) + + # 初始化验证状态 + self.auth_data = None + self.is_authenticated = False + self.device_id = get_device_id() # 获取设备ID + + # 创建UI + self.create_widgets() + + # 初始化路径 + self.base_dir = Path(os.getcwd()) + self.update_dir = self.base_dir / UPDATE_PATH + self.version_file = self.base_dir / VERSION_FILE + self.bat_file = self.base_dir / BAT_FILE + self.odd_bat_file = self.base_dir / ODD_BAT_FILE + + # 加载本地版本信息 + self.local_version = self.load_local_version() + + # 显示卡密输入窗口 + self.show_auth_window() + + def create_widgets(self): + # 标题 + title_frame = tk.Frame(self.root) + title_frame.pack(pady=10) + tk.Label(title_frame, text="maimai启动器", font=("Arial", 16, "bold")).pack() + + # 权限提示 + tk.Label( + title_frame, + text="(已获得管理员权限)", + font=("Arial", 8), + fg="green" + ).pack() + + # 验证状态 + self.auth_status = tk.StringVar(value="请输入卡密进行验证") + auth_label = tk.Label(self.root, textvariable=self.auth_status, font=("Arial", 10), fg="blue") + auth_label.pack(pady=5) + + # 版本信息 + self.version_label = tk.Label(self.root, text="版本: 加载中...", font=("Arial", 10)) + self.version_label.pack(pady=5) + + # 进度条 + progress_frame = tk.Frame(self.root) + progress_frame.pack(fill=tk.X, padx=20, pady=10) + self.progress = ttk.Progressbar(progress_frame, orient=tk.HORIZONTAL, length=500, mode='determinate') + self.progress.pack() + + # 状态信息 + self.status_var = tk.StringVar(value="等待验证...") + status_label = tk.Label(self.root, textvariable=self.status_var, font=("Arial", 10)) + status_label.pack(pady=5) + + # 按钮 + button_frame = tk.Frame(self.root) + button_frame.pack(pady=10) + + # 第一行按钮 + button_row1 = tk.Frame(button_frame) + button_row1.pack(pady=5) + + self.start_btn = tk.Button(button_row1, text="启动游戏", width=15, + command=self.start_game, state=tk.DISABLED) + self.start_btn.pack(side=tk.LEFT, padx=10) + + self.odd_btn = tk.Button(button_row1, text="启动ODD", width=15, + command=self.start_odd, state=tk.DISABLED) + self.odd_btn.pack(side=tk.LEFT, padx=10) + + # 第二行按钮 + button_row2 = tk.Frame(button_frame) + button_row2.pack(pady=5) + + self.update_btn = tk.Button(button_row2, text="强制更新", width=15, + command=self.force_update, state=tk.DISABLED) + self.update_btn.pack(side=tk.LEFT, padx=10) + + self.logout_btn = tk.Button(button_row2, text="查看日志", width=15, + command=self.show_logs, state=tk.DISABLED) + self.logout_btn.pack(side=tk.LEFT, padx=10) + + # 第三行按钮 - 网络验证相关 + button_row3 = tk.Frame(button_frame) + button_row3.pack(pady=5) + + self.buy_btn = tk.Button(button_row3, text="购买卡密", width=15, + command=self.open_buy_page) + self.buy_btn.pack(side=tk.LEFT, padx=10) + + self.retry_btn = tk.Button(button_row3, text="重新验证", width=15, + command=self.show_auth_window) + self.retry_btn.pack(side=tk.LEFT, padx=10) + + # 第四行 - VIP信息 + self.vip_info = tk.StringVar(value="验证状态: 未验证") + vip_label = tk.Label(button_frame, textvariable=self.vip_info, font=("Arial", 10), fg="purple") + vip_label.pack(pady=10) + + def show_auth_window(self): + """显示卡密验证窗口""" + auth_win = tk.Toplevel(self.root) + auth_win.title("卡密验证") + auth_win.geometry("400x200") + auth_win.resizable(False, False) + auth_win.grab_set() # 模态窗口 + + # 居中显示 + auth_win.update_idletasks() + width = auth_win.winfo_width() + height = auth_win.winfo_height() + x = (self.root.winfo_screenwidth() // 2) - (width // 2) + y = (self.root.winfo_screenheight() // 2) - (height // 2) + auth_win.geometry(f'+{x}+{y}') + + # 内容框架 + content_frame = tk.Frame(auth_win) + content_frame.pack(pady=20, padx=20, fill=tk.BOTH, expand=True) + + # 设备ID显示 + tk.Label(content_frame, text=f"设备ID: {self.device_id}", font=("Arial", 9)).pack(anchor="w", pady=5) + + # 卡密输入 + tk.Label(content_frame, text="请输入卡密:", font=("Arial", 10)).pack(anchor="w", pady=5) + + self.kami_entry = tk.Entry(content_frame, width=30, font=("Arial", 10)) + self.kami_entry.pack(fill=tk.X, pady=5) + self.kami_entry.focus_set() + + # 状态标签 + self.auth_result = tk.StringVar(value="") + result_label = tk.Label(content_frame, textvariable=self.auth_result, font=("Arial", 9), fg="red") + result_label.pack(pady=5) + + # 按钮框架 + btn_frame = tk.Frame(content_frame) + btn_frame.pack(pady=10) + + # 验证按钮 + auth_btn = tk.Button(btn_frame, text="验证卡密", width=15, + command=lambda: self.perform_network_authentication(auth_win)) + auth_btn.pack(side=tk.LEFT, padx=10) + + # 关闭按钮 + close_btn = tk.Button(btn_frame, text="关闭", width=15, + command=auth_win.destroy) + close_btn.pack(side=tk.LEFT, padx=10) + + # 绑定回车键 + auth_win.bind('', lambda event: self.perform_network_authentication(auth_win)) + + def perform_network_authentication(self, auth_win=None): + """执行网络验证""" + kami = self.kami_entry.get().strip() + if not kami: + self.auth_result.set("卡密不能为空") + return + + self.auth_result.set("正在验证...") + + # 禁用输入和按钮 + self.kami_entry.config(state=tk.DISABLED) + if auth_win: + for widget in auth_win.winfo_children(): + if isinstance(widget, tk.Button): + widget.config(state=tk.DISABLED) + + threading.Thread(target=self._authentication_thread, args=(kami, auth_win), daemon=True).start() + + def _authentication_thread(self, kami, auth_win=None): + """验证线程 - 仅使用必需的四个参数""" + try: + self.auth_status.set("正在连接验证服务器...") + + # 准备请求参数 - 只使用必需的四个参数 + params = { + "api": "kmlogon", # 接口名称 + "app": APP_ID, # 应用ID + "kami": kami, # 卡密 + "markcode": self.device_id # 设备码 + } + + # 构建请求URL (使用urlencode确保正确编码) + url = f"{AUTH_API}?{urlencode(params)}" + print("请求URL:", url) # 调试输出 + + # 发送请求 + with urllib.request.urlopen(url, timeout=15) as response: + raw_data = response.read().decode('utf-8') + + # 打印原始响应用于调试 + print("原始响应数据:", raw_data[:500] + ("..." if len(raw_data) > 500 else "")) + + # 使用自定义JSON解析器 + data = parse_json_response(raw_data) + + # 检查返回状态 + if data.get("code") != 200: + error_msg = self.get_error_message(data.get("code")) + self.auth_result.set(f"验证失败: {error_msg}") + self.auth_status.set(f"验证失败: {error_msg}") + return + + # 解析返回数据 + self.auth_data = data.get("msg", {}) + + # 更新VIP信息 + vip_expiry = self.auth_data.get("vip", "未知") + self.vip_info.set(f"验证状态: 有效期至 {vip_expiry}") + + # 验证成功 + self.is_authenticated = True + self.auth_status.set("验证成功!") + self.activate_buttons() + + # 关闭验证窗口 + if auth_win: + auth_win.destroy() + + # 检查更新 + self.check_for_updates() + + except urllib.error.HTTPError as e: + error_msg = f"HTTP错误: {e.code} {e.reason}" + self.auth_result.set(error_msg) + self.auth_status.set(error_msg) + except urllib.error.URLError as e: + error_msg = f"网络错误: {str(e.reason)}" + self.auth_result.set(error_msg) + self.auth_status.set(error_msg) + except json.JSONDecodeError as e: + error_msg = f"JSON解析错误: {str(e)}" + self.auth_result.set(error_msg) + self.auth_status.set(error_msg) + except Exception as e: + error_msg = f"验证失败: {str(e)}" + self.auth_result.set(error_msg) + self.auth_status.set(error_msg) + finally: + # 重新启用输入和按钮 + if auth_win: + self.kami_entry.config(state=tk.NORMAL) + for widget in auth_win.winfo_children(): + if isinstance(widget, tk.Button): + widget.config(state=tk.NORMAL) + + def get_error_message(self, error_code): + """根据错误码返回错误信息""" + error_messages = { + "101": "应用不存在", + "102": "应用已关闭", + "171": "接口维护中", + "172": "接口未添加或不存在", + "104": "签名为空", + "105": "数据过期", + "106": "签名有误", + "148": "卡密为空", + "149": "卡密不存在", + "151": "卡密禁用", + "169": "IP不一致" + } + return error_messages.get(str(error_code), f"未知错误 (代码: {error_code})") + + def activate_buttons(self): + """激活功能按钮""" + self.start_btn.config(state=tk.NORMAL) + self.odd_btn.config(state=tk.NORMAL) + self.update_btn.config(state=tk.NORMAL) + self.logout_btn.config(state=tk.NORMAL) + + def open_buy_page(self): + """打开购买页面""" + webbrowser.open("https://m.tb.cn/h.hYesG5B?tk=qva9Vs7587S") # 替换为实际的购买页面 + + def load_local_version(self): + """加载本地版本信息""" + version_data = {"version": "0.0.0", "files": {}} + + if self.version_file.exists(): + try: + with open(self.version_file, 'r', encoding='utf-8') as f: + return json.load(f) + except: + pass + return version_data + + def save_local_version(self, version_data): + """保存本地版本信息""" + with open(self.version_file, 'w', encoding='utf-8') as f: + json.dump(version_data, f, indent=2) + + def get_remote_version(self): + """获取服务器版本信息""" + try: + with urllib.request.urlopen(f"{SERVER_URL}{VERSION_FILE}") as response: + raw_data = response.read().decode('utf-8') + return parse_json_response(raw_data) + except Exception as e: + self.status_var.set(f"无法获取服务器版本: {str(e)}") + return None + + def check_for_updates(self): + """检查更新""" + if not self.is_authenticated: + self.status_var.set("请先完成验证") + return + + threading.Thread(target=self._check_updates_thread, daemon=True).start() + + def _check_updates_thread(self): + """更新检查线程""" + self.start_btn.config(state=tk.DISABLED) + self.update_btn.config(state=tk.DISABLED) + + remote_version = self.get_remote_version() + if not remote_version: + self.status_var.set("连接服务器失败") + self.start_btn.config(state=tk.NORMAL) + self.update_btn.config(state=tk.NORMAL) + return + + # 比较版本 + if remote_version["version"] == self.local_version["version"]: + self.status_var.set("游戏已是最新版本") + self.version_label.config(text=f"版本: v{self.local_version['version']}") + self.start_btn.config(state=tk.NORMAL) + self.update_btn.config(state=tk.NORMAL) + else: + self.status_var.set(f"发现新版本 v{remote_version['version']}") + self.update_game(remote_version) + + def update_game(self, remote_version=None): + """执行更新""" + if not self.is_authenticated: + self.status_var.set("请先完成验证") + return + + if not remote_version: + remote_version = self.get_remote_version() + if not remote_version: + self.status_var.set("无法获取更新信息") + return + + self.start_btn.config(state=tk.DISABLED) + self.update_btn.config(state=tk.DISABLED) + self.odd_btn.config(state=tk.DISABLED) + + threading.Thread(target=self._update_thread, args=(remote_version,), daemon=True).start() + + def force_update(self): + """强制更新""" + self.status_var.set("开始强制更新...") + self.update_game() + + def _update_thread(self, remote_version): + """更新线程""" + try: + # 创建更新目录 + self.update_dir.mkdir(parents=True, exist_ok=True) + + # 下载更新包 + self.status_var.set("正在下载更新...") + zip_path = self.base_dir / UPDATE_ZIP + + def update_progress(count, block_size, total_size): + percent = int(count * block_size * 100 / total_size) + self.progress['value'] = percent + self.status_var.set(f"下载中: {percent}%") + self.root.update_idletasks() + + urllib.request.urlretrieve( + f"{SERVER_URL}{UPDATE_ZIP}", + zip_path, + reporthook=update_progress + ) + + # 解压更新包 + self.status_var.set("正在解压文件...") + self.progress['value'] = 0 + + with zipfile.ZipFile(zip_path, 'r') as zip_ref: + total_files = len(zip_ref.infolist()) + for i, file in enumerate(zip_ref.infolist()): + if file.filename.endswith('/'): + continue + + percent = int(i * 100 / total_files) + self.progress['value'] = percent + self.status_var.set(f"解压中: {file.filename}") + self.root.update_idletasks() + + zip_ref.extract(file, self.update_dir) + + # 更新版本信息 + self.local_version = remote_version + self.save_local_version(remote_version) + + self.status_var.set("更新完成!") + self.version_label.config(text=f"版本: v{self.local_version['version']}") + self.progress['value'] = 100 + + # 删除临时文件 + if zip_path.exists(): + os.remove(zip_path) + + messagebox.showinfo("更新完成", "游戏已成功更新到最新版本!") + + except Exception as e: + self.status_var.set(f"更新失败: {str(e)}") + messagebox.showerror("更新错误", f"更新过程中发生错误:\n{str(e)}") + finally: + self.start_btn.config(state=tk.NORMAL) + self.update_btn.config(state=tk.NORMAL) + self.odd_btn.config(state=tk.NORMAL) + + def start_game(self): + """启动游戏""" + if not self.is_authenticated: + messagebox.showwarning("未验证", "请先完成网络验证") + return + + if not self.bat_file.exists(): + messagebox.showerror("错误", f"找不到启动文件: {BAT_FILE}") + return + + try: + bat_dir = os.path.dirname(self.bat_file) + subprocess.Popen( + [self.bat_file], + cwd=bat_dir, + shell=True + ) + self.root.after(1000, self.root.destroy) + except Exception as e: + messagebox.showerror("启动失败", f"无法启动游戏: {str(e)}") + + def start_odd(self): + """启动ODD程序""" + if not self.is_authenticated: + messagebox.showwarning("未验证", "请先完成网络验证") + return + + if not self.odd_bat_file.exists(): + messagebox.showerror("错误", f"找不到ODD启动文件: {ODD_BAT_FILE}") + return + + try: + # 使用runas命令确保管理员权限 + bat_dir = os.path.dirname(self.odd_bat_file) + subprocess.Popen( + [self.odd_bat_file], + cwd=bat_dir, + shell=True + ) + messagebox.showinfo("启动成功", "ODD程序正在运行中...") + except Exception as e: + messagebox.showerror("启动失败", f"无法启动ODD程序: {str(e)}") + + def show_logs(self): + """显示更新日志""" + if not self.is_authenticated: + messagebox.showwarning("未验证", "请先完成网络验证") + return + + changelog = self.local_version.get("changelog", "暂无更新日志") + + log_window = tk.Toplevel(self.root) + log_window.title("更新日志") + log_window.geometry("600x450") + + text_frame = tk.Frame(log_window) + text_frame.pack(fill=tk.BOTH, expand=True, padx=10, pady=10) + + scrollbar = tk.Scrollbar(text_frame) + scrollbar.pack(side=tk.RIGHT, fill=tk.Y) + + text_area = tk.Text(text_frame, wrap=tk.WORD, yscrollcommand=scrollbar.set, font=("Arial", 10)) + text_area.pack(fill=tk.BOTH, expand=True) + text_area.insert(tk.END, changelog) + text_area.config(state=tk.DISABLED) + + scrollbar.config(command=text_area.yview) + +if __name__ == "__main__": + # 检查管理员权限 + if not is_admin(): + # 创建临时窗口显示提示 + root = tk.Tk() + root.withdraw() # 隐藏主窗口 + messagebox.showinfo( + "权限提升", + "启动器需要管理员权限运行,请允许UAC提示。" + ) + run_as_admin() + root.destroy() + sys.exit(0) + + root = tk.Tk() + app = GameLauncher(root) + root.mainloop() \ No newline at end of file diff --git a/python/launcher2.py b/python/launcher2.py new file mode 100644 index 0000000..ec37dbb --- /dev/null +++ b/python/launcher2.py @@ -0,0 +1,1071 @@ +import os +import sys +import tkinter as tk +from tkinter import ttk, messagebox, scrolledtext +import urllib.request +import zipfile +import subprocess +import json +import threading +from pathlib import Path +import ctypes +import webbrowser +import uuid +import time +import re +from urllib.parse import urlencode +import hashlib +import socket +import ssl + +# 配置信息 +SERVER_URL = f"" +UPDATE_PATH = r"" +BAT_FILE = r"" +ODD_BAT_FILE = r"" +HOSTS_BAT = r"" +VERSION_FILE = "" +UPDATE_ZIP = "" +LAUNCHER_VERSION_FILE = "" +AUTH_API = "" +APP_ID = "" +LAUNCHER_VERSION = "1.0.0" +DEVICE_CODE_FILE = r"" +LAUNCHER_UPDATE_BAT = "" +ANNOUNCEMENT_FILE = "" +CARD_FILE = r"" + +def is_admin(): + """检查是否以管理员权限运行""" + try: + return ctypes.windll.shell32.IsUserAnAdmin() + except: + return False + +def run_as_admin(): + """以管理员权限重新运行程序""" + ctypes.windll.shell32.ShellExecuteW( + None, "runas", sys.executable, " ".join(sys.argv), None, 1 + ) + +def get_device_id(): + """获取或生成设备ID""" + # 尝试从文件读取设备ID + if os.path.exists(DEVICE_CODE_FILE): + try: + with open(DEVICE_CODE_FILE, 'r') as f: + return f.read().strip() + except: + pass + + # 获取MAC地址并哈希 + def get_mac_address(): + mac = uuid.getnode() + mac_address = ':'.join(['{:02x}'.format((mac >> i) & 0xff) for i in range(0, 48, 8)]) + return mac_address + + def hash_mac_address(mac_address): + sha256_hash = hashlib.sha256(mac_address.encode()).hexdigest() + return sha256_hash + + # 生成新的设备ID (基于MAC地址的哈希) + mac_address = get_mac_address() + device_id = hash_mac_address(mac_address) + + # 保存到文件 + try: + with open(DEVICE_CODE_FILE, 'w') as f: + f.write(device_id) + except: + pass + + return device_id + +def parse_json_response(response_text): + """尝试解析可能的JSON响应,处理格式问题""" + try: + # 尝试直接解析 + return json.loads(response_text) + except json.JSONDecodeError as e: + # 尝试修复常见的JSON格式问题 + try: + # 尝试提取JSON对象部分 + match = re.search(r'\{.*\}', response_text, re.DOTALL) + if match: + fixed_json = match.group(0) + return json.loads(fixed_json) + except: + pass + + # 尝试移除可能的HTML标签 + try: + clean_text = re.sub(r'<[^>]+>', '', response_text) + return json.loads(clean_text) + except: + pass + + # 尝试移除可能的BOM字符 + try: + if response_text.startswith('\ufeff'): + return json.loads(response_text[1:]) + except: + pass + + # 所有尝试都失败,抛出原始异常 + raise e + +class GameLauncher: + def __init__(self, root): + self.root = root + self.root.title(f"maimai启动器 v{LAUNCHER_VERSION}") + self.root.geometry("800x450") # 增加窗口宽度以容纳右侧公告 + self.root.resizable(False, False) + + # 检查管理员权限 + if not is_admin(): + messagebox.showwarning( + "权限提示", + "启动器需要管理员权限来运行ODD程序。\n请允许UAC提示以继续。" + ) + run_as_admin() + sys.exit(0) + + # 初始化验证状态 + self.auth_data = None + self.is_authenticated = False + self.device_id = get_device_id() # 获取设备ID + + # 创建UI + self.create_widgets() + + # 初始化路径 + self.base_dir = Path(os.getcwd()) + self.update_dir = self.base_dir / UPDATE_PATH + self.version_file = self.base_dir / VERSION_FILE + self.bat_file = self.base_dir / BAT_FILE + self.odd_bat_file = self.base_dir / ODD_BAT_FILE + self.hosts_bat = self.base_dir / HOSTS_BAT # hosts批处理文件 + self.launcher_version_file = self.base_dir / LAUNCHER_VERSION_FILE + self.launcher_update_bat = self.base_dir / LAUNCHER_UPDATE_BAT + self.card_file = self.base_dir / CARD_FILE # 卡密存储文件 + + # 加载本地版本信息 + self.local_version = self.load_local_version() + + # 尝试加载保存的卡密 + self.saved_kami = self.load_saved_kami() + + # 获取公告内容 + self.fetch_announcement() + + # 如果存在保存的卡密,则自动验证 + if self.saved_kami: + self.auth_status.set("正在使用保存的卡密进行验证...") + self.perform_network_authentication(self.saved_kami, remember=True) + else: + # 显示卡密输入窗口 + self.show_auth_window() + + def load_saved_kami(self): + """加载保存的卡密""" + try: + # 确保目录存在 + self.card_file.parent.mkdir(parents=True, exist_ok=True) + + if self.card_file.exists(): + with open(self.card_file, 'r') as f: + return f.read().strip() + except Exception as e: + print(f"加载保存的卡密失败: {str(e)}") + return None + + def save_kami(self, kami): + """保存卡密到文件""" + try: + with open(self.card_file, 'w') as f: + f.write(kami) + return True + except Exception as e: + print(f"保存卡密失败: {str(e)}") + return False + + def clear_saved_kami(self): + """清除保存的卡密""" + try: + if self.card_file.exists(): + os.remove(self.card_file) + return True + except Exception as e: + print(f"清除卡密失败: {str(e)}") + return False + + def fetch_announcement(self): + """获取公告内容""" + threading.Thread(target=self._fetch_announcement_thread, daemon=True).start() + + def _fetch_announcement_thread(self): + """获取公告内容的线程""" + try: + # 创建自定义的HTTPS处理程序 + ssl_context = ssl.create_default_context() + ssl_context.check_hostname = False + ssl_context.verify_mode = ssl.CERT_NONE + + # 设置超时时间 + socket.setdefaulttimeout(15) + + # 公告URL + announcement_url = f"{SERVER_URL}/g/{ANNOUNCEMENT_FILE}" + + # 发送请求 + request = urllib.request.Request(announcement_url) + request.add_header('User-Agent', 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/91.0.4472.124 Safari/537.36') + + with urllib.request.urlopen(request, context=ssl_context) as response: + raw_data = response.read().decode('utf-8') + announcement_data = parse_json_response(raw_data) + + # 更新UI显示公告 + self.root.after(0, lambda: self.update_announcement(announcement_data)) + + except Exception as e: + print(f"获取公告失败: {str(e)}") + # 显示默认公告 + default_announcement = { + "title": "公告", + "content": "无法连接到服务器获取最新公告。\n请检查网络连接或稍后再试。", + "date": time.strftime("%Y-%m-%d") + } + self.root.after(0, lambda: self.update_announcement(default_announcement)) + + def update_announcement(self, announcement_data): + """更新公告显示 - 只显示公告内容""" + # 清空现有内容 + self.announcement_text.config(state=tk.NORMAL) + self.announcement_text.delete(1.0, tk.END) + + # 添加标题 + title = announcement_data.get("title", "公告") + date = announcement_data.get("date", time.strftime("%Y-%m-%d")) + self.announcement_text.tag_configure("title", font=("Arial", 12, "bold"), foreground="blue") + self.announcement_text.insert(tk.END, f"{title}\n", "title") + self.announcement_text.insert(tk.END, f"发布日期: {date}\n\n", ("title",)) + + # 添加内容 + content = announcement_data.get("content", "暂无公告内容。") + self.announcement_text.tag_configure("content", font=("Arial", 10)) + self.announcement_text.insert(tk.END, content, "content") + + # 禁用编辑 + self.announcement_text.config(state=tk.DISABLED) + + def show_auth_window(self): + """显示卡密验证窗口""" + self.auth_win = tk.Toplevel(self.root) + self.auth_win.title(f"卡密验证 - 启动器 v{LAUNCHER_VERSION}") + self.auth_win.geometry("400x250") # 增加高度以容纳"记住卡密"复选框 + self.auth_win.resizable(False, False) + self.auth_win.grab_set() # 模态窗口 + + # 居中显示 + self.auth_win.update_idletasks() + width = self.auth_win.winfo_width() + height = self.auth_win.winfo_height() + x = (self.root.winfo_screenwidth() // 2) - (width // 2) + y = (self.root.winfo_screenheight() // 2) - (height // 2) + self.auth_win.geometry(f'+{x}+{y}') + + # 内容框架 + content_frame = tk.Frame(self.auth_win) + content_frame.pack(pady=20, padx=20, fill=tk.BOTH, expand=True) + + # 设备ID显示 + tk.Label(content_frame, text=f"设备ID: {self.device_id}", font=("Arial", 9)).pack(anchor="w", pady=5) + + # 卡密输入 + tk.Label(content_frame, text="请输入卡密:", font=("Arial", 10)).pack(anchor="w", pady=5) + + self.kami_entry = tk.Entry(content_frame, width=30, font=("Arial", 10)) + self.kami_entry.pack(fill=tk.X, pady=5) + self.kami_entry.focus_set() + + # 如果之前保存过卡密,自动填充 + if self.saved_kami: + self.kami_entry.insert(0, self.saved_kami) + + # "记住卡密"复选框 + self.remember_var = tk.BooleanVar(value=True) # 默认选中 + remember_check = tk.Checkbutton( + content_frame, + text="记住卡密 (下次自动验证)", + variable=self.remember_var, + font=("Arial", 9) + ) + remember_check.pack(anchor="w", pady=5) + + # 状态标签 + self.auth_result = tk.StringVar(value="") + result_label = tk.Label(content_frame, textvariable=self.auth_result, font=("Arial", 9), fg="red") + result_label.pack(pady=5) + + # 按钮框架 + btn_frame = tk.Frame(content_frame) + btn_frame.pack(pady=10) + + # 验证按钮 + auth_btn = tk.Button(btn_frame, text="验证卡密", width=15, + command=lambda: self.perform_network_authentication( + self.kami_entry.get().strip(), + self.remember_var.get(), + self.auth_win + )) + auth_btn.pack(side=tk.LEFT, padx=10) + + # 清除卡密按钮 + clear_btn = tk.Button(btn_frame, text="清除卡密", width=15, + command=self.clear_kami) + clear_btn.pack(side=tk.LEFT, padx=10) + + # 绑定回车键 + self.auth_win.bind('', lambda event: self.perform_network_authentication( + self.kami_entry.get().strip(), + self.remember_var.get(), + self.auth_win + )) + + def clear_kami(self): + """清除保存的卡密""" + if self.clear_saved_kami(): + self.saved_kami = None + self.auth_result.set("已清除保存的卡密") + # 清除后重新获取公告 + self.fetch_announcement() + else: + self.auth_result.set("清除卡密失败") + + def perform_network_authentication(self, kami, remember=True, auth_win=None): + """执行网络验证""" + if not kami: + if auth_win: + self.auth_result.set("卡密不能为空") + else: + self.auth_status.set("卡密不能为空") + return + + if auth_win: + self.auth_result.set("正在验证...") + else: + self.auth_status.set("正在验证...") + + # 禁用输入和按钮 + if auth_win: + self.kami_entry.config(state=tk.DISABLED) + for widget in auth_win.winfo_children(): + if isinstance(widget, tk.Button): + widget.config(state=tk.DISABLED) + + threading.Thread(target=self._authentication_thread, args=(kami, remember, auth_win), daemon=True).start() + + def _authentication_thread(self, kami, remember, auth_win=None): + """验证线程 - 仅使用必需的四个参数""" + try: + self.auth_status.set("正在连接验证服务器...") + + # 准备请求参数 - 只使用必需的四个参数 + params = { + "api": "kmlogon", # 接口名称 + "app": APP_ID, # 应用ID + "kami": kami, # 卡密 + "markcode": self.device_id # 设备码 + } + + # 构建请求URL (使用urlencode确保正确编码) + url = f"{AUTH_API}?{urlencode(params)}" + print("请求URL:", url) # 调试输出 + + # 创建自定义的HTTPS处理程序 + ssl_context = ssl.create_default_context() + ssl_context.check_hostname = False + ssl_context.verify_mode = ssl.CERT_NONE + + # 设置超时时间 + socket.setdefaulttimeout(15) + + # 发送请求 + request = urllib.request.Request(url) + request.add_header('User-Agent', 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/91.0.4472.124 Safari/537.36') + + with urllib.request.urlopen(request, context=ssl_context) as response: + raw_data = response.read().decode('utf-8') + + # 打印原始响应用于调试 + print("原始响应数据:", raw_data[:500] + ("..." if len(raw_data) > 500 else "")) + + # 使用自定义JSON解析器 + data = parse_json_response(raw_data) + + # 检查返回状态 + if data.get("code") != 200: + error_msg = self.get_error_message(data.get("code")) + if auth_win: + self.auth_result.set(f"验证失败: {error_msg}") + self.auth_status.set(f"验证失败: {error_msg}") + + # 验证失败时清除保存的卡密(如果存在) + if self.saved_kami: + self.clear_saved_kami() + self.saved_kami = None + return + + # 解析返回数据 + self.auth_data = data.get("msg", {}) + + # 更新VIP信息 + vip_expiry = self.auth_data.get("vip", "未知") + self.vip_info.set(f"验证状态: 有效期至 {vip_expiry}") + + # 验证成功 + self.is_authenticated = True + self.auth_status.set("验证成功!") + self.activate_buttons() + + # 保存卡密(如果需要) + if remember: + if self.save_kami(kami): + self.saved_kami = kami + if auth_win: + self.auth_result.set("验证成功并保存卡密") + else: + self.auth_status.set("验证成功并保存卡密") + else: + if auth_win: + self.auth_result.set("验证成功但保存卡密失败") + else: + self.auth_status.set("验证成功但保存卡密失败") + else: + # 如果不记住卡密,清除之前保存的 + if self.saved_kami: + self.clear_saved_kami() + self.saved_kami = None + if auth_win: + self.auth_result.set("验证成功(未保存卡密)") + else: + self.auth_status.set("验证成功(未保存卡密)") + + # 关闭验证窗口 + if auth_win and auth_win.winfo_exists(): + auth_win.destroy() + + # 检查更新 + self.check_for_updates() + + # 检查启动器更新 + self.check_launcher_update() + + except urllib.error.HTTPError as e: + error_msg = f"HTTP错误: {e.code} {e.reason}" + if auth_win: + self.auth_result.set(error_msg) + self.auth_status.set(error_msg) + + # 验证失败时清除保存的卡密(如果存在) + if self.saved_kami: + self.clear_saved_kami() + self.saved_kami = None + except urllib.error.URLError as e: + error_msg = f"网络错误: {str(e.reason)}" + if auth_win: + self.auth_result.set(error_msg) + self.auth_status.set(error_msg) + + # 验证失败时清除保存的卡密(如果存在) + if self.saved_kami: + self.clear_saved_kami() + self.saved_kami = None + except json.JSONDecodeError as e: + error_msg = f"JSON解析错误: {str(e)}" + if auth_win: + self.auth_result.set(error_msg) + self.auth_status.set(error_msg) + + # 验证失败时清除保存的卡密(如果存在) + if self.saved_kami: + self.clear_saved_kami() + self.saved_kami = None + except Exception as e: + error_msg = f"验证失败: {str(e)}" + if auth_win: + self.auth_result.set(error_msg) + self.auth_status.set(error_msg) + + # 验证失败时清除保存的卡密(如果存在) + if self.saved_kami: + self.clear_saved_kami() + self.saved_kami = None + + # 重新启用输入和按钮 - 仅在窗口仍然存在时 + if auth_win and auth_win.winfo_exists(): + try: + self.kami_entry.config(state=tk.NORMAL) + for widget in auth_win.winfo_children(): + if isinstance(widget, tk.Button): + widget.config(state=tk.NORMAL) + except tk.TclError: + # 忽略窗口已被销毁时的错误 + pass + + def get_error_message(self, error_code): + """根据错误码返回错误信息""" + error_messages = { + "101": "应用不存在", + "102": "应用已关闭", + "171": "接口维护中", + "172": "接口未添加或不存在", + "104": "签名为空", + "105": "数据过期", + "106": "签名有误", + "148": "卡密为空", + "149": "卡密不存在", + "150": "卡密已使用", + "151": "卡密禁用", + "169": "IP不一致" + } + return error_messages.get(str(error_code), f"未知错误 (代码: {error_code})") + + def activate_buttons(self): + """激活功能按钮""" + self.start_btn.config(state=tk.NORMAL) + self.odd_btn.config(state=tk.NORMAL) + self.update_btn.config(state=tk.NORMAL) + self.modify_hosts_btn.config(state=tk.NORMAL) # 修改为modify_hosts_btn + + def open_buy_page(self): + """打开购买页面""" + webbrowser.open("https://m.tb.cn/h.hYesG5B?tk=qva9Vs7587S") # 替换为实际的购买页面 + + def create_widgets(self): + # 主框架 - 分割左右区域 + main_frame = tk.Frame(self.root) + main_frame.pack(fill=tk.BOTH, expand=True, padx=10, pady=10) + + # 左侧功能区域 + left_frame = tk.Frame(main_frame) + left_frame.pack(side=tk.LEFT, fill=tk.BOTH, expand=True) + + # 右侧公告区域 + right_frame = tk.LabelFrame(main_frame, text="最新公告", font=("Arial", 10, "bold")) + right_frame.pack(side=tk.RIGHT, fill=tk.BOTH, padx=(10, 0), pady=5) + right_frame.config(width=250) # 固定宽度 + + # 公告内容区域 + announcement_container = tk.Frame(right_frame) + announcement_container.pack(fill=tk.BOTH, expand=True, padx=5, pady=5) + + # 添加滚动条 + scrollbar = tk.Scrollbar(announcement_container) + scrollbar.pack(side=tk.RIGHT, fill=tk.Y) + + # 公告文本区域 + self.announcement_text = tk.Text( + announcement_container, + wrap=tk.WORD, + yscrollcommand=scrollbar.set, + font=("Arial", 10), + padx=5, + pady=5, + height=15 + ) + self.announcement_text.pack(fill=tk.BOTH, expand=True) + + # 配置滚动条 + scrollbar.config(command=self.announcement_text.yview) + + # 添加初始公告内容 + self.announcement_text.insert(tk.END, "正在加载公告...\n") + self.announcement_text.config(state=tk.DISABLED) + + # 左侧功能区域内容 + # 标题 + title_frame = tk.Frame(left_frame) + title_frame.pack(pady=10) + tk.Label(title_frame, text=f"maimai启动器 v{LAUNCHER_VERSION}", # 添加版本号 + font=("Arial", 16, "bold")).pack() + + # 权限提示 + tk.Label( + title_frame, + text="(已获得管理员权限)", + font=("Arial", 8), + fg="green" + ).pack() + + # 验证状态 + self.auth_status = tk.StringVar(value="请输入卡密进行验证") + auth_label = tk.Label(left_frame, textvariable=self.auth_status, font=("Arial", 10), fg="blue") + auth_label.pack(pady=5) + + # 版本信息 + self.version_label = tk.Label(left_frame, text="版本: 加载中...", font=("Arial", 10)) + self.version_label.pack(pady=5) + + # 进度条 + progress_frame = tk.Frame(left_frame) + progress_frame.pack(fill=tk.X, padx=20, pady=10) + self.progress = ttk.Progressbar(progress_frame, orient=tk.HORIZONTAL, length=500, mode='determinate') + self.progress.pack() + + # 状态信息 + self.status_var = tk.StringVar(value="等待验证...") + status_label = tk.Label(left_frame, textvariable=self.status_var, font=("Arial", 10)) + status_label.pack(pady=5) + + # 按钮 + button_frame = tk.Frame(left_frame) + button_frame.pack(pady=10) + + # 第一行按钮 + button_row1 = tk.Frame(button_frame) + button_row1.pack(pady=5) + + self.start_btn = tk.Button(button_row1, text="启动游戏", width=15, + command=self.start_game, state=tk.DISABLED) + self.start_btn.pack(side=tk.LEFT, padx=10) + + self.odd_btn = tk.Button(button_row1, text="启动ODD", width=15, + command=self.start_odd, state=tk.DISABLED) + self.odd_btn.pack(side=tk.LEFT, padx=10) + + # 第二行按钮 + button_row2 = tk.Frame(button_frame) + button_row2.pack(pady=5) + + self.update_btn = tk.Button(button_row2, text="强制更新", width=15, + command=self.force_update, state=tk.DISABLED) + self.update_btn.pack(side=tk.LEFT, padx=10) + + # 修改:将"查看日志"按钮改为"修改hosts"按钮 + self.modify_hosts_btn = tk.Button(button_row2, text="修改hosts", width=15, + command=self.modify_hosts, state=tk.DISABLED) + self.modify_hosts_btn.pack(side=tk.LEFT, padx=10) + + # 第三行按钮 - 网络验证相关 + button_row3 = tk.Frame(button_frame) + button_row3.pack(pady=5) + + self.buy_btn = tk.Button(button_row3, text="购买卡密", width=15, + command=self.open_buy_page) + self.buy_btn.pack(side=tk.LEFT, padx=10) + + self.retry_btn = tk.Button(button_row3, text="重新验证", width=15, + command=self.show_auth_window) + self.retry_btn.pack(side=tk.LEFT, padx=10) + + # 第四行 - VIP信息 + self.vip_info = tk.StringVar(value="验证状态: 未验证") + vip_label = tk.Label(button_frame, textvariable=self.vip_info, font=("Arial", 10), fg="purple") + vip_label.pack(pady=10) + + def modify_hosts(self): + """修改hosts文件""" + if not self.is_authenticated: + messagebox.showwarning("未验证", "请先完成网络验证") + return + + if not self.hosts_bat.exists(): + messagebox.showerror("错误", f"找不到hosts修改文件: {HOSTS_BAT}") + return + + try: + # 使用管理员权限运行hosts.bat + bat_dir = os.path.dirname(self.hosts_bat) + subprocess.Popen( + [self.hosts_bat], + cwd=bat_dir, + shell=True + ) + messagebox.showinfo("操作成功", "hosts文件修改命令已执行,请查看命令行窗口确认结果。") + except Exception as e: + messagebox.showerror("操作失败", f"无法修改hosts文件: {str(e)}") + + def load_local_version(self): + """加载本地版本信息""" + version_data = {"version": "0.0.0", "files": {}} + + if self.version_file.exists(): + try: + with open(self.version_file, 'r', encoding='utf-8') as f: + return json.load(f) + except: + pass + return version_data + + def save_local_version(self, version_data): + """保存本地版本信息""" + with open(self.version_file, 'w', encoding='utf-8') as f: + json.dump(version_data, f, indent=2) + + def get_remote_version(self): + """获取服务器版本信息""" + try: + # 创建自定义的HTTPS处理程序 + ssl_context = ssl.create_default_context() + ssl_context.check_hostname = False + ssl_context.verify_mode = ssl.CERT_NONE + + # 设置超时时间 + socket.setdefaulttimeout(15) + + # 发送请求 + request = urllib.request.Request(f"{SERVER_URL}{VERSION_FILE}") + request.add_header('User-Agent', 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/91.0.4472.124 Safari/537.36') + + with urllib.request.urlopen(request, context=ssl_context) as response: + raw_data = response.read().decode('utf-8') + return parse_json_response(raw_data) + except Exception as e: + self.status_var.set(f"无法获取服务器版本: {str(e)}") + return None + + def check_for_updates(self): + """检查更新""" + if not self.is_authenticated: + self.status_var.set("请先完成验证") + return + + threading.Thread(target=self._check_updates_thread, daemon=True).start() + + def _check_updates_thread(self): + """更新检查线程""" + self.start_btn.config(state=tk.DISABLED) + self.update_btn.config(state=tk.DISABLED) + + remote_version = self.get_remote_version() + if not remote_version: + self.status_var.set("连接服务器失败") + self.start_btn.config(state=tk.NORMAL) + self.update_btn.config(state=tk.NORMAL) + return + + # 比较版本 + if remote_version["version"] == self.local_version["version"]: + self.status_var.set("游戏已是最新版本") + self.version_label.config(text=f"版本: v{self.local_version['version']}") + self.start_btn.config(state=tk.NORMAL) + self.update_btn.config(state=tk.NORMAL) + else: + self.status_var.set(f"发现新版本 v{remote_version['version']}") + self.update_game(remote_version) + + def update_game(self, remote_version=None): + """执行更新""" + if not self.is_authenticated: + self.status_var.set("请先完成验证") + return + + if not remote_version: + remote_version = self.get_remote_version() + if not remote_version: + self.status_var.set("无法获取更新信息") + return + + self.start_btn.config(state=tk.DISABLED) + self.update_btn.config(state=tk.DISABLED) + self.odd_btn.config(state=tk.DISABLED) + self.modify_hosts_btn.config(state=tk.DISABLED) + + threading.Thread(target=self._update_thread, args=(remote_version,), daemon=True).start() + + def force_update(self): + """强制更新""" + self.status_var.set("开始强制更新...") + self.update_game() + + def _update_thread(self, remote_version): + """更新线程""" + try: + # 创建更新目录 + self.update_dir.mkdir(parents=True, exist_ok=True) + + # 下载更新包 + self.status_var.set("正在下载更新...") + zip_path = self.base_dir / UPDATE_ZIP + + # 创建自定义的HTTPS处理程序 + ssl_context = ssl.create_default_context() + ssl_context.check_hostname = False + ssl_context.verify_mode = ssl.CERT_NONE + + # 设置超时时间 + socket.setdefaulttimeout(30) + + # 下载URL + download_url = f"{SERVER_URL}/update/{UPDATE_ZIP}" + + # 创建请求 + request = urllib.request.Request(download_url) + request.add_header('User-Agent', 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/91.0.4472.124 Safari/537.36') + + # 打开连接 + with urllib.request.urlopen(request, context=ssl_context) as response: + # 获取文件大小 + total_size = int(response.headers.get('content-length', 0)) + block_size = 1024 * 8 # 8KB blocks + count = 0 + + # 打开文件准备写入 + with open(zip_path, 'wb') as f: + while True: + # 读取数据块 + chunk = response.read(block_size) + if not chunk: + break + + # 写入文件 + f.write(chunk) + + # 更新进度 + count += 1 + if total_size > 0: + percent = min(100, int(count * block_size * 100 / total_size)) + self.progress['value'] = percent + self.status_var.set(f"下载中: {percent}%") + self.root.update_idletasks() + + # 解压更新包 + self.status_var.set("正在解压文件...") + self.progress['value'] = 0 + + with zipfile.ZipFile(zip_path, 'r') as zip_ref: + total_files = len(zip_ref.infolist()) + for i, file in enumerate(zip_ref.infolist()): + if file.filename.endswith('/'): + continue + + percent = int(i * 100 / total_files) + self.progress['value'] = percent + self.status_var.set(f"解压中: {file.filename}") + self.root.update_idletasks() + + zip_ref.extract(file, self.update_dir) + + # 更新版本信息 + self.local_version = remote_version + self.save_local_version(remote_version) + + self.status_var.set("更新完成!") + self.version_label.config(text=f"版本: v{self.local_version['version']}") + self.progress['value'] = 100 + + # 删除临时文件 + if zip_path.exists(): + os.remove(zip_path) + + messagebox.showinfo("更新完成", "游戏已成功更新到最新版本!") + + except Exception as e: + self.status_var.set(f"更新失败: {str(e)}") + messagebox.showerror("更新错误", f"更新过程中发生错误:\n{str(e)}") + finally: + self.start_btn.config(state=tk.NORMAL) + self.update_btn.config(state=tk.NORMAL) + self.odd_btn.config(state=tk.NORMAL) + self.modify_hosts_btn.config(state=tk.NORMAL) + + def check_launcher_update(self): + """检查启动器更新""" + if not self.is_authenticated: + return + + threading.Thread(target=self._check_launcher_update_thread, daemon=True).start() + + def _check_launcher_update_thread(self): + """检查启动器更新线程""" + try: + # 获取远程启动器版本信息 + ssl_context = ssl.create_default_context() + ssl_context.check_hostname = False + ssl_context.verify_mode = ssl.CERT_NONE + socket.setdefaulttimeout(15) + + # 发送请求 + request = urllib.request.Request(f"{SERVER_URL}{LAUNCHER_VERSION_FILE}") + request.add_header('User-Agent', 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/91.0.4472.124 Safari/537.36') + + with urllib.request.urlopen(request, context=ssl_context) as response: + raw_data = response.read().decode('utf-8') + remote_data = parse_json_response(raw_data) + + # 比较版本 + remote_version = remote_data.get("version") + download_url = remote_data.get("url") + + if not remote_version or not download_url: + print("无效的启动器版本信息") + return + + # 版本号比较 + current_parts = list(map(int, LAUNCHER_VERSION.split('.'))) + remote_parts = list(map(int, remote_version.split('.'))) + + # 确保版本号长度一致 + max_len = max(len(current_parts), len(remote_parts)) + current_parts += [0] * (max_len - len(current_parts)) + remote_parts += [0] * (max_len - len(remote_parts)) + + # 比较每个部分 + for i in range(max_len): + if remote_parts[i] > current_parts[i]: + # 发现新版本 + self.root.after(0, lambda: self.prompt_launcher_update(remote_version, download_url)) + return + elif remote_parts[i] < current_parts[i]: + # 当前版本更高 + return + + print("启动器已是最新版本") + except Exception as e: + print(f"检查启动器更新失败: {str(e)}") + + def prompt_launcher_update(self, remote_version, download_url): + """提示用户更新启动器""" + if not messagebox.askyesno("启动器更新", + f"发现新版本启动器 v{remote_version}\n是否立即更新?"): + return + + # 开始更新 + self.status_var.set("正在更新启动器...") + self.progress['value'] = 0 + threading.Thread(target=self._update_launcher_thread, + args=(download_url,), daemon=True).start() + + def _update_launcher_thread(self, download_url): + """启动器更新线程""" + try: + # 下载新启动器 + self.status_var.set("正在下载新启动器...") + new_launcher_path = self.base_dir / "launcher_new.exe" + + # 创建自定义的HTTPS处理程序 + ssl_context = ssl.create_default_context() + ssl_context.check_hostname = False + ssl_context.verify_mode = ssl.CERT_NONE + + # 设置超时时间 + socket.setdefaulttimeout(30) + + # 创建请求 + request = urllib.request.Request(download_url) + request.add_header('User-Agent', 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/91.0.4472.124 Safari/537.36') + + # 打开连接 + with urllib.request.urlopen(request, context=ssl_context) as response: + # 获取文件大小 + total_size = int(response.headers.get('content-length', 0)) + block_size = 1024 * 8 # 8KB blocks + count = 0 + + # 打开文件准备写入 + with open(new_launcher_path, 'wb') as f: + while True: + # 读取数据块 + chunk = response.read(block_size) + if not chunk: + break + + # 写入文件 + f.write(chunk) + + # 更新进度 + count += 1 + if total_size > 0: + percent = min(100, int(count * block_size * 100 / total_size)) + self.progress['value'] = percent + self.status_var.set(f"下载启动器: {percent}%") + self.root.update_idletasks() + + # 创建更新批处理脚本 + bat_content = f""" +@echo off +echo 正在更新启动器... +timeout /t 3 /nobreak >nul +taskkill /F /IM "{os.path.basename(sys.executable)}" >nul 2>&1 +move /Y "{new_launcher_path}" "{sys.executable}" >nul +echo 启动新版本... +start "" "{sys.executable}" +del "%~f0" +""" + with open(self.launcher_update_bat, 'w') as f: + f.write(bat_content) + + # 运行批处理脚本 + subprocess.Popen([self.launcher_update_bat], shell=True) + + # 退出当前程序 + self.root.destroy() + sys.exit(0) + + except Exception as e: + self.status_var.set(f"启动器更新失败: {str(e)}") + messagebox.showerror("更新失败", f"启动器更新失败:\n{str(e)}") + self.progress['value'] = 0 + + def start_game(self): + """启动游戏""" + if not self.is_authenticated: + messagebox.showwarning("未验证", "请先完成网络验证") + return + + if not self.bat_file.exists(): + messagebox.showerror("错误", f"找不到启动文件: {BAT_FILE}") + return + + try: + bat_dir = os.path.dirname(self.bat_file) + subprocess.Popen( + [self.bat_file], + cwd=bat_dir, + shell=True + ) + self.root.after(1000, self.root.destroy) + except Exception as e: + messagebox.showerror("启动失败", f"无法启动游戏: {str(e)}") + + def start_odd(self): + """启动ODD程序""" + if not self.is_authenticated: + messagebox.showwarning("未验证", "请先完成网络验证") + return + + if not self.odd_bat_file.exists(): + messagebox.showerror("错误", f"找不到ODD启动文件: {ODD_BAT_FILE}") + return + + try: + # 使用runas命令确保管理员权限 + bat_dir = os.path.dirname(self.odd_bat_file) + subprocess.Popen( + [self.odd_bat_file], + cwd=bat_dir, + shell=True + ) + messagebox.showinfo("启动成功", "ODD程序正在运行中...") + except Exception as e: + messagebox.showerror("启动失败", f"无法启动ODD程序: {str(e)}") + +if __name__ == "__main__": + # 检查管理员权限 + if not is_admin(): + # 创建临时窗口显示提示 + root = tk.Tk() + root.withdraw() # 隐藏主窗口 + messagebox.showinfo( + "权限提升", + "启动器需要管理员权限运行,请允许UAC提示。" + ) + run_as_admin() + root.destroy() + sys.exit(0) + + root = tk.Tk() + app = GameLauncher(root) + root.mainloop() \ No newline at end of file diff --git a/python/launcher3.py b/python/launcher3.py new file mode 100644 index 0000000..90923f4 --- /dev/null +++ b/python/launcher3.py @@ -0,0 +1,1089 @@ +import os +import sys +import tkinter as tk +from tkinter import ttk, messagebox, scrolledtext +import urllib.request +import zipfile +import subprocess +import json +import threading +from pathlib import Path +import ctypes +import webbrowser +import uuid +import time +import re +from urllib.parse import urlencode +import hashlib +import socket +import ssl + +# 配置信息 +SERVER_URL = f"" +UPDATE_PATH = r"" +BAT_FILE = r"" +ODD_BAT_FILE = r"" +HOSTS_BAT = r"" +VERSION_FILE = "" +UPDATE_ZIP = "" +LAUNCHER_VERSION_FILE = "" +AUTH_API = "" +APP_ID = "" +LAUNCHER_VERSION = "1.0.3" +DEVICE_CODE_FILE = r"" +LAUNCHER_UPDATE_BAT = "" +ANNOUNCEMENT_FILE = "" +CARD_FILE = r"P" + +def is_admin(): + """检查是否以管理员权限运行""" + try: + return ctypes.windll.shell32.IsUserAnAdmin() + except: + return False + +def run_as_admin(): + """以管理员权限重新运行程序""" + ctypes.windll.shell32.ShellExecuteW( + None, "runas", sys.executable, " ".join(sys.argv), None, 1 + ) + +def get_device_id(): + """获取或生成设备ID""" + # 尝试从文件读取设备ID + if os.path.exists(DEVICE_CODE_FILE): + try: + with open(DEVICE_CODE_FILE, 'r') as f: + return f.read().strip() + except: + pass + + # 获取MAC地址并哈希 + def get_mac_address(): + mac = uuid.getnode() + mac_address = ':'.join(['{:02x}'.format((mac >> i) & 0xff) for i in range(0, 48, 8)]) + return mac_address + + def hash_mac_address(mac_address): + sha256_hash = hashlib.sha256(mac_address.encode()).hexdigest() + return sha256_hash + + # 生成新的设备ID (基于MAC地址的哈希) + mac_address = get_mac_address() + device_id = hash_mac_address(mac_address) + + # 保存到文件 + try: + with open(DEVICE_CODE_FILE, 'w') as f: + f.write(device_id) + except: + pass + + return device_id + +def parse_json_response(response_text): + """尝试解析可能的JSON响应,处理格式问题""" + try: + # 尝试直接解析 + return json.loads(response_text) + except json.JSONDecodeError as e: + # 尝试修复常见的JSON格式问题 + try: + # 尝试提取JSON对象部分 + match = re.search(r'\{.*\}', response_text, re.DOTALL) + if match: + fixed_json = match.group(0) + return json.loads(fixed_json) + except: + pass + + # 尝试移除可能的HTML标签 + try: + clean_text = re.sub(r'<[^>]+>', '', response_text) + return json.loads(clean_text) + except: + pass + + # 尝试移除可能的BOM字符 + try: + if response_text.startswith('\ufeff'): + return json.loads(response_text[1:]) + except: + pass + + # 所有尝试都失败,抛出原始异常 + raise e + +class GameLauncher: + def __init__(self, root): + self.root = root + self.root.title(f"maimai启动器 v{LAUNCHER_VERSION}") + self.root.geometry("800x450") # 增加窗口宽度以容纳右侧公告 + self.root.resizable(False, False) + + # 检查管理员权限 + if not is_admin(): + messagebox.showwarning( + "权限提示", + "启动器需要管理员权限来运行ODD程序。\n请允许UAC提示以继续。" + ) + run_as_admin() + sys.exit(0) + + # 初始化验证状态 + self.auth_data = None + self.is_authenticated = False + self.device_id = get_device_id() # 获取设备ID + + # 创建UI + self.create_widgets() + + # 初始化路径 + self.base_dir = Path(os.getcwd()) + self.update_dir = self.base_dir / UPDATE_PATH + self.version_file = self.base_dir / VERSION_FILE + self.bat_file = self.base_dir / BAT_FILE + self.odd_bat_file = self.base_dir / ODD_BAT_FILE + self.hosts_bat = self.base_dir / HOSTS_BAT # hosts批处理文件 + self.launcher_version_file = self.base_dir / LAUNCHER_VERSION_FILE + self.launcher_update_bat = self.base_dir / LAUNCHER_UPDATE_BAT + # 修改点1:将卡密文件路径更改为 Package/CARD.txt + self.card_file = self.base_dir / CARD_FILE # 卡密存储文件(已更改路径) + + # 加载本地版本信息 + self.local_version = self.load_local_version() + + # 尝试加载保存的卡密 + self.saved_kami = self.load_saved_kami() + + # 获取公告内容 + self.fetch_announcement() + + # 如果存在保存的卡密,则自动验证 + if self.saved_kami: + self.auth_status.set("正在使用保存的卡密进行验证...") + self.perform_network_authentication(self.saved_kami, remember=True) + else: + # 显示卡密输入窗口 + self.show_auth_window() + + def load_saved_kami(self): + """加载保存的卡密""" + try: + # 确保目录存在 + self.card_file.parent.mkdir(parents=True, exist_ok=True) + + if self.card_file.exists(): + with open(self.card_file, 'r') as f: + return f.read().strip() + except Exception as e: + print(f"加载保存的卡密失败: {str(e)}") + return None + + def save_kami(self, kami): + """保存卡密到文件""" + try: + with open(self.card_file, 'w') as f: + f.write(kami) + return True + except Exception as e: + print(f"保存卡密失败: {str(e)}") + return False + + def clear_saved_kami(self): + """清除保存的卡密""" + try: + if self.card_file.exists(): + os.remove(self.card_file) + return True + except Exception as e: + print(f"清除卡密失败: {str(e)}") + return False + + def fetch_announcement(self): + """获取公告内容""" + threading.Thread(target=self._fetch_announcement_thread, daemon=True).start() + + def _fetch_announcement_thread(self): + """获取公告内容的线程""" + try: + # 创建自定义的HTTPS处理程序 + ssl_context = ssl.create_default_context() + ssl_context.check_hostname = False + ssl_context.verify_mode = ssl.CERT_NONE + + # 设置超时时间 + socket.setdefaulttimeout(15) + + # 公告URL + announcement_url = f"{SERVER_URL}/g/{ANNOUNCEMENT_FILE}" + + # 发送请求 + request = urllib.request.Request(announcement_url) + request.add_header('User-Agent', 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/91.0.4472.124 Safari/537.36') + + with urllib.request.urlopen(request, context=ssl_context) as response: + raw_data = response.read().decode('utf-8') + announcement_data = parse_json_response(raw_data) + + # 更新UI显示公告 + self.root.after(0, lambda: self.update_announcement(announcement_data)) + + except Exception as e: + print(f"获取公告失败: {str(e)}") + # 显示默认公告 + default_announcement = { + "title": "公告", + "content": "无法连接到服务器获取最新公告。\n请检查网络连接或稍后再试。", + "date": time.strftime("%Y-%m-%d") + } + self.root.after(0, lambda: self.update_announcement(default_announcement)) + + def update_announcement(self, announcement_data): + """更新公告显示 - 只显示公告内容""" + # 清空现有内容 + self.announcement_text.config(state=tk.NORMAL) + self.announcement_text.delete(1.0, tk.END) + + # 添加标题 + title = announcement_data.get("title", "公告") + date = announcement_data.get("date", time.strftime("%Y-%m-%d")) + self.announcement_text.tag_configure("title", font=("Arial", 12, "bold"), foreground="blue") + self.announcement_text.insert(tk.END, f"{title}\n", "title") + self.announcement_text.insert(tk.END, f"发布日期: {date}\n\n", ("title",)) + + # 添加内容 + content = announcement_data.get("content", "暂无公告内容。") + self.announcement_text.tag_configure("content", font=("Arial", 10)) + self.announcement_text.insert(tk.END, content, "content") + + # 禁用编辑 + self.announcement_text.config(state=tk.DISABLED) + + def show_auth_window(self): + """显示卡密验证窗口""" + self.auth_win = tk.Toplevel(self.root) + self.auth_win.title(f"卡密验证") + self.auth_win.geometry("400x250") # 增加高度以容纳"记住卡密"复选框 + self.auth_win.resizable(False, False) + self.auth_win.grab_set() # 模态窗口 + + # 居中显示 + self.auth_win.update_idletasks() + width = self.auth_win.winfo_width() + height = self.auth_win.winfo_height() + x = (self.root.winfo_screenwidth() // 2) - (width // 2) + y = (self.root.winfo_screenheight() // 2) - (height // 2) + self.auth_win.geometry(f'+{x}+{y}') + + # 内容框架 + content_frame = tk.Frame(self.auth_win) + content_frame.pack(pady=20, padx=20, fill=tk.BOTH, expand=True) + + # 设备ID显示 + tk.Label(content_frame, text=f"设备ID: {self.device_id}", font=("Arial", 9)).pack(anchor="w", pady=5) + + # 卡密输入 + tk.Label(content_frame, text="请输入卡密:", font=("Arial", 10)).pack(anchor="w", pady=5) + + self.kami_entry = tk.Entry(content_frame, width=30, font=("Arial", 10)) + self.kami_entry.pack(fill=tk.X, pady=5) + self.kami_entry.focus_set() + + # 如果之前保存过卡密,自动填充 + if self.saved_kami: + self.kami_entry.insert(0, self.saved_kami) + + # "记住卡密"复选框 + self.remember_var = tk.BooleanVar(value=True) # 默认选中 + remember_check = tk.Checkbutton( + content_frame, + text="记住卡密 (下次自动验证)", + variable=self.remember_var, + font=("Arial", 9) + ) + remember_check.pack(anchor="w", pady=5) + + # 状态标签 + self.auth_result = tk.StringVar(value="") + result_label = tk.Label(content_frame, textvariable=self.auth_result, font=("Arial", 9), fg="red") + result_label.pack(pady=5) + + # 按钮框架 + btn_frame = tk.Frame(content_frame) + btn_frame.pack(pady=10) + + # 验证按钮 + auth_btn = tk.Button(btn_frame, text="验证卡密", width=15, + command=lambda: self.perform_network_authentication( + self.kami_entry.get().strip(), + self.remember_var.get(), + self.auth_win + )) + auth_btn.pack(side=tk.LEFT, padx=10) + + # 清除卡密按钮 + clear_btn = tk.Button(btn_frame, text="清除卡密", width=15, + command=self.clear_kami) + clear_btn.pack(side=tk.LEFT, padx=10) + + # 绑定回车键 + self.auth_win.bind('', lambda event: self.perform_network_authentication( + self.kami_entry.get().strip(), + self.remember_var.get(), + self.auth_win + )) + + def clear_kami(self): + """清除保存的卡密""" + if self.clear_saved_kami(): + self.saved_kami = None + self.auth_result.set("已清除保存的卡密") + # 清除后重新获取公告 + self.fetch_announcement() + else: + self.auth_result.set("清除卡密失败") + + def perform_network_authentication(self, kami, remember=True, auth_win=None): + """执行网络验证""" + if not kami: + if auth_win: + self.auth_result.set("卡密不能为空") + else: + self.auth_status.set("卡密不能为空") + return + + if auth_win: + self.auth_result.set("正在验证...") + else: + self.auth_status.set("正在验证...") + + # 禁用输入和按钮 + if auth_win: + self.kami_entry.config(state=tk.DISABLED) + for widget in auth_win.winfo_children(): + if isinstance(widget, tk.Button): + widget.config(state=tk.DISABLED) + + threading.Thread(target=self._authentication_thread, args=(kami, remember, auth_win), daemon=True).start() + + def _authentication_thread(self, kami, remember, auth_win=None): + """验证线程 - 仅使用必需的四个参数""" + try: + self.auth_status.set("正在连接验证服务器...") + + # 准备请求参数 - 只使用必需的四个参数 + params = { + "api": "kmlogon", # 接口名称 + "app": APP_ID, # 应用ID + "kami": kami, # 卡密 + "markcode": self.device_id # 设备码 + } + + # 构建请求URL (使用urlencode确保正确编码) + url = f"{AUTH_API}?{urlencode(params)}" + print("请求URL:", url) # 调试输出 + + # 创建自定义的HTTPS处理程序 + ssl_context = ssl.create_default_context() + ssl_context.check_hostname = False + ssl_context.verify_mode = ssl.CERT_NONE + + # 设置超时时间 + socket.setdefaulttimeout(15) + + # 发送请求 + request = urllib.request.Request(url) + request.add_header('User-Agent', 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/91.0.4472.124 Safari/537.36') + + with urllib.request.urlopen(request, context=ssl_context) as response: + raw_data = response.read().decode('utf-8') + + # 打印原始响应用于调试 + print("原始响应数据:", raw_data[:500] + ("..." if len(raw_data) > 500 else "")) + + # 使用自定义JSON解析器 + data = parse_json_response(raw_data) + + # 检查返回状态 + if data.get("code") != 200: + error_msg = self.get_error_message(data.get("code")) + if auth_win: + self.auth_result.set(f"验证失败: {error_msg}") + self.auth_status.set(f"验证失败: {error_msg}") + + # 验证失败时清除保存的卡密(如果存在) + if self.saved_kami: + self.clear_saved_kami() + self.saved_kami = None + return + + # 解析返回数据 + self.auth_data = data.get("msg", {}) + + # 更新VIP信息 + vip_expiry = self.auth_data.get("vip", "未知") + self.vip_info.set(f"验证状态: 有效期至 {vip_expiry}") + + # 验证成功 + self.is_authenticated = True + self.auth_status.set("验证成功!") + self.activate_buttons() + + # 保存卡密(如果需要) + if remember: + if self.save_kami(kami): + self.saved_kami = kami + if auth_win: + self.auth_result.set("验证成功并保存卡密") + else: + self.auth_status.set("验证成功并保存卡密") + else: + if auth_win: + self.auth_result.set("验证成功但保存卡密失败") + else: + self.auth_status.set("验证成功但保存卡密失败") + else: + # 如果不记住卡密,清除之前保存的 + if self.saved_kami: + self.clear_saved_kami() + self.saved_kami = None + if auth_win: + self.auth_result.set("验证成功(未保存卡密)") + else: + self.auth_status.set("验证成功(未保存卡密)") + + # 关闭验证窗口 + if auth_win and auth_win.winfo_exists(): + auth_win.destroy() + + # 检查更新 + self.check_for_updates() + + # 检查启动器更新 + self.check_launcher_update() + + except urllib.error.HTTPError as e: + error_msg = f"HTTP错误: {e.code} {e.reason}" + if auth_win: + self.auth_result.set(error_msg) + self.auth_status.set(error_msg) + + # 验证失败时清除保存的卡密(如果存在) + if self.saved_kami: + self.clear_saved_kami() + self.saved_kami = None + except urllib.error.URLError as e: + error_msg = f"网络错误: {str(e.reason)}" + if auth_win: + self.auth_result.set(error_msg) + self.auth_status.set(error_msg) + + # 验证失败时清除保存的卡密(如果存在) + if self.saved_kami: + self.clear_saved_kami() + self.saved_kami = None + except json.JSONDecodeError as e: + error_msg = f"JSON解析错误: {str(e)}" + if auth_win: + self.auth_result.set(error_msg) + self.auth_status.set(error_msg) + + # 验证失败时清除保存的卡密(如果存在) + if self.saved_kami: + self.clear_saved_kami() + self.saved_kami = None + except Exception as e: + error_msg = f"验证失败: {str(e)}" + if auth_win: + self.auth_result.set(error_msg) + self.auth_status.set(error_msg) + + # 验证失败时清除保存的卡密(如果存在) + if self.saved_kami: + self.clear_saved_kami() + self.saved_kami = None + + # 重新启用输入和按钮 - 仅在窗口仍然存在时 + if auth_win and auth_win.winfo_exists(): + try: + self.kami_entry.config(state=tk.NORMAL) + for widget in auth_win.winfo_children(): + if isinstance(widget, tk.Button): + widget.config(state=tk.NORMAL) + except tk.TclError: + # 忽略窗口已被销毁时的错误 + pass + + def get_error_message(self, error_code): + """根据错误码返回错误信息""" + error_messages = { + "101": "应用不存在", + "102": "应用已关闭", + "171": "接口维护中", + "172": "接口未添加或不存在", + "104": "签名为空", + "105": "数据过期", + "106": "签名有误", + "148": "卡密为空", + "149": "卡密不存在", + "150": "卡密已使用", + "151": "卡密禁用", + "169": "IP不一致" + } + return error_messages.get(str(error_code), f"未知错误 (代码: {error_code})") + + def activate_buttons(self): + """激活功能按钮""" + self.start_btn.config(state=tk.NORMAL) + self.odd_btn.config(state=tk.NORMAL) + self.update_btn.config(state=tk.NORMAL) + self.modify_hosts_btn.config(state=tk.NORMAL) + + def open_buy_page(self): + """打开购买页面""" + webbrowser.open("https://m.tb.cn/h.hYesG5B?tk=qva9Vs7587S") # 替换为实际的购买页面 + + def create_widgets(self): + # 主框架 - 分割左右区域 + main_frame = tk.Frame(self.root) + main_frame.pack(fill=tk.BOTH, expand=True, padx=10, pady=10) + + # 左侧功能区域 + left_frame = tk.Frame(main_frame) + left_frame.pack(side=tk.LEFT, fill=tk.BOTH, expand=True) + + # 右侧公告区域 + right_frame = tk.LabelFrame(main_frame, text="最新公告", font=("Arial", 10, "bold")) + right_frame.pack(side=tk.RIGHT, fill=tk.BOTH, padx=(10, 0), pady=5) + right_frame.config(width=250) # 固定宽度 + + # 公告内容区域 + announcement_container = tk.Frame(right_frame) + announcement_container.pack(fill=tk.BOTH, expand=True, padx=5, pady=5) + + # 添加滚动条 + scrollbar = tk.Scrollbar(announcement_container) + scrollbar.pack(side=tk.RIGHT, fill=tk.Y) + + # 公告文本区域 + self.announcement_text = tk.Text( + announcement_container, + wrap=tk.WORD, + yscrollcommand=scrollbar.set, + font=("Arial", 10), + padx=5, + pady=5, + height=15 + ) + self.announcement_text.pack(fill=tk.BOTH, expand=True) + + # 配置滚动条 + scrollbar.config(command=self.announcement_text.yview) + + # 添加初始公告内容 + self.announcement_text.insert(tk.END, "正在加载公告...\n") + self.announcement_text.config(state=tk.DISABLED) + + # 左侧功能区域内容 + # 标题 + title_frame = tk.Frame(left_frame) + title_frame.pack(pady=10) + tk.Label(title_frame, text=f"maimai启动器", # 添加版本号 + font=("Arial", 16, "bold")).pack() + + # 权限提示 + tk.Label( + title_frame, + text="(已获得管理员权限)", + font=("Arial", 8), + fg="green" + ).pack() + + # 验证状态 + self.auth_status = tk.StringVar(value="请输入卡密进行验证") + auth_label = tk.Label(left_frame, textvariable=self.auth_status, font=("Arial", 10), fg="blue") + auth_label.pack(pady=5) + + # 版本信息 + self.version_label = tk.Label(left_frame, text="版本: 加载中...", font=("Arial", 10)) + self.version_label.pack(pady=5) + + # 进度条 + progress_frame = tk.Frame(left_frame) + progress_frame.pack(fill=tk.X, padx=20, pady=10) + self.progress = ttk.Progressbar(progress_frame, orient=tk.HORIZONTAL, length=500, mode='determinate') + self.progress.pack() + + # 状态信息 + self.status_var = tk.StringVar(value="等待验证...") + status_label = tk.Label(left_frame, textvariable=self.status_var, font=("Arial", 10)) + status_label.pack(pady=5) + + # 按钮 + button_frame = tk.Frame(left_frame) + button_frame.pack(pady=10) + + # 第一行按钮 + button_row1 = tk.Frame(button_frame) + button_row1.pack(pady=5) + + self.start_btn = tk.Button(button_row1, text="启动游戏", width=15, + command=self.start_game, state=tk.DISABLED) + self.start_btn.pack(side=tk.LEFT, padx=10) + + self.odd_btn = tk.Button(button_row1, text="启动ODD", width=15, + command=self.start_odd, state=tk.DISABLED) + self.odd_btn.pack(side=tk.LEFT, padx=10) + + # 第二行按钮 + button_row2 = tk.Frame(button_frame) + button_row2.pack(pady=5) + + self.update_btn = tk.Button(button_row2, text="强制更新", width=15, + command=self.force_update, state=tk.DISABLED) + self.update_btn.pack(side=tk.LEFT, padx=10) + + # 修改:将"查看日志"按钮改为"修改hosts"按钮 + self.modify_hosts_btn = tk.Button(button_row2, text="修改hosts", width=15, + command=self.modify_hosts, state=tk.DISABLED) + self.modify_hosts_btn.pack(side=tk.LEFT, padx=10) + + # 第三行按钮 - 网络验证相关 + button_row3 = tk.Frame(button_frame) + button_row3.pack(pady=5) + + self.buy_btn = tk.Button(button_row3, text="购买卡密", width=15, + command=self.open_buy_page) + self.buy_btn.pack(side=tk.LEFT, padx=10) + + self.retry_btn = tk.Button(button_row3, text="重新验证", width=15, + command=self.show_auth_window) + self.retry_btn.pack(side=tk.LEFT, padx=10) + + # 第四行 - VIP信息 + self.vip_info = tk.StringVar(value="验证状态: 未验证") + vip_label = tk.Label(button_frame, textvariable=self.vip_info, font=("Arial", 10), fg="purple") + vip_label.pack(pady=10) + + # 在右下角添加闲鱼信息 + xianyu_frame = tk.Frame(self.root) + xianyu_frame.pack(side=tk.BOTTOM, fill=tk.X, padx=10, pady=5) + + # 使用一个空标签占据左侧空间,使文本靠右 + tk.Label(xianyu_frame, text="", width=1).pack(side=tk.LEFT, expand=True) + + # 添加闲鱼信息文本 + xianyu_label = tk.Label( + xianyu_frame, + text="闲鱼:多啦多啦", + font=("Arial", 8), + fg="gray" + ) + xianyu_label.pack(side=tk.RIGHT, padx=(0, 10)) + + def modify_hosts(self): + """修改hosts文件""" + if not self.is_authenticated: + messagebox.showwarning("未验证", "请先完成网络验证") + return + + if not self.hosts_bat.exists(): + messagebox.showerror("错误", f"找不到hosts修改文件: {HOSTS_BAT}") + return + + try: + # 使用管理员权限运行hosts.bat + bat_dir = os.path.dirname(self.hosts_bat) + subprocess.Popen( + [self.hosts_bat], + cwd=bat_dir, + shell=True + ) + messagebox.showinfo("操作成功", "hosts文件修改命令已执行,请查看命令行窗口确认结果。") + except Exception as e: + messagebox.showerror("操作失败", f"无法修改hosts文件: {str(e)}") + + def load_local_version(self): + """加载本地版本信息""" + version_data = {"version": "0.0.0", "files": {}} + + if self.version_file.exists(): + try: + with open(self.version_file, 'r', encoding='utf-8') as f: + return json.load(f) + except: + pass + return version_data + + def save_local_version(self, version_data): + """保存本地版本信息""" + with open(self.version_file, 'w', encoding='utf-8') as f: + json.dump(version_data, f, indent=2) + + def get_remote_version(self): + """获取服务器版本信息""" + try: + # 创建自定义的HTTPS处理程序 + ssl_context = ssl.create_default_context() + ssl_context.check_hostname = False + ssl_context.verify_mode = ssl.CERT_NONE + + # 设置超时时间 + socket.setdefaulttimeout(15) + + # 发送请求 + request = urllib.request.Request(f"{SERVER_URL}{VERSION_FILE}") + request.add_header('User-Agent', 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/91.0.4472.124 Safari/537.36') + + with urllib.request.urlopen(request, context=ssl_context) as response: + raw_data = response.read().decode('utf-8') + return parse_json_response(raw_data) + except Exception as e: + self.status_var.set(f"无法获取服务器版本: {str(e)}") + return None + + def check_for_updates(self): + """检查更新""" + if not self.is_authenticated: + self.status_var.set("请先完成验证") + return + + threading.Thread(target=self._check_updates_thread, daemon=True).start() + + def _check_updates_thread(self): + """更新检查线程""" + self.start_btn.config(state=tk.DISABLED) + self.update_btn.config(state=tk.DISABLED) + + remote_version = self.get_remote_version() + if not remote_version: + self.status_var.set("连接服务器失败") + self.start_btn.config(state=tk.NORMAL) + self.update_btn.config(state=tk.NORMAL) + return + + # 比较版本 + if remote_version["version"] == self.local_version["version"]: + self.status_var.set("游戏已是最新版本") + self.version_label.config(text=f"版本: v{self.local_version['version']}") + self.start_btn.config(state=tk.NORMAL) + self.update_btn.config(state=tk.NORMAL) + else: + self.status_var.set(f"发现新版本 v{remote_version['version']}") + self.update_game(remote_version) + + def update_game(self, remote_version=None): + """执行更新""" + if not self.is_authenticated: + self.status_var.set("请先完成验证") + return + + if not remote_version: + remote_version = self.get_remote_version() + if not remote_version: + self.status_var.set("无法获取更新信息") + return + + self.start_btn.config(state=tk.DISABLED) + self.update_btn.config(state=tk.DISABLED) + self.odd_btn.config(state=tk.DISABLED) + self.modify_hosts_btn.config(state=tk.DISABLED) + + threading.Thread(target=self._update_thread, args=(remote_version,), daemon=True).start() + + def force_update(self): + """强制更新""" + self.status_var.set("开始强制更新...") + self.update_game() + + def _update_thread(self, remote_version): + """更新线程""" + try: + # 创建更新目录 + self.update_dir.mkdir(parents=True, exist_ok=True) + + # 下载更新包 + self.status_var.set("正在下载更新...") + zip_path = self.base_dir / UPDATE_ZIP + + # 创建自定义的HTTPS处理程序 + ssl_context = ssl.create_default_context() + ssl_context.check_hostname = False + ssl_context.verify_mode = ssl.CERT_NONE + + # 设置超时时间 + socket.setdefaulttimeout(30) + + # 下载URL + download_url = f"{SERVER_URL}/update/{UPDATE_ZIP}" + + # 创建请求 + request = urllib.request.Request(download_url) + request.add_header('User-Agent', 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/91.0.4472.124 Safari/537.36') + + # 打开连接 + with urllib.request.urlopen(request, context=ssl_context) as response: + # 获取文件大小 + total_size = int(response.headers.get('content-length', 0)) + block_size = 1024 * 8 # 8KB blocks + count = 0 + + # 打开文件准备写入 + with open(zip_path, 'wb') as f: + while True: + # 读取数据块 + chunk = response.read(block_size) + if not chunk: + break + + # 写入文件 + f.write(chunk) + + # 更新进度 + count += 1 + if total_size > 0: + percent = min(100, int(count * block_size * 100 / total_size)) + self.progress['value'] = percent + self.status_var.set(f"下载中: {percent}%") + self.root.update_idletasks() + + # 解压更新包 + self.status_var.set("正在解压文件...") + self.progress['value'] = 0 + + with zipfile.ZipFile(zip_path, 'r') as zip_ref: + total_files = len(zip_ref.infolist()) + for i, file in enumerate(zip_ref.infolist()): + if file.filename.endswith('/'): + continue + + percent = int(i * 100 / total_files) + self.progress['value'] = percent + self.status_var.set(f"解压中: {file.filename}") + self.root.update_idletasks() + + zip_ref.extract(file, self.update_dir) + + # 更新版本信息 + self.local_version = remote_version + self.save_local_version(remote_version) + + self.status_var.set("更新完成!") + self.version_label.config(text=f"版本: v{self.local_version['version']}") + self.progress['value'] = 100 + + # 删除临时文件 + if zip_path.exists(): + os.remove(zip_path) + + messagebox.showinfo("更新完成", "游戏已成功更新到最新版本!") + + except Exception as e: + self.status_var.set(f"更新失败: {str(e)}") + messagebox.showerror("更新错误", f"更新过程中发生错误:\n{str(e)}") + finally: + self.start_btn.config(state=tk.NORMAL) + self.update_btn.config(state=tk.NORMAL) + self.odd_btn.config(state=tk.NORMAL) + self.modify_hosts_btn.config(state=tk.NORMAL) + + def check_launcher_update(self): + """检查启动器更新""" + if not self.is_authenticated: + return + + threading.Thread(target=self._check_launcher_update_thread, daemon=True).start() + + def _check_launcher_update_thread(self): + """检查启动器更新线程""" + try: + # 获取远程启动器版本信息 + ssl_context = ssl.create_default_context() + ssl_context.check_hostname = False + ssl_context.verify_mode = ssl.CERT_NONE + socket.setdefaulttimeout(15) + + # 发送请求 + request = urllib.request.Request(f"{SERVER_URL}{LAUNCHER_VERSION_FILE}") + request.add_header('User-Agent', 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/91.0.4472.124 Safari/537.36') + + with urllib.request.urlopen(request, context=ssl_context) as response: + raw_data = response.read().decode('utf-8') + remote_data = parse_json_response(raw_data) + + # 比较版本 + remote_version = remote_data.get("version") + download_url = remote_data.get("url") + + if not remote_version or not download_url: + print("无效的启动器版本信息") + return + + # 版本号比较 + current_parts = list(map(int, LAUNCHER_VERSION.split('.'))) + remote_parts = list(map(int, remote_version.split('.'))) + + # 确保版本号长度一致 + max_len = max(len(current_parts), len(remote_parts)) + current_parts += [0] * (max_len - len(current_parts)) + remote_parts += [0] * (max_len - len(remote_parts)) + + # 比较每个部分 + for i in range(max_len): + if remote_parts[i] > current_parts[i]: + # 发现新版本 + self.root.after(0, lambda: self.prompt_launcher_update(remote_version, download_url)) + return + elif remote_parts[i] < current_parts[i]: + # 当前版本更高 + return + + print("启动器已是最新版本") + except Exception as e: + print(f"检查启动器更新失败: {str(e)}") + + def prompt_launcher_update(self, remote_version, download_url): + """提示用户更新启动器""" + if not messagebox.askyesno("启动器更新", + f"发现新版本启动器 v{remote_version}\n是否立即更新?"): + return + + # 开始更新 + self.status_var.set("正在更新启动器...") + self.progress['value'] = 0 + threading.Thread(target=self._update_launcher_thread, + args=(download_url,), daemon=True).start() + + def _update_launcher_thread(self, download_url): + """启动器更新线程""" + try: + # 下载新启动器 + self.status_var.set("正在下载新启动器...") + new_launcher_path = self.base_dir / "launcher_new.exe" + + # 创建自定义的HTTPS处理程序 + ssl_context = ssl.create_default_context() + ssl_context.check_hostname = False + ssl_context.verify_mode = ssl.CERT_NONE + + # 设置超时时间 + socket.setdefaulttimeout(30) + + # 创建请求 + request = urllib.request.Request(download_url) + request.add_header('User-Agent', 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/91.0.4472.124 Safari/537.36') + + # 打开连接 + with urllib.request.urlopen(request, context=ssl_context) as response: + # 获取文件大小 + total_size = int(response.headers.get('content-length', 0)) + block_size = 1024 * 8 # 8KB blocks + count = 0 + + # 打开文件准备写入 + with open(new_launcher_path, 'wb') as f: + while True: + # 读取数据块 + chunk = response.read(block_size) + if not chunk: + break + + # 写入文件 + f.write(chunk) + + # 更新进度 + count += 1 + if total_size > 0: + percent = min(100, int(count * block_size * 100 / total_size)) + self.progress['value'] = percent + self.status_var.set(f"下载启动器: {percent}%") + self.root.update_idletasks() + + # 创建更新批处理脚本 + bat_content = f""" +@echo off +echo 正在更新启动器... +timeout /t 3 /nobreak >nul +taskkill /F /IM "{os.path.basename(sys.executable)}" >nul 2>&1 +move /Y "{new_launcher_path}" "{sys.executable}" >nul +echo 启动新版本... +start "" "{sys.executable}" +del "%~f0" +""" + with open(self.launcher_update_bat, 'w') as f: + f.write(bat_content) + + # 运行批处理脚本 + subprocess.Popen([self.launcher_update_bat], shell=True) + + # 退出当前程序 + self.root.destroy() + sys.exit(0) + + except Exception as e: + self.status_var.set(f"启动器更新失败: {str(e)}") + messagebox.showerror("更新失败", f"启动器更新失败:\n{str(e)}") + self.progress['value'] = 0 + + def start_game(self): + """启动游戏""" + if not self.is_authenticated: + messagebox.showwarning("未验证", "请先完成网络验证") + return + + if not self.bat_file.exists(): + messagebox.showerror("错误", f"找不到启动文件: {BAT_FILE}") + return + + try: + bat_dir = os.path.dirname(self.bat_file) + subprocess.Popen( + [self.bat_file], + cwd=bat_dir, + shell=True + ) + # 修改点2:移除关闭窗口的代码,使启动器保持运行 + # 原代码:self.root.after(1000, self.root.destroy) + except Exception as e: + messagebox.showerror("启动失败", f"无法启动游戏: {str(e)}") + + def start_odd(self): + """启动ODD程序""" + if not self.is_authenticated: + messagebox.showwarning("未验证", "请先完成网络验证") + return + + if not self.odd_bat_file.exists(): + messagebox.showerror("错误", f"找不到ODD启动文件: {ODD_BAT_FILE}") + return + + try: + # 使用runas命令确保管理员权限 + bat_dir = os.path.dirname(self.odd_bat_file) + subprocess.Popen( + [self.odd_bat_file], + cwd=bat_dir, + shell=True + ) + messagebox.showinfo("启动成功", "ODD程序正在运行中...") + except Exception as e: + messagebox.showerror("启动失败", f"无法启动ODD程序: {str(e)}") + +if __name__ == "__main__": + # 检查管理员权限 + if not is_admin(): + # 创建临时窗口显示提示 + root = tk.Tk() + root.withdraw() # 隐藏主窗口 + messagebox.showinfo( + "权限提升", + "启动器需要管理员权限运行,请允许UAC提示。" + ) + run_as_admin() + root.destroy() + sys.exit(0) + + root = tk.Tk() + app = GameLauncher(root) + root.mainloop() \ No newline at end of file