Vì vậy, nhiều câu trả lời cho vấn đề này. 0.0
Vì vậy, tôi đã thử nó với Qt5.x từ Win7 đến Win10. Nó đã cho tôi vài giờ để có một giải pháp làm việc tốt mà không tạo ra bất kỳ vấn đề nào đó trong chuỗi:
#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();
}
}
tôi đã cố gắng nó cũng mà không các "CONFIG + = ", nhưng sau đó bạn cần phải chuyển hướng các luồng và tạo bảng điều khiển theo cách của riêng bạn:
#ifdef _WIN32
if (AttachConsole(ATTACH_PARENT_PROCESS) || AllocConsole()){
freopen("CONOUT$", "w", stdout);
freopen("CONOUT$", "w", stderr);
freopen("CONIN$", "r", stdin);
}
#endif
BUT điều này chỉ hoạt động nếu bạn bắt đầu nó thông qua một trình gỡ lỗi, nếu không tất cả các đầu vào đều hướng về phía hệ thống. Có nghĩa là, nếu bạn gõ tên thông qua std :: cin hệ thống sẽ cố gắng thực hiện tên như một lệnh. (rất lạ)
Hai cảnh báo khác cho lần thử này là, bạn không thể sử dụng :: FreeConsole() nó sẽ không đóng nó và nếu bạn khởi động nó thông qua bảng điều khiển, ứng dụng sẽ không đóng .
cuối có một Qt help section in QApplication chủ đề này. Tôi cố gắng ví dụ đó với một ứng dụng và nó không làm việc cho GUI, nó stucked ở đâu đó trong một vòng lặp vô tận và GUI sẽ không được trả lại hay nó chỉ đơn giản treo:
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();
}
Vì vậy, nếu bạn đang sử dụng Windows và Qt chỉ cần sử dụng tùy chọn bảng điều khiển, hãy ẩn bảng điều khiển nếu bạn cần GUI và đóng nó qua lối ra.
Bạn đang ở trên cửa sổ? Bạn có chắc chắn nó không đưa lên một giao diện điều khiển và sau đó ngay lập tức thoát khỏi nó? Tôi chưa bao giờ thực sự sử dụng Qt ngoài các hướng dẫn cơ bản mặc dù – Falmarri
Tôi đang sử dụng Windows và đang chạy ứng dụng từ dòng lệnh. – Rob
Điều này thực sự khá lạ - Tôi nhận thấy rằng không có đầu ra cho giao diện điều khiển trong chế độ GUI, nhưng nếu bạn chạy chương trình của bạn từ commandline và chuyển hướng nó vào tập tin 'myprogram.exe> output.txt', sau đó đầu ra đất trong này tập tin. Có lẽ một cái gì đó đơn giản như phiên bản cửa sổ của 'mèo' có thể dễ dàng đi xung quanh vấn đề? –