假设我有一个QTableWidget
,每一行都有一个QComboBox
和一个QSpinBox
。考虑到我存储它们的值是一个QMap<QString /*Combo box val*/,int /*spin box val*/> theMap;
当comboBoxe
的值或数字显示框值被更改时,我想要更新theMap
。因此,我应该知道组合框的前值是什么,以便替换为comboBox
的新值,同时也要注意数字显示框的值。
我该怎么做呢?
附注:我已经决定创建一个槽,当你点击一个表时,它会存储该行组合框的当前值。但这只在你按下行标题时才起作用。在其它位置(单击combobox
或spinbox
),QTableWidget
的itemSelectionChanged()
信号不起作用。
因此,一般来说,我的问题是存储选定行的组合框的值,而I将获得ComboBox
或SpinBox
的更改,并将很容易地处理theMap
。
发布于 2010-07-06 16:26:25
如何创建您自己的派生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
,它现在额外提供了旧的组合框文本。
我希望这能有所帮助。
发布于 2012-01-30 22:58:34
有点晚了,但我遇到了同样的问题,并以这种方式解决了:
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;
};
发布于 2010-07-07 01:37:42
我的建议是实现一个模型,它将帮助您在数据和编辑数据的UI之间进行清晰的分离。然后,您的模型将收到通知,给定的模型索引(行和列)已更改为新数据,此时您可以更改所需的任何其他数据。
https://stackoverflow.com/questions/3184395
复制相似问题