QTreeView立即关闭

时间:2015-06-14 09:44:01

标签: qt qtreeview

当用户从我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);
}

谢谢!

1 个答案:

答案 0 :(得分:0)

更新:这个答案是错误的。对象在堆上而不是堆栈。但是可能存在内存泄漏。

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

您似乎缺乏有关Qt和GUI的基础知识。阅读Qt event loop