Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/150.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ Qt4/C++;/CMake-没有合适的默认构造函数可用_C++_Qt_Qt4_Cmake_Qt Creator - Fatal编程技术网

C++ Qt4/C++;/CMake-没有合适的默认构造函数可用

C++ Qt4/C++;/CMake-没有合适的默认构造函数可用,c++,qt,qt4,cmake,qt-creator,C++,Qt,Qt4,Cmake,Qt Creator,我正在使用QtCreator 3.1.2/Qt4.8.6和CMake3.0.0。请注意,如果您关心我的CMakeLists.txt,我将使用SceniX API,但这并不影响这一点。但是,在编译Qt Creator生成的UI时,出现以下错误: D:\Projects\C Projects\MyProjectName\ui\masterui.cpp:6: error: C2512: 'Ui::MasterUI' : no appropriate default constructor availa

我正在使用QtCreator 3.1.2/Qt4.8.6和CMake3.0.0。请注意,如果您关心我的CMakeLists.txt,我将使用SceniX API,但这并不影响这一点。但是,在编译Qt Creator生成的UI时,出现以下错误:

D:\Projects\C Projects\MyProjectName\ui\masterui.cpp:6: error: C2512: 'Ui::MasterUI' : no appropriate default constructor available
但是,默认构造函数是可用的。这些是Qt Creator和安装程序生成的默认文件,用于CMake。他们可能会在实验中稍微修改,但他们从来没有工作过

我将按此顺序共享我的masterui.h/masterui.cpp/CMakeLists.txt

masterui.h

#ifndef MASTERUI_H
#define MASTERUI_H

#include <QWidget>

namespace Ui {
class MasterUI;
}

class MasterUI : public QWidget
{
    Q_OBJECT

public:
    explicit MasterUI(QWidget *parent = 0);
    ~MasterUI();

private:
    Ui::MasterUI *ui;
};

#endif // MASTERUI_H
/********************************************************************************
** Form generated from reading UI file 'masterui.ui'
**
** Created by: Qt User Interface Compiler version 4.8.6
**
** WARNING! All changes made in this file will be lost when recompiling UI file!
********************************************************************************/

#ifndef UI_MASTERUI_H
#define UI_MASTERUI_H

#include <QtCore/QVariant>
#include <QtGui/QAction>
#include <QtGui/QApplication>
#include <QtGui/QButtonGroup>
#include <QtGui/QHeaderView>
#include <QtGui/QWidget>

QT_BEGIN_NAMESPACE

class Ui_masterWidget
{
public:

    void setupUi(QWidget *masterWidget)
    {
        if (masterWidget->objectName().isEmpty())
            masterWidget->setObjectName(QString::fromUtf8("masterWidget"));
        masterWidget->resize(640, 360);
        masterWidget->setStyleSheet(QString::fromUtf8("background-color: rgb(71, 71, 71);"));

        retranslateUi(masterWidget);

        QMetaObject::connectSlotsByName(masterWidget);
    } // setupUi

    void retranslateUi(QWidget *masterWidget)
    {
        masterWidget->setWindowTitle(QApplication::translate("masterWidget", "Form", 0, QApplication::UnicodeUTF8));
    } // retranslateUi

};

namespace Ui {
    class masterWidget: public Ui_masterWidget {};
} // namespace Ui

QT_END_NAMESPACE

#endif // UI_MASTERUI_H
CMakeLists.txt

cmake_minimum_required(VERSION 2.6)

project(MyProjectName)

file(TO_CMAKE_PATH $ENV{SCENIXHOME} SCENIX_HOME)
set(CMAKE_MODULE_PATH "${SCENIX_HOME}/CMake")
set(CMAKE_RUNTIME_OUTPUT_DIRECTORY "../exe/MyProjectName_exe")
set(CMAKE_LIBRARY_OUTPUT_DIRECTORY "../exe/MyProjectName_exe")

file(GLOB sources
        "src/*.cpp")

file(GLOB headers
        "inc/*.h")

find_package(OpenGL REQUIRED)
find_package(SceniX REQUIRED)
find_package(NVQt4 QUIET)
find_package(Qt4 REQUIRED)

set( QT_USE_QTOPENGL TRUE )
include( ${QT_USE_FILE} )

SCENIX_SET_BINARY_FOLDERS()

QT4_ADD_RESOURCES(QTResources)

