【发布时间】:2020-05-01 14:54:28
【问题描述】:
我有一个带有命令行功能的 Qt gui 应用程序。
为了完成这项工作,我将其添加到 main() 函数的顶部:
#ifdef _WIN32
if (AttachConsole(ATTACH_PARENT_PROCESS)) {
freopen("CONOUT$", "w", stdout);
freopen("CONIN$", "r", stdin);
freopen("CONOUT$", "w", stderr);
}
#endif
然后构造我的主类的一个实例。在构造函数中,QCommandLineParser 确定是否有任何参数,并创建 cmdline 解析类或 gui 应用程序类的实例。
在命令行解析类中,我要求用户输入某些值:
QString qanswer;
// `answerToInt` is an std::unordered_map
while (answerToInt.find(qanswer) == answerToInt.end()) {
std::cout << std::endl << "File will be overwritten:" << std::endl
<< path.toStdString() << std::endl
<< "Are you sure? " << (multiple ? "(Yes/YesAll/No/NoAll)" : "(Yes/No)") << std::endl;
std::string answer;
std::cin >> answer;
qanswer = QString::fromStdString(answer).toLower();
std::cin.clear();
}
当输入“Yes”、“No”、“YesAll”或“NoAll”(不区分大小写)时,程序按预期继续,但当用户输入其他内容时,cmd 会抛出:
'[input]' 未被识别为内部或外部命令 [...]
然后再次显示“C:\path\to\exe>”,用户可以继续输入,直到输入正确的值之一。 一旦输入了一个有效的字符串,它就会按预期再次继续。
我尝试了this answer 和std::getline(),但没有任何区别。
那么如何防止错误出现并继续显示cout?
【问题讨论】:
-
这看起来像 QString 无法解析
answer一眼。前往约会,但不能读得太深。我将从那里开始,并在问题中包含您的输入和预期输出 -
我稍微编辑了这个问题,希望现在更清楚了。当输入有效值时,它按预期正常工作,所以我认为 QString 没有问题。我怀疑这是因为它是一个 GUI 应用程序,正常的 cmd 功能不起作用,
freopens 不足以启用它。