排序QComboBox删除UserRole中的数据

时间:2015-06-25 09:12:53

标签: c++ qt

我在QCombo Box中遇到自定义数据的问题,这是一个最小的例子,只是一个空的项目,在ui中有一个名为combobox的QComboBox。 这是c代码:

ui->setupUi(this);

//Add the sort proxy
QSortFilterProxyModel* proxy = new QSortFilterProxyModel(ui->comboBox);
proxy->setSourceModel(ui->comboBox->model());
ui->comboBox->model()->setParent(proxy);
ui->comboBox->setModel(proxy);

//First strange thing is
//Here the first addItem triggers the current index changed signal
//In the second run, every addItem trigger the signal


qDebug() << "Initializing";
for( size_t i=1; i<1e10; i*=10 )
    ui->comboBox->addItem( "item",  i );

qDebug() << "Sorting";
proxy->sort(0);
proxy->sort(0);

qDebug() << "Selecting";
ui->comboBox->setCurrentIndex(0);


//Here everything is fine


for( int i=0; i<ui->comboBox->count(); ++i )
    qDebug() << ui->comboBox->itemData(i).value<size_t>();



//Clear the box and do the same again!

ui->comboBox->clear();

//Now every addItem triggers the current changed event
qDebug() << "Initializing";
for( size_t i=1; i<1e10; i*=10 )
    ui->comboBox->addItem( "item",  i );

qDebug() << "Sorting";
proxy->sort(0);

qDebug() << "Selecting";
ui->comboBox->setCurrentIndex(0);


//Here all itemData values are 0!!!


for( int i=0; i<ui->comboBox->count(); ++i )
    qDebug() << ui->comboBox->itemData(i).value<size_t>();

这是插槽

void MainWindow::on_comboBox_currentIndexChanged(int index)
{
    qDebug() << "Current changed to " << index;
    qDebug() << "UserRole is " << ui->comboBox->itemData(index);
}

第二次添加项目每次调用当前索引更改事件,第一次只是第一次添加项目。

在第二次运行中,排序后,所有用户数据都为0.

有什么想法吗?

1 个答案:

答案 0 :(得分:1)

这篇帖子(http://www.qtcentre.org/threads/3741-How-to-sort-a-QComboBox-in-Qt4)表明这是一个错误。我知道它差不多10岁,但我得到同样的错误。如果删除第一个排序(0),数据不会消失。 也许您可以创建自定义插入功能,以便项目以正确的顺序插入。就像

ui->comboBox->setInsertPolicy(QComboBox::InsertAlphabetically);

但使用lessThan行为。