Qt 将 QString 传递给结构构造函数不起作用
Qt passing QString to struct constructor doesn't work
我有以下结构体:
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
的评论)。
相关文章:
- 在 c++ 中将变量作为结构构造函数中的引用传递
- 嵌套的模板结构构造函数实现
- 其他结构中的结构构造函数
- CPP/C 中的常量用法和结构构造函数中的澄清
- 聚合结构构造函数
- 结构构造函数调用不明确
- 关于结构构造函数和析构函数行为-C++
- 带有指针的C++结构:构造函数和析构函数
- 结构构造函数导致堆栈溢出的问题
- C++结构构造函数和函数冲突
- 嵌套结构构造函数和并集的问题
- C++结构构造函数
- 调用结构构造函数后初始化的值是什么
- 在结构构造函数中使用"this"关键字编译错误?-C++
- 这可能吗?在 C# 中调用托管 c++ 结构构造函数
- C++ - 结构构造函数,尝试取消指向结构的指针时出现重定义错误
- C++结构构造函数错误
- 结构构造函数语法
- 结构构造函数错误,为什么使用默认构造函数会调用错误
- Qt 将 QString 传递给结构构造函数不起作用