gpt4 book ai didi

c++ - 在 Qt 中,如何通过按下按钮将旋转框设置为特定值?

转载 作者:行者123 更新时间:2023-11-27 23:35:18 28 4
gpt4 key购买 nike

我正在尝试掌握 Qt 的信号和槽机制。我有一个带有 QPushButton 和 QSpinBox 的应用程序。当我点击按钮时,我希望旋转框变为 20。我需要设置什么信号和插槽?

下面的代码显示了应用程序,连接功能是我遇到问题的那个。据我了解,QSpinBox 的 setValue(int) 插槽在这里不起作用,因为 QPushButton 的 clicked() 信号具有不同的签名,无论如何我将如何将值 20 传递给旋转框?我是否需要编写某种辅助函数来充当调用 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 的指针。

关于c++ - 在 Qt 中,如何通过按下按钮将旋转框设置为特定值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/815002/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com