假设我有一个QTableWidget
,并且每行中都有一个QComboBox
和QSpinBox
。考虑我存储的值是一个QMap<QString /*Combo box val*/,int /*spin box val*/> theMap;
当comboBoxe
的值或旋转框值被更改时,我想更新theMap
。因此,我应该知道组合框的以前的值是什么,以便用comboBox
的新值替换并且还要注意旋转框的值。
我怎样才能做到这一点?
P.S.我决定创建一个插槽,当您单击表时,该插槽将存储该行组合框的当前值。但这仅在按行标题时有效。在其他地方(单击combobox
或spinbox
),itemSelectionChanged()
的QTableWidget
信号不起作用。
因此,通常我的问题是存储所选行的组合框的值,并且I甚至会得到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
,它现在另外提供了旧的组合框文本。希望对您有所帮助。