在Windows 10上构建时发生Qt MOC故障 我已经使用PyQT多年了,不得不使用CYONE重新使用C++中的项目。我已经设法(过了一段时间)在我的MacBookPro上构建了代码,但是当我将项目移动到Windows10时,所有的麻烦都爆发了!我用x86版本重新加载了mingw,除了MOC和AUTOUIC之外,其他一切都正常工作。在CMakeLists.txt文件中,我在操作系统之间更改的唯一行是指向Qt安装的行。正如我所说的,我在C++中对这一切都很陌生,在我的Mag文件中可能有一些“错误”,但是它在OSX上工作,但在Windows中不适用。p>

在Windows 10上构建时发生Qt MOC故障 我已经使用PyQT多年了,不得不使用CYONE重新使用C++中的项目。我已经设法(过了一段时间)在我的MacBookPro上构建了代码,但是当我将项目移动到Windows10时,所有的麻烦都爆发了!我用x86版本重新加载了mingw,除了MOC和AUTOUIC之外,其他一切都正常工作。在CMakeLists.txt文件中,我在操作系统之间更改的唯一行是指向Qt安装的行。正如我所说的,我在C++中对这一切都很陌生,在我的Mag文件中可能有一些“错误”,但是它在OSX上工作,但在Windows中不适用。p>,c++,windows,qt,cmake,C++,Windows,Qt,Cmake,我能够手动编译ui和资源文件并编译构建,但我不知道如何解决这个问题 任何帮助和指导都将不胜感激 ======================[构建|垃圾启动程序|调试]============================ C:\Users\a.firehart.CLion2019.3\system\cygwin\u cmake\bin\cmake.exe --build/cygdrive/c/Users/a.firehart/CLionProjects/crapsStarter/cmake-

我能够手动编译ui和资源文件并编译构建,但我不知道如何解决这个问题

任何帮助和指导都将不胜感激

======================[构建|垃圾启动程序|调试]============================ C:\Users\a.firehart.CLion2019.3\system\cygwin\u cmake\bin\cmake.exe --build/cygdrive/c/Users/a.firehart/CLionProjects/crapsStarter/cmake-build-debug --目标骰子启动程序--j 6[14%]目标骰子启动程序的自动MOC

AutoMoc子进程错误 ------------------------主运行中心进程未能编译“/cygdrive/c/Users/a.firehart/CLionProjects/crapsStarter/craps.h” 进入
“/cygdrive/c/Users/a.firehart/CLionProjects/crapsStarter/cmake build debug/crapsStarter\u autogen/EWIEGA46WW/moc\u craps.cpp”

命令 -------C:/Qt/5.14.1/winrt_x64_msvc2017/bin/moc.exe-I/cygdrive/C/Users/a.firehart/CLionProjects/crapsStarter/cmake-build-debug -I/cygdrive/c/Users/a.firehart/CLionProjects/crapsStarter-I/cygdrive/c/Users/a.firehart/CLionProjects/crapsStarter/cmake-build-debug/crapsStarter\u autogen/include -IC:/Qt/5.14.1/winrt_x64_msvc2017/include-IC:/Qt/5.14.1/winrt_x64_msvc2017/include/QtCore-IC:/Qt/5.14.1/winrt_x64_msvc2017//mkspecs/winrt-x64-msvc2017-IC:/Qt/5.14.1/winrt_x64_msvc2017/include/QtGui-IC:/Qt/5.14.1/winrt_x64_msvc2017/include-I/usr/lib/gcc/x86_64-pc-cygwin/9.2.0/include/c++-I/usr/lib/gcc/x86_64-pc-cygwin/9.2.0/include/c++/x86_64-pc-cygwin-I/usr/lib/x86_64-pc-cygwin/9.2.0/include/c++/c++/backward-I/usr/lib/gcc/c86-cygwin/c86-pc-cygwin/cygwin/9.2.0/cyqt-qt-du核心部件/cygdrive/c/Users/a.firehart/CLionProjects/crapsStarter/cmake build debug/crapsStarter\u autogen/moc\u predefs.h -o/cygdrive/c/Users/a.firehart/CLionProjects/crapsStarter/cmake-build-debug/crapsStarter\u autogen/EWIEGA46WW/moc\u craps.cpp /cygdrive/c/Users/a.firehart/CLionProjects/crapsStarter/craps.h

