容器窗口(父窗口)与滑块

1. 如果一个组件创建时指定了父窗口,那么就将停靠在父窗口上,如果不指定父窗口,它就会飘在外面,形成独立的窗体。

2. 常用父窗口类:
    QWidget             // 默认大一些
    QMainWindow     // 默认小一些
    QDialog             // 对话框窗口,大一些,顶栏只有关闭按钮x

    【注】QWidget子类可以作为父窗口类,但是常用的只有上面三个。
             绝大多数图形组件都是QWidget的子类。

3. QWidget中两个常用的成员函数
    1 )调整大小
        void resize (int w, int h);   // 参数单位为分辨率,w宽,h高
    2 )移动位置
        void move (int x, int y);   // 参数单位为分辨率,相对于左上角
        父窗口是相对屏幕左上角的分辨率
        子窗口是相对容器(父)重口左上角的分辨率

/** 代码演示 - 父子窗口,标签组件/按钮组件,关闭功能 **/
#include <QApplication>
#include <QLabel>
#include <QPushButton>
#include <QWidget> // 父窗口
#include <QMainWindow>
#include <QDialog>
int main (int argc, char** argv) {
    QApplication app (argc, argv);
    // 创建父窗口对象
//  QWidget parent;
//  QMainWindow parent;
    QDialog parent;
    // 调整父窗口的位置
    parent.move (100, 50);
    // 调整父窗口的大小
    parent.resize (400, 200);
    // [标签组件]创建一个标签组件停靠在父窗口上 &parent
    QLabel label ("我是快乐的子窗口!!", &parent);
    // 调整label子窗口在父窗口的相对位置
    label.move (120, 100);
    // [按钮组建]创建一个按钮组件停靠在父窗口上 &parent
    QPushButton button ("关闭", &parent);
    // 调整按钮组件的位置
    button.move (150, 150);
    // 调整按钮的大小
    button.resize (40, 40);
    // 显示父窗口,所包含的组件窗口会一起显示
    parent.show (); 
    // 点击[关闭]按钮关闭父窗口
    QObject::connect (&button, SIGNAL (clicked ()),
            &parent, SLOT (close ()));
    return app.exec (); 
}

《案例》事件同步
QSlider 滑块组件
    QSlider(QWidget * parent = 0);  // 构造滑块对象
    QSlider(Qt::Orientation orientation, QWidget * parent = 0);  // 同上
    'parent':父窗口
    'orientation':方向
        Qt::Vertical 垂直(默认)         Qt::Horizontal 水平
    void    setRange(int min, int max);   // 设置滑动范围
    void    setPageStep(int);   // 设置页的步距
    void    valueChanged(int value) [signals];   // 值改变信号
    void    setValue(int) [slots];   // 设置当前值

QSpinBox 微调框/选值框组件
    QSpinBox(QWidget * parent = 0);  // 构造选值框
        'parent':父窗口
    void    setRange(int minimum, int maximum);   // 设置选值范围(同滑动参数)
    void    valueChanged(int i) [signals];   // 值改变信号
    void    setValue(int val) [slots];   // 设置当前值
    void    setSuffix(const QString & suffix);   // 设置显示后缀

/** 代码演示 - 事件同步 **/
#include <QApplication>
#include <QDialog>
#include <QSlider>
#include <QSpinBox>
int main (int argc, char** argv) {
    QApplication app (argc, argv);
    // 创建一个父窗口
    QDialog dialog; 
    dialog.resize (300, 100);
    // 创建滑块并停靠在父窗口上
    QSlider slider (Qt::Horizontal, &dialog);
    slider.move (20, 20); // 设置位置
    slider.setRange (0, 100); // 设置取值范围
    slider.setPageStep (10); // 设置页步距
        
    // 创建选值框组件并停靠在父窗口上
    QSpinBox spin (&dialog);
    spin.move (120, 20);
    spin.setRange (0, 100);
    spin.setSuffix ("kg");
    // 滑块的值改变,选值框也随之改变
    QObject::connect (&slider, SIGNAL (valueChanged (int)),
            &spin, SLOT (setValue (int)));
    // 选值框的值改变,对应的滑块的值也随之改变
    QObject::connect (&spin, SIGNAL (valueChanged (int)),
            &slider, SLOT (setValue (int)));
                
    dialog.show (); 
    return app.exec (); 
}

Logo

权威|前沿|技术|干货|国内首个API全生命周期开发者社区

更多推荐