我正在使用 qt
,我正在尝试使用 QInputDialog::getText()
函数从用户获取输入,从文档中,该函数的定义为:
QString QInputDialog::getText(QWidget * parent, const QString & title, const QString & label, QLineEdit::EchoMode mode = QLineEdit::Normal, const QString & text = QString(), bool * ok = 0, Qt::WindowFlags flags = 0, Qt::InputMethodHints inputMethodHints = Qt::ImhNone)
这是我的代码:
bool ok=0;
newAddress = QInputDialog::getText(0,"Enter an Address to Validate",
"Adress: comma separated (e.g Address line 1, Address line 2, City, Postal Code)"
,&ok);
,但我得到了错误:
error: no matching function for call to 'QInputDialog::getText(int, const char [29], const char [80], bool*)'
,&ok);
^
但是,当我在 *ok
参数之前通过所有参数时,如:
bool ok=0;
newAddress = QInputDialog::getText(0,"Enter an Address to Validate",
"Adress: comma separated (e.g Address line 1, Address line 2, City, Postal Code)"
,QLineEdit::Normal,
QString(),&ok);
它有效。
我真的不明白为什么我不能更改我想要的默认参数,然后将其余的参数作为默认值?
传递具有默认参数的特定参数时,您必须在其之前传递所有默认参数的值。否则,您传递的值将被视为第一个默认参数的值。
所以您必须这样做:
newAddress = QInputDialog::getText(
0,
"Enter an Address to Validate",
"Adress: comma separated (e.g Address line 1, Address line 2, City, Postal Code)",
QLineEdit::Normal,
QString(),
&ok);
您可以在bool *
参数之后省略参数的传递值。
[dcl.fct.default]/1
默认参数将用于丢失跟踪参数的呼叫。
在C 中,您只能在参数列表末尾使用(一个或多个)默认参数。如果您省略了中间的参数,则编译器无法知道,哪个参数属于哪个参数。因此,您必须在通过&ok
之前手动指定默认参数QLineEdit::Normal and QString()
。
在您的无动物中,编译器试图将您的bool指针匹配到参数列表中的下一个类型,即 QLineEdit::EchoMode
,因此不兼容。
错误是可选参数的beacuse:
QString QInputDialog::getText(
QWidget * parent,
const QString & title,
const QString & label,
QLineEdit::EchoMode mode = QLineEdit::Normal,
const QString& text = QString(),
bool * ok = 0,
Qt::WindowFlags flags = 0,
Qt::InputMethodHints inputMethodHints = Qt::ImhNone)
QInputDialog::getText(
0,
"Enter an Address to Validate",
"Adress: comma separated (e.g Address line 1, Address line 2, City, Postal Code)",
--> QLineEdit::EchoMode ??
--> QString& text ??
&ok);
如果设置了一个可选参数,则必须在其左侧设置所有可选参数,在您的情况下,qlineedit :: echomode and qString&文字