QT入门学习笔记2 - 建立连接&简单例子
程序员文章站
2022-06-01 20:06:32
...
1.建立连接
Qt通过信号(signal)与槽(slot)来响应用户的动作,信号和槽是一种高级接口,它们被应用于对象之间的通信,它们是Qt的核心特性,也是Qt不同于其它同类工具包的重要地方之一。因为博主也在入门的路上,所以对于其具体机制的实现暂时也无法给出详细的分析,所以以教材上的一个基本例子来熟悉此部分。
这个应用程序就由一个退出按钮构成,用户可以单击按钮退出程序。
#include <QApplication> #include <QPushButton> int main(int argc,char *argv[]) { QApplication app(argc,argv); QPushButton *button = new QPushButton("Quit"); //将按钮的click()信号和QApplication对象的quit()槽连接起来 QObject::connect(button,SIGNAL(clicked()),&app,SLOT(quit())); button->show(); return app.exec(); }
Qt的窗口部件通过发射信号(signal)来表明一个用户动作的发生或状态的改变,信号可以与槽(slot)相连接,以便信号发射时,槽便可以得到自动执行。
程序运行效果:
2.窗口部件的布局
我用一个例子来说明如何用布局(layout)来管理窗口中窗口部件的几何形状,也还要说明如何利用信号和槽来同步窗口部件。
该应用程序可以用来询问用户的年龄,由微调框(spin box)和滑块(slide)来完成年龄的输入:
#include <QApplication> #include <QHBoxLayout> #include <QPushButton> #include <QSlider> #include <QSpinBox> int main(int argc, char *argv) { QApplication app(argc,argv); //该程序将Widget设置为应用程序的主窗口 QWidget *window = new QWidget; window->setWindowTitle("Enter Your Age"); //创建QSpinBox和QSlider两个窗口对象,并对其部分属性进行设置 QSpinBox *spinBox = new QSpinBox; QSlider *slider = new QSlider(Qt::Horizontal); //设置有效范围 spinBox->setRange(0,130); slider->setRange(0,130); QPushButton *button = new QPushButton("QUIT"); //设置QSpinBox和QSlider两个对象的信号&槽,使其数值同步 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()), &app,SLOT(quit())); spinBox->setValue(35); QHBoxLayout *layout = new QHBoxLayout; //布局管理器(layout manager) layout->addWidget(spinBox); layout->addWidget(slider); //自动重定义父对象,成为这个安装了布局的窗口部件的子对象 layout->addWidget(button); window->setLayout(layout); window->show(); return app.exec(); }
布局管理器(layout manager)就是一个能够对其所负责窗口部件的尺寸大小和位置进行设置的对象,其主要的三个布局管理器类:
- QHBoxLayout 水平方向上排列,从左至右。
- QVBoxLayout 竖直方向上排列,从上到下。
- QGridLayout 网格形式排列。
目前见过的类之间的继承树: