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

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

Страниц: 1 2 [3]   Вниз
  Печать  
Автор Тема: Qt unhanded win32 exception  (Прочитано 15834 раз)
thechicho
Гость
« Ответ #30 : Май 15, 2013, 23:44 »

//2) Мой вариант - Global.MyDB

вы привели не полный класс? нет же поля MyDB

class MyGlobal {

public:
        QString  DbHost;
        QString  DbName;
        QString  DbUser;
        QString  DbPass;

    QSqlDatabase DataBase;

    MyGlobal();
    bool OpenDB();
};

Записан
Majestio
Гость
« Ответ #31 : Май 15, 2013, 23:52 »

В моем варианте (в том, который приводил) - Global.DataBase;
Записан
Majestio
Гость
« Ответ #32 : Май 16, 2013, 00:11 »

переменную (объект класса) MyGlobal Global; нельзя назвать статической, т.к. не каждая функция класса статическая (их вообще нет).
Увы, в приведенном мною выше примере я чутка ошибся, в черновики лазил) Правильнее так:

-- myglobal.h ---
extern MyGlobal Global;

и

-- myapp.cpp ---
int main(int argc, char *argv[])
{
   MyGlobal Global;

тогда если посмотрим вызовы конструкторов/деструкторов:

Код:
int main(int argc, char *argv[])
{
    MyGlobal Global;
    qDebug() << "main1";
    QApplication a(argc, argv);
    qDebug() << "main2";
    Dialog w;
    qDebug() << "main3";
    w.show();
    qDebug() << "main4";
    return a.exec();
}

Это будет выглядеть так:

MyGlobal::MyGlobal
main1
main2
Dialog::Dialog
main3
main4
Dialog::~Dialog
MyGlobal::~MyGlobal
Записан
Majestio
Гость
« Ответ #33 : Май 16, 2013, 00:28 »

переменную (объект класса) MyGlobal Global; нельзя назвать статической, т.к. не каждая функция класса статическая (их вообще нет).
то есть глобальная переменная - да
глобальная статическая переменная - нет
Все верно - я неверно выразился. В статическом классе нет конструкторов, деструкторов и есть описатели static.
Записан
thechicho
Гость
« Ответ #34 : Май 16, 2013, 13:34 »

ясно, спс.
а не думали синглтон для этой задачи сделать?
Записан
Majestio
Гость
« Ответ #35 : Май 16, 2013, 21:16 »

а не думали синглтон для этой задачи сделать?
Синглтон привнесет только дополнительный код, но чего-то существенного не улучшит в данном вопросе. По большому счету можно вообще обойтись без объявления класса, а завернуть это в namespace (для многопоточного доступа наверное лучше все ж как экземпляр класса). Цель же этого всего - только централизация общедоступных ресурсов.
« Последнее редактирование: Май 16, 2013, 21:17 от Majestio » Записан
qwyllum
Гость
« Ответ #36 : Май 17, 2013, 23:19 »

1) Из проекта убираете все неработающее, связанное с БД.

2) В проект добавляете это myglobal.h и myglobal.cpp

Огромное спасибо за пример. Ваш пример пригодился немного для другого - позволил уменьшить количество методов в диалоге) Что касается исключения - иногда программа генерировала исключения, иногда нет. Я переустановил винду и ошибка исчезла сама собой. Прошу прощения у всех, что отнял Ваше время.
Записан
Страниц: 1 2 [3]   Вверх
  Печать  
 
Перейти в:  


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