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

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

Страниц: [1] 2   Вниз
  Печать  
Автор Тема: Краш  (Прочитано 7261 раз)
like-nix
Гость
« : Март 18, 2011, 00:01 »

Проблема однако =)

Код:
#include <QtGui/QApplication>
#include <QDialog>
#include <QVBoxLayout>
#include <QHBoxLayout>
#include <QPushButton>
#include "mainwindow.h"
#include "DialogOptionsDbConnection.h"
#include "App.h"

int main(int argc, char *argv[])
{
    QApplication a(argc, argv);

    QSqlError err = App::Inst().database().connectToDatabase();
    if(QSqlError::NoError != err.type())
    {
        QDialog dlg;

        QPushButton cancelButton("Cancel");
        a.connect(&cancelButton, SIGNAL(clicked()),
                &dlg, SLOT(reject()));

        QPushButton okButton("OK");
        okButton.setDefault(true);
        a.connect(&okButton, SIGNAL(clicked()),
                &dlg, SLOT(accept()));

        QHBoxLayout layoutButtons;
        layoutButtons.addWidget(&okButton);
        layoutButtons.addWidget(&cancelButton);

        QVBoxLayout layoutDialog;
        ConfigureSQL conn;
        layoutDialog.addWidget(&conn);
        layoutDialog.addLayout(&layoutButtons);

        dlg.setLayout(&layoutDialog);

        do
        {
            dlg.exec();
            if(dlg.result() != QDialog::Accepted)
            {
                exit(1);
            }
            err = App::Inst().database().lastError();
        }
        while(QSqlError::NoError != err.type());
    }
    MainWindow w;
    w.show();

    return a.exec();
}

жестко падает =) при выходе из блока if(QSqlError::NoError != err.type())
Вот ошибка

И подскажите пожалуйста если я буду использовать указатели вместо объектов
cancelButton, okButton, layoutButtons, layoutDialog, ConfigureSQL буду использовать указатели их надо принудительно удалять?

И вообще какие классы в Qt нужно принудительно удалять, а какие лучше использовать в качестве объектов, а какие как указатели?
« Последнее редактирование: Март 18, 2011, 00:19 от like-nix » Записан
like-nix
Гость
« Ответ #1 : Март 18, 2011, 00:06 »

ancelButton, okButton, layoutButtons, layoutDialog, ConfigureSQL заменил на указатели стало хорошо =) Сижу думаю как там утечки памяти =)

Может кто подскажет как в Qt утечки памяти посмотреть проще всего замарачиваться особо нет времени.
Записан
like-nix
Гость
« Ответ #2 : Март 18, 2011, 00:06 »

Или может smart pointers использовать?
Записан
alexman
Гость
« Ответ #3 : Март 18, 2011, 00:11 »

BoundsChecker
Записан
Пантер
Administrator
Джедай : наставник для всех
*****
Offline Offline

Сообщений: 5876


Жаждущий знаний


Просмотр профиля WWW
« Ответ #4 : Март 18, 2011, 08:23 »

Возможно я еще не проснулся, но ошибку в коде я не нашел, все должно работать.

Утечки можно посмотреть valgrind'ом под Линуксом.
Записан

1. Qt - Qt Development Frameworks; QT - QuickTime
2. Не используйте в исходниках символы кириллицы!!!
3. Пользуйтесь тегом code при оформлении сообщений.
GreatSnake
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 2921



Просмотр профиля
« Ответ #5 : Март 18, 2011, 11:06 »

Цитировать
Сижу думаю как там утечки памяти =)
А стоит ли об этом думать, коли аллокация делается в main()?
Или вопрос обо всех утечках?
Записан

Qt 5.11/4.8.7 (X11/Win)
like-nix
Гость
« Ответ #6 : Март 18, 2011, 13:17 »

Да обо всех в челом. Я не нашел в документации нормального описания сборщика муссора который работает в Qt.
Записан
GreatSnake
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 2921



Просмотр профиля
« Ответ #7 : Март 18, 2011, 13:20 »

Цитата: like-nix
Да обо всех в челом. Я не нашел в документации нормального описания сборщика муссора который работает в Qt.
Сборщик мусора в C++?  Шокированный
Записан

Qt 5.11/4.8.7 (X11/Win)
like-nix
Гость
« Ответ #8 : Март 18, 2011, 13:25 »

Ну у них все примеры написаны без единого гвоздя(delete) почти =) И опенсорсных проектах такая практика очень часто встречается, все либо забивают на освобождение либо... он есть =)
Записан
Пантер
Administrator
Джедай : наставник для всех
*****
Offline Offline

Сообщений: 5876


Жаждущий знаний


Просмотр профиля WWW
« Ответ #9 : Март 18, 2011, 13:26 »

В Qt все решают родительские связи. Если назначаешь парента, то будь уверен, что он сам убьет своего ребенка.
Записан

1. Qt - Qt Development Frameworks; QT - QuickTime
2. Не используйте в исходниках символы кириллицы!!!
3. Пользуйтесь тегом code при оформлении сообщений.
like-nix
Гость
« Ответ #10 : Март 18, 2011, 13:28 »

А кто родителя убивает? =)
Записан
GreatSnake
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 2921



Просмотр профиля
« Ответ #11 : Март 18, 2011, 13:29 »

Цитировать
Ну у них все примеры написаны без единого гвоздя(delete) почти =) И опенсорсных проектах такая практика очень часто встречается, все либо забивают на освобождение либо... он есть =)
В Qt используется иерархическая модель "родитель-потомки". При удалении родителя сам родитель удаляет своих потомков.
Если придерживаться этой модели, то delete-ом пользоваться практически не придётся. Что и показывают примеры.
Записан

Qt 5.11/4.8.7 (X11/Win)
Пантер
Administrator
Джедай : наставник для всех
*****
Offline Offline

Сообщений: 5876


Жаждущий знаний


Просмотр профиля WWW
« Ответ #12 : Март 18, 2011, 13:30 »

А кто родителя убивает? =)
Его родитель или ты.
Записан

1. Qt - Qt Development Frameworks; QT - QuickTime
2. Не используйте в исходниках символы кириллицы!!!
3. Пользуйтесь тегом code при оформлении сообщений.
like-nix
Гость
« Ответ #13 : Март 18, 2011, 13:33 »

Да теперь ясно)
Записан
GreatSnake
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 2921



Просмотр профиля
« Ответ #14 : Март 18, 2011, 13:35 »

А кто родителя убивает? =)
Его родитель или ты.
Либо сам C++, если родительский класс (MainWindow, Dialog) создан на стеке в main().
Либо сам Qt, если виджет имеет атрибут Qt::WA_DeleteOnClose.
Записан

Qt 5.11/4.8.7 (X11/Win)
Страниц: [1] 2   Вверх
  Печать  
 
Перейти в:  


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