Скажите, что у меня есть a QTableWidget
и в каждой строке существует a QComboBox
и a QSpinBox
. Полагайте, что я храню их значения, a QMap<QString /*Combo box val*/,int /*spin box val*/> theMap;
Когда comboBoxe
s значение или значение полей счетчика изменяется, я хочу обновить theMap
. Таким образом, я должен знать то, что было бывшим значением поля комбинированного списка для замены новым значением comboBox
и также заботьтесь о значении поля счетчика.
Как я могу сделать это?
P.S. Я решил создать слот, что при нажатии на таблицу она хранит текущее значение поля комбинированного списка той строки. Но это работает только, когда Вы нажимаете на подписи строки. В других местах (нажимающий a combobox
или на a spinbox
) itemSelectionChanged()
сигнал QTableWidget
не работает.
Таким образом, в целом моя проблема состоит в том, чтобы сохранить значение поля комбинированного списка выбранной строки, и я доберется ComboBox
или SpinBox
изменитесь даже, и обработает theMap
легко.
Как насчет создания собственного производного класса 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
, который теперь дополнительно предоставляет старый текст поля со списком.
Надеюсь, это поможет.
Я предлагаю реализовать модель, которая поможет вам сделать чистое разделение между данными и пользовательским интерфейсом, редактирующим эти данные. Тогда ваша модель будет получать уведомление о том, что данный индекс модели (строка и столбец) изменился на новые данные, и вы сможете изменить любые другие данные, которые вам нужны в этот момент.