Получите предыдущее значение QComboBox, который находится в QTableWidget, когда значение изменяется

Скажите, что у меня есть a QTableWidget и в каждой строке существует a QComboBox и a QSpinBox. Полагайте, что я храню их значения, a QMap<QString /*Combo box val*/,int /*spin box val*/> theMap;

Когда comboBoxes значение или значение полей счетчика изменяется, я хочу обновить theMap. Таким образом, я должен знать то, что было бывшим значением поля комбинированного списка для замены новым значением comboBox и также заботьтесь о значении поля счетчика.

Как я могу сделать это?

P.S. Я решил создать слот, что при нажатии на таблицу она хранит текущее значение поля комбинированного списка той строки. Но это работает только, когда Вы нажимаете на подписи строки. В других местах (нажимающий a combobox или на a spinbox) itemSelectionChanged() сигнал QTableWidget не работает.

Таким образом, в целом моя проблема состоит в том, чтобы сохранить значение поля комбинированного списка выбранной строки, и я доберется ComboBox или SpinBox изменитесь даже, и обработает theMap легко.

5
задан AAEM 5 November 2018 в 01:52
поделиться

2 ответа

Как насчет создания собственного производного класса QComboBox, например:

class MyComboBox : public QComboBox
{
  Q_OBJECT
private:
  QString _oldText;
public:
  MyComboBox(QWidget *parent=0) : QComboBox(parent), _oldText() 
  {
    connect(this,SIGNAL(editTextChanged(const QString&)), this, 
        SLOT(myTextChangedSlot(const QString&)));
    connect(this,SIGNAL(currentIndexChanged(const QString&)), this, 
        SLOT(myTextChangedSlot(const QString&)));
  }
private slots:
  myTextChangedSlot(const QString &newText)
  {
    emit myTextChangedSignal(_oldText, newText);
    _oldText = newText;
  }
signals:
  myTextChangedSignal(const QString &oldText, const QString &newText);  
};

А затем просто подключитесь к myTextChangedSignal , который теперь дополнительно предоставляет старый текст поля со списком.

Надеюсь, это поможет.

7
ответ дан 13 December 2019 в 19:20
поделиться

Я предлагаю реализовать модель, которая поможет вам сделать чистое разделение между данными и пользовательским интерфейсом, редактирующим эти данные. Тогда ваша модель будет получать уведомление о том, что данный индекс модели (строка и столбец) изменился на новые данные, и вы сможете изменить любые другие данные, которые вам нужны в этот момент.

0
ответ дан 13 December 2019 в 19:20
поделиться
Другие вопросы по тегам:

Похожие вопросы: