所以很多回答這個話題。 0.0
所以我試了Qt5。x從Win7到Win10。我花了幾個小時有不鏈產生任何問題的地方了良好的合作解決方案:
#include "mainwindow.h"
#include <QApplication>
#include <windows.h>
#include <stdio.h>
#include <iostream>
//
// Add to project file:
// CONFIG += console
//
int main(int argc, char *argv[])
{
if(argc < 2)
{
#if defined(Q_OS_WIN)
::ShowWindow(::GetConsoleWindow(), SW_HIDE); //hide console window
#endif
QApplication a(argc, argv);
MainWindow *w = new MainWindow;
w->show();
int e = a.exec();
delete w; //needed to execute deconstructor
exit(e); //needed to exit the hidden console
return e;
}
else
{
QCoreApplication a(argc, argv);
std::string g;
std::cout << "Enter name: ";
std::cin >> g;
std::cout << "Name is: " << g << std::endl;
exit(0);
return a.exec();
}
}
我試了一下還沒有的「CONFIG + =控制檯」,但你需要重定向數據流和創建你自己的控制檯:
#ifdef _WIN32
if (AttachConsole(ATTACH_PARENT_PROCESS) || AllocConsole()){
freopen("CONOUT$", "w", stdout);
freopen("CONOUT$", "w", stderr);
freopen("CONIN$", "r", stdin);
}
#endif
BUT這隻有在你通過調試器啓動時纔有效,否則所有的輸入都會直接指向系統。意思是,如果你通過std :: cin鍵入一個名字,系統會嘗試執行命令作爲命令。 (非常奇怪)
其他兩個警告這個嘗試是,你不能使用:: FreeConsole()它不會關閉它,如果你通過控制檯啓動它,應用程序將不會關閉。
最後還有一個Qt help section in QApplication這個話題。我試過的例子有一個應用程序,它不會爲GUI工作,它在一個無限循環的地方stucked和GUI不會被渲染或者它只是崩潰:
QCoreApplication* createApplication(int &argc, char *argv[])
{
for (int i = 1; i < argc; ++i)
if (!qstrcmp(argv[i], "-no-gui"))
return new QCoreApplication(argc, argv);
return new QApplication(argc, argv);
}
int main(int argc, char* argv[])
{
QScopedPointer<QCoreApplication> app(createApplication(argc, argv));
if (qobject_cast<QApplication *>(app.data())) {
// start GUI version...
} else {
// start non-GUI version...
}
return app->exec();
}
因此,如果您使用的是Windows和Qt,那麼只需使用控制檯選項,如果需要使用GUI並通過退出關閉它,請隱藏控制檯。
你在窗戶上嗎?你確定它沒有啓動一個控制檯,然後立即退出嗎?我從來沒有真正使用過基本教程以外的Qt,儘管 – Falmarri 2010-07-29 08:19:10
我在Windows上,並且正在從命令行運行應用程序。 – Rob 2010-07-29 08:23:04
這實際上很奇怪 - 我注意到在GUI模式下沒有輸出到控制檯,但是如果從命令行運行程序並將其重定向到文件'myprogram.exe> output.txt',然後輸出到此處文件。也許像Windows版本的「貓」這樣簡單的東西可以輕鬆解決問題? – 2013-03-23 00:42:49