新的 Qt 小部件应用程序将无法编译
A new Qt widget application will not compile
我对 Qt 比较陌生,正在学习很多教程。一切都很好。所有脚本均已编译并 运行。
然后,在某些时候,即使是使用 Qt Creator 4.3.1 创建的新 Qt 小部件应用程序,我也会收到错误消息:
C:\ \Documents1\main.cpp:-1: In function 'int qMain(int, char**)':
C:\ \Documents1\main.cpp:6: error: variable 'QApplication a' has initializer but incomplete type
QApplication a(argc, argv);
^
C:\ \Documents1\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;
}
在我看来,这个问题是在尝试 运行 qt5.6_src.zip
来自 https://en.ids-imaging.com/open-source.html 的例子后出现的。
根据Qt's docs,构造函数的签名是QApplication(int &argc, char **argv)
。
因此,如果您从 QApplication
继承,那么子类的构造函数必须通过引用传递 argc
。根据您的描述,您的子类的构造函数似乎实际上是按值传递 argc
(即 int qMain(int, char**)
)。那会引起一些问题。
没有完整的代码,我想你需要添加 #include <QApplication>
到 main.cpp
错误消息告诉您缺少什么。
已通过删除 <drive>:\Users\<username>\AppData\Roaming\QtProject
和 <drive>:\Users\<username>\AppData\Roaming\Qt
中的 Qt
文件夹和 QtCreator
文件夹解决此问题。它存储了不正确的设置,我以某种方式通过 运行 开源脚本设置了这些设置。如需更多信息,请访问 Where does QtCreator save its settings?.
我对 Qt 比较陌生,正在学习很多教程。一切都很好。所有脚本均已编译并 运行。 然后,在某些时候,即使是使用 Qt Creator 4.3.1 创建的新 Qt 小部件应用程序,我也会收到错误消息:
C:\ \Documents1\main.cpp:-1: In function 'int qMain(int, char**)':
C:\ \Documents1\main.cpp:6: error: variable 'QApplication a' has initializer but incomplete type
QApplication a(argc, argv);
^
C:\ \Documents1\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;
}
在我看来,这个问题是在尝试 运行 qt5.6_src.zip
来自 https://en.ids-imaging.com/open-source.html 的例子后出现的。
根据Qt's docs,构造函数的签名是QApplication(int &argc, char **argv)
。
因此,如果您从 QApplication
继承,那么子类的构造函数必须通过引用传递 argc
。根据您的描述,您的子类的构造函数似乎实际上是按值传递 argc
(即 int qMain(int, char**)
)。那会引起一些问题。
没有完整的代码,我想你需要添加 #include <QApplication>
到 main.cpp
错误消息告诉您缺少什么。
已通过删除 <drive>:\Users\<username>\AppData\Roaming\QtProject
和 <drive>:\Users\<username>\AppData\Roaming\Qt
中的 Qt
文件夹和 QtCreator
文件夹解决此问题。它存储了不正确的设置,我以某种方式通过 运行 开源脚本设置了这些设置。如需更多信息,请访问 Where does QtCreator save its settings?.