#include <QtGui>
int main (int argc, char* argv[])
{
QApplication app(argc, argv);
QTextStream cout(stdout, QIODevice::WriteOnly);
// Declarations of variables
int answer = 0;
do {
// local variables to the loop:
int factArg = 0;
int fact(1);
factArg = QInputDialog::getInteger(0, "Factorial Calculator",
"Factorial of:");
cout << "User entered: " << factArg << endl;
int i=2;
while (i <= factArg) {
fact = fact * i;
++i;
}
QString response = QString("The factorial of %1 is %2.\n%3")
.arg(factArg).arg(fact)
.arg("Do you want to compute another factorial?");
answer = QMessageBox::question(0, "Play again?", response,
QMessageBox::Yes | QMessageBox::No ,QMessageBox::Yes);
} while (answer == QMessageBox::Yes);
return EXIT_SUCCESS;
}
在这个程序中,我没有输入窗口(do-while循环的第4行)有取消按钮。我怎么做? 我刚开始学习QT。所以,对不起,如果这是一个非常基本的问题。
另外我如何使用取消按钮来停止应用程序.. Bcos,现在CANCEL按钮什么都不做。
答案 0 :(得分:5)
QInputDialog作为便利类提供,它提供了一种快速简便的方式来请求输入,因此不允许进行太多自定义。我没有在文档中看到任何表明您可以更改窗口布局的内容。我建议通过扩展QDialog来设计自己的对话框。这将花费更多时间,但允许您自定义表单。
如果确实想确定在QInputDialog中是否按下了取消按钮,则必须将指向bool的指针作为第8个参数传递给getInteger()函数。
do{
bool ok;
factArg = QInputDialog::getInteger(0, "Factorial Calculator", "Factorial of:",
value, minValue, maxValue, step, &ok);
if(!ok)
{
//cancel was pressed, break out of the loop
break;
}
//
// Do your processing based on input
//
} while (some_condition);
如果ok返回false,则用户单击取消,您可以退出循环。您可以在文档中查看value,minValue,maxValue和step mean的含义: QInputDialog documentation
答案 1 :(得分:0)
通过传递正确的windowFlags来隐藏QInputDialog中的帮助按钮:
QInputDialog inputDialog;
bool ok;
inputDialog.setWindowFlags(inputDialog.windowFlags() & (~Qt::WindowContextHelpButtonHint));
QString text = inputDialog.getText(this, tr("Factorial Calculator"),
tr("Enter some text:"), QLineEdit::Normal, QString(), &ok,
inputDialog.windowFlags());
// Or for integers
int number = inputDialog.getInt(this, tr("Fractorial Calculator"),
tr("Enter a number:"), 0, -10, 10, 1, &ok,
inputDialog.windowFlags());
答案 2 :(得分:0)