听说《C++ GUI Qt4 编程》是学习qt的超经典教材,就果断的卖了本回来研究,虽然这本书有说qt4的安装,却没有教你怎么使用。原书使用的直接用qt进行编程,我研究了很久都不会,于是毫不犹豫的使用了集成的开发环境QT Creator 。毕竟现在已经是集成开发环境的天下,对于我这些初学者来说,入门是相当方便的。至于怎么安装学前站已经搞掂了。安装好之后,QT Creator 就马上会用了,根本不用入门。
程序源代码呈上:
1.1 Hello Qt
#include <QtGui/QApplication>
#include<QLabel>
int main(int argc, char *argv[])
{
QApplication a(argc, argv);
QLabel *label= new QLabel("Hello QT!");
label->show();
return a.exec();
}
程序解读
QApplication a(argc, argv);用来管理整个应用程序所用到的资源。
QLabel *label= new QLabel("Hello QT!");创建了一个显示“hello Qt”的QLabel窗口部件
label->show();使得label可见,避免窗口部件闪烁现象。
return a.exec();将应用程序的控制权传递给Qt。此时程序会进入事件循环状态,这是一种等待模式,程序等待用户的动作。
1.2建立连接——信号与槽
#include <QtGui/QApplication>
#include <QPushButton>
int main(int argc, char *argv[])
{
QApplication a(argc, argv);
QPushButton *button=new QPushButton("Quit");
QObject::connect(button,SIGNAL(clicked()),&a,SLOT(quit()));
button->show();
return a.exec();
}
Qt的窗口部件通过发射信号(signal)来表明一个用户动作已经发生或者一个状态改变了。例如,当用户单击QPushButton时,槽可以得到自动执行。在这个例子中,我们把这个按钮的clicked()信号(鼠标动作)与QApplication对象的quit()槽(退出程序)连接起来。宏SIGNAL()和SLOT()是Qt语法中的一部分。
#include <QtGui/QApplication>
#include <QHBoxLayout>
#include <QSlider>
#include <QSpinBox>
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);
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();
}
QWidget *window=new QWidget;
window->setWindowTitle("Enter your age");创建了QWidget对象,并把它作为应用程序的主窗口。我们通过调用setWindowTitle函数来设置显示在窗口标题栏上的文字。
QSpinBox *spinBox=new QSpinBox;
QSlider *slider=new QSlider(Qt::Horizontal);创建了一个QSpinBox和一个QSlider。
spinBox->setRange(0,130);
slider->setRange(0,130);设置了他们的有效范围。0-130。
QObject::connect(spinBox,SIGNAL(valueChanged(int)),slider,SLOT(setValue(int)));
QObject::connect(slider,SIGNAL(valueChanged(int)),spinBox,SLOT(setValue(int)));调用了两次QObject::connect()。这是为了确保能够让微调框和滑块同步。一旦有一个窗口部件的值发生变化,那么就会发射他的valueChanged(int)信号,而另一个窗口部件就会用这个新值调用它的setValue(int)槽。
spinBox->setValue(35);设定框值为35,避免无限循环。
QHBoxLayout *layout=new QHBoxLayout;
layout->addWidget(spinBox);
layout->addWidget(slider);
window->setLayout(layout);
使用了一个布局管理器对微调框和滑块进行布局处理。布局管理器就是一个能够对其所负责的窗口部件的尺寸大小和位置进行设置的对象。Qt有三个主要的布局管理器类:
QHBoxLayout.在水平方向上排列窗口部件,从左到右。
QVBoxLayout。在竖直向上排列窗口部件,从上到下。
QGridLayout。把各个窗口部件排列在一个网格中。
window->setLayout(layout); QWidget::setLayout()函数的调用会在窗口上安装该布局管理器。从软件的底层来说,QSpinBox和QSlider会自动“重定义父对象”,他们会成为这个安装了布局的窗口部件的子对象。因此没必要指定父对象。
Qt内部有很多的类要学习,我们今天就介绍到这里了。
文章评论(0条评论)
登录后参与讨论