2022.10.17实训笔记

94 阅读2分钟

使用主函数的参数,创建了一个EditorApp对象。这是Qt程序的主函数中的固定操作,不必细究

QApplication EditorApp(argc, argv);

mainwindow.ui

除了使用代码编辑,我们还可以通过这个文件对窗口的界面进行设计和改动。

而且借助开发环境中集成的Qt Designer,我们可以使用鼠标进行可视化编辑。双击这个ui文件即可打开Qt Designer界面,但我没装

signals&slots

可以用于对象间的通信。实际上常用于对GUI窗体上各种事件的及时处理

1、文本框的内容被修改后会有一个名为valueChanged的signal,我们如果希望在文本框的内容被修改后把内容保存到文件里,就可以用一个slots函数(假设为funcA)和valueChanged这个信号相关联,每个valueChanged信号被发出的时候,都调用这个funcA将文本框中的内容保存到指定的文件里。

2、每次某个按键按下后都调用一个函数funcB,假设按键按下后发出一个信号signalB,这个时候funcB就是slots,signalB就是signals

关联信号和槽函数

通常在接收信号并调用槽函数的对象的类的构造函数(constructor)中,调用connect函数实现信号与槽的关联

connect()函数的一种参数表如下所示:

connect(sender, &SenderObject::signalFuncton, this, &ReceiverObject::slotsFunction);

sender:发送信号的对象
&SenderObject::signalFuncton:信号函数指针
&ReceiverObject::slotsFunction:槽函数指针

例:假设有两个class,分别为学生Student和老师Teacher。希望每次老师拍桌子的时候学生就坐端正。用函数描述就是每次Teacher类的对象调用“拍桌子”这个函数的时候,所有的学生类的对象就调用“坐端正”这个函数。

在上面这个例子中,拍桌子函数被调用就会发出signals,学生对象将调用坐端正这个slots来响应

老师的信号,信号必须是无返回值的函数。
class Teacher{ ... signals: void BeatTheDeskSignal(); ... };

学生的slots
class Student{ ... private: Teacher _teaA; ... private slots: void SitDown(int val); ... };

学生的connect
Student::Student() { ... connect(_teaA,&Teacher::BeatTheDeskSignal,this,&Student::SitDown); ... }

发射信号:signals在发出后由slots响应,使用关键字emit发射signals,譬如可以在Teacher中添加一个函数“拍桌子”,用来发射BeatTheDeskSignal这个signasl:

void Teacher::BeatTheDesk()
{
	emit BeatTheDeskSignal();
}

不想看就看这个

connect(ui->actionNew, &QAction::triggered, this, &Notepadx::newDocument);

把actionNew这个action的 triggered("被单击"这个信号) 和 this(这个类(mainwindow))的 函数newDocument() 关联起来)