Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/151.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 可编辑QComboBox:将编辑文本与项目文本同步_C++_Qt_User Interface_Qcombobox - Fatal编程技术网

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内部缓冲区中的数据(不应更改模型)。插槽应该在模型上运行,而不是在视图上运行