Russian Qt Forum
Ноябрь 25, 2024, 20:27 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

Войти
 
  Начало   Форум  WIKI (Вики)FAQ Помощь Поиск Войти Регистрация  

Страниц: [1]   Вниз
  Печать  
Автор Тема: Вызов функции из общего класса в делегате.  (Прочитано 3757 раз)
nikolkoYY
Гость
« : Январь 07, 2015, 22:06 »

Здравствуйте.
У меня проблема следующего характера. Имеется виджет QTableWidget и делегат в виде QLineEdit. Хотелось бы чтобы при выходе из делегата вызывалась функция, которая обновляет информацию в Базе Данных. Данная функция находится в общем классе "MainClass", там же находятся важные переменные о таблицах БД.

Я пытался в функции делегата "setModelData" объявить указатель на общий класс и вызвать нужную функцию:
Код:
    MainClass *obj;
    obj->SaveDataToDBase(parm1, parm2);
После чего, в общем классе ("MainClass") пропадают все сохраненные переменные, в следствии чего возникает крит.ошибка и вылетает прога.

Помогите разобраться с данной проблемкой, может быть есть другие способы реализации задуманного?
Всем спасибо!
Записан
Bepec
Гость
« Ответ #1 : Январь 07, 2015, 23:10 »

Ыыы.. Страуструпа в руки и читай про указатели) Особенно про неинициализированные Улыбающийся
Записан
gil9red
Administrator
Джедай : наставник для всех
*****
Offline Offline

Сообщений: 1805



Просмотр профиля WWW
« Ответ #2 : Январь 07, 2015, 23:19 »

Угу, знаний по с/с++ явно не хватает Улыбающийся
Указатель у вас неинициализирован, и указывает хрен знает куда, поэтому программа и падала в том месте, где указатель использовался.

// Инициализация указателя:
Код:
MainClass *obj = new MainClass();
Записан

Bepec
Гость
« Ответ #3 : Январь 08, 2015, 00:02 »

gil9red, спорим, он твой код скопирует туда и будет удивляться эффекту Веселый
Записан
gil9red
Administrator
Джедай : наставник для всех
*****
Offline Offline

Сообщений: 1805



Просмотр профиля WWW
« Ответ #4 : Январь 08, 2015, 01:17 »

gil9red, спорим, он твой код скопирует туда и будет удивляться эффекту Веселый

я надеюсь, после копипасты кода и удивлению последует открытие книжки по с++ Улыбающийся Подмигивающий
Записан

Igors
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 11445


Просмотр профиля
« Ответ #5 : Январь 08, 2015, 07:27 »

Код:
    MainClass *obj;
    obj->SaveDataToDBase(parm1, parm2);
Правильно
Код
C++ (Qt)
extern MainClass *obj;
И лучше вне тела ф-ции. Это означает что переменная obj объявлена в др месте, а здесь ее можно использовать. Нет такого "общий класс", может быть общая (глобальная) переменная этого класса.

Ыыы.. Страуструпа в руки и читай ..
Ну сами-то Вы его никогда не читали  Улыбающийся
Записан
Bepec
Гость
« Ответ #6 : Январь 08, 2015, 16:45 »

Даже с вашей добавкой приведённый код не заработает ) Нет обвязки, которая должна быть в другом месте, увы Улыбающийся

PS я в отличие от вас думаю от "того что есть", а не "от того что я придумал и что может быть в его коде, который он нам не показал" Веселый
Записан
nikolkoYY
Гость
« Ответ #7 : Январь 11, 2015, 03:05 »



Может есть другие варианты решения данной загвоздки? Непонимающий Может быть проще передать саму переменную в класс делегата?
Спасибо!
« Последнее редактирование: Январь 28, 2015, 18:17 от nikolkoYY » Записан
Igors
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 11445


Просмотр профиля
« Ответ #8 : Январь 11, 2015, 10:49 »

Может быть проще передать саму переменную в класс делегата?
Не вникая в отрывки Вашего текста, простой ответ "ну да, конечно". Только, строго говоря, сделать указатель на переменную членом делегата и передать в конструкторе.
Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


Страница сгенерирована за 0.172 секунд. Запросов: 23.