zoukankan      html  css  js  c++  java
  • QT_StepByStep(2)--滑动杆的实现

    1、实现效果图:

    image

    2、代码清单:

    #include <QtGui/QApplication>
    #include <QtGui/QWidget>
    #include <QtGui/QSpinBox>
    #include <QtGui/QSlider>
    #include <QtGui/QHBoxLayout>
    int main(int argc, char *argv[])
    {
      QApplication app(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(slider,SIGNAL(valueChanged(int)),spinBox,SLOT(setValue(int)));
      QObject::connect(spinBox,SIGNAL(valueChanged(int)),slider,SLOT(setValue(int)));
    
      spinBox->setValue(35);
      QHBoxLayout *layout = new QHBoxLayout;
      layout->addWidget(spinBox);
      layout->addWidget(slider);
      window->setLayout(layout);
      window->show();
    return app.exec();
    }
    

    3、代码解析:

    使用组件:

    (1)QSpinBox

        QSpinBox 是一个有上下箭头的微调器。

    (2) QSlider

        QSlider 是一个滑动杆。

    (3)QWidget

        QWidget 一个新的顶级窗口。

        首先创建了一个 QWidget 的实例,调用 setWindowTitle 函数来设置窗口标题。然后创建了一个 QSpinBox 和 QSlider,分别设置了它们值的范围,使用的是 setRange 函数。然后进行信号槽的链接。这点后面再详细说明。然后是一个 QHBoxLayout,就是一个水平布局,按照从左到右的顺序进行添加,使用 addWidget 添加好组件后,调用 QWidget 的 setLayout 把 QWidget的 layout 设置为我们定义的这个 Layout。

        比如下面的 spinBox - >setValue(35)执行的时候,首先,spinBox 会将自己的值设为 35 ,这样,它的值与原来的不一样了(在没有 setValue 之前
    的时候,默认值是 0),于是它发出了 valueChanged 信号。slider 接收到这个信号,于是回调自己的 setValue 函数,将它的值也设置成 35,它也发出了 valueChanged 信号。当然,此时 spinBox 又收到了,不过它发现,if(spinbox==35) stop valuechanged。这个 35 和它本身的值是一样的,于是它就不发出信号,所以信号传递就停止了。

        总体来说,这是一个循环结构,这个值的改变是通过int参数传递的,通过QT的信号槽机制完成了一个数据绑定,使两个组件或者更多组件的状态能够同步变化。

    Qt 一共有三种主要的 layout,分别是:

    QHBoxLayout-   按照水平方向从左到右布局;
    QVBoxLayout-  按照竖直方向从上到下布局;
    QGridLayout-  在一个网格中进行布局,类似于 HTML 的 table。

    layout 使用 addWidget 添加组件,使用 addLayout 可以添加子布局,因此,这就有了无穷无尽的组合方式。

  • 相关阅读:
    理解Unity3d的ForceMode | Understanding ForceMode in Unity3D
    Jexus 网站服务器和 ASP.NET 跨平台开发
    ASP.NET 5 改名 ASP.NET Core 1.0
    计算机文件基本上分为二种:二进制文件和 ASCII(也称纯文本文件)
    分布式系统与集群区别
    网站缓存技术(Redis、Memcached、Ehcache)
    Node.JS
    深入浅出Node.js(一):什么是Node.js
    让我欲罢不能的node.js
    为什么我要用 Node.js? 案例逐一介绍
  • 原文地址:https://www.cnblogs.com/yechuang/p/4527683.html
Copyright © 2011-2022 走看看