Qt 将 QString 传递给结构构造函数不起作用

Qt passing QString to struct constructor doesn't work

本文关键字:结构 构造函数 不起作用 QString Qt      更新时间:2023-10-16

我有以下结构体:

struct HidItem
{
    HidItem(){}
    HidItem(QString commandName, uint commandValue)
    {
        name = commandName;
        value = commandValue;
    }
    QString name;
    uint value;
};

并尝试创建如下实例:

HidCommandModel::HidCommandModel()
    : QAbstractListModel(),
      hidData(new QVector<HidItem>(10))
{
    HidItem *hidItem = new HidItem("USAGE_PAGE", 1);
    hidData->append(*(hidItem));
}

这不是很好地工作,因为只有uint commandValue被分配给HidItem实例,而不是QString "USAGE_PAGE"

我已经好几年没有编写c++了,但在我看来,我传递字符串是不正确的,需要一些涉及到引用传递,指针和复制和写入的功夫。

理论是有的,但是我的实践技能今天让我很失望。有人能帮忙吗?

适合我:

struct HidItem
{
    HidItem(){}
    HidItem(QString commandName, uint commandValue)
    {
        name = commandName;
        value = commandValue;
    }
    QString name;
    uint value;
};

int main(int argc, char ** argv) {
    QApplication app( argc, argv );
    HidItem *hidItem = new HidItem("USAGE_PAGE", 1);
    qDebug() << hidItem->name << "," << hidItem->value;
}
输出:

"USAGE_PAGE" , 1

您应该更改的一件事是HidItem构造函数的签名,以便它期望一个const引用而不是一个对象:

HidItem(const QString& commandName, uint commandValue) {
...

这避免了不必要的临时对象的创建。但是,你的方法也很有效。


真正的问题是QVector构造函数的错误用法:
QVector<HidItem>* hidData = new QVector<HidItem>(10);
hidData->append(hidItem);

将hidItem附加为元素#11,因为QVector在创建后已经包含了10个元素。

简单地使用

QVector<HidItem>* hidData = new QVector<HidItem>();
hidData->append(hidItem);

(并考虑@Mike Seymour关于new的评论)。