假设我有一个QTableWidget
,每行都有一个QComboBox
和一个QSpinBox
。考虑一下我存储的值为QMap<QString /*Combo box val*/,int /*spin box val*/> theMap;
当更改comboBoxe
s值或旋转框值时,我想更新theMap
。所以我应该知道组合框的前一个值是什么,以便用comboBox
的新值替换,并且还要处理旋转框的值。
我该怎么做?
P.S。我决定创建一个插槽,当您单击一个表时,它会存储该行的组合框的当前值。但这只适用于按行标题时。在其他地方(点击combobox
或spinbox
)itemSelectionChanged()
信号QTableWidget
不起作用。
所以一般来说,我的问题是存储所选行的组合框的值,我将ComboBox
或SpinBox
更改为偶数,并将轻松处理theMap
。< / p>
答案 0 :(得分:6)
如何创建自己的派生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
,现在另外提供旧的组合框文字。
我希望有所帮助。
答案 1 :(得分:4)
有点晚了,但我遇到了同样的问题并以这种方式解决了:
class CComboBox : public QComboBox
{
Q_OBJECT
public:
CComboBox(QWidget *parent = 0) : QComboBox(parent) {}
QString GetPreviousText() { return m_PreviousText; }
protected:
void mousePressEvent(QMouseEvent *e)
{
m_PreviousText = this->currentText();
QComboBox::mousePressEvent(e);
}
private:
QString m_PreviousText;
};
答案 2 :(得分:0)
我的建议是实现一个模型,它可以帮助您在数据和编辑数据的UI之间进行清晰的分离。然后,您的模型会收到通知,告知给定的模型索引(行和列)已更改为新数据,并且您可以更改此时所需的任何其他数据。
答案 3 :(得分:0)
我只是遇到了类似的问题,但是对我来说,我需要以前的索引来处理一些琐碎的事情,因此为它定义和实现整个类是不合理的。
所以我要做的是保留一个名为“ previousIndex”的参数,并在我完成所需的所有操作后才更新它的值