qt QComboBox setView 到 QTreeView 不能做 setCurrentIndex
Posted
技术标签:
【中文标题】qt QComboBox setView 到 QTreeView 不能做 setCurrentIndex【英文标题】:qt QComboBox setView to QTreeView can not do setCurrentIndex 【发布时间】:2012-03-25 03:40:29 【问题描述】: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】:前段时间遇到同样的问题。
可以提供下一个解决方案(基于原生 QComboBox 代码和一些互联网内容):
TreeComboBox::presetIndex(QModelIndex index)
setRootModelIndex(index.parent());
setModelColumn(index.column());
setCurrentIndex(index.row());
setRootModelIndex(QModelIndex());
view->setCurrentIndex(index);
抱歉格式化,第一次,但仍然不知道如何在此处制作代码高亮。
【讨论】:
什么/如何/eeee?你从哪里得到这个 preestIndex 函数的索引?我在 QComboBox 中看不到任何给我该索引的信号...以上是关于qt QComboBox setView 到 QTreeView 不能做 setCurrentIndex的主要内容,如果未能解决你的问题,请参考以下文章
QCombobox::setView 在 Windows 7 上崩溃应用程序