2012-03-25 10 views
1

treecombobox.hqt QComboBox setView zu QTreeView nicht tun kann 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; 
    } 
} 

ich den zweiten Punkt zeigen wollen, aber qt gibt mir das erste Element. this-> view() -> currentIndex() gibt mir den richtigen Modellindex, aber das Widget zeigt nicht den richtigen Inhalt.

Was ich will, ist ein Kombinationsfeld mit Baumansicht Popup-Box. Das Popup-Fenster funktioniert einwandfrei. Das einzige Problem ist, dass es schief geht, wenn ich versuche, einen Gegenstand automatisch im Programm zu wählen.

Kann mir jemand sagen, wie es geht?

Antwort

2

Vor einiger Zeit war mit der gleichen Frage zu treffen.

TreeComboBox::presetIndex(QModelIndex index) 
{ 

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

Tut mir leid, Formatierung, zum ersten Mal und noch nicht wissen, wie Code-Highlights hier zu machen:

Kann nächste Lösung (basierend auf nativen QComboBox Code und einige Internet-Sachen) bieten.