首頁>Program>source

我有一个執行在windows上的Qt GUI應用程式,该應用程式允许傳遞命令列選項,並且在某些情况下,我想向控製台輸出一條訊息然後退出,例如:

int main(int argc, char *argv[])
{
  QApplication a(argc, argv);
  if (someCommandLineParam)
  {
    std::cout << "Hello, world!";
    return 0;
  }
  MainWindow w;
  w.show();
  return a.exec();
}

但是,当我从命令提示符執行應用程式時,控製台訊息不会出現.有谁知道我该怎麼做?

最新回復
  • 6月前
    1 #

    windows並不真正支援双模式應用程式.

    要查看控製台輸出,您需要建立一个控製台應用程式

    CONFIG += console
    

    但是,如果双击该程式以啟動GUI模式版本,則会出現一个控製台視窗,這可能不是您想要的.為了防止出現控製台視窗,您必须建立一个GUI模式應用程式,在這種情况下,控製台中將没有任何輸出。

    一个想法可能是建立第二个小型應用程式,它是一个控製台應用程式並提供輸出.這可以呼叫第二个来完成工作.

    或者您可以將所有功能放在DLL中,然後建立两个版本的.exe檔案,這些檔案具有呼叫DLL的非常簡單的主要功能.一種用於GUI,一種用於控製台。

  • 6月前
    2 #

    添加:

    #ifdef _WIN32
    if (AttachConsole(ATTACH_PARENT_PROCESS)) {
        freopen("CONOUT$", "w", stdout);
        freopen("CONOUT$", "w", stderr);
    }
    #endif
    

    main()的頂部 .仅当程式在控製台中啟動時,這才使輸出到控製台,並且在其他情况下不会弹出控製台視窗.如果要建立控製台視窗以在控製台外執行應用程式時顯示訊息,則可以將條件更改為:

    if (AttachConsole(ATTACH_PARENT_PROCESS) || AllocConsole())
    

  • 6月前
    3 #

    void Console()
    {
        AllocConsole();
        FILE *pFileCon = NULL;
        pFileCon = freopen("CONOUT$", "w", stdout);
        COORD coordInfo;
        coordInfo.X = 130;
        coordInfo.Y = 9000;
        SetConsoleScreenBufferSize(GetStdHandle(STD_OUTPUT_HANDLE), coordInfo);
        SetConsoleMode(GetStdHandle(STD_OUTPUT_HANDLE),ENABLE_QUICK_EDIT_MODE| ENABLE_EXTENDED_FLAGS);
    }
    int main(int argc, char *argv[])
    {
        Console();
        std::cout<<"[email protected]@";
        qDebug()<<"start!";
    

    您不能像其他人所說的那樣使用std :: cout,即使某些代碼不能包含" qdebug",我的方法也是完美的!

  • 6月前
    4 #

    在以下情况下無法向控製台輸出訊息 使用 QT += gui

    fprintf(stderr, ...) 也無法print輸出。

    使用 QMessageBox 而是顯示訊息。

  • 6月前
    5 #

    哦,您可以在使用 QT += gui時輸出訊息 和 CONFIG += console

    您需要 printf("foo bar") 但是 cout << "foo bar" 不起作用

  • sql:在oracle中用sequencenextval建立表
  • java:Swing是否支援windows 7樣式的檔案選擇器?