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

时间:2013-05-07 13:10:22

标签: c++ qt

我有以下结构:

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

理论就在那里,但我的实际技能让我今天失望。有人可以帮忙吗?

1 个答案:

答案 0 :(得分: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);

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