【问题标题】:No matching function for call to 'QString::fromLatin1(QByteArray*&)'调用 'QString::fromLatin1(QByteArray*&)' 没有匹配的函数
【发布时间】:2018-12-19 18:53:00
【问题描述】:

我有一个类 A 在发出信号后调用类 B。当用户关闭B 时,我试图将QString 值从B 转移到A。为此,我首先将QString 转换为QByteArray,然后在类之间交换QByteArray。最后,我将QByteArray 转换回QString

但是,在第二次转换期间,我收到此错误:

没有匹配函数调用'QString::fromLatin1(QByteArray*&)`

下面是我的代码。

classB.h(是实现第一个QByteArray的地方):

public :
    QByteArray *byt = new QByteArray;

classB.cpp:

void classB::foo(QString userame, QString password)
{
    //Some other code
    QString usernameOfNewUser;
    usernameOfNewUser = userame;
    byt = usernameOfNewUser.toLocal8Bit();
    qWarning(byt->data());
}

classA.h(第二个QByteArray 被实现的地方):

private:
    QByteArray *newUserArray = new QByteArray;

classA.cpp(问题所在):

classB *cUdsfqkjb =new classB();
cUdsfqkjb->show();
if(!cUdsfqkjb->isVisible())
{
    newUserArray = cUdsfqkjb->byt;
    QString newUser = QString::fromLatin1(newUserArray);

错误位于最后一行。

【问题讨论】:

    标签: c++ qt qstring qbytearray


    【解决方案1】:

    fromLatin1() 方法具有以下签名:

    QString fromLatin1(const char * str, int size = -1)
    

    因此您需要将QByteArray 的数据传递给这样的方法:

    QString newUser = QString::fromLatin1(newUserArray->constData(), newUserArray->count());
    

    在Qt5中,也有这个重载:

    QString fromLatin1(const QByteArray &str)
    

    所以你可以改用这个:

    QString newUser = QString::fromLatin1(*newUserArray);
    

    【讨论】:

    • 一定错过了...我尝试了两种方法,但现在又遇到另一个错误:conversion from 'QByteArray' to 'QByteArray*' is ambiguous byt = usernameOfNewUser.toLocal8Bit(); ^。他们都给了我同样的错误。你知道那是从哪里来的吗?
    • 我设法解决了第二个错误(我只是忘记添加指针的星号*)谢谢您的回答。
    • QByteArray toLocal8Bit() const,所以要么用 QByteArray 代替指针,要么写 *byt = usernameOfNewUser.toLocal8Bit()
    猜你喜欢
    • 2017-11-14
    • 2020-07-13
    • 1970-01-01
    • 1970-01-01
    • 2012-12-17
    • 2017-10-16
    • 1970-01-01
    • 2021-09-21
    • 2016-11-23
    相关资源
    最近更新 更多