[QT起航] 第二篇——(一)初识Qt(第一个Qt程序、信号与槽、布局)
2016-10-03 23:26
477 查看
一、第一个QT程序
在一个完整的QT程序中,QApplication a(argc, argv);和a.exec();是必不可少的。
二、信号与响应函数
1.以下例子用来说明怎么响应信号,当按钮被点击时退出程序。
2.以下代码演示如何在窗口中排列多个控件。学习使用信号和槽使控件同步。该程序将一个spinbox和slider通过信号和槽连接起来,当一方的值变化时,另一方的值进行同步。
程序中使用了三个控件: QSpinBox, QSlider 和 QWidget。 QWidget 是这个程序的主窗口。 QSpinBox 和 QSlider 被放在 QWidget 中;他们是 QWidget 的 children。反过来,我们也可以称 QWidget 是 QSpinBox 和 QSlider 的 parent。 QWidget 没有 parent,因为它是程序的顶层窗口。在 QWidget 及其子类的构造函数中,都有一个 QWidget*参数,用来指定它们的父控件。
#include <QtWidgets/QApplication> // 包含 QApplication 类所需的头文件 #include <QtWidgets/QLabel> // 包含控件Label所需的头文件 int main(int argc, char *argv[]) // C++ mian 函数标准写法 { QApplication a(argc, argv);// 创建Qt应用 QLabel *label = new QLabel("Hello Qt!"); // 创建标签,设定文字内容 label->show(); // 显示标签 return a.exec(); // 进入消息循环,等待可能的事件,并进行响应 }
在一个完整的QT程序中,QApplication a(argc, argv);和a.exec();是必不可少的。
二、信号与响应函数
1.以下例子用来说明怎么响应信号,当按钮被点击时退出程序。
#include <QApplication> #include <QPushButton> int main(int argc, char *argv[]) { QApplication app(argc, argv); //创建APP QPushButton *button = new QPushButton("Quit"); //设置按钮名称 QObject::connect(button, SIGNAL(clicked()), //将按钮和应用绑定,当点击按钮时触发点击事件,应用退出 &app, SLOT(quit())); button->show(); //显示按钮 return app.exec(); //进入事件循环 }
// 信号和槽 // 语法 connect(sender, SIGNAL(signal), receiver, SLOT(slot)); // SIGNAL 和 SLOT 实际是将函数转换为字符串,在 connect 的时候进行检查,如果检查失败则connect失败 // 一个信号可以对应多个槽,但是槽的调用顺序是随机的 // 一个槽可以接受多个信号 // 信号也可以连接信号,当前一个信号发出后,后一个信号也跟着发送 // connect 连接可以删除。此函数使用比较少,当一个对象删除后,Qt自动删除这个对象的所有连接 disconnect(lcd, SIGNAL(overflow()),this, SLOT(handleMathError())); // 信号和槽函数必须有着相同的参数类型,这样信号和槽函数才能成功连接..如果信号参数多于槽,则多于的会被忽略。如果参速类型不匹配,或者信号和槽不存在,debug时会有提示。 // 信号和槽不仅适用于控件,其实信号和槽机制,在QObject中就已经实现。可以实现在任何从 QObject 继承的子类中。
2.以下代码演示如何在窗口中排列多个控件。学习使用信号和槽使控件同步。该程序将一个spinbox和slider通过信号和槽连接起来,当一方的值变化时,另一方的值进行同步。
程序中使用了三个控件: QSpinBox, QSlider 和 QWidget。 QWidget 是这个程序的主窗口。 QSpinBox 和 QSlider 被放在 QWidget 中;他们是 QWidget 的 children。反过来,我们也可以称 QWidget 是 QSpinBox 和 QSlider 的 parent。 QWidget 没有 parent,因为它是程序的顶层窗口。在 QWidget 及其子类的构造函数中,都有一个 QWidget*参数,用来指定它们的父控件。
#include <QtWidgets/QApplication> #include <QtWidgets/QPushButton> #include <QtWidgets/QHBoxLayout> #include <QtWidgets/QSpinBox> #include <QtWidgets/QSlider> int main(int argc, char *argv[]) { QApplication app(argc, argv); QWidget *window = new QWidget; window->setWindowTitle("Enter your age");//创建主窗口,并设置其标题 QSpinBox *spinbox = new QSpinBox; // 创建spinbox控件,设置其范围 QSlider *slider = new QSlider; // 创建slider控件,设置其范围 spinbox->setRange(0, 130); slider->setRange(0, 130); // 关联 spinbox 和 slider QObject::connect(spinbox, SIGNAL(valueChanged(int)), slider, SLOT(setValue(int))); QObject::connect(slider, SIGNAL(valueChanged(int)), spinbox, SLOT(setValue(int))); spinbox->setValue(25); // 设置spinbox 的默认值,此时spinbox触发valueChanged信号 //将vaule = 25传递给setValue,slider的值得到同步。此时slider也会触发valueChanged信号,但由于spinbox值 //本来就为25,所以spinbox不会发送任何信号,不会导致死循环 QHBoxLayout *layout = new QHBoxLayout; // 创建一个水平布局管理器 layout->addWidget(spinbox); // 将 spinbox 加入 layout 的管理队列 layout->addWidget(slider); // 将 slider 加入 layout 的管理队列 window->setLayout(layout); // 将水平布局管理器放到主窗口中,设置spinbox 和 slider 的父窗口为window,即布局管理器所在的控件 //如果一个控件由布局管理器确定它的大小和位置,那个创建它的时候就不必指定一个明确的“父”控件。 window->show(); // 显示窗口 return app.exec(); } // 三种布局管理器 // QHBoxLayout:水平排列控件。 // QVBoxLayout:垂直排列控件。 // QGridLayout:按矩阵方式排列控件
// QSpinBox 简述 // public常用成员函数 explicit QSpinBox(QWidget *parent = Q_NULLPTR);// QSpinBox的构造函数,参数代表其父窗口。 void setPrefix(const QString &prefix); // 设置前缀 void setSuffix(const QString &suffix); // 设置后缀 void setSingleStep(int val); // 设置步长 void setRange(int min, int max); // 设置范围 // protected bool event(QEvent *event); virtual QValidator::State validate(QString &input, int &pos) const; virtual int valueFromText(const QString &text) const; virtual QString textFromValue(int val) const; virtual void fixup(QString &str) const; // 信号函数 void valueChanged(int); // void valueChanged(const QString &); // // 槽函数 void setValue(int val); //
相关文章推荐
- 菜鸟学QT之二-------------初识信号、槽、布局
- [QT起航] 第二篇——(二)再识Qt的信号与槽机制
- 第一个qt程序:hello world!
- 如何在Qt 4程序中优化布局结构-兼回答网友提问
- QT的QHttp无信号发出,窗口程序关闭时崩溃
- Ubuntu10.04下安装Qt4和创建第一个Qt程序
- QT入门学习笔记1--第一个QT程序
- QT第一个程序 hello,world
- QT 发射信号,接收槽,双线程演示(QtSDK演示程序)
- 自己的第一个程序 — QT聊天软件 小感
- 如何在Qt 4程序中优化布局结构(转载)
- Windows下安装QT并运行第一个程序
- 用qmake生成的第一个qt程序(linux)
- QT安装及第一个程序的运行
- Linux下第一个Qt程序
- QT的QHttp无信号发出,窗口程序关闭时崩溃
- 参照《精通QT4编程》编写第一个QT程序总是失败
- 开始第一个Qt程序
- 第一个QT程序,Hello World
- 初识Lua,搭建环境和第一个程序