这是C++ GUI Qt4 第二版书上的一个例子,虽然很简单,不过讲到如果用程序做一些简单的布局,而不是纯粹的靠拖动控件。
#include "widget.h"
#include <QApplication>
#include <QSpinBox>
#include <QSlider>
#include <QHBoxLayout>
int main(int argc, char *argv[])
{
QApplication a(argc, argv);
QWidget *window = new QWidget;
window->setWindowTitle("Enter Your Age");
QSpinBox *spinBox = new QSpinBox;
QSlider *slider = new QSlider(Qt::Horizontal);//这里初始化如果没有指定使用Qt::Horizontal,则创建的是Qt::Vertical;
spinBox->setRange(0, 130);
slider->setRange(0, 130);
QObject::connect(spinBox, SIGNAL(valueChanged(int)), slider, SLOT(setValue(int)));
QObject::connect(slider, SIGNAL(valueChanged(int)), spinBox, SLOT(setValue(int)));
spinBox->setValue(35);
QHBoxLayout *layout = new QHBoxLayout;
layout->addWidget(spinBox);
layout->addWidget(slider);
window->setLayout(layout);
window->show();
return a.exec();
}
滑动条和spinBox相互连接,为什么不会造成无限循环的信号与槽的调用?书中指出,当发送方发送信号后,接受方更改了自己的值,然后接收方又发送valuechanged的信号,不过此时发送方的值并未再次改变,它就不会触发valuechanged信号,就避免了无限循环。