使用主函数的参数,创建了一个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() 关联起来)