您的位置 首页 > 数码极客

‘qt信号函数如何定义’qt怎么查看函数定义

接着上一讲的软件项目,我们这个实例要实现Form2中被选中的表格数据,传递到Form1表格中显示,Qt的信号-槽非常灵活方便,但怎么用好它,每个程序员的设计是不一样的,本实例中如何实现多个类之间传递数据呢?

1、首先,把握一个原则,要想两个类之间能传递数据,必须先把这个两个类new出来;

2、用connect连接这两个类,在发送数据的类定义一个信号SIGNAL,在接收数据类中定义一个槽函数;

3、另外,传递数据经常用到结构体数据,在本实例的项目中,添加一个公共头文件l_global.h文件,在头文件中添加一个结构体如下:

struct ViewData { int schemeId; int serial; QString name; QString feature; int flag; }; Q_DECLARE_METATYPE(ViewData);

特别要注意的是:要在该结构体后面加上Q_DECLARE_METATYPE(ViewData);否则信号就不能把结构体类型的数据传递到槽函数中;

4、如上一讲的软件项目,在mainwindow.cpp类中,改写void MainWindow::on_actionPage1_triggered()槽函数,当鼠标点击工具栏的Page1时,new出Page1或者让Page1显示出来,代码如下:

void MainWindow::on_actionPage1_triggered() { if(mform1!=nullptr) { mform1->show(); } else { mform1 = new Form1; mform1->setObjectName("form1"); ui->gridLayout->addWidget(mform1); } if(mform2!=nullptr) { mform2->hide(); connect(mform2,SIGNAL(sendSig(QList<ViewData>)),mform1,SLOT(getData(QList<ViewData>))); } }

5、在mainwindow.cpp类中,改写void MainWindow::on_actionPage2_triggered

()槽函数,与步骤4同理的方法,代码如下:

void MainWindow::on_actionPage2_triggered() { if(mform2!=nullptr) { mform2->show(); } else { mform2 = new Form2; mform2->setObjectName("form2"); ui->gridLayout->addWidget(mform2); } if(mform1!=nullptr) { mform1->hide(); connect(mform2,SIGNAL(sendSig(QList<ViewData>)),mform1,SLOT(getData(QList<ViewData>))); } }

注意:只有当Page1和Page2类都new出来后,才能connect它们之间的信号-槽;

实例过程和效果如视频所示:在Page2添加了三条记录,勾选了第1、3条记录,点击按钮发送Page2的信号,勾选的数据以QList<ViewData>链表发送到Page1页面的表格中显示出来;


责任编辑: 鲁达

1.内容基于多重复合算法人工智能语言模型创作,旨在以深度学习研究为目的传播信息知识,内容观点与本网站无关,反馈举报请
2.仅供读者参考,本网站未对该内容进行证实,对其原创性、真实性、完整性、及时性不作任何保证;
3.本站属于非营利性站点无毒无广告,请读者放心使用!

“qt信号函数如何定义,qt怎么查看函数定义,qt,定义信号函数,qt如何转到函数定义,qt如何定义全局函数,qt槽函数定义”边界阅读