使用QProcess

时间:2017-01-17 12:33:11

标签: c++ qt makefile qt5

我试图使用g ++编译器生成.exe文件。我没有成功地试过多种方法。

1) QString program = "C:/Strawberry/c/bin/g++";
QStringList arguments;
arguments << "g++ -o dialog C:/Documents/ED30/dialog.cpp";
QProcess process;
process.start(program, arguments);
process.waitForFinished(-1);

2) QProcess::execute("g++ -o dialog2 C:/Documents/ED30/dialog.cpp");

3) QProcess::execute("g++ C:/Documents/ED30/dialog.cpp -o dialog2"); 

每次我都有相同的错误消息:

&#34;在C:/Documents/ED30/dialog.cpp中包含的文件中:1:0: C:/Documents/ED30/dialog.h:4:19:致命错误:QDialog:没有这样的文件或目录 编译终止。&#34;

或者有时没有任何事情发生。

我在Windows 8.1上使用Qt 5.7和MinGW

编辑: 所以在与成员讨论问题后,我做了一些进展。 到目前为止最好的代码是:

system("g++ -o dialog2 -I C:/Qt/5.8/mingw53_32/include -I C:/Qt/5.8/mingw53_32/include/QtGui -I C:/Qt/5.8/mingw53_32/include/QtCore -I C:/Qt/5.8/mingw53_32/include/QtWidgets -L C:/Qt/5.8/mingw53_32/lib C:/Documents/ED30/dialog.cpp");

但这告诉我MinGW不是c ++ 11编译器,它建议我写&#34; -std = c ++ 11或-std = gnu ++ 11&#34;在命令行中以更新编译器。在编译器中输入后,出现以下错误:&#34; Unknow command&#34;。 我尝试使用Qt 5.7和5.8但没有成功。 一个解决方案呢?

2 个答案:

答案 0 :(得分:0)

您尝试编译dialog.cpp的代码似乎使用了Qt(特别是QDialog)。

运行g++ -o dialog2 C:/Documents/ED30/dialog.cpp时,g ++失败,因为它无法找到Qt头文件和库文件的位置。

使其工作的最小命令行是:

g++ -o dialog2 -I<PathToQtheaders> -L<PathToQtLibraries> -lQt5Core -lQt5Gui -lQt5Widgets C:/Documents/ED30/dialog.cpp

您可能需要根据代码需要添加一些额外的库。请注意,如果您只是编译它(不调用moc等),就不能使用Q_OBJECT宏。

提示:查看qmake在标准Qt项目上生成的命令。

额外提示:您可以使用QLibraryInfo::location()获取Qt安装路径。

你的第一个例子应该是:

QString program = "C:/Strawberry/c/bin/g++";
QStringList arguments;
arguments << "-o" << "dialog" << "C:/Documents/ED30/dialog.cpp";
QProcess process = "g++";
process.start(program, arguments);
process.waitForFinished(-1);

答案 1 :(得分:-1)

我认为你错过了Qt标题的include目录。

QProcess :: execute(&#34; g ++ -o dialog -I C:\ QtDir C:/Documents/ED30/dialog.cpp");

QtDir是系统上Qt标头的实际位置,如C:\ Qt \ include

您可能也无法链接。整个命令是:

QProcess :: execute(&#34; g ++ -o dialog -IC:\ QtDir \ include -LC:\ Qtdir \ lib -l Qt C:/Documents/ED30/dialog.cpp")