【问题标题】:how to initialize a QString to null?如何将 QString 初始化为 null?
【发布时间】:2012-03-15 17:26:42
【问题描述】:

QString::number(0)((const char*) 0) 有什么区别?

我想将QStringphoneNumber 初始化为nullphoneNumber(QString::number(0))phoneNumber((const char*) 0) 都可以吗?

【问题讨论】:

    标签: c++ qstring


    【解决方案1】:

    要创建一个空的QString,只需默认初始化它:

    QString phoneNumber;
    
    // or if you already have a QString variable and want to 'clear' it:
    
    phoneNumber = QString();
    

    请注意,QString::number(0) 绝对为 null - 它创建一个值为 "0" 的 QString。

    您也可以使用 NULL 指针初始化 QString,但我不建议这样做,除非您传递一个指针,无论它是否为 NULL(即,它有时可能指向C 字符串),因为它是不必要的。

    你也应该了解following Qt docs

    空字符串和空字符串的区别

    由于历史原因,QString 区分空字符串 和一个空字符串。空字符串是已初始化的字符串 使用QString 的默认构造函数或通过(const char *)0 给构造函数。空字符串是大小为 0 的任何字符串。空字符串 string 始终为空,但空字符串不一定为 null:

    QString().isNull();               // returns true
    QString().isEmpty();              // returns true
    
    QString("").isNull();             // returns false
    QString("").isEmpty();            // returns true
    
    QString("abc").isNull();          // returns false
    QString("abc").isEmpty();         // returns false
    

    isNull() 之外的所有函数都将空字符串视为空字符串 字符串。例如,toAscii().constData() 返回一个指向 '\0' 用于空字符串(不是空指针)的字符,以及 QString() 比较等于 QString("")。我们建议您 始终使用isEmpty() 函数并避免使用isNull()

    【讨论】:

    • Michael 感谢您的回复,但我不清楚一件事 - str.clear() 是否留下空字符串或无效字符串。如果为空,有没有办法取消它?
    • QString::clear() 将字符串设置为空(即,在str.clear() 之后,str.isNull() 将返回true)。
    【解决方案2】:
    #include <QCoreApplication>
    #include <QString>
    #include <QDebug>
    
    int main(int argc, char *argv[])
    {
        QCoreApplication a(argc, argv);
    
        QString name(QString::null);
        // or QString name = QString::null;
        // or QString name;
    
        qDebug() << name.isNull();
        qDebug() << name;
    
        return a.exec();
    }
    

    输出:

    true
    ""
    

    Michael Burr 的解决方案当然也是正确的……但我更喜欢QString::null

    【讨论】:

    • 为明确包含 QString::null 点赞。我喜欢它消除任何/所有意图歧义的方式。
    • @RobertOliveira 同意!直到现在才知道这个。
    • @rob 使用QString::null 的一个缺点是,在Windows 上,它会导致导入数据符号——这反过来又会禁止delay-loading Qt(或Qt Core)库。
    • Qt Creator 现在宣布 QString::null 已被弃用。它建议改用String()
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-04-14
    • 2018-01-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多