参考书籍《Qt creator 快速入门》《C++ GUI Qt4 编程》
这边的例子,一个是通过纯命令行的形式创建一个带有spin box和slider加一个退出按钮的小界面。别看它小,也有信号与槽。
#include
#include
#include
#include
#include
int main(int argc, char** argv)
{
QApplication app(argc, argv);
QWidget *window = new QWidget;
QSpinBox* spinbox = new QSpinBox;
spinbox->setRange(1,100);
QSlider* slider = new QSlider(Qt::Horizontal);
slider->setRange(1, 100);
QPushButton* button = new QPushButton("quit", window);
QObject::connect(spinbox, SIGNAL(valueChanged(int)), slider, SLOT(setValue(int)));
QObject::connect(slider, SIGNAL(valueChanged(int)), spinbox, SLOT(setValue(int)));
QObject::connect(button, SIGNAL(clicked()), window, SLOT(close()));
QHBoxLayout *layout = new QHBoxLayout;
layout->addWidget(spinbox);
layout->addWidget(slider);
layout->addWidget(button);
window->setLayout(layout);
window->show();
// button->show();
return app.exec();
}
程序运行截图如下:
这里我新建了一个qt Gui工程,父类选择的是QDialog,主要的改动都在Dialog.cpp中,主要是构造函数中,程序如下:
#include "yakedialog.h"
#include "ui_yakedialog.h"
yakeDialog::yakeDialog(QWidget *parent) :
QDialog(parent),
ui(new Ui::yakeDialog)
{
ui->setupUi(this);
QObject::connect(ui->spinBox, SIGNAL(valueChanged(int)), ui->horizontalSlider, SLOT(setValue(int)));
QObject::connect(ui->spinBox, SIGNAL(valueChanged(int)), ui->dial, SLOT(setValue(int)));
QObject::connect(ui->horizontalSlider, SIGNAL(valueChanged(int)), ui->spinBox, SLOT(setValue(int)));
QObject::connect(ui->horizontalSlider, SIGNAL(valueChanged(int)), ui->dial, SLOT(setValue(int)));
QObject::connect(ui->dial, SIGNAL(valueChanged(int)), ui->spinBox, SLOT(setValue(int)));
QObject::connect(ui->dial, SIGNAL(valueChanged(int)), ui->horizontalSlider, SLOT(setValue(int)));
QObject::connect(ui->pushButton,SIGNAL(clicked()), this,SLOT(close()));
}
yakeDialog::~yakeDialog()
{
delete ui;
}
我们可以看到的是,部件都是通过ui来调用出来的,也就是我们在Qt Creator帮我们建立的那个ui文件中,我们加入spin box ,加入按钮,这些都是资源,我们为什么能够通过ui来调用呢?
1. ui资源都被编译成了头文件,也就是creator帮我自动加入的那个ui_yakedialog.h
2. ui指针是在dialog.h中定义的一个private 的成员变量(如下图所示),而我们的dialog.cpp包含了这个dialog.h。因此可以调用ui指针,这样,通过指针就可以调用其中的资源了。