2013-10-03 43 views
0

我對包含樹(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; 
} 

回答

0

派生類MyTree從QTreeView,而不是指向QTreeView作爲成員變量,修復我的問題。

0

是樹視圖是唯一不顯示的小部件?我建議在實例化樹時傳遞它將包含在父窗口中的分隔符,而不是主窗口。

+0

是的,樹是唯一缺少的。其他一切都可以,並且關於這棵樹,我在分離器中得到一個空的小部件。 – Pietro