大宇私人领地伊甸园丨宁愿做了后悔,也不要错过后悔[www.mrdayu.com]
注册

24小时联系邮箱:[email protected]

所有文章
大宇私人伊甸园: 首页 > 所有文章 > 编程人生 > 系统架构 > QT > 《大宇:Qt入门到精通》 > [002.03]实现两控件之间的相互通信

[002.03]实现两控件之间的相互通信

发布时间:2017/11/13 《大宇:Qt入门到精通》 所有文章 标签spinbox阅读:766

前言:

通过本篇文章的学习,能够进一步熟悉信号与槽的关系,以及窗口部件的布局。

要求:

读者具有一定的C/C++编程基础,对信号槽有一定的了解基础。

必备知识点1:滑块控件slider[英文翻译:滑块]

如果英语好的同学可以阅读下下面的介绍,如果实在看不懂,看图上的控件模样即可。

必备知识点2:微调框spinbox[英文翻译:旋转的盒子]

如果英语好的同学可以阅读下下面的介绍,如果实在看不懂,看图上的控件模样即可。

必备知识点3:布局layout

接下来我们来学习一下QLayout布局的相关知识点:

QLayout布局:

常用的布局管理有QVBoxLayout,QHBoxLayout,QGridLayout

QVBoxLayout:垂直布局

QHBoxLayout:水平布局

QGridLayout:嵌套布局

今天我们只需要搞清楚,三个之间的区别。

正文:

①创建一个Empty SLN。

②如果为Qt4.9以上版本,请在PRO文件中添加:QT+=widgets gui

③创建拥有main函数的main.cpp文件

④添加如下代码

⑤运行程序

运行效果:

试着去拖动滑块或者更改spinBox的数值,两个控件之间会随着彼此的改变而改变

讲解:

QWidget *window = new QWidget;[创建一个应用程序的顶层窗口]
window->setWindowTitle("Enter Your number");[设置窗口的名字,title显示的那个]
QObject::connect(spinBox, SIGNAL(valueChanged(int)),slider, SLOT(setValue(int)));[将spinBox的值绑定到slider的值上]
QObject::connect(slider, SIGNAL(valueChanged(int)),spinBox, SLOT(setValue(int)));[将slider的值绑定到spinBox的值上]

源码:

#include <QApplication>
#include <QHBoxLayout>
#include <QSlider>
#include <QSpinBox>

int main(int argc, char *argv[])
{
    QApplication app(argc, argv);//开启进程

    QWidget *window = new QWidget;//创建一个窗口类,也就是显示出来的那个整体窗口,小窗口也是窗口
    window->setWindowTitle("Enter Your number");//设置窗口的名字,title显示的那个

    QSpinBox *spinBox = new QSpinBox;//定义一个旋转盒子,也就是微调控件
    QSlider *slider = new QSlider(Qt::Horizontal);//定义一个滑块,主要是想和这个微调框显示的数字联系起来
    spinBox->setRange(0, 100);//设置最小值为0,最大值为100,也就是点↓按钮,最低不过0,点↑按钮,最大不会超过100
    slider->setRange(0, 100);//同上

    QObject::connect(spinBox, SIGNAL(valueChanged(int)),slider, SLOT(setValue(int)));
    /*[↑]绑定spinbox的value和slider的值,当spinBox的值改变的时候,相应会将slider的值改变*/
    QObject::connect(slider, SIGNAL(valueChanged(int)),spinBox, SLOT(setValue(int)));
    /*[↑]valueChanged(int)为标准库给出的信号,不需要实现,setValue(int)也是标准库给出的槽函数,也不需要实现*/
    spinBox->setValue(35);//设置spinBox的初始值

    QHBoxLayout *layout = new QHBoxLayout;//定义布局
    layout->addWidget(spinBox);//将spinBox添加到布局里面
    layout->addWidget(slider);//将slider添加到布局里面
    window->setLayout(layout);//主窗口window将layout设置为主布局

    window->show();//将window窗口显示出来

    return app.exec();//无限循环此进程,让窗口不消失
}

The bottom line, for me, is simple.

Let’s hope it doesn’t take 500 years for a discipline of testing to becomes the standard for software developers.

From:dayu

您好!请登录

合作网站快捷登录:
点击取消回复

已有1评论

    大宇博客

    点击这里给我发消息点击这里给我发消息