我在Qt中用c ++编程。当我构建QStandardItem
时,它不接受之前声明的QString
:
file_content = new QString(textstream->readAll().mid(10,2)) ;
standard_model->setItem(0,0,new QStandardItem(file_content));
但是当我尝试QStandardItem("example")
时,它可以正常工作。
答案 0 :(得分:1)
您的问题是您使用的是动态分配的字符串。 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中,经验法则(极少数例外)是如果它是QObject
派生的,你应该动态分配,因为这样的对象具有唯一的身份并且不能被复制,而Qt的容器类使用CoW并且是隐含的共享 - 即使按值传递它们也非常有效,在大多数情况下,正确的做法是将它们放在堆栈而不是堆栈上。