34

LinuxでQt Creator 4.5をいじっています。私のアプリケーションは Linux では問題なくビルドできますが、Windows でビルドすると、アプリは起動時に常にコンソール ウィンドウを開きます。

そんなことやめていいの?

デフォルトの MinGW セットアップを使用してビルドしていますが、おそらくそれが関連しています。必要に応じて Visual Studio でビルドできますが、最初に何が起こっているのかを理解したいのですが...

編集: Windows で Qt Creator を使用して単純なテスト GUI アプリを作成したところ、この動作は見られませんでした。この動作は、プロジェクトが Linux で作成された方法が原因で発生したか、コンソール ウィンドウが表示される原因となるアプリの動作のいずれかです。他の人に役立つ場合に備えて、診断時に詳細を投稿します。

4

10 に答える 10

23

WindowsでCMakeを使用してこの問題が発生した場合( Amoo のコメントを参照)、ここに解決策があります

つまり、ステートメントに次のように追加WIN32する必要があります。add_executable()

add_executable(GuiApplication WIN32 src/main.cpp)

詳細については、add_executableおよびの CMake ドキュメントを参照してくださいWIN32_EXECUTABLE

于 2016-04-10T10:43:18.297 に答える
20

The short answer is that including the Qt testlib causes the console to appear. Removing it makes it go away.

To explain further, if your .pro file adds testlib to QT, e.g.

QT += sql \
    webkit \
    network \
    testlib

then the final link step is carried out with a line like this

g++ -enable-stdcall-fixup 
   -Wl,-enable-auto-import 
   -Wl,-enable-runtime-pseudo-reloc 
   -mthreads 
   -Wl 
   -Wl,-subsystem,console 
   -o debug\MyApp.exe object_script.MyApp.Debug  
   -L"c:\Qt\2009.01\qt\lib"  
   -lglu32 -lgdi32 -luser32 -lQtWebKitd4 -lQtTestd4 
   -lQtSqld4 -lQtGuid4 -lQtNetworkd4 -lQtCored

We've wound up using the console subsystem! I presume using testlib forces this to happen so that the test output has somewhere to go.

If we now edit the .pro file and remove the reference to testlib and rebuild, we get a link step like this

g++ -enable-stdcall-fixup 
   -Wl,-enable-auto-import 
   -Wl,-enable-runtime-pseudo-reloc 
   -mthreads 
   -Wl 
   -Wl,-subsystem,windows 
   -o debug\Ammotin.exe object_script.Ammotin.Debug  
   -L"c:\Qt\2009.01\qt\lib" 
   -lglu32 -lgdi32 -luser32 -lmingw32 -lqtmaind -lQtWebKitd4 
   -lQtSqld4  -lQtGuid4 -lQtNetworkd4 -lQtCored4

Yay! subsystem is windows, no more console window.

于 2009-04-20T09:21:33.720 に答える
10

これはこの特定の回答の解決策ではないと思いますが(4年後であることを除けば)、このスレッドにたどり着いた多くの人がこの設定を探していると思います:

プロジェクト > ビルドと実行 > 実行設定 > 実行 > [x] ターミナルで実行

それを選択解除し、追加のターミナル ウィンドウなしで QtCreator から GUI を実行します。その後、ターミナル出力が IDE に埋め込まれます。

于 2013-10-06T04:32:10.580 に答える
9

-mwindowsスイッチが提供されていることを確認する必要があります。

編集:

または、makefileに移動して、これをリンカーフラグに追加することもできます。

-Wl,-subsystem,windows
于 2009-04-17T13:14:41.377 に答える
5

console.pro ファイルが変数に追加されていないことを確認してくださいCONFIG。追加することでこれを行うことができます

CONFIG -= console

.pro ファイルの末尾のどこかに。プログラムを起動するたびにポップアップするウィンドウがCONFIG含まれている場合、これはデバッグ出力を印刷するときにも使用されます。consoleしたがって、追加consoleはプログラムをデバッグするときに役立ちます。それ以外の場合は、呼び出しの出力を表示するためにDebugViewなどのツールを使用する必要がありqDebug()ます。

于 2009-04-18T17:44:07.570 に答える
4

私はqmakeの代わりにcmakeを使用しています。set(CMAKE_CXX_FLAGS "-mwindows") を使用した場合、.pro ファイルの QMAKE_CXXFLAGS +=-mwindows が同じように動作するようです。

于 2011-11-13T17:49:33.953 に答える
3

リンカー設定がコンソール アプリ用に設定されているようです。/subsystem:windows オプションを使用するようにリンカーを設定してみてください。コンソール アプリケーションのオプションは /subsystem:console です。プロジェクトを Visual Studio でビルドする場合は、Win32 プロジェクトを作成します。Win32 コンソール アプリを作成しないでください。サブシステムを設定するための Visual Studio のオプションは、[プロジェクト設定] -> [リンカー] -> [システム] -> [サブシステム] の下にあります。Windows (/subsystem:windows) を選択します。

MinGW/gcc でこれを行う方法を調べました。gccのオンライン ドキュメントには、Windows ターゲットのさまざまなオプションが示されています。他の人が述べたように、探しているオプションは -mwindows です。オプション -mwindows は、ウィンドウ化されたアプリを作成します。現在の設定は -mconsole のようです。オプション -mconsole は、コンソール アプリを生成します。これはリンカー オプションです。Qt Creator には詳しくありませんが、Visual Studio と同様にプロジェクト設定を表示する方法が似ていると思います。

于 2009-04-17T13:28:02.047 に答える
1

デフォルトでは、リンカーはコンソール アプリケーションが必要であると想定します。

これを修正するには、コンパイラの引数リストに "-mwindows" を追加します。これにより、必要なライブラリ (-lkernel32、-lgdi32 など) も目に見えない形で追加されます。おそらく、エントリ ポイントを main() から WinMain() に変更する必要があります。

RE: あなたの編集: Qt ビルド システムは "spec" ファイルを使用して変数を追加します。それらは $QTDIR/qt/mkspecs にあります。QCreator で新しい Windows アプリを作成すると、既定の仕様が "win32-g++" に設定され、正しい変数 (Windows アプリ、リンカー フラグなど) が自動的に設定されます。

Linux でプロジェクトを作成したとき、別の仕様が使用されていたため、問題が発生しました。「yourproject.pro.user」ファイルで現在の仕様を確認できます。

于 2009-04-17T13:46:27.167 に答える
0

Qt/2009.05/qt/mkspecs/win32-g++
ファイルを編集 qmake.conf
行を修正
QMAKE_LFLAGS_CONSOLE = -Wl,-subsyetem,console
to
QMAKE_LFLAGS_CONSOLE = -Wl,-subsyetem,windows

???.pro ファイルを変更し (例: 新しい行またはスペースを追加)
、コンパイルすると問題なく
動作します

于 2010-02-02T21:32:42.097 に答える