1
スロットで信号を受信して別の信号を送信しようとするまで、すべてがうまく動作するテストQtアプリケーションを作成しています(MyWidget :: setValueはMyWidget :: valueChangedのエミッションを発生させません)。私は間違って何をしていますか?Qt信号転送 - 何が間違っていますか?
#include <QApplication>
#include <QVBoxLayout>
#include <QSpinBox>
#include <QSlider>
class MyWidget: public QWidget {
Q_OBJECT
signals:
void valueChanged(int value);
public slots:
void setValue(int value){
emit valueChanged(value);
}
};
int main(int argc, char *argv[])
{
QApplication app(argc, argv);
MyWidget* win = new MyWidget;
QVBoxLayout* layout = new QVBoxLayout(win);
QSpinBox* spin =new QSpinBox();
QSlider* slider = new QSlider(Qt::Horizontal);
spin->setMinimum(-100);
spin->setMaximum(100);
slider->setMinimum(-100);
slider->setMaximum(100);
layout->addWidget(spin);
layout->addWidget(slider);
QObject::connect(spin, SIGNAL(valueChanged(int)), slider, SLOT(setValue(int)));
QObject::connect(slider, SIGNAL(valueChanged(int)), win, SLOT(setValue(int)));
QObject::connect(win, SIGNAL(valueChanged(int)), spin, SLOT(setValue(int)));
win->show();
return app.exec();
}
放出が起こらないことをどのように知っていますか? – Angew
Qt5を使用している場合、実行時にエラーを報告するだけの古い 'SIGNAL()'と 'SLOT()'マクロではなく、新しいコンパイル時にチェックされた 'connect()'構文を使うことをお勧めします。 –
ここで循環依存関係を作成していませんか? スピンの値を変更すると、スライダの値が変更されます。 スライダの値を変更すると、ウィンドウの値が変更されます。 Windowsの値を変更すると、スピンの値が変更されます。 – Geek