对不起,我的英文。我有相同的代码:智能指针代替指针
auto windowsStack = m_windowManger->windowsStack();
auto ListModel = new QStandardItemModel();
while(!windowsStack.empty())
{
auto window = windowsStack.top();
auto title = QString::fromUtf8(window->title().c_str());
auto Items = new QStandardItem(title);
ListModel->appendRow(Items);
windowsStack.pop();
}
ui->listView->setModel(ListModel);
一切正常,我的任务是更换指针的智能指针。我做了不止一次,我的决定:
auto windowsStack = m_windowManger->windowsStack();
auto ListModel = std::shared_ptr<QStandardItemModel>();
while(!windowsStack.empty())
{
auto window = std::shared_ptr<Window>(windowsStack.top());
auto title = QString::fromUtf8(window->title().c_str());
auto Items = std::shared_ptr<QStandardItem>(new QStandardItem(title));
ListModel->appendRow(Items.get());
windowsStack.pop();
}
ui->listView->setModel(ListModel.get());
但最后,我得到的消息:程序意外结束。在提示符下,键入:
ListModel->appendRow(Items.get());
新版本:
auto ListModel = std::make_shared<QStandardItemModel>();
while(!windowsStack.empty())
{
auto window = windowsStack.top();
windowsStack.pop();
auto title = QString::fromUtf8(window->title().c_str());
ListModel->appendRow(new QStandardItem(title));
}
ui->listView->setModel(ListModel.get());
谢谢,你有没有写过。错误消失了,但QListView没有被添加。虽然它与裸指针一起工作。 –
你仍然需要最后一行'ui-> listView-> setModel(ListModel.get());'我只是重写了循环,这是有缺陷的。 –
我没有删除最后一行,这就是发生了什么,我在上面的问题中添加了一个新版本。 所以没有添加到qlistview。 –