QT에서 스핀 박스를 특정 값으로 설정하려면 버튼 프레스를 어떻게 얻습니까?

StackOverflow https://stackoverflow.com/questions/815002

  •  03-07-2019
  •  | 
  •  

문제

QT의 신호 및 슬롯 메커니즘을 잡으려고 노력하고 있습니다. QPushButton과 Qspinbox가있는 앱이 있습니다. 버튼을 클릭하면 스핀 박스가 20으로 변경되기를 원합니다. 어떤 신호와 슬롯을 설정해야합니까?

아래 코드는 앱을 보여주고 Connect 기능은 내가 문제가있는 기능입니다. QPUSHBUTTON의 Clicked () 신호가 다른 서명을 가지고 있기 때문에 qspinbox의 setValue (int) 슬롯이 여기에서 작동하지 않습니다. 어쨌든 값 20을 Spinbox로 어떻게 전달합니까? spinbox-> setValue (20)을 호출하는 슬롯 역할을하려면 일종의 보조 기능을 작성해야합니까? 그렇다면 어떤 형태가 필요합니까?

int main(int argc, char *argv[])
{
    QApplication app(argc, argv);

    QWidget *window = new QWidget;
    QSpinBox *spinbox = new QSpinBox;
    QPushButton *button = new QPushButton("Set to 20");

    spinbox->setRange(0, 100);

    // What should I put below?
    QObject::connect(button, SIGNAL(clicked()), spinbox, SLOT(???????));

    QLayout *layout = new QHBoxLayout;
    layout->addWidget(spinbox);
    layout->addWidget(button);
    window->setLayout(layout);

    window->show();

    return app.exec();

}
도움이 되었습니까?

해결책

당신은 할 수 있습니다 :

class AuxSignals : public QObject
{
    Q_OBJECT
    ...
    signals:
        void valueChanged(int);
    public slots:
        void buttonClicked() { emit valueChanged(20); }
};

...

// On main.cpp
AuxSignals *auxSignals = new AuxSignals;

QObject::connect(button, SIGNAL(clicked()), auxSignal, SLOT(buttonClicked));
QObject::connect(auxSignals, SIGNAL(valueChanged(int)), spinbox, SLOT(setValue(int)));

또는

class AuxSignals : public QObject
{
    Q_OBJECT
    ...
    QSpinBox *m_spinBox;
    public:
        AuxSignals(QSpinBox *spinBox) : m_spinBox(spinBox) {}
    public slots:
        void buttonClicked() { m_spinBox->setValue(20); }
};

...

// On main.cpp
AuxSignals *auxSignals = new AuxSignals(spinBox);

QObject::connect(button, SIGNAL(clicked()), auxSignals, SLOT(buttonClicked()));

AuxSignals 클래스에 특정 QWIDGET에 대한 포인터가 필요하지 않기 때문에 첫 번째 옵션을 선호합니다.

다른 팁

나는 당신이 여기에 맞춤형 슬롯을보고 있다고 생각합니다. ㅏ QPushButton::clicked 신호는 부울을 줄 것입니다 (true|false) 이벤트. 당신이 그것을 사용하는 경우 QSpinBox::setValue 당신은 그리 멀지 않을 것입니다. 그만큼 QSpinBox::setValue int를 예상하고 입력 부울을 케이스에서 0 또는 1으로 변환하고 스핀 박스는 단 1 단위 만 증가합니다. 당신이 관습을 작성한다면 SLOT 훨씬 더 많은 제어로 정확한 슬라이더 값을 실제로 설정할 수 있습니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top