【发布时间】:2017-03-06 18:36:57
【问题描述】:
我有一个正在运行的 ATM 控制台应用程序,我想使用 Qt 库对其进行修改,使其具有 GUI。
我正在尝试在不更改大部分代码的情况下实现它;相反,我想在我使用cout 或cin 的地方调用一个小部件。但问题是,当我运行控制台应用程序时,它只是加载表单并继续,而不让我输入所需的信息。我希望这是有道理的。
void ATM::authenticateUser()
{
screen.displayMessage("\nPlease enter your account number: ");
int accountNumber = keypad.getInput(); // input account number
screen.displayMessage("\nEnter your PIN: "); // prompt for PIN
int pin = keypad.getInput(); // input PIN
system("clear");
// set userAuthenticated to bool value returned by database
userAuthenticated = bankDatabase.authenticateUser(accountNumber, pin);
// check whether authentication succeeded
if (userAuthenticated) {
currentAccountNumber = accountNumber; // save user's account #
} // end if
else
screen.displayMessageLine(
"Invalid account number or PIN. Please try again.");
} // end function authenticateUser`
【问题讨论】:
-
这听起来很难。控制台应用程序通常具有严格的输入、处理、输出顺序。具有图形用户界面的应用程序通常允许“随机访问”由事件驱动系统实现的输入字段。如果你的应用程序。分为输入部分、处理部分和输出部分,那么应该可以通过 Qt 输入对话框“交换”输入部分。请提供(不要太大)反映您当前应用程序的示例代码。然后应该可以显示可以添加 Qt 的位置(以及如何添加)。
-
这是控制台应用程序代码的当前设置
-
可能是,我误解了你的问题。另一种方法是编写一个调用控制台应用程序的 Qt 应用程序(使用
QProcess),使用管道(I/O 重定向)来为您的控制台应用程序提供数据并读取输出以进行显示。 -
大写“I”,添加代码格式,稍微改写,将文本分成两段。
-
附带说明,这里的代码被过度注释了。您只是在重复代码的作用。评论应该添加信息,而不是重复。这段代码通俗易懂,无需注释。尤其是“end if”看起来真的没用(它是一个 3 行块!)。