代码之家  ›  专栏  ›  技术社区  ›  PowerApp101

在Qt中,如何按下按钮将spinbox设置为特定值?

  •  0
  • PowerApp101  · 技术社区  · 15 年前

    我正在努力掌握Qt的信号和插槽机制。我有一个带有QPushButton和QSpinBox的应用程序。单击按钮时,我希望spinbox更改为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();
    
    }
    
    2 回复  |  直到 15 年前
        1
  •  3
  •   Gaston    15 年前

    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的指针。

        2
  •  1
  •   dirkgently    15 年前

    我想你正在看一个定制的插槽。A. QPushButton::clicked true|false QSpinBox::setValue 你不会走多远的。这个 需要一个int,并将输入布尔值转换为0或1(视情况而定),spinbox仅增加1个单位。如果你要写一个自定义的 SLOT