qt - 将信号数据从 QMainwindow 发送到 QDialog
问题描述
我将通过信号槽连接将 QMainWindow 中收集的数据发送到 QDialog 的对象。这是在 mainwindow.cpp 中执行此操作的相关代码片段:
void MainWindow::on_dialogA_clicked()
{
if(dialogA==NULL) dialogA =new MyDialog();
//'this' refers to MainWindow
connect(this,SIGNAL(sendData(QVector<bool>)), dialogA, SLOT(getData(QVector<bool>)), Qt::QueuedConnection);
dialogA->show();
}
但是,在使用 时dialogA
,似乎数据没有正确更新,并且对话界面Not responding
在一段时间后变为。我想知道上面的信号槽连接是否正确,或者这是与 QDiaglog 进行数据通信的方式。
解决方案
两件事......首先,切换到创建信号/插槽连接的现代方法:
connect (this, &MainWindow::sendData, dialogA, &MyDialog::getData, Qt::QueuedConnection);
如果定义有问题,使用这种格式允许编译器捕获它而不是运行时警告。假设参数定义正确,“connect”语句没有任何问题,只是它在错误的位置,这是第二个问题。
每次用户单击时,都会在主窗口和对话框之间建立额外的连接。Qt 不会自动确保在给定的信号和插槽之间只建立一个连接。它会根据您的要求创建尽可能多的内容。“connect”调用应该是“if”块的一部分:
if (! dialogA)
{
dialogA =new MyDialog();
connect...
}
根据该向量中的数据量以及对话框对它的作用,如果您单击的次数足够多,可能是因为您只是多次处理数据,以至于一切都大大减慢了。
推荐阅读
- objective-c - SideMenu:如何包含在 Objective-C 项目中?
- servlets - Servlet 类 org.restlet.ext.servlet.ServerServlet 不是 jakarta.servlet.Servlet
- asp.net - 将值从页面传递到另一个页面 ASP.net 使用 VB
- html - Django用户认证和登录问题
- python - 比较其他熊猫数据框每一行的值
- java - CVN 14 的 ARQC/ARPC 验证
- node.js - Puppeteer:无法启动浏览器进程!产卵
- javascript - 尝试通过 Three.js 模拟 3D 效果
- java - Java 应用程序中使用的 OpenCV JNI 库中的内存使用跟踪工具
- reactjs - 有没有办法对 MUI-dataTable 中的列进行分组?