Russian Qt Forum

Qt => Вопросы новичков => Тема начата: nikolkoYY от Январь 07, 2015, 22:06



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

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

Помогите разобраться с данной проблемкой, может быть есть другие способы реализации задуманного?
Всем спасибо!


Название: Re: Вызов функции из общего класса в делегате.
Отправлено: Bepec от Январь 07, 2015, 23:10
Ыыы.. Страуструпа в руки и читай про указатели) Особенно про неинициализированные :)


Название: Re: Вызов функции из общего класса в делегате.
Отправлено: gil9red от Январь 07, 2015, 23:19
Угу, знаний по с/с++ явно не хватает :)
Указатель у вас неинициализирован, и указывает хрен знает куда, поэтому программа и падала в том месте, где указатель использовался.

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


Название: Re: Вызов функции из общего класса в делегате.
Отправлено: Bepec от Январь 08, 2015, 00:02
gil9red, спорим, он твой код скопирует туда и будет удивляться эффекту :D


Название: Re: Вызов функции из общего класса в делегате.
Отправлено: gil9red от Январь 08, 2015, 01:17
gil9red, спорим, он твой код скопирует туда и будет удивляться эффекту :D

я надеюсь, после копипасты кода и удивлению последует открытие книжки по с++ :) ;)


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

Ыыы.. Страуструпа в руки и читай ..
Ну сами-то Вы его никогда не читали  :)


Название: Re: Вызов функции из общего класса в делегате.
Отправлено: Bepec от Январь 08, 2015, 16:45
Даже с вашей добавкой приведённый код не заработает ) Нет обвязки, которая должна быть в другом месте, увы :)

PS я в отличие от вас думаю от "того что есть", а не "от того что я придумал и что может быть в его коде, который он нам не показал" :D


Название: Re: Вызов функции из общего класса в делегате.
Отправлено: nikolkoYY от Январь 11, 2015, 03:05


Может есть другие варианты решения данной загвоздки? ??? Может быть проще передать саму переменную в класс делегата?
Спасибо!


Название: Re: Вызов функции из общего класса в делегате.
Отправлено: Igors от Январь 11, 2015, 10:49
Может быть проще передать саму переменную в класс делегата?
Не вникая в отрывки Вашего текста, простой ответ "ну да, конечно". Только, строго говоря, сделать указатель на переменную членом делегата и передать в конструкторе.