QT4_WRAP_UI(UIsrc "ui/masterui.ui")
QT4_WRAP_CPP(MOCsrc "ui/masterui.h")
ADD_EXECUTABLE(UIexe "src/main.cpp" "ui/masterui.cpp" ${MOCsrc} ${UIsrc})
file( GLOB UICsources
        "${CMAKE_CURRENT_BINARY_DIR}/*.h")
set( UIC_SOURCES "${UICsources}")

set( SCENIX_COMMON_BASE "${SCENIX_HOME}/samples/common" )

file( GLOB uisources
      "${SCENIX_COMMON_BASE}/src/ui/*.cpp" )

set( UI_SOURCES "${uisources}" )

set( MyProjectName_SOURCES
  ${sources}
  ${SCENIX_COMMON_BASE}/src/SimpleScene.cpp
  ${SCENIX_COMMON_BASE}/src/MeshGenerator.cpp
  ${SCENIX_COMMON_BASE}/src/SceneFunctions.cpp
  ${SCENIX_COMMON_BASE}/src/SceniXWidget.cpp
  ${SCENIX_COMMON_BASE}/Qt4/src/SceniXQGLContext.cpp
  ${SCENIX_COMMON_BASE}/Qt4/src/SceniXQGLWidget.cpp
  ${SCENIX_COMMON_BASE}/Qt4/src/SceniXQGLSceneRendererWidget.cpp
  ${UI_SOURCES}
  ${UIC_SOURCES}
  ${QTResources}
  ${UICsources}
)

set ( MyProjectName_HEADERS
  ${headers}
  ${SCENIX_COMMON_BASE}/inc/SimpleScene.h
  ${SCENIX_COMMON_BASE}/inc/MeshGenerator.h
  ${SCENIX_COMMON_BASE}/inc/SceneFunctions.h
  ${SCENIX_COMMON_BASE}/inc/SceniXWidget.h
  ${SCENIX_COMMON_BASE}/Qt4/inc/SceniXQGLContext.h
  ${SCENIX_COMMON_BASE}/Qt4/inc/SceniXQGLWidget.h
  ${SCENIX_COMMON_BASE}/Qt4/inc/SceniXQGLSceneRendererWidget.h
)

include_directories( ${SCENIX_INCLUDES} )
include_directories( ${SCENIXRT_INCLUDES} )
include_directories( "." )
include_directories( "inc" )
include_directories( "${SCENIX_COMMON_BASE}/inc" )
include_directories( "${SCENIX_COMMON_BASE}/Qt4/inc" )
include_directories( "${CMAKE_CURRENT_BINARY_DIR}" )

add_executable( MyProjectName
  ${MyProjectName_SOURCES}
  ${MyProjectName_HEADERS}
)

target_link_libraries( MyProjectName
  ${QT_LIBRARIES}
  ${SCENIX_LIBS}
  ${SCENIXRT_LIBS}
  ${OPENGL_gl_LIBRARY}
  ${QT_QTMAIN_LIBRARY}
)


if(TARGET SceniX)
  add_dependencies( MyProjectName SceniX SceniXRT )
  add_perforce_to_target( MyProjectName )
endif()

set_target_properties( MyProjectName PROPERTIES FOLDER "Samples")

ui\u masterui.h

#ifndef MASTERUI_H
#define MASTERUI_H

#include <QWidget>

namespace Ui {
class MasterUI;
}

class MasterUI : public QWidget
{
    Q_OBJECT

public:
    explicit MasterUI(QWidget *parent = 0);
    ~MasterUI();

private:
    Ui::MasterUI *ui;
};

#endif // MASTERUI_H
/********************************************************************************
** Form generated from reading UI file 'masterui.ui'
**
** Created by: Qt User Interface Compiler version 4.8.6
**
** WARNING! All changes made in this file will be lost when recompiling UI file!
********************************************************************************/

#ifndef UI_MASTERUI_H
#define UI_MASTERUI_H

#include <QtCore/QVariant>
#include <QtGui/QAction>
#include <QtGui/QApplication>
#include <QtGui/QButtonGroup>
#include <QtGui/QHeaderView>
#include <QtGui/QWidget>

QT_BEGIN_NAMESPACE

class Ui_masterWidget
{
public:

