当用户从我QTreeView
的菜单(在我的情况下为QAction
)中选择MainWindow
时,我想显示AgendaWindow
。
问题在于,当我点击按钮显示它时,它会打开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);
}
谢谢!
答案 0 :(得分:0)
更新:这个答案是错误的。对象在堆上而不是堆栈。但是可能存在内存泄漏。
您正在创建的QTreeView是该方法的本地视图。当它超出范围时(当方法结束时)它被销毁。您需要将QTreeView作为类的成员,并在方便时调用show方法。
您似乎缺乏有关Qt和GUI的基础知识。阅读Qt event loop。