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

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

Страниц: [1] 2   Вниз
  Печать  
Автор Тема: Warning при закрытии PG  (Прочитано 7975 раз)
bez_glaz
Гость
« : Февраль 27, 2012, 13:11 »

Добрый день.
В общем суть такова.
Простецкое приложение.Есть форма авторизации, которая должна коннектиться к БД в PG под определённой ролью, исходя из введённых логина и пароля.
Есть класс connect в нём в private объявлена переменная
Код:
QSqlDatabase db;
в конструкторе пишу
Код:
    db = QSqlDatabase::addDatabase("QPSQL");
    db.setHostName("localhost");
    db.setDatabaseName("test");
Первоначально по умолчанию происходит коннект под ролью test, потом исходя из введённых данных идёт сверка с записями в таблице БД, и осуществляется
Код:
        db.close();
        if (role)
        {
            db.setUserName(...);
            db.setPassword(...);
        }
        else
        {
            db.setUserName(...);
            db.setPassword(...);
        }
    if (db.open())
    {
        qDebug() << "NORM CONNECT" << db.userName();
    }
    else
    {
        qCritical() << db.lastError();
    } 

Всё работает более чем успешно, НО ...
При закрытии приложения пишет Варнинг
Код:
QSqlDatabasePrivate::removeDatabase: connection 'qt_sql_default_connection' is still in use, all queries will cease to work.
В диструкторе я connect я пишу
Код:
Connect::~Connect()
{
    db.close();
    db.removeDatabase("QPSQL");
}
Что не так Непонимающий
Или может как-то вызывать отсоединения в диструкторе формы ??
Записан
mutineer
Гость
« Ответ #1 : Февраль 27, 2012, 13:13 »

а объект класса Connect уничтожается?
Записан
bez_glaz
Гость
« Ответ #2 : Февраль 27, 2012, 13:49 »

а объект класса Connect уничтожается?
Хмм... немножко зашёл в тупик. Я в main пишу
Код:
  Autorization * atr = new Autorization();

    Connect * first_connect = new Connect();
Какие механизмы происходят при закрытии формы Непонимающий
Вызывается ли её диструктор ???В отладке не стопится брейк поинт в диструкторе формы.
Записан
mutineer
Гость
« Ответ #3 : Февраль 27, 2012, 13:51 »

Autorization это форма?
Родителей у объектов не видать, значит удалять их нужно самому
Записан
bez_glaz
Гость
« Ответ #4 : Февраль 27, 2012, 14:09 »

Autorization это форма?
Родителей у объектов не видать, значит удалять их нужно самому
Хммм... И как тогда быть ? Ведь я в main объявлял оба объекта. В замешательстве
Записан
mutineer
Гость
« Ответ #5 : Февраль 27, 2012, 14:12 »

Autorization это форма?
Родителей у объектов не видать, значит удалять их нужно самому
Хммм... И как тогда быть ? Ведь я в main объявлял оба объекта. В замешательстве
Удалять их в конце работы программы. Если никто другой их не удаляет
Записан
bez_glaz
Гость
« Ответ #6 : Февраль 27, 2012, 14:15 »

Autorization это форма?
Родителей у объектов не видать, значит удалять их нужно самому
Хммм... И как тогда быть ? Ведь я в main объявлял оба объекта. В замешательстве
Удалять их в конце работы. Если никто другой их не удаляет
=))))
Это понятно ))))
Где удалить ?
Объявлял то я в main динамически. Или как - то можно объект удалить из самого себя ? Но ведь тогда указатель созданный в main останется  В замешательстве
Записан
mutineer
Гость
« Ответ #7 : Февраль 27, 2012, 14:16 »

Как это где? В конце main, например
Записан
bez_glaz
Гость
« Ответ #8 : Февраль 27, 2012, 14:22 »

Как это где? В конце main, например
Эммм.. Я их создам, а затем тупо сразу удалю ?? Приложение будет работать ?? Или я что-то не понимаю?
Записан
Bepec
Гость
« Ответ #9 : Февраль 27, 2012, 14:25 »

Эммм.. когда кончается функция Main - у тебя закрывается программа.
Когда ты создаёшь в main класс аля "QMainWindow", то там процесс передаёт управление ему.

Когда QMainWindow закрывается - то опять начинается функция main с момента вызова цикла событий exec().
Вот после него удаляй что хошь Подмигивающий
Записан
bez_glaz
Гость
« Ответ #10 : Февраль 27, 2012, 14:37 »

Код:
    return a.exec();
    delete first_connect;
    first_connect = NULL;
Правильно делаю ? Если да, то проблема не устранилась Грустный
Записан
mutineer
Гость
« Ответ #11 : Февраль 27, 2012, 14:40 »

Код:
    return a.exec();
    delete first_connect;
    first_connect = NULL;
Правильно делаю ? Если да, то проблема не устранилась Грустный

неправильно - return прекращает выполнение функции и все, что за ним, не выполняется
Записан
bez_glaz
Гость
« Ответ #12 : Февраль 27, 2012, 14:50 »

Код:
    return a.exec();
    delete first_connect;
    first_connect = NULL;
Правильно делаю ? Если да, то проблема не устранилась Грустный

неправильно - return прекращает выполнение функции и все, что за ним, не выполняется
Брррр...
Ваще запутался, в каком именно месте в main мне удалить мои объекты Непонимающий?
Записан
mutineer
Гость
« Ответ #13 : Февраль 27, 2012, 14:52 »

Код:
    return a.exec();
    delete first_connect;
    first_connect = NULL;
Правильно делаю ? Если да, то проблема не устранилась Грустный

неправильно - return прекращает выполнение функции и все, что за ним, не выполняется
Брррр...
Ваще запутался, в каком именно месте в main мне удалить мои объекты Непонимающий?

Есть два варианта - быстрый и правильный.

Быстрый:
Код
C++ (Qt)
int res = a.exec();
delete first_connect;
return res;
 

Правильный:
Выучить язык, на котором пишешь
Записан
bez_glaz
Гость
« Ответ #14 : Февраль 27, 2012, 15:07 »

Код:
    return a.exec();
    delete first_connect;
    first_connect = NULL;
Правильно делаю ? Если да, то проблема не устранилась Грустный

неправильно - return прекращает выполнение функции и все, что за ним, не выполняется
Брррр...
Ваще запутался, в каком именно месте в main мне удалить мои объекты Непонимающий?

Есть два варианта - быстрый и правильный.

Быстрый:
Код
C++ (Qt)
int res = a.exec();
delete first_connect;
return res;
 

Правильный:
Выучить язык, на котором пишешь

Спс.
Как бы я это и делаю в данный момент )
Просто пост
Цитировать
Эммм.. когда кончается функция Main - у тебя закрывается программа.
Когда ты создаёшь в main класс аля "QMainWindow", то там процесс передаёт управление ему.

Когда QMainWindow закрывается - то опять начинается функция main с момента вызова цикла событий exec().
Вот после него удаляй что хошь
меня и смутил, что имел ввиду автор ?То же самое что и Вы предложили ?
Ммм если не затруднит дайте наводочку на "правильный метод". Всё таки как я понял, быстро не есть хорошо. А хотелось бы чтоб всё идеально работала, да и понять принципы, что к чему.
Записан
Страниц: [1] 2   Вверх
  Печать  
 
Перейти в:  


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