组装积木
这个例子显示了创建几个窗口部件并用信号和槽把它们连接起来,和如何处理重
新定义大小事件。
//mywidget.cpp
#include "mywidget.h"
#include "ui_mywidget.h"
#include <QPushButton>
#include <QFont>
#include <QLCDNumber>
#include <QSlider>
#include <QVBoxLayout>
MyWidget::MyWidget(QWidget *parent) :
QWidget(parent),
ui(new Ui::MyWidget)
{
ui->setupUi(this);
QWidget *window = new QWidget;
QPushButton *quit = new QPushButton("Quit", this);
quit->setFont(QFont( "Times", 18, QFont::Bold));
connect(quit, SIGNAL(clicked()), qApp, SLOT(quit()));
QLCDNumber *lcd = new QLCDNumber(2, this); //创建数字窗口
QSlider *slider = new QSlider(Qt::Horizontal,this); //创建滑块
slider->setRange(0, 99); //设置滑块范围
slider->setValue(0); //设置滑块初始值
connect(slider, SIGNAL(valueChanged(int)), lcd, SLOT(display(int)));
QVBoxLayout *layout = new QVBoxLayout;
layout->addWidget(quit);
layout->addWidget(lcd);
layout->addWidget(slider);
window->setLayout(layout);
window->show();
}
MyWidget::~MyWidget()
{
delete ui;
}
//main.cpp
#include "mywidget.h"
#include <QApplication>
int main(int argc, char *argv[])
{
QApplication a(argc, argv);
MyWidget w;
w.setGeometry(100, 100, 200, 120);
w.show();
return a.exec();
}
QLCDNumber *lcd = new QLCDNumber(2, this);
lcd 是一个 QLCDNumber,一个可以按像 LCD 的方式显示数字的窗口部件。这个实例被设置为显示两个数字,并且是 this 的子窗口部件。
QSlider
QSlider 是一个经典的滑块,用户可以通过在拖动一个东西在一定范围内调节一个整数数值的方式来使用这个窗口部件。这里我们创建了一个水平的滑块,设置它的范围是0~99,并且它的初始值是 0。
connect(slider, SIGNAL(valueChanged(int)), lcd, SLOT(display(int)));
这里我们是用了信号/槽机制把滑块的 valueChanged()信号和 LCD 数字的 display()槽连接起来了。
无论什么时候滑块的值发生了变化,它都会通过发射 valueChanged()信号来广播这个新的值。因为这个信号已经和 LCD 数字的 display()槽连接起来了,当信号被广播的时候,这个槽就被调用了。这两个对象中的任何一个都不知道对方。这就是组件编程的本质。
槽是和普通 C++成员函数的方式不同,但有着普通 C++成员函数的方位规则。