C++ 可编辑QComboBox:将编辑文本与项目文本同步
我有一个C++ 可编辑QComboBox:将编辑文本与项目文本同步,c++,qt,user-interface,qcombobox,C++,Qt,User Interface,Qcombobox,我有一个QComboBox,我想“自动”编辑它。也就是说,每次用户手动更改当前项的文本时,该文本都会自动“落”到基础模型中 到目前为止,我已经通过自定义信号处理程序实现了这一点: void setupUi() { ... connect( someComboBox, SIGNAL(editTextChanged(QString)), SLOT(comboBoxEditTextChanged(QString)) ); ..
QComboBox
,我想“自动”编辑它。也就是说,每次用户手动更改当前项的文本时,该文本都会自动“落”到基础模型中
到目前为止,我已经通过自定义信号处理程序实现了这一点:
void setupUi() {
...
connect( someComboBox,
SIGNAL(editTextChanged(QString)),
SLOT(comboBoxEditTextChanged(QString)) );
...
}
void comboBoxEditTextChanged( const QString& text ) {
someComboBox->setItemText( someComboBox->currentIndex(), text );
}
所以我想知道,有没有可能用更少的代码来实现这一点?我尝试了QComboBox::setInsertPolicy(QComboBox::InsertCurrent)
,但没有任何帮助
编辑:带有自定义插槽的当前方法工作正常-但我想问是否有一种方法不涉及任何信号/插槽。QComboBox可以使用
combo->additem("X");
combo->addItem(QString Y);
而您可以管理其中的最大项目数。有关详细信息,请浏览以下链接
所以,在你的位置上
void comboBoxEditTextChanged( const QString& text )
{
someComboBox->addItem(text);
}
要在用户更改文本时自动设置文本,我们可以按如下方式编辑您的插槽:
void comboBoxEditTextChanged( const QString& text )
{
int index = someComboBox->findText(text);
if(index != -1)
{
someComboBox->setCurrentIndex(index);
}
someComboBox->setItemText( someComboBox->currentIndex(), text );
}
我希望这将解决您的问题好吧,我不需要添加新项目,我只需要更改现有项目的文本-最好不要使用自定义插槽。@intelfx这是我的错误。我没有把你的问题读对。我们可以用下面的方法完成:int index=combo->findText(text);如果(index!=-1){/-1 for not found combo->setCurrentIndex(index);}这又不是它了。。。我希望用户输入的文本保存到当前索引下的模型中,因此无需搜索。此外,当前的方法工作正常-但我想知道它是否可以在没有信号/插槽和在每个字符输入处不复制字符串的情况下完成。模型/视图模式的整体观点是视图(QComboBox)只显示数据。因此,在给定的示例中,您只更改QCombobox内部缓冲区中的数据(不应更改模型)。插槽应该在模型上运行,而不是在视图上运行