我在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.
有什么想法吗?
答案 0 :(得分:1)
这篇帖子(http://www.qtcentre.org/threads/3741-How-to-sort-a-QComboBox-in-Qt4)表明这是一个错误。我知道它差不多10岁,但我得到同样的错误。如果删除第一个排序(0),数据不会消失。 也许您可以创建自定义插入功能,以便项目以正确的顺序插入。就像
ui->comboBox->setInsertPolicy(QComboBox::InsertAlphabetically);
但使用lessThan行为。