如何隐藏QT应用中打开的Windows终端
How to hide windows Terminal opened in Qt app?
首先,有类似的问题,但我认为这是一个不同的问题,因为仅当我调用 system()
而不是当应用程序启动时才会出现Windows终端。
我有一个用QT编写的GUI的程序,并使用Mingw编译器在.pro
文件中内置QMAKE。OS是虚拟框中的Windows 10。
我在Ubuntu中编写了代码,该代码按预期工作(根本看不到OS终端(,但是现在我正在Windows中对其进行测试。我的问题是,每当我调用system()
或在代码中类似地执行另一个程序(据说在后台(时,Windows都会在GUI前面打开一个CMD终端。我的程序中有很多这样的电话,因此在运行时会弹出很多此类窗口。
i将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:QtQt5.12.35.12.3mingw73_64binqmake.exe C:UsersdevDocumentsregionfind-guiregionfind-gui.pro -spec win32-g++ && C:/Qt/Qt5.12.3/Tools/mingw730_64/bin/mingw32-make.exe qmake_all
如何摆脱这些终端窗口?当命令没有任何输出时,它们不会打开,但是我不能抑制一般输出或类似的情况,因为在某些情况下,我使用以下代码将输出存储并将其打印到我的GUI中:
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:\Usersdev\Documents\testfolder")
不打开窗口(没有输出(,但system("driverquery")
可以。
您可以使用QProcess
类:
QObject *parent;
...
QString program = "driverquery";
QProcess *myProcess = new QProcess(parent);
myProcess->start(program);
if (myProcess->waitForStarted(-1)) {
while(myProcess->waitForReadyRead(-1)) {
getGui()->txtOutput->append( myProcess->readAllStandardOutput() );
}
}
// else report error or whatever
在使用命令应用程序的情况下,您可以执行以下操作:
QObject *parent;
...
QString program = "driverquery";
QProcess *myProcess = new QProcess(parent);
QString command = QString("cmd.exe %1 "%2 "").arg(" /C ").arg(program);
myProcess->start(command);
if (myProcess->waitForStarted(-1)) {
while(myProcess->waitForReadyRead(-1)) {
getGui()->txtOutput->append( myProcess->readAllStandardOutput() );
}
}
// else report error or whatever
- 在VS代码中交叉编译Windows与Linux上的MinGW的SDL程序
- 如何在linux终端中同时编译和运行c++代码
- 在Linux for Windows上编译C++代码时出错
- 在Windows上用C++裁剪HBITMAP
- C++ Windows 驱动程序MSB3030无法复制该文件,因为它找不到
- 如何加载(或映射)文件部分的最大大小,但适合在Windows上的RAM
- std::threads可以从Windows DLL中的全局变量创建/销毁吗?
- 终端不会为C++文件创建.exe文件吗
- 当我编译webrtc服务器时,Windows上只支持clang-cl
- 为什么在Windows上的VS 2019和Clang 9中"size_t"在没有标题的情况下工作
- Windows/Cygwin - 不能使用 pybind11 - 犯错误
- Windows 10-使用gtkmm-3.0库和g++[包括再现]的分段故障
- 无法在终端中的 Windows 5.10.1 上运行 qt10.1 的编译器'cl'
- 如何隐藏QT应用中打开的Windows终端
- 当您按"Enter"键时,Windows超级终端下发送哪些字符
- C++输出到Windows终端使用cout<<term_cc<color,default,attrib>在Windows上正确输出颜色和属性,但在Linux上不能
- 如何实现windows终端仿真器
- 在windows中使用cygwin64终端构建Boost1.61.0
- 任何 Windows 终端的调色板都可以使用 pdcurses 进行编辑吗?
- windows 7运行qt终端