2012-03-25 349 views
1

我想說明的第二個項目treecombobox.hQT QComboBox的setView到QTreeView則無法做到setCurrentIndex

#ifndef TREECOMBOBOX_H 
#define TREECOMBOBOX_H 

#include <QComboBox> 
#include "QAbstractItemView" 
#include "QTreeView" 

class TreeComboBox : public QComboBox 
{ 
    Q_OBJECT 
public: 
    explicit TreeComboBox(QWidget *parent = 0); 
    ~TreeComboBox(); 

protected: 
    QTreeView* internalView; 

signals: 

public slots: 

}; 

#endif // TREECOMBOBOX_H 

treecombobox.cpp

#include "treecombobox.h" 

TreeComboBox::TreeComboBox(QWidget *parent) : 
    QComboBox(parent){ 

    this->internalView = new QTreeView(parent); 
    this->setView(this->internalView); 
    QAbstractItemModel* model = this->internalView->model(); 
    model->insertRows(0, 2); 
    model->setData(model->index(0,0), "First"); 
    model->setData(model->index(1,0), "Second"); 
    this->view()->setCurrentIndex(model->index(1,0)); 
} 


TreeComboBox::~TreeComboBox(){ 
    if(this->internalView){ 
     delete this->internalView; 
     this->internalView = 0; 
    } 
} 

,但QT給我的第一個項目。 this-> view() - > currentIndex()爲我提供了正確的模型索引,但小部件不顯示正確的內容。

我想要的是一個帶有樹形視圖彈出框的組合框。彈出框工作正常。唯一的問題是當我嘗試在程序中自動選擇一個項目時出錯。

有人能告訴我該怎麼辦?

回答

2

前幾次是在同一個問題的會議。

可以提供一個解決方案(基於原生QComboBox代碼和一些互聯網的東西):

TreeComboBox::presetIndex(QModelIndex index) 
{ 

     setRootModelIndex(index.parent()); 
     setModelColumn(index.column()); 
     setCurrentIndex(index.row()); 
     setRootModelIndex(QModelIndex()); 
     view->setCurrentIndex(index); 
} 

抱歉格式,第一次,仍然不知道如何使代碼的亮點在這裏。