2015-06-14 151 views
0

我想要显示一个QTreeView当用户从我的MainWindow(在我的情况下是AgendaWindow)菜单中选择QActionQTreeView立即关闭

问题是,当我点击按钮来显示它时,它会打开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

UPDATE:这个回答是错误的。该对象在堆上而不是堆栈上。虽然存在潜在的内存泄漏。

您创建的QTreeView是本地的方法。当它超出范围(当方法结束时)它被销毁。您需要让QTreeView作为类的成员,并在方便时调用show方法。

看来你缺乏关于Qt和GUI的基础知识。阅读关于Qt event loop

+0

我做了一个类,它的工作,然后我很好奇,再次尝试我的本地方法,它出人意料地工作!我可以让我的主窗口有我的议程和我的树视图,直到关闭它才离开。谢谢 ! –