2012-07-20 108 views
2

我有一个QComboBox我想要“自动”编辑。也就是说,用户每次手动更改当前项目的文本时,该文本都应自动“落入”底层模型。可编辑QComboBox:与项目文本同步编辑文本

到目前为止,我已经通过自定义信号处理程序达到了这一点:

void setupUi() { 
    ... 
    connect(someComboBox, 
      SIGNAL(editTextChanged(QString)), 
      SLOT(comboBoxEditTextChanged(QString))); 
    ... 
} 

void comboBoxEditTextChanged(const QString& text) { 
    someComboBox->setItemText(someComboBox->currentIndex(), text); 
} 

所以我想,有没有可能用更少的代码来做到这一点?我试过QComboBox::setInsertPolicy(QComboBox::InsertAtCurrent),但这没有帮助。

编辑:用自定义槽当前方法工作​​正常 - 但我问,如果有这么不涉及任何信号/插槽的方法。

+1

模型/视图模式的整点是视图(QComboBox)o只能显示数据。因此,在你给出的例子中,你只能改变QCombobox内部缓冲区中的数据(模型不应该改变)。你的插槽应该在模型上操作,而不是视图 – friendzis 2012-07-20 10:55:25

回答

0

QComboBox可以使用

combo->additem("X"); 

combo->addItem(QString Y); 

手动添加项目,而你可以管理它的最大项目数。详情请参阅以下链接。

所以,在你的插槽,

void comboBoxEditTextChanged(const QString& text) 
{ 
    someComboBox->addItem(text); 
} 
+0

嗯,我不需要添加新项目,我只需要更改现有项目的文本 - 最好不使用自定义插槽。 – intelfx 2012-07-20 08:22:25

+0

@intelfx 它是我的错误。我没有正确地读过你的问题。那么我们可以按照以下方式来做 int index = combo-> findText(text); if(index!= -1){// -1 for not found combo-> setCurrentIndex(index); } – skg 2012-07-20 08:54:12

0

自动设置文本时,用户改变它,我们可以按照如下编辑插槽:

void comboBoxEditTextChanged(const QString& text) 
{ 
    int index = someComboBox->findText(text); 
    if(index != -1) 
    { 
     someComboBox->setCurrentIndex(index); 
    } 
    someComboBox->setItemText(someComboBox->currentIndex(), text); 
} 

我希望这将解决您的问题

+0

这不是再次...我想要将用户输入的文本保存到当前索引下的模型中,因此不需要搜索。此外,目前的方法工作正常 - 但我不知道是否可以没有信号/插槽,并没有在每个字符输入复制字符串。 – intelfx 2012-07-20 09:22:01