1.父子关系
默认情况下按钮没有建立父子关系的情况下,是个顶层窗口,想要按钮显示在窗口上,就要跟窗体构造父子关系
//1.setParent
QPushButton *btn1=new QPushButton;
btn1->setText("按钮1");
btn1->setParent(wid);
//2.构造函数传参
QPushButton *btn2=new QPushButton(QString("按钮2"),wid);
2.qt坐标系:
是以父窗口的左上角为0,0
以向右的方向为x的正方向
以向下的方向为y的正方向
顶层窗口就是一屏幕的左上角为0,0;
的风格
3.对象树:
概念:各个窗口对象通过建立父子关系构造对的一个关系树
内存管理:父对象释放的时候会自动释放各个子对象(使用children列表)
注意点:
1.父对象能够被释放,
2.父对象,或子对象,直接或间接继承QObject;
3.只有继承了QObject 类的类,才具备信号和槽的能力,所以凡是QObject类(不管是直接子类还是间接子类),都因该在第一行代码写上Q_OBJECT
4.自定义信号和槽:
自定义信号:
1 函数声明在头文件的signals域下面
2 void类型的函数,没有放回值
3 信号是可以有参数,也可以重载
4 只有声明,没有实现定义
5 触发信号 emit obj->sign(参数…)
自定义槽:
1 函数声明在类头文件的public/private/protected slots域下面(qt4以前的版本)
qt5 就可以声明在类的任何位置,还可以是静态成员函数,全局成员函数、lambda表达式
2 void 类型的函数,没有返回值
3 可以有参数,也可以重载
4 不仅有声明,还有实现
自定义信号和槽传参,以及函数二义性问题解决:
1 使用函数指针赋值,让编译器挑选符合类型的函数
2 使用static_cast 强制转换,也让编译器自动挑选符合类型的函数\
1:
信号:void(类名::*信号函数指针)(信号的参数类型)=&类名::信号;
槽函数:void (Student::*槽函数指针)(槽函数的参数)=&类名::槽
connect(对象名,信号函数指针,对象名,槽函数指针);
2:
2.1:使用static_cast 来转换无参的函数
connect(对象名, static_cast
qt信号槽如何传递参数
1.当信号与槽函数的参数数量相同的时,他们参数类型要完全一致
2.当信号的参数与槽函数的数量不一致时,只能是信号的参数数量多于槽函数的参数数量,且前面相同的参数类型应该一致,信号中多余的参数会被忽略;
几个关键字的原型:
signals 关键字:最终被#define 置换为一个访问控制符,其简化后为 #define signals public
slots 关键字:最终被#define 置换为一个空宏,即简化后为 #define slots
emit 关键字:同样被#define 置换为一个空宏,即简化后为 #define emit
信号创建:
扩展
4.QDebug
默认将QString 转义输出:
1.将QString转换成 char*
qDebug()<<"……"<
2.使用qDebug().noquote();
qDebug().noquote()<<"……"<
模态对话框:
对话框分为模态对话框和非模态对话框:
模态对话框:就是会阻塞就同一应用程序中其他窗口的输入:
非模态对话框:显示对话框的同时,继续对记事本的内容进行编辑;
自定义消息框:
模态与非模态的实现:
使用QDialog::exec() 实现应用程序级别的模态对话框
使用QDialog::open()实现窗口级别的模态对话框
使用QDialog::show()实现非模态对话框
qApp全局变量
设置整个程序的内容
比如:
退出程序
connect(对象,信号,qApp,QApplication::quit);
设置全局字体
connect(字体对象,&QFontComboBox::currentFontChanged,[](QFont font){
font.setPixelSize(28);
QApplication::setFont(font);
})
可以将一些新的数据存储在本地,下次启动的时候读取,进行配置
QVariant:惯用类,任意类型都可以转化为惯用类;
如果是window 写在注册表;
QSettings (const QString &organization, const QString &application = QString(), QObject *parent = nullptr):创建的对象是写在注册表中的;
如果我们想将数据写在程序的配置信息中则使用下面这个构造函数:
QSettings(const QString &fileName, QSettings::Format format, QObject *parent = nullptr)
枚举类 QSettings::Format:
QSettings::NativeFormat:本地配置格式,在不同系统
QSettings::Registry32Format:在window系统下
QSettings::Registry64Format:在window系统下
QSettings::IniFormat:自定义