gpt4 book ai didi

c++ - 排序 QComboBox 删除 UserRole 中的数据

转载 作者:行者123 更新时间:2023-11-30 05:41:43 27 4
gpt4 key购买 nike

我对 QCombo Box 中的自定义数据有疑问,这里是一个最小的示例,只是一个空项目,在 ui 中有一个名为 combobox 的 QComboBox。这是c'tor代码:

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

第二次添加项目每次都调用当前索引更改事件,第一次只在第一个 addItem 上。

第二次运行,排序后,用户数据全部为0。

有什么想法吗?

最佳答案

这篇 ( http://www.qtcentre.org/threads/3741-How-to-sort-a-QComboBox-in-Qt4 ) 帖子表明这是一个错误。我知道它已经有将近 10 年的历史了,但我遇到了同样的错误。如果您删除第一个 sort(0) 数据不会消失。也许您可以制作自定义插入功能,以便项目以正确的顺序插入。就像

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

但有 lessThan 行为。

关于c++ - 排序 QComboBox 删除 UserRole 中的数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31046024/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com