输出 make[3]:*[CMakeFiles/crapsStarter\u autogen.dir/build.make:58: CMakeFiles/CRASSSTARTER\U autogen]错误1生成[2]: [CMakeFiles/Makefile2:104:CMakeFiles/crapsStarter\u autogen.dir/all] 错误2生成[1]:[CMakeFiles/Makefile2:84: CMakeFiles/crapsStarter.dir/rule]错误2生成:**[Makefile:118: CrassStarter]错误2

*****************My CMakeLists.txt文件内容*******************************

cmake_minimum_required(VERSION 3.15)
project(crapsStarter)

set(CMAKE_CXX_STANDARD 17)

#set(RESOURCES crapsResources.qrc)
set(CMAKE_AUTOMOC ON)
set(CMAKE_INCLUDE_CURRENT_DIR ON)
#set(CMAKE_AUTOUIC ON)
include_directories(cmake-build-debug/crapsStarter_autogen/include)

# Tell cmake where Qt is located
set(Qt5_DIR "C:/Qt/5.14.1/winrt_x64_msvc2017/lib/cmake/Qt5")
set(QT_INCLUDES "C:/Qt/5.14.1/winrt_x64_msvc2017/include")
MESSAGE("QT_INCLUDES: ${QT_INCLUDES}")

# Include a library search using find_package()
# via REQUIRED, specify that libraries are required
set(Qt5 NEED)
find_package(Qt5 COMPONENTS Core Gui Widgets REQUIRED)

set(SOURCE_FILES craps.cpp die.cpp crapsGame.cpp crapsResources.cpp)
add_executable(crapsStarter ${SOURCE_FILES})

# specify which libraries to connect
target_link_libraries(${PROJECT_NAME} Qt5::Core)
target_link_libraries(${PROJECT_NAME} Qt5::Gui)
target_link_libraries(${PROJECT_NAME} Qt5::Widgets)
废话

//
// Created by Arana Fireheart on 2/2/20.
//

#ifndef CRAPSSTARTER_CRAPS_H
#define CRAPSSTARTER_CRAPS_H

#include "ui_CrapsMainWindow.h"
#include "die.h"
#include <QMainWindow>

class CrapsMainWindow : public QMainWindow, private Ui::CrapsMainWindow {
    Q_OBJECT

    public:
        CrapsMainWindow(QMainWindow *parent = nullptr);
        void printStringRep();
        void updateUI();

    private:
        Die die1, die2;
        bool firstRoll = true;
        int winsCount = 0;

    public Q_SLOTS:
        void rollButtonClickedHandler();
};

#include "moc_craps.cpp"
#endif //CRAPSSTARTER_CRAPS_H
//
//由Arana Fireheart于20年2月2日创作。
//
#如果没有垃圾,就开始吧
#定义垃圾开始垃圾
#包括“ui\u CrapsMainWindow.h”
#包括“die.h”
#包括
类CrapsMainWindow:public QMainWindow,private Ui::CrapsMainWindow{
Q_对象
公众:
CrapsMainWindow(QMainWindow*parent=nullptr);
void printStringRep();
void updateUI();
私人:
模具die1、die2;
bool firstRoll=true;
int-winscont=0;
公共Q_槽:
无效rollButtonClickedHandler();
};
#包括“moc_craps.cpp”
#endif//crassstarter\u crass\H
废话

