c++ - QJsonValue 是私有(private)的?

标签 c++ qt

我正在学习 C++ 并尝试制作一些东西。但是我遇到了一个错误,我不确定发生了什么。我正在尝试创建一个可以接受数组并将其转换为 JSON 的简单事物。但是我遇到了一个错误

'QJsonValue::QJsonValue(const void*)' is private
within this context

文件

#include "LoginDialog.h"
#include "ui_LoginDialog.h"

LoginDialog::LoginDialog(QWidget *parent)
    : QDialog(parent)
    , ui(new Ui::LoginDialog)
{
    setWindowFlags(Qt::FramelessWindowHint);
    ui->setupUi(this);
}

LoginDialog::~LoginDialog()
{
    delete ui;
}

void LoginDialog::set_socket(Socket *socket)
{
    socket = socket;

    QJsonArray data;
    data.prepend("Hello");

    socket->sendData(data);
}

void LoginDialog::on_minimize_clicked()
{
    setWindowState(Qt::WindowMinimized);
}

void LoginDialog::on_quit_clicked()
{
    exit(1);
}

接受函数

void Socket::sendData(QJsonArray data)
{
    qDebug() << data[1];
}

最佳答案

你的问题在这里:

data.prepend("你好");

prepend 成员函数接收一个 QJsonValue,它恰好有很多构造函数。传入 const char* 会使您所指的对象变得不明确。 C++ 编译器会将其解析为 bool,然后再将其解析为 QString。为了解决这个问题,QJsonValue 的作者这样做了:

private:
    // avoid implicit conversions from char* to bool
    inline QJsonValue(const void*) {}

无论如何,您可以通过更明确的方式解决此问题:

data.prepend(QStringLiteral("Hello")); // Qt 5
data.prepend(QLatin1String("Hello")); // Qt 4, Latin1 string
data.prepend(QString("Hello")); // Qt 4, non-Latin1 string

here有关 QStringLiteral 的更多信息。

关于c++ - QJsonValue 是私有(private)的?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21816908/

相关文章:

c++ - 如何使用枚举类值作为 for 循环的一部分?

c++ - 如何在 C++ 中 stub /模拟非指针成员变量?

c++ - Sphere OpenGl 上的 UV 贴图问题工件

c++ - 演示程序错误 : '' was not declared in this scope

visual-studio - Qt Visual Studio 社区插件

c++ - 在 Centos 中安装 QT - 安装 OpenBR 时的 CMake 警告

c++ - 通过将两个不同的文本框值相乘来设置标签的文本值

c++ - 在 Windows 10 上为 Qt 构建 WMF(Windows Media Foundation)媒体驱动程序插件

c++ - 在 Qt 绘画类(class)上需要一点帮助

c++ - 在 Qt Creator 中进入 Qt 源代码(在 Ubuntu Linux 中)