как получить доступ к членам Qt MainWindow - PullRequest
0 голосов
/ 25 апреля 2019

В моем проекте я хочу вызвать переменную QImage image, сгенерированную в mainwindow.h, в других файлах классов, например, с именем SegSetupDialog.h. Здесь image загружается нажатием кнопки в mainwindow.ui, а SegSetupDialog - это QDialog, которая появляется при нажатии одной кнопки в mainwindow.ui.

Я попытался использовать соединение через сигнальный слот для отправки qimage из mainwindow в SegSetupDialog следующим образом.

Для класса MainWindow:

SegSetupDialog *segsetup;

if(image.isNull()==false)
  {
        emit sendImgData(image);
        qDebug()<<"sendImgData emitted!";

        if(segsetup==NULL) segsetup = new SegSetupDialog();
        connect(this, SIGNAL(sendImgData(QImage)),segsetup,SLOT(getImgData(QImage)),Qt::QueuedConnection);
   }

В SegSetupDialog :: getImgData

void SegSetupDialog::getImgData(QImage qimage)
{
    qImg = qimage;
    qDebug()<<"qimage received!";
}

Похоже, что указанное выше соединение не работает, поскольку сообщение qDebug в getImgData не распечатывается. Кто-нибудь может помочь проверить что-то не так с кодами или предложить другие способы доступа к image из mainwindow? Спасибо !!

1 Ответ

1 голос
/ 26 апреля 2019

Вам необходимо выполнить соединение сигнал / слот до того, как вы подадите сигнал. Соединения выполняются один раз, обычно в конструкторе.

Однако вам, вероятно, следует сделать connect() в конструкторе SegSetupDialog вместо MainWindow. SegSetupDialog хочет получать уведомления об обновлениях данных изображений, поэтому вам следует установить соединение там.

Также, чтобы убедиться, что сигналы и слоты указаны правильно, не используйте вызовы Qt 4 connect(). Используйте Qt 5, которые проверяются во время компиляции:

connect(this, &MainWindow::sendImgData,
        segsetup, &SegSetupDialog::getImgData, Qt::QueuedConnection);

(Конечно, измените его соответствующим образом, если вы переместите его в конструктор SegSetupDialog.)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...