2012-07-20 109 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