gpt4 book ai didi

c++ - QStandarditem 拒绝构造函数中的 QString

转载 作者:行者123 更新时间:2023-11-28 05:45:49 26 4
gpt4 key购买 nike

我在 Qt 中使用 C++ 进行编程。当我构造 QStandardItem 时,它不接受之前声明的 QString:

    file_content = new QString(textstream->readAll().mid(10,2)) ;
standard_model->setItem(0,0,new QStandardItem(file_content));

但是当我尝试 QStandardItem("example") 时它起作用了。

最佳答案

您的问题是您使用的是动态分配的字符串。 QStandardItem 的构造函数需要一个 QString &,而不是 QString *

由于指针基本上是一个整数,使用指针会使编译器混淆以解析为 QStandardItem(int rows, int columns = 1) 构造函数。

如果您 standard_model->setItem(0,0,new QStandardItem(*file_content)); 会起作用,但合适的做法是:

QString file_content = textstream->readAll().mid(10,2);
standard_model->setItem(0,0,new QStandardItem(file_content));

QString 在内部使用动态分配并且它是隐式共享的。绝对没有理由为其使用动态分配。

除非您知道必须这样做,否则不要使用动态分配。在 Qt 中,经验法则(除了极少数异常(exception))是如果它是 QObject 派生的,您应该动态分配,因为这样的对象具有唯一标识并且不能被复制,而 Qt 的容器类使用 CoW并且是隐式共享的——它们即使按值传递也非常有效,在大多数情况下,正确的做法是将它们放在堆栈上而不是堆上。

关于c++ - QStandarditem 拒绝构造函数中的 QString,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36238303/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com