    void setupUi(QWidget *masterWidget)
    {
        if (masterWidget->objectName().isEmpty())
            masterWidget->setObjectName(QString::fromUtf8("masterWidget"));
        masterWidget->resize(640, 360);
        masterWidget->setStyleSheet(QString::fromUtf8("background-color: rgb(71, 71, 71);"));

        retranslateUi(masterWidget);

        QMetaObject::connectSlotsByName(masterWidget);
    } // setupUi

    void retranslateUi(QWidget *masterWidget)
    {
        masterWidget->setWindowTitle(QApplication::translate("masterWidget", "Form", 0, QApplication::UnicodeUTF8));
    } // retranslateUi

};

namespace Ui {
    class masterWidget: public Ui_masterWidget {};
} // namespace Ui

QT_END_NAMESPACE

#endif // UI_MASTERUI_H
/********************************************************************************
**从读取UI文件“masterui.UI”生成的表单
**
**创建人:Qt用户界面编译器版本4.8.6
**
**警告!重新编译UI文件时,此文件中所做的所有更改都将丢失!
********************************************************************************/
#ifndef UI_MASTERUI_H
#定义UI_MASTERUI_H
#包括
#包括
#包括
#包括
#包括
#包括
QT_开始名称空间
类Ui_主控件
{
公众:
无效设置UI(QWidget*masterWidget)
{
if(masterWidget->objectName().isEmpty())
masterWidget->setObjectName(QString::fromUtf8(“masterWidget”);
masterWidget->调整大小(640360);
masterWidget->setStyleSheet(QString::fromUtf8(“背景色:rgb(71,71,71);”));
重传(主控件);
QMetaObject::connectSlotsByName(masterWidget);
}//setupUi
无效重传(QWidget*masterWidget)
{
masterWidget->setWindowTitle(QApplication::translate(“masterWidget”,“Form”,0,QApplication::Unicodeut8));
}//重新翻译
};
名称空间用户界面{
类masterWidget:public Ui_masterWidget{};
}//名称空间用户界面
QT_END_名称空间
#endif//UI_MASTERUI_H

在“Ui\u MasterUI.h”中没有Ui::MasterUI类,最接近的类是Ui::masterWidget,因此会出现错误

我猜您在Qt设计器中将MasterUI重命名为masterWidget,或者通过编辑MasterUI.ui。这将导致Qt使用ui::masterWidget类而不是ui::MasterUI生成“ui\u MasterUI.h”。解决方案是将masterWidget重命名回MasterUI,或者将MasterUI.cpp和MasterUI.h更改为引用Ui::masterWidget而不是Ui::MasterUI


您确定使用qmake仍然可以编译相同的源文件吗?

在“Ui\u MasterUI.h”中没有Ui::MasterUI类,最接近的是Ui::masterWidget,因此您会得到错误

我猜您在Qt设计器中将MasterUI重命名为masterWidget,或者通过编辑MasterUI.ui。这将导致Qt使用ui::masterWidget类而不是ui::MasterUI生成“ui\u MasterUI.h”。解决方案是将masterWidget重命名回MasterUI,或者将MasterUI.cpp和MasterUI.h更改为引用Ui::masterWidget而不是Ui::MasterUI


您确定使用qmake仍然可以编译相同的源文件吗?

是什么让您认为“默认构造函数可用”?为
Ui::MasterUI
定义的唯一构造函数接受一个参数。没有该参数,结果是相同的。它与QMake一起工作。从构造函数中删除“explicit”关键字是否有帮助?遗憾的是,没有任何区别。默认构造函数引用的是“ui_MasterUI.h”中的类,文件的内容是什么,是否存在默认构造函数?是什么让您认为“默认构造函数可用”?为
Ui::MasterUI
定义的唯一构造函数接受一个参数。没有该参数,结果是相同的。它与QMake一起工作。从构造函数中删除“explicit”关键字是否有帮助?遗憾的是,没有任何区别。默认构造函数引用的是“ui_MasterUI.h”中的类,文件的内容是什么,是否存在默认构造函数?结果是,更改根小部件的对象名会更改ui_masterui.h文件中的整个类名。谢谢你。不幸的是,现在我必须解决71个未解决的外部问题,并且不知道从哪里开始,但我认为这是另一回事。事实证明,更改根小部件的对象名会更改ui_masterui.h文件中的整个类名。谢谢你。不幸的是,现在我必须解决71个未解决的外部问题,并且不知道从哪里开始,但我认为这是另一回事。