Nar*_*rek 5 c++ qt combobox spinner qtablewidget
说我有一个QTableWidget,每排有一个QComboBox和一个QSpinBox.考虑一下我存储它们的值是一个QMap<QString /*Combo box val*/,int /*spin box val*/> theMap;
当comboBoxes值或旋转框值被更改时,我想更新theMap.所以我应该知道组合框的前一个值是什么,以便用新的值替换,comboBox并且还要处理旋转框的值.
我怎样才能做到这一点?
PS我决定创建一个插槽,当你点击一个表时,它会存储该行组合框的当前值.但这只适用于按行标题时.在其他地方(点击一个combobox或上面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);
};
Run Code Online (Sandbox Code Playgroud)
然后只需连接到myTextChangedSignal,现在另外提供旧的组合框文本.
我希望有所帮助.
有点晚了,但我遇到了同样的问题并以这种方式解决了:
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;
};
Run Code Online (Sandbox Code Playgroud)