当值更改时,获取QComboBox的先前值,该值位于QTableWidget中

问题描述 投票:4回答:4

说我有一个QTableWidget,每排有一个QComboBox和一个QSpinBox。考虑我存储他们的值是一个QMap<QString /*Combo box val*/,int /*spin box val*/> theMap;

comboBoxes值或旋转框值正在改变时,我想更新theMap。所以我应该知道组合框的前一个值是什么,以便用comboBox的新值替换,并且还要处理旋转框的值。

我怎样才能做到这一点?

附:我决定创建一个插槽,当您单击一个表时,它会存储该行的组合框的当前值。但这只适用于按行标题时。在其他地方(点击comboboxspinboxitemSelectionChanged()QTableWidget信号不起作用。

所以一般来说我的问题是存储所选行的组合框的值,并且我将得到ComboBoxSpinBox改变均匀并且将容易地处理theMap

c++ qt combobox spinner qtablewidget
4个回答
7
投票

如何创建自己的派生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,现在另外提供旧的组合框文本。

我希望有所帮助。


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;
};

0
投票

我的建议是实现一个模型,它可以帮助您在数据和编辑数据的UI之间进行清晰的分离。然后,您的模型会收到通知,告知给定的模型索引(行和列)已更改为新数据,并且您可以更改此时所需的任何其他数据。


0
投票

我只是遇到了类似的问题,但对我来说,我需要以前的索引来处理非常微不足道的事情,因此为它定义和实现整个类是没有道理的。

所以我所做的就是保持一个名为'previousIndex'的论点,并且只有在我完成了我需要的一切之后才更新它的价值

© www.soinside.com 2019 - 2024. All rights reserved.