Как подключить сигнал в Qdialog к слоту в QMainwindow - PullRequest
0 голосов
/ 04 июля 2019

Я работаю с QT Creator 4.9.1, и я сделал графический интерфейс с дизайнером. У меня есть MainWindow со stackedWidget и около 60 страниц, внутри моего главного окна у меня есть кнопка, с сигналом onButton_clicked я открываю диалог (показать картинку), чтобы вставить число, чтобы установить страницу, которую пользователь хочет видеть внутри MainWindow.

Моя проблема в том, что СИГНАЛ приходит из Диалога с именем on_pushButton_Enter_clicked, а мой СЛОТ находится в моем главном окне с именем setCurrentIndex(). Я прочитал пост: «Как подключить сигнал из MainWindow к слоту в диалоге» и «Qt подключить главное окно и диалог, используя сигнал и слот».

Но это не помогает мне, потому что мой диалог не знает о моем главном окне, и я не знаю, как их соединить.

Сигнал:

Dialognummer_eingeben.h
...
signals:
    void enterButtonPressed();
...


void Dialognummer_eingeben::on_pushButton_Enter_clicked()
{
  QString text = ui->lineEdit_Dialognummer->text();
  ui->lineEdit_Dialognummer->setText("");
  this->reject();
  emit enterButtonPressed();
}

Слот:

Terminal::Terminal(QWidget *parent) : QMainWindow(parent), ui(new Ui::Terminal)
{
  ui->setupUi(this);
  QObject::connect(&dialog, SIGNAL(enterButtonPressed()), this, SLOT(setCurrentIndex()));
}

void Terminal::setCurrentIndex()
{
  int num = dianr.getNum();
  QString strNum = QString::number(num);
  switch(num)
  { 
    ....
  }
}

enter image description here

Редактировать: 1. Добавить сигнал и код слота 2. Сделайте некоторые изменения внутри кода

1 Ответ

1 голос
/ 04 июля 2019

внутри моего главного окна у меня есть кнопка, с сигналом onButton_clicked я открываю диалог (показать картинку), чтобы вставить число, чтобы установить страницу, которую пользователь хочет видеть внутри главного окна.

Вы должны дополнительно добавить сигнал в свой класс диалога, который должен генерироваться после нажатия кнопки ввода, используя on_pushButton_Enter_clicked, поскольку функции недостаточно. Добавьте сигнал в класс диалога, например «enterButtonPressed ()», и отправьте его в функцию on_pushButton_Enter_clicked.

Внутри главного окна (в какой-то момент, когда создается диалог) добавьте эту строку:

connect(dialog, SIGNAL(enterButtonPressed()), this, SLOT(SlotNameWhichShouldGetCalled()));

РЕДАКТИРОВАТЬ: Даже если вышеупомянутое решение должно работать, лучшее решение пришло мне в голову. Обычно вам следует использовать сигнал QDialog :: accept для подключения (см. https://doc.qt.io/archives/qt-4.8/qdialog.html#accept).

Конкретные шаги:

  1. В on_pushButton_Enter_clicked() внизу кода добавьте accept() вместо this-reject() (я полагаю, вы хотите, чтобы диалоговое окно было успешно закрыто, а не отклонено?)
  2. Подключитесь к сигналу QDialog :: accept (), добавив

    QObject::connect(&dialog, SIGNAL(accepted()), this, SLOT(setCurrentIndex()));
    

Кроме того, убедитесь, что у вас нет ошибок в функции подключения (...). Если сигнал / слот не найден или не совпадает, вы должны увидеть что-то в выходных данных вашего приложения в Qt Creator

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