首页 > 解决方案 > 将信号数据从 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 进行数据通信的方式。

标签: qt

解决方案


两件事......首先,切换到创建信号/插槽连接的现代方法:

connect (this, &MainWindow::sendData, dialogA, &MyDialog::getData, Qt::QueuedConnection);

如果定义有问题,使用这种格式允许编译器捕获它而不是运行时警告。假设参数定义正确,“connect”语句没有任何问题,只是它在错误的位置,这是第二个问题。

每次用户单击时,都会在主窗口和对话框之间建立额外的连接。Qt 不会自动确保在给定的信号和插槽之间只建立一个连接。它会根据您的要求创建尽可能多的内容。“connect”调用应该是“if”块的一部分:

if (! dialogA) 
{
    dialogA =new MyDialog();
    connect...
}

根据该向量中的数据量以及对话框对它的作用,如果您单击的次数足够多,可能是因为您只是多次处理数据,以至于一切都大大减慢了。


推荐阅读