Так много ответов на эту тему.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 + = console», но тогда вам нужно перенаправить потоки и создать консоль самостоятельно:
#ifdef _WIN32
if (AttachConsole(ATTACH_PARENT_PROCESS) || AllocConsole()){
freopen("CONOUT$", "w", stdout);
freopen("CONOUT$", "w", stderr);
freopen("CONIN$", "r", stdin);
}
#endif
НО это работает, только если вызапустите его через отладчик, в противном случае все входные данные также будут направлены в систему.Значит, если вы вводите имя через std :: cin, система пытается выполнить имя как команду.(очень странно)
Два других предупреждения для этой попытки состоят в том, что вы не можете использовать :: FreeConsole (), он не закроет его, и если вы запустите его через консольприложение не закроется.
Последний раздел содержит раздел справки Qt в QApplication на эту тему.Я попробовал этот пример с приложением, и оно не работает для GUI , оно застряло где-то в бесконечном цикле, и 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, просто используйте опцию консоли, скройте консоль, если вам нужен графический интерфейс, и закройте ее через выход.