Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: передача по указателю между формами
Форум на CrossPlatform.RU > Библиотеки > Qt > Qt GUI
mishe4ka
Есть две формы. Родительская и дочерняя. Сделано в редакторе форм.(все наследуетя от QObject) Открываю одну форму ,там кнопочка. По кнопочке кляц - вторая открылась. Там все просто. Делал сотню раз и все работало. Дальше идем. значения для второй формы передаю из родительской по указателю, т.е. есть структура со значениями ,инициализирую ее (там все нормально. проверял.лежат нули)

//Cлот  задания параметров дочерней формы 
void analiz_obj::on_sat_epr_pushButton_clicked()
{

    epr_dialog *epr_sat = new epr_dialog(this);
  


   //передача значений по указателю
    epr_sat->rcs_ptr = &(rcs_par_temp);
    //здесь все передалось правильно    !!!!!!!!!!!!!!!!!!!!
    qDebug("%x",&rcs_par_temp);
    qDebug("%x",epr_sat->rcs_ptr);
     //---------------------------------------------------
    // при нажатии на кнопку ОК
    if (epr_sat->exec() == QDialog::Accepted)
    {
        rcs_par_temp = *epr_sat->rcs_ptr;
      

    }
}


отлавливаю в дочернем виджете showevent для инициализации lineeditov
//событие отображение окна 
void epr_dialog::showEvent(QShowEvent */* event*/)
{


  //здесь гадина выводит не правильный адрес.!!!!!!!!!!!!!
  qDebug("%x",rcs_ptr);

    //тип задания параметров
    switch (rcs_ptr->rcs_type)// и здесь соответственно крашится !!!!!!!
    {
      //инициализация лайнэдитов в зависимости от поступившего типа
     }


Программа крашится, хотя должна работать. В других участках подобная передача по указателю работает без проблем. Пересобирал в разных креаторах и т.п. Сейчас на 5.4 и 3.3 сижу.
Как быть сподвижники? Как мне с этим жить? :cray:
lanz
Как и где объявлено rcs_par_temp?
Litkevich Yuriy
как-то всё язык ЦПП в стиле мелкософта напоминает.

сделай для своего диалога метод задающий нужные значения, чтобы всё по человечески и выглядело и работало:
  Dialog *dialog = new Dialog();
  // установка данных
  dialog->setFoo1(...);
  dialog->setFoo2(...);
  ...
  dialog->setFooN(...);
  // или
  dialog->setData(тут объект стрктуры); // или указатель на объект

  if (dialog->exec() == QDialog::Accepted){
    // ...
  }
mishe4ka
Не помогло((
Вынес в отдельную функцию
epr_sat->setData(epr_sat->rcs_ptr);

падает
mishe4ka
 
void epr_dialog::setData(rcs_par *rcs_p)
{
switch (rcs_p->rcs_type)
    {
    case RCS_TYPE_LOG_NORM:
        ui->log_norm_radioButton->setChecked(true);   //сюда отладчик показывает.Здесь крашится
        ui->type_groupBox->setEnabled(false);
        ui->log_normal_groupBox->setEnabled(true);

     //дальше другие case
    
      }
}


mishe4ka
Цитата(lanz @ 23.1.2015, 20:56) *
Как и где объявлено rcs_par_temp?

class analiz_obj : public QDialog
{
    Q_OBJECT

public:
  
    rcs_par rcs_par_temp;
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Форум IP.Board © 2001-2024 IPS, Inc.