1

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;
    }
}

2番目のアイテムを表示したいのですが、qtで最初のアイテムを表示します。this-> view()-> currentIndex()は正しいモデルインデックスを提供しますが、ウィジェットは正しいコンテンツを表示しません。

私が欲しいのは、ツリービューのポップアップボックスを備えたコンボボックスです。ポップアップボックスは正常に機能します。唯一の問題は、プログラムで自動アイテムを選択しようとするとうまくいかないことです。

誰かが私にやり方を教えてもらえますか?

4

1 に答える 1

2

数日前、同じ質問に出会っていました。

次のソリューションを提供できます(ネイティブQComboBoxコードといくつかのインターネット関連のものに基づく):

TreeComboBox::presetIndex(QModelIndex index)
{

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

初めてのフォーマットについて申し訳ありませんが、コードの作成方法がまだわかりません-ここでハイライトします。

于 2012-05-05T06:08:47.743 に答える