本文为学习记录,若有错误,请联系作者,谦虚受教。
前言
“要努力,但是不要急。繁花锦簇,硕果累累都需要过程 。”
一、emit
emit是不同窗口/类间的触发信号。
当对象改变其状态时,信号就由该对象发射 (emit) 出去,通过槽函数实现用户想要的效果。
二、相关代码
例如想要通过子窗口childwindow的按钮,对主窗口的mainwindow操作,实现用户想要的效果。
首先要明白谁是发射端,谁是接收端。
按照上面的例子来说,发射端就是子窗口,接收端是主窗口。
QObject::connect: (sender name: ‘childwindow’)
QObject::connect: (receiver name: ‘MainWindow’)
1…h文件
子窗口的.h文件(发射端)
class childwindow : public QMainWindow
{
Q_OBJECT
public:
explicit childwindow(QWidget *parent = nullptr);
~childwindow();
signals:
void mysignal();//信号
private slots:
void on_btn_sure_clicked(); //槽函数
private:
Ui::childwindow *ui;
};
主窗口的.h文件(接收端)
class MainWindow : public QMainWindow
{
Q_OBJECT
public:
explicit MainWindow(QWidget *parent = nullptr);
~MainWindow();
protected:
private slots:
void myslot();//槽函数,实现用户效果的
private:
Ui::MainWindow *ui;
};
2…cpp文件
子窗口的.cpp文件(发射端)
//按下按钮btn_sure,发射mysignal信号,触发主窗口中的myslot槽函数
void childwindow::on_btn_sure_clicked()
{
//emit信号的发射
MainWindow *app2=new MainWindow;
connect(this,SIGNAL(mysignal()),app2,SLOT(myslot()));
emit mysignal();
}
主窗口的.cpp文件(接收端)
//emit
void MainWindow::myslot()
{
qDebug()<<"MY emit is beauty girl "<<endl;
}
运行的效果是控制台打印出:MY emit is beauty girl。
注意:myslot()中是实现用户效果的函数,可自定义。
一、此例子是最简单的方法,子窗口可以使用不同的方式来触发信号,也可以用不同的方式来连接主窗口的槽函数
二、在主窗口中也可以使用不同的方式去响应这个信号。
总结
善于总结,多进一步。