在QWidget中放置一棵树(QTreeView)放置在另一个QWidget内

在QWidget中放置一棵树(QTreeView)放置在另一个QWidget内

问题描述:

我对包含树(QTreeView)的QWidget有问题:如果它是作为一个小部件创建的,我可以显示它,而且我不能如果它是另一个更高级别小部件的子小部件,请执行相同操作。在第二种情况下,我得到的是一个没有树的空构件。在QWidget中放置一棵树(QTreeView)放置在另一个QWidget内

这工作:

QApplication testApp(argc, argv); 
MyTree myTree; 
testApp.exec(); 

这不起作用:

class MainWindow : public QMainWindow 
{ 
    Q_OBJECT 

    QSplitter *spl1, *spl2; 
    QMdiArea *mdiArea; 
    QTableWidget *other; 

public: 
    MainWindow(); 
    void LoadTree(); 
    MyTree *myTree; 
}; 


MainWindow::MainWindow(QWidget *_parent) 
    : QMainWindow(_parent), myTree(0) 
{ 
    mdiArea = new QMdiArea; 
    other = new QTableWidget; 

    spl1 = new QSplitter(Qt::Vertical, this); 
    spl1->addWidget(mdiArea); 
    spl1->addWidget(other); 

    LoadTree(); 

    spl2 = new QSplitter(Qt::Horizontal, this); 
    spl2->addWidget(myTree); 
    spl2->addWidget(spl1); 

    setCentralWidget(spl2); 
} 

void MainWindow::LoadTree() 
{ 
    myTree = new MyTree(this); 
} 

下面是两种情况共同的代码(这应该是OK):

class MyTree : public QWidget 
{ 
    Q_OBJECT 

public: 
    explicit MyTree(QWidget *_parent = 0); 
    int RefreshTree(); 

private slots: 
    void HandleTreeWidgetEvent(QModelIndex); 

private: 
    QWidget *parent; 
    QTreeView *pjrTree; 
    QTreeView *GetNewTree(); 
}; 

MyTree::MyTree(QWidget *_parent) : 
    QWidget(_parent), 
    parent(_parent) 
{ 
    pjrTree = GetNewTree(); 

    if(pjrTree) { 
     if(parent == 0) 
      pjrTree->show(); 
    } 
    else { 
     // Never gets here 
    } 
} 

QTreeView* MyTree::GetNewTree() 
{ 
    QFileSystemModel *model = new QFileSystemModel; 
    model->setReadOnly(true); 
    model->setRootPath("/my/path/"); 

    QTreeView* pjrTree = new QTreeView; 
    pjrTree->setModel(model); 
    pjrTree->setRootIndex(model->index("/my/path/")); 

    QModelIndex index; 
    index = model->index(4, 1);  // temp values - no effect 

    return pjrTree; 
} 

派生类MyTree从QTreeView,而不是指向QTreeView作为成员变量,修复我的问题。

是树视图是唯一不显示的小部件?我建议在实例化树时传递它将包含在父窗口中的分隔符,而不是主窗口。

+0

是的,树是唯一缺少的。其他一切都可以,并且关于这棵树,我在分离器中得到一个空的小部件。 – Pietro