假设我有一个QTableWidget,并且每行中都有一个QComboBoxQSpinBox。考虑我存储的值是一个QMap<QString /*Combo box val*/,int /*spin box val*/> theMap;
comboBoxe的值或旋转框值被更改时,我想更新theMap。因此,我应该知道组合框的以前的值是什么,以便用comboBox的新值替换并且还要注意旋转框的值。

我怎样才能做到这一点?

P.S.我决定创建一个插槽,当您单击表时,该插槽将存储该行组合框的当前值。但这仅在按行标题时有效。在其他地方(单击comboboxspinbox),itemSelectionChanged()QTableWidget信号不起作用。

因此,通常我的问题是存储所选行的组合框的值,并且I甚至会得到ComboBoxSpinBox更改,并且将轻松处理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,它现在另外提供了旧的组合框文本。

希望对您有所帮助。

10-04 21:15