无法访问parentWidget()

时间:2018-07-06 10:09:01

标签: c++ desktop-application signals-slots qt5.10

我正在从事相机项目。在此,我创建了一个窗口类型的QT Widget应用程序。我还添加了2个单独的对话框窗口类,它们应该访问MainWindow类中的函数。对话框类之一可以使用连接函数并为parentWidget()参数设置QObject *context值来从主类访问函数。使用非模态方法在相机按钮上调用对话框类:

void MainWindow::on_addCamera_Button_clicked()
{
    flag1 = 1;
    if(imageFilename != ""){
        c++;
        camera = new CameraDialog(this);
        camera->show();
        img2.copyTo(im);
        img2.copyTo(img);
        img2.copyTo(img1);
        imshow("Map",img1);
        setMouseCallback("Map", onMouseClick, &p);
        connect(timer_ossm, SIGNAL(timeout()), this, SLOT(gui_update_Original_Video()));
        connect(timer_ossm, SIGNAL(timeout()), this, SLOT(gui_update_Image_Coordinate()));
        }
    else {
        QMessageBox::warning(this,"..",(QString)"Enter Image!");
    }
}

CameraDialog类中正常工作的connect语句是:

CameraDialog::CameraDialog(QWidget *parent) :
    QDialog(parent),
    ui(new Ui::CameraDialog)
{
    ui->setupUi(this);
    ui->pushButton_Done->setCheckable(true);
    cout<<parentWidget()<<endl;
    connect(ui->pushButton_Done,SIGNAL(clicked()),parentWidget(),SLOT(clearVal()));
    connect(ui->pushButton_Done,SIGNAL(clicked()),parentWidget(),SLOT(updateFlag()));
    connect(ui->pushButton_Done, SIGNAL(released()),this,SLOT(close()));
    connect(ui->pushButton_Apply,SIGNAL(clicked()),parentWidget(),SLOT(updateImage());
    connect(ui->pushButton_Cancel,SIGNAL(clicked()),parentWidget(),SLOT(clearVal()));
}

但是当我为另一个对话框窗口(使用相同的非模态方法访问)的另一个类尝试相同的操作时,它表明parentWidget()没有值,即,尝试时它显示值为0打印parentWidget()的值。因此,第一个对话框类(CameraDialog)中的相同连接功能不起作用。如何解决此问题,以便第二个类也可以访问MainWindow类中的函数?

谢谢!

0 个答案:

没有答案