【发布时间】:2018-09-09 19:32:21
【问题描述】:
我认为我对一个对我来说似乎很基本的概念有一些重大问题。
我创建了一个自定义小部件,它实际上只是一个小部件集合,因此会出现多次。
class CustomWidget : public QWidget {
Q_OBJECT
public:
explicit CustomWidget(QWidget parent=nullptr) : QWidget(parent) {
spinboxA = new QSpinBox;
spinboxB = new QSpinBox;
QHBoxLayout* layout = new QHBoxLayout(this);
layout.addWidget(spinboxA);
layout.addWidget(spinboxB);
this->setLayout(layout);
}
private:
QSpinBox* spinboxA;
QSpinBox* spinboxB;
};
然后在 gui 中使用此自定义小部件。当然,我希望这个 gui 对旋转框值的变化做出反应。据我了解,我可以
1) 为QSpinBoxes 提供getter 并在类外连接它们的信号。
2)“重新路由”他们的信号,如下例所示
@1) 我猜是通过connect(customwidget->getSpinboxA(),SIGNAL(valueChanged(int)),this,SLOT(doSomething(int))); 使用的?
@2)
class CustomWidget : public QWidget {
Q_OBJECT
public:
explicit CustomWidget(QWidget parent=nullptr) : QWidget(parent) {
spinboxA = new QSpinBox;
spinboxB = new QSpinBox;
QHBoxLayout* layout = new QHBoxLayout;
layout.addWidget(spinboxA);
layout.addWidget(spinboxB);
this->setLayout(layout);
connect(spinboxA,SIGNAL(valueChanged(int)),//...
this,SLOT(onSpinboxAValueChanged(int)));
}
private:
QSpinBox* spinboxA;
QSpinBox* spinboxB;
private slots:
void onSpinboxAValueChanged(int x) {emit spinboxAValueChanged(x);}
//...
signals:
void spinboxAValueChanged(int x)
};
在 gui 类中可以connect(customwidget,SIGNAL(spinboxAValueChanged(int),this,SLOT(doSomething(int)));
尤其是版本 2) 看起来非常混乱,而且...我在问自己 - 如何连接到自定义小部件内的小部件的信号?
【问题讨论】:
标签: c++ qt qt5 qt-signals custom-widgets