Прежде всего, есть похожие вопросы, но я думаю, что это другой вопрос, потому что терминал Windows появляется только тогда, когда я звоню system()
, а не когда приложение запускается вообще.
У меня есть программа с графическим интерфейсом, написанная на C ++ с Qt и встроенная в qmake с файлом .pro
, с использованием компилятора MinGW. ОС - это Windows 10 в виртуальной коробке.
Я написал код в Ubuntu, где он работает, как задумано (нет терминала ОС, видимого вообще), но сейчас я тестирую его в Windows. Моя проблема в том, что всякий раз, когда я вызываю system()
или что-то подобное в моем коде для выполнения другой программы (предположительно в фоновом режиме), Windows открывает терминал cmd перед моим графическим интерфейсом. У меня в программе много таких вызовов, и поэтому многие из этих окон появляются и исчезают во время работы.
Я установил main () в WinMain () и удалил консоль из конфигурации qmake, но это не показало никакого эффекта.
Мой .pro
файл (удаленные комментарии):
QT += core gui
CONFIG -= console
QMAKE_CXXFLAGS += -std=c++11
greaterThan(QT_MAJOR_VERSION, 4): QT += widgets
TARGET = regionfind-gui
TEMPLATE = app
DEFINES += QT_DEPRECATED_WARNINGS
SOURCES += \
main.cpp \
regionfind.cpp \
sagacmd.cpp
HEADERS += \
regionfind.h \
sagacmd.h \
processingsteps.h
FORMS += \
regionfind.ui
RESOURCES += \
images.qrc
Команда построения (генерируется из QtCreator):
C:\Qt\Qt5.12.3\5.12.3\mingw73_64\bin\qmake.exe C:\Users\dev\Documents\regionfind-gui\regionfind-gui.pro -spec win32-g++ && C:/Qt/Qt5.12.3/Tools/mingw730_64/bin/mingw32-make.exe qmake_all
Как мне избавиться от этих окон терминала? Они не открываются, когда команда не имеет никакого вывода, но я не могу подавить общий вывод или подобное, потому что в некоторых случаях я сохраняю вывод и печатаю его в моем графическом интерфейсе, используя следующий код:
array<char, 128> buffer;
string result = getDescription(getStep()) + command + "\n";
unique_ptr<FILE, decltype(&pclose) > pipe(popen(command.c_str(), "r"), pclose);
if(!pipe) throw std::runtime_error("popen() failed");
while (fgets(buffer.data(), buffer.size(), pipe.get()) != nullptr) {
result += checkOutput(buffer.data());
getGui()->txtOutput->append(QString::fromStdString(removeNewlineAtEnd(buffer.data())));
getGui()->txtOutput->repaint();
cout << buffer.data() << flush;;
}
Примеры: system("mkdir C:\\Users\dev\\Documents\\testfolder")
не открывает окно (без вывода), но system("driverquery")
открывает.