2012-04-18 39 views
2

プログラムに引数が与えられていない場合は、GUIアプリケーションとして起動し、引数が与えられている場合はコマンドラインで実行されます。 Properties> Linker> SubSystem(Console/SUBSYSTEM:CONSOLE)でコンソールに表示して印刷するためのビジュアルスタジオを得ることができましたが、アプリケーションの起動時にコンソールが常に表示されるようになりました。 GUIを使ってアプリケーションを実行したときに表示されないようにします。私はサイトを見てきましたが、私が見つけたのは、Windowsアプリケーションにしかならないように設定する方法です。両方とも機能するようにする必要があります。C++ - Qt - Visual Studio 2010 - guiとコンソールの両方を使用するアプリケーション

ありがとう!!!

+0

Qtでどうやってやっていますか? QApplicationとQCoreApplicationの両方を使用していますか?もしそうでなければ、QApplication * appを試してみましたか? if(argc == 1)app =新しいQCoreApplication(...); else app = new QApplication(...);? – emsr

+0

現在、私はargcをチェックしています。> 1の場合は、show()を呼び出すのではなく、データを設定して基本的にユーザをクリックする別のコンストラクタを使用しています...私は上記のことに慣れていません私はC++とQtの初心者です.2つの完全な別のクラスがあります.1つはGUIであればメインで構築され、もう1つはコンソールアプリケーションであれば別のクラスです。これは、私が避けようとしている重複の多くをやっているように思えます。 – user1341929

+0

QCoreApplicationはQCoreApplicationを継承するQApplicationの基本クラスです。 QCoreApplicationはコンソールアプリケーション向けです。 (私は上記のQCoreApplication * appを宣言していたはずです)。私は上記のようにあなたがargc == 1とGUIアプリケーションのコンソールアプリケーションを取得する必要がありますようにアプリを割り当てる場合は、私は思っている。 – emsr

答えて

0

Windowsサブシステムを使用し、アプリケーションにGUIがある間にコンソールが必要な場合はAllocConsoleを呼び出すことができます。

+0

私はC#ではなくC++ではなく、これを使うのに問題があります...私が見つけたすべてのリファレンスはQtのアプリケーションではありません。 – user1341929

+0

Qtではなく、これを見てくださいhttp://www.halcyon.com/~ast/dload/guicon.htm&http://comsci.liu.edu/~murali/win32gui/Win32Apps.htm –

+0

ありがとうございますが、私は特にQtを使ってこれを行う必要があります。 .. – user1341929

3

ここで私はその周りに横たわっていたいくつかのコードは、コンソールを作成し、入力と出力を添付します:私はQtのを使用していないが、あなたはそのどこかに固執し、それを動作させることができるはず

#include <Windows.h> 
#include <stdio.h> 
#include <io.h> 
#include <fcntl.h> 

void Console::createConsole() 
{ 
    AllocConsole(); 
    SetConsoleTitle("Debug console"); 

    int hConHandle; 
    long lStdHandle; 

    FILE *fp; // redirect unbuffered STDOUT to the console 
    lStdHandle = (long)GetStdHandle(STD_OUTPUT_HANDLE); 
    hConHandle = _open_osfhandle(lStdHandle, _O_TEXT); 
    fp = _fdopen(hConHandle, "w"); 
    *stdout = *fp; 
    setvbuf(stdout, NULL, _IONBF, 0); 

    // redirect unbuffered STDIN to the console 
    lStdHandle = (long)GetStdHandle(STD_INPUT_HANDLE); 
    hConHandle = _open_osfhandle(lStdHandle, _O_TEXT); 
    fp = _fdopen(hConHandle, "r"); 
    *stdin = *fp; 
    setvbuf(stdin, NULL, _IONBF, 0); 

    // redirect unbuffered STDERR to the console 
    lStdHandle = (long)GetStdHandle(STD_ERROR_HANDLE); 
    hConHandle = _open_osfhandle(lStdHandle, _O_TEXT); 
    fp = _fdopen(hConHandle, "w"); 
    *stderr = *fp; 
    setvbuf(stderr, NULL, _IONBF, 0); 
} 

編集:ヘッダは、これは私が推測する作品

+0

これは多少は機能しますが、大きな問題は解決しません。パラメータが渡された場合、OPはコンソールを使用したかった。ただし、パラメータがコンソールから渡された場合、新しいコンソールが開き、既存のコンソールはまだ出力を受け取りません。 – Cerno

4

を必要として、コメントを追加しました:

#include <QtGui/QApplication> 
#include <QtGui/QMainWindow> 


int 
main(int n_app_args, char **app_arg) 
{ 
    QCoreApplication * application = 0; 

    if (n_app_args == 1) 
    { 
     application = new QCoreApplication(n_app_args, app_arg); 
    } 
    else 
    { 
     application = new QApplication(n_app_args, app_arg); 
     QMainWindow * mainWindow = new QMainWindow(); 
     mainWindow->show(); 
    } 


    return application->exec(); 
} 

は、引数を指定して、それを呼び出して、あなたは少し(空の)ウィンドウを取得します。引数なしでウィンドウを表示しないで呼び出します。

+1

しかし、それは問題を解決しますか? SUBSYSTEM:CONSOLEを使用してコンパイルすると、QApplicationを使用してコンソールが取得され、SUBSYSTEM:WINDOWSを使用してコンパイルすると、コンソールに出力は表示されません。 – Cerno

関連する問題