我有以下结构:
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 ++,但在我看来,我正在错误地传递字符串,并且需要通过引用,指针和复制和写入来处理一些功夫。
理论就在那里,但我的实际技能让我今天失望。有人可以帮忙吗?
答案 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
的评论。)