第一章:Qt的概述 第二章:在Ubuntu编写第一个Qt程序 第三章:Qt的字符串和字符编码 第四章:Qt的信号和槽

Qt容器窗口(父窗口)

1、概念

创建组件时可以指定停靠的父窗口,如果指定了则会停靠在父窗口上,如果没有指定则会飘在外面形成独立的窗体

2、常用的父窗口类

QWidgetQMainWindow(主窗口,QWidget的子类)QDialog(对话框,QWdget的子类) 注意: QWidget和它的所有子类都可以作为父窗口,但是常用的父窗口类只有上面三个。

一般页面的功能比较复杂,需要使用多种组件的使用QMainWindow;而临时弹出的页面或简单逻辑的使用QDialog

3、QWidget中两个常用的函数

resize(int x, int y);//调整大小move(int x, int y);//调整位置

案例:创建一个Qt应用,包括一个标签和一个按钮,并停靠在一个父窗口上

#include

#include

#include

#include

#include

#include

int main(int argc, char** argv)

{

QApplication app(argc, argv);

//创建父窗口

QWidget parent;

//QMainWidow parent;

//QDialog parent;

//调整父窗口大小

parent.resize(800, 600);

//创建标签组件,并调整位置

QLabel label("A label", &parent);

label.move(50, 50);

//创建按钮组件,并调整位置和大小

QPushButton button("A button", &parent);

button.move(50, 150);

button.resize(120, 120);

//显示父窗口,上面包含的组件也会一起显示

parent.show();

return app.exec();

}

练习:事件同步,滑块和选值框保持同步运行

1)滑块(QSlider)

//构造函数(方向是水平还是垂直, 父窗口)

QSlider::QSlider(Qt::Orientation orientation, QWidget *parent = nullptr)

//设置滑块取值范围

setRange(int min, int max)

//滑块滑动时发送的信号,参数表示当前滑动到的位置

void valueChanged(int value) //signal函数

//设置滑块当前位置

void setValue(int) //slots函数

2)选值框(QSpinBox)

//构造函数

QSpinBox(QWidget *parent = nullptr)

//设置选值框取值范围

setRange(int minimum, int maximum)

//选值框改变时发送的信号,参数表示改变后的数值

void valueChanged(int value) //signal函数

//设置选值框的值

void setValue(int) //slots函数

#include

#include

#include

#include

int main(int argc, char** argv)

{

QApplication app(argc, argv);

//创建父窗口

QDialog parent;

parent.resize(220, 110);

//创建slider组件,并设置位置和取值范围

QSlider slider(Qt::Horizontal, &parent);

slider.move(22, 22);

slider.setRange(0, 150);

//创建spinBox组件,设置位置和取值范围

QSpinBox spinBox(&parent);

spinBox.move(122, 22);

spinBox.setRange(0, 150);

//spinBox.setSuffix(" years");//后缀

//显示父窗口,停靠在窗口上的组件也会一同显示

parent.show();

//滑块滑动,选值框随之改变

QObject::connect(&slider, SIGNAL(valueChanged(int)), &spinBox, SLOT(setValue(int)));

//选值框值该改变,滑块也随之滑动

QObject::connect(&spinBox, SIGNAL(valueChanged(int)), &slider, SLOT(setValue(int)));

return app.exec();

}