#include <iostream>
#include <stdio.h>
//#include <QApplication>
//#include <QWidget>
//#include <QGridLayout>
//#include <QPushButton>
//#include <QLabel>
//#include <QPixmap>

#include "die.h"
#include "craps.h"
#include "ui_CrapsMainWindow.h"


CrapsMainWindow :: CrapsMainWindow(QMainWindow *parent) {
    // Build a GUI window with two dice.

    setupUi(this);

    Die die1, die2;
    bool firstRoll = true;
    int winsCount = 0;

    QObject::connect(rollButton, SIGNAL(clicked()), this, SLOT(rollButtonClickedHandler()));
}
void CrapsMainWindow::printStringRep() {
    // String representation for Craps.
    char buffer[25];
    int length =  sprintf(buffer, "Die1: %i\nDie2: %i\n", die1.getValue(), die2.getValue());
    printf("%s", buffer);
}
void CrapsMainWindow::updateUI() {
//    printf("Inside updateUI()\n");
    std::string die1ImageName = ":/dieImages/" + std::to_string(die1.getValue());
    std::string die2ImageName = ":/dieImages/" + std::to_string(die2.getValue());
    die1UI->setPixmap(QPixmap(QString::fromStdString(die1ImageName)));
    die2UI->setPixmap(QPixmap(QString::fromStdString(die2ImageName)));

    currentBankValueUI->setText(QString::fromStdString("100"));
}

// Player asked for another roll of the dice.
void CrapsMainWindow::rollButtonClickedHandler() {
//void Craps::rollButtonClickedHandler() {
    printf("Roll button clicked\n");
    die1.roll();
    die2.roll();
    printStringRep();
    updateUI();
}
#包括
#包括
//#包括
//#包括
//#包括
//#包括
//#包括
//#包括
#包括“die.h”
#包括“废话”
#包括“ui\u CrapsMainWindow.h”
CrapsMainWindow::CrapsMainWindow(QMainWindow*父级){
//用两个骰子构建一个GUI窗口。
setupUi(本);
模具die1、die2;
bool firstRoll=true;
int-winscont=0;
QObject::connect(滚动按钮,信号(单击()),此,插槽(滚动按钮ClickedHandler());
}
void CrapsMainWindow::printStringRep(){
//垃圾的字符串表示法。
字符缓冲区[25];
int length=sprintf(缓冲区,“Die1:%i\nDie2:%i\n”,Die1.getValue(),die2.getValue());
printf(“%s”,缓冲区);
}
void CrapsMainWindow::updateUI(){
//printf(“内部更新()\n”);
std::string die1ImageName=“:/diemages/”+std::to_string(die1.getValue());
std::string die2ImageName=“:/diemages/”+std::to_string(die2.getValue());
die1UI->setPixmap(QPixmap(QString::fromStdString(die1ImageName));
die2UI->setPixmap(QPixmap(QString::fromStdString(die2ImageName));
currentBankValueUI->setText(QString::fromStdString(“100”);
}
//玩家要求再掷一次骰子。
void CrapsMainWindow::rollButtonClickedHandler(){
//void Craps::rollButtonClickedHandler(){
printf(“单击滚动按钮”);
die1.滚动();
die2.滚动();
printStringRep();
updateUI();
}

您的头不应在
源文件列表中,仅在源
.cpp
文件中。您可以使用
target\u include\u目录(crasstarter PUBLIC${CMAKE\u CURRENT\u SOURCE\u DIR}包含头
。对我来说,这也很有趣!我从网上找到的“教程”中拼凑了大部分内容。它们不应该已经通过引用包含在cpp文件中吗?我认为我根本不应该在make文件中使用它们。如果不知道更多信息,例如一些内容,很难知道会有什么问题一个答案可能包含一些有用的信息,并考虑检查CMADE <代码> AutoCo.<代码>。谢谢你的提示。我现在对MOC的一些细节和它的用法有了一个更清楚的了解。我想真正的问题在于我对QMa的定义。