QT QComboBox setView для QTreeView не может сделать setCurrentIndex - PullRequest
1 голос
/ 25 марта 2012

treecombobox.h

#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 () дает мне правильный индекс модели, но виджет не отображает правильное содержимое.

Мне нужно поле со списком во всплывающем окне с представлением в виде дерева.Всплывающее окно работает нормально.Единственная проблема заключается в том, что все идет не так, когда я пытаюсь выбрать элемент автоматически в программе.

Может кто-нибудь сказать мне, как это сделать?

1 Ответ

2 голосов
/ 05 мая 2012

Несколько лет назад встречался с тем же вопросом.

Может предложить следующее решение (на основе собственного кода QComboBox и некоторых вещей в Интернете):

TreeComboBox::presetIndex(QModelIndex index)
{

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

Извините за форматирование, впервые и до сих пор не знаю, как сделать подсветку кода здесь.

...