私はQt 5.3を学習しようとしていますが、これは私の最初のプログラム(hello world)です。ビルドしようとすると、次のエラーが表示されます。
テスト式の後の余分な文字。
このエラーが発生する理由はまったくわかりません。 Qtが正しくインストールされているかどうかを確認するために、インターネットからいくつかの簡単なコードを取得しました。これがコードです:
#include <QApplication>
#include <QPushButton>
int main(int argc, char **argv)
{
QApplication app (argc, argv);
QPushButton button ("Hello world !");
button.show();
return app.exec();
}
エラーは3、5、6、8行目に表示されます。Qtはまったくの初心者なので、簡単に説明してください。
.proファイルを確認します。最後ではない行の最後にブラックスラッシュがないためです。
HEADERS += Qt/mainwindow.h \
Qt/MPrintableWidget.h \
Qt/MPrintableWidgetGroup.h # Oooops forgot the \ here
Qt/MFixedSizeDialog.h \
Qt/MScreenPage.h
下の行を除くすべての行は、バックスラッシュで終了する必要があります。
このコードはここでコンパイル、リンク、実行されるので、マシン上のインクルードファイルに関する問題だけが考えられます。
まず、Qt5を使用していて、Qt5インクルードファイルがあることを確認してください。
次に、コマンドラインからコンパイルしてみます。これは、Qt5とg ++を使用するLinuxボックスで使用したものです。
g++ -fPIC -I /usr/include/qt5/QtWidgets -I /usr/include/qt5 qttest.cpp -o qttest -lQt5Core -lQt5Widgets
どのオペレーティングシステムを使用しているか、どのように構築しているかについては、まだ述べていません。何を使用していても、実際に正しいファイルを使用していることを確認する必要があります。
Windowsでこのエラーメッセージが発生しました。 Qt Creatorによって作成された新しいプロジェクトは、.pro
を解析またはビルドできませんでした。中心的な問題は、すべてのcmd.exe
インスタンスのコードページを変更するために追加したレジストリキーです。これにより、Unicode出力をより適切にサポートできるようになります。
レジストリキーの名前はAutorun
で、文字列値はchcp 65001
でした。 (このキーが存在する可能性のあるレジストリ内のさまざまな場所があります。Regeditの検索機能を使用して、そのようなキーがあるかどうかを確認してください。鉱山は、GUID for私の特定のユーザー。)私が経験していた症状は、新しいプロジェクトで次のようなエラーメッセージでした。
C:/Qt/5.11/msvc2017_64/mkspecs/features/toolchain.prf(208): Extra characters after test expression.
Project ERROR: Compiler produced empty value for Active.
C:/Qt/5.11/msvc2017_64/mkspecs/features/toolchain.prf(208): Extra characters after test expression.
Error while parsing file C:\Users\phrogz\Documents\FooBar\FooBar.pro. Giving up.
問題は、Qt CreatorがWindowsでcmd.exe
を使用してコードを実行し、これからのテキスト出力を解析することです。 Qt Creatorには、Autorunが起動時にコマンドプロセッサに追加の出力を配置すると失敗する、出力の壊れやすいテキストパーサーが必要です。 (おそらく、特定の行番号から始まり、cmd.exeスタートアップスパムをスキップしますか?)
私の解決策は、自動実行コマンドをchcp 65001
から@chcp 65001>nul
に変更することで、スパムを防止しましたActive code page: 65001
出力に。
this Qt Forum thread 。でこの問題が発見され、議論されているのを見つけました
同じエラーが発生しました。 .proファイルにあります。よく開いて確認できます。 -行末にブラックスラッシュを入れるのを忘れた。 -(同じ行で)ブラックスラッシュの後に別の文字を置きます。