2010-07-06 2 views
4

QTableWidget이 있고 각 행에 QComboBox와 QSpinBox가 있다고 가정 해보십시오. 내가 값을 저장하는 것이 QMap theMap임을 고려하십시오.값이 변경되면 QTableWidget에있는 QComboBox의 이전 값을 가져옵니다.

comboBoxes 값 ​​또는 스핀 상자 값이 변경되면 "theMap"을 업데이트하려고합니다. 그래서 나는 콤보 상자의 새로운 가치로 대체하고 또한 스핀 상자의 가치를 돌보기 위해 콤보 상자의 이전 가치가 무엇인지 알아야한다.

어떻게하면됩니까?

P. 테이블을 클릭하면 해당 행의 콤보 상자의 현재 값을 저장하는 슬롯을 만들기로 결정했습니다. 그러나 이것은 행 캡션을 누를 때만 작동합니다. 콤보 상자 나 스핀 상자를 클릭하는 다른 곳에서는 QTableWidget의 itemSelectionChanged() 신호가 작동하지 않습니다. 그래서 일반적으로 내 문제는 선택한 행의 콤보 상자의 값을 저장하는 것입니다. ComboBox 또는 SpinBox를 변경하고 "theMap"을 쉽게 처리합니다.

답변

6

방법의 라인을 따라 자신의 파생 QComboBox 클래스, 뭔가를 만드는 방법에 대한 : 지금 추가로 기존의 콤보 상자의 텍스트를 제공하는 대신 myTextChangedSignal에 연결 한 후

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

합니다.

도움이 되었기를 바랍니다.

+0

이 물론 잘하지만 난 행 콤보 상자 (또는 스핀 상자)이 편집 된 이해 할 수있는 방법? – Narek

0

제 제안은 데이터와 데이터를 편집하는 UI 사이를 명확하게 구분할 수있는 모델을 구현하는 것입니다. 그런 다음 모델에 주어진 모델 색인 (행 및 열)이 새 데이터로 변경되었다는 알림을 받게되고 그 시점에서 필요한 다른 데이터를 변경할 수 있습니다.

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

이것은 현명하고 간단한 방법입니다. – user1899020

관련 문제