Qt
Qt问题总汇
信号和槽
连接函数:connect
1 | connect(信号发送者,发送的信号(函数的地址),信号接受者,处理的槽函数(函数的地址)); |
松散耦合:发送端和接受端的松散耦合
自定义槽函数和信号
- signal只能声明,不能定义,写在发送信号的类的
signals中,返回值是void - slot需要声明,需要在cpp文件中定义,写在
public slots文件中,返回值是void
1 | class.h |
1 | signals: |
定义槽和信号后,需要定义触发函数
1 | weidget: |
要先定义connect再调用classover。
信号的重载
信号函数和槽函数直接重载时,会因为二义性而导致程序无法编译,于是我们需要用函数指针来代替直接给地址,方法如下:
1 | void(Teacher:: *teachersignal)(QString)=&Teacher::hungry; |
- 问题:这里的两个函数指针是如何定义的???
- 答:
Qstring 转char *
1 | Qstring.toUtf8().data() //先转utf8,再转char* |
信号连接信号
1 | connect(btn,&QPushButton::clicked,zt,teachersignal2); |
直接将两个信号用connect相连
- 断开信号 disconnect
- 多个信号一个槽
多个槽连接一个信号
信号和槽的参数类型必须一一对应,信号参数个数可以大于槽函数的参数个数
lambda函数
1 | //connect 一般使用方法 |
- 问:为什么lambda的函数不像之前的函数一样,需要取地址符
&. - 答:可以不加取地址符,但是早期Qt并不支持.
模态与非模态
模态
1 | connect(ui->actionnew,&QAction::triggered,[=](){ |
非模态
1 | [=](){QDialog dig2(this); |
- 问:指针调用和对象调用为什么会出现不一样的结果?
- 答: