AR
Маусым 9, 2020, 11:25 Т.Ж.

Передача данных из одного класса в другой, ожидание нажатия

Добрый день! Имеется программа:
mainwindow.cpp/mainwindow.h - главное окно
В нём openglwidget, на котором отрисовка карты myglwidget.cpp/myglwidget.h
У каждой точки на карте есть широта и долгота, они определяются сторонней библиотекой и работают правильно
Есть еще 3 форма CoordinatePoint.cpp/.h, отвечающая за базу данных точек (добавление в нее), в ней вводятся все та же широта и долгота вручную, там же кнопка "Добавить с карты". Потребовалось еще сделать так, чтобы можно было выбирать их с карты через эту кнопку.
1)Подскажите, пожалуйста как реализовать функционал, чтобы по нажатию на эту кнопку программа дожидалась нажатия на виджет opengl в мэйн окне и получала оттуда эти значения (они определены в myglwidget).
2) Либо же как их оттуда передать в соответствующие поля CoordinatePoint.
Пробовал передавать немного странным путем:
myglwidget.h

  1. signals:
  2. void giveFiLm(const Tchar* A, const Tchar* B);

myglwidget.cpp

  1. void MyGLWidget::mousePressEvent(QMouseEvent *event)
  2. {
  3. lastPos = event->pos();
  4. emit giveFiLm(lm_new, fi_new);
  5. }

lm_new = _CMN::lm_deg2str(geo_deg.lm);
fi_new = _CMN::fi_radtostr(geo_deg.fi*M _PI/180);
coordinatepoint.cpp

  1. void create_NT::on_getFiLm(const Tchar* A, const Tchar* B)
  2.  
  3. {
  4.  
  5. fi_tmp = B;
  6.  
  7. lm_tmp = A;
  8.  
  9. qDebug()<<"shirota"<<fi_tmp<<" "<<"dolgota"<<" "<<lm_tmp;
  10.  
  11. ui->lineEdit6->setText(fi_tmp);
  12.  
  13. }

В mainwindow.cpp

  1. connect(ui->widget,&MyGLWidget::giveFiLm,cre,&create_NT::on_getFiLm);

Но значение в лайнэдит не выставляется, а в дебаге все нормально выводит.

2

Ол саған ұнайды ма? Әлеуметтік желілерде бөлісіңіз!

5
Evgenii Legotckoi
  • Маусым 9, 2020, 12:22 Т.Қ.

Добрый день.
Полагаю, дело в том, что у вас используется указатель на const char.

Попробуйте эти переменные lm_new и fi_new сразу преобразовывать в QString

    AR
    • Маусым 26, 2020, 4:44 Т.Қ.
    • (өңделген)

    Сделал сразу на QString. Из MyGLWidget в мауз ивенте отправляю сигнал emit giveFIfactLMfact(QString A, QString B) ;
    В мэйнвиндоу делаю коннект

    1. create_point *pnt = new create_point;
    2. connect (ui->widget, &MyGLWidget::giveFIfactLMfact, pnt, &create_point::takeInfo) ;
    3. И в create_point
    4. void create_point::takeInfo(QString A, QString B) {
    5. qDebug() <<A<<B;
    6. ui->label_info->setText(A) ;
    7. ui->label_info_dat->setText(B) ;
    8. }

    В дебаг все выводит правильно, а на лэйбле никаких изменений

      Evgenii Legotckoi
      • Маусым 26, 2020, 4:57 Т.Қ.

      Что выводит в дебаг? Покажите текст, который пытаетесь вывести в QLabel

        AR
        • Маусым 26, 2020, 5:08 Т.Қ.

        "С 0.956 В 85.63" текст в таком формате идёт. При этом если делаю коннект на аналогичный лэйбл в мэйнвиндоу, то на нем все нормально показывается

          Evgenii Legotckoi
          • Маусым 26, 2020, 5:19 Т.Қ.

          Погодите, а что такое create_point? - это ваш кастомный виджет?

          Это запись говорит лишь о том, что вы его создаёте

          1. create_point *pnt = new create_point;

          Но вы не устанавливаете окно ни в качестве парента, ни размещеаете этот виджет нигде в главном окне.
          Полагаю, что вы просто не видите этого виджета или видите его частично.

          Вам нужно его добавить в какой-нибудь QLayout внутри окна. Да и парента нужно устанавливать, чтобы утечек памяти не было.

            Пікірлер

            Тек рұқсаты бар пайдаланушылар ғана пікір қалдыра алады.
            Кіріңіз немесе Тіркеліңіз