0

我有以下结构:

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++ 代码了,但在我看来,我错误地传递了字符串,并且需要一些功夫涉及通过引用传递、指针以及复制和写入。

理论是存在的,但我的实践技能今天让我非常失望。有人可以帮忙吗?

4

1 回答 1

3

为我工作:

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);

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

于 2013-05-07T13:16:21.007 回答