仅更改函数上的特定默认参数

  • 本文关键字:默认 参数 函数 c++ qt qt5
  • 更新时间 :
  • 英文 :


我正在使用 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 标准状态

默认参数将用于丢失跟踪参数的呼叫。

在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&文字

相关内容

  • 没有找到相关文章

最新更新