当用户从我的QTreeView (在我的例子中是AgendaWindow )的菜单中选择该QAction时,我想显示一个MainWindow。
问题是,当我单击该按钮以显示它时,它会立即打开QTreeView并将其关闭。我放了一个无限循环(while(1<2)),但是我所有的程序都被阻塞了,我找不到与system("pause")等价的东西。
下面是我的函数:
void AgendaWindow::display_projects()
{
QStandardItemModel* model = new QStandardItemModel;
QStandardItem *parentItem= model->invisibleRootItem();
for (std::vector<Projet*>::const_iterator it =PM.getInstance().getTab().begin(); it!= PM.getInstance().getTab().end(); it++ )
{
// I display a project
QStandardItem* item=new QStandardItem(QString((*it)->getTitre()));
item->setFlags(item->flags() & ~Qt::ItemIsEditable);
parentItem->appendRow(item);
Projet* p = (*it);
// I display every project's tasks
for (std::vector<Tache*>::const_iterator itp = p->GetTabProjet().begin(); itp != p->GetTabProjet().end(); itp++)
{
QStandardItem* itemp = new QStandardItem((*itp)->getTitre());
//itemp->setFlags(itemp->flags() & ~Qt::ItemIsEditable);
item->appendRow(itemp);
}
}
QTreeView *treeView=new QTreeView;
treeView->setModel(model);
treeView->show();
//while(1<2);
}谢谢!
发布于 2015-06-15 00:12:06
更新:这个答案是错误的。对象在堆上,而不是堆栈上。但是有一个潜在的内存泄漏。
您正在创建的QTreeView对于该方法是本地的。当它超出作用域时(当方法结束时),它将被销毁。您可能需要将QTreeView作为类的成员,并在方便的时候调用show方法。
你似乎缺乏关于Qt和GUI的基础知识。阅读有关Qt event loop的信息。
https://stackoverflow.com/questions/30827939
复制相似问题