我对Qt比较陌生,正在经历许多教程。一切都很好。编译并运行所有脚本。 然后,在某些时候,即使是使用Qt Creator 4.3.1创建的新Qt小部件应用程序,我也会收到错误:
C:\ \Documents\111\main.cpp:-1: In function 'int qMain(int, char**)':
C:\ \Documents\111\main.cpp:6: error: variable 'QApplication a' has initializer but incomplete type
QApplication a(argc, argv);
^
C:\ \Documents\111\main.cpp:11: warning: control reaches end of non-void function [-Wreturn-type]
}
^
我不确定发生了什么,但似乎有些设置搞砸了。
包含QApplication
,脚本中不会遗漏。
111.pro
# Project created by QtCreator 2018-02-23T01:36:28
QT += core gui
greaterThan(QT_MAJOR_VERSION, 4): QT += widgets
TARGET = 111
TEMPLATE = app
DEFINES += QT_DEPRECATED_WARNINGS
#DEFINES += QT_DISABLE_DEPRECATED_BEFORE=0x060000 # disables all the APIs deprecated before Qt 6.0.0
SOURCES += \
main.cpp \
mainwindow.cpp
HEADERS += \
mainwindow.h
FORMS += \
mainwindow.ui
main.cpp
#include "mainwindow.h"
#include <QApplication>
int main(int argc, char *argv[])
{
QApplication a(argc, argv);
MainWindow w;
w.show();
return a.exec();
}
mainview.cpp
#include "mainwindow.h"
#include "ui_mainwindow.h"
MainWindow::MainWindow(QWidget *parent) :
QMainWindow(parent),
ui(new Ui::MainWindow)
{
ui->setupUi(this);
}
MainWindow::~MainWindow()
{
delete ui;
}
在我看来,尝试从https://en.ids-imaging.com/open-source.html运行qt5.6_src.zip
示例后出现此问题。
答案 0 :(得分:1)
如果没有完整的代码,我猜您需要将#include <QApplication>
添加到main.cpp
错误消息告诉您缺少的内容。
答案 1 :(得分:0)
根据Qt's docs,构造函数的签名是QApplication(int &argc, char **argv)
。
因此,如果从QApplication
继承,则子类的构造函数必须通过引用传递argc
。根据您的描述,您的子类的构造函数实际上是按值传递argc
(即int qMain(int, char**)
)。这会引起一些问题。
答案 2 :(得分:0)
通过删除Qt
和QtCreator
中的<drive>:\Users\<username>\AppData\Roaming\QtProject
文件夹和<drive>:\Users\<username>\AppData\Roaming\Qt
文件夹,可以解决此问题。它存储了不正确的设置,我通过运行开源脚本以某种方式设置。有关更多信息,请访问Where does QtCreator save its settings?。