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

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

Страниц: [1] 2   Вниз
  Печать  
Автор Тема: Почему падает тестовое приложение  (Прочитано 8430 раз)
andrew.k
Гость
« : Апрель 08, 2015, 12:00 »

Если в TestApp раскомментировать два qDebug(), то все работает как положено.

Код приложения:

Код
C++ (Qt)
// main.cpp
#include "testapp.h"
#include <QApplication>
#include <QtDebug>
#include <QTimer>
 
int main(int argc, char *argv[])
{
//      new QApplication(argc, argv);
       TestApp ta(argc, argv);
 
       QTimer::singleShot(1000, qApp, SLOT(quit()));
       return qApp->exec();
}
 
 

Код
C++ (Qt)
// testapp.h
#include <QObject>
 
class TestApp : public QObject
{
       Q_OBJECT
 
public:
       TestApp(int argc, char * argv[], QObject * parent = 0);
       ~TestApp();
 
private:
       static TestApp * instance_;
};
 
 

Код
C++ (Qt)
// testapp.cpp
#include "testapp.h"
#include <QApplication>
#include <QtDebug>
 
TestApp * TestApp::instance_ = 0;
 
TestApp::TestApp(int argc, char * argv[], QObject *parent)
       :QObject(parent)
{
//      qDebug() << "TestApp::TestApp()";
       instance_ = this;
       new QApplication(argc, argv);
}
 
TestApp::~TestApp()
{
//    qDebug() << "TestApp::~TestApp()";
   delete qApp;
}
 
 
Записан
__Heaven__
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 2130



Просмотр профиля
« Ответ #1 : Апрель 08, 2015, 12:07 »

У меня отработало без вылета.
Win7x64 qt5.4.1 mingw
Записан
Пантер
Administrator
Джедай : наставник для всех
*****
Offline Offline

Сообщений: 5876


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


Просмотр профиля WWW
« Ответ #2 : Апрель 08, 2015, 12:14 »

Бггггг. Веселый
А теперь внимательно присмотрись к тому, как QCoreApplication принимает argc.
Записан

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

Сообщений: 5876


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


Просмотр профиля WWW
« Ответ #3 : Апрель 08, 2015, 12:15 »

Да, синглтон у тебя херовый.
Записан

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

Сообщений: 2130



Просмотр профиля
« Ответ #4 : Апрель 08, 2015, 12:23 »

После отработки конструктора TestApp происходит артефакт, отгадал?
Записан
andrew.k
Гость
« Ответ #5 : Апрель 08, 2015, 12:23 »

У меня отработало без вылета.
Win7x64 qt5.4.1 mingw
в qt4.8 у меня тоже без вылета отработало.
Записан
andrew.k
Гость
« Ответ #6 : Апрель 08, 2015, 12:25 »

Бггггг. Веселый
А теперь внимательно присмотрись к тому, как QCoreApplication принимает argc.
Жесть! В жизни б не догадался) Никогда не обращал на это внимание.
Зачем так сделали, не понятно.

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

Сообщений: 5876


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


Просмотр профиля WWW
« Ответ #7 : Апрель 08, 2015, 12:25 »

Когда-то я такую проблему отхватил через 4 года существования проекта (переданного мне). То есть, 4 года все работало и внезапно стало падать. Причем, только у меня. Так сошлись звезды, версия компилятора и что-то там еще.
Записан

1. Qt - Qt Development Frameworks; QT - QuickTime
2. Не используйте в исходниках символы кириллицы!!!
3. Пользуйтесь тегом code при оформлении сообщений.
andrew.k
Гость
« Ответ #8 : Апрель 08, 2015, 12:26 »

Да, синглтон у тебя херовый.
Чем он плох?
Записан
Пантер
Administrator
Джедай : наставник для всех
*****
Offline Offline

Сообщений: 5876


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


Просмотр профиля WWW
« Ответ #9 : Апрель 08, 2015, 12:27 »

Бггггг. Веселый
А теперь внимательно присмотрись к тому, как QCoreApplication принимает argc.
Жесть! В жизни б не догадался) Никогда не обращал на это внимание.
Зачем так сделали, не понятно.

Спасибо!
Кьют может удалять из входных параметров определенные вещи (допустим, -style style_name).
Записан

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

Сообщений: 5876


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


Просмотр профиля WWW
« Ответ #10 : Апрель 08, 2015, 12:28 »

Да, синглтон у тебя херовый.
Чем он плох?
Тем, что он не синглтон. Кто будет проверять на то, что инстанс ненулевой?
Записан

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

Сообщений: 2130



Просмотр профиля
« Ответ #11 : Апрель 08, 2015, 12:32 »

А для чего такие синглтоны служат? Никогда не применял
Записан
andrew.k
Гость
« Ответ #12 : Апрель 08, 2015, 12:34 »

Да, синглтон у тебя херовый.
Чем он плох?
Тем, что он не синглтон. Кто будет проверять на то, что инстанс ненулевой?
Да это я так сделал для теста.
можно добавить Q_ASSERT(instance_ == nullptr) Улыбающийся

Так то его вообще нельзя назвать синглтоном, нет функции возвращающей экземпляр)
Записан
andrew.k
Гость
« Ответ #13 : Апрель 08, 2015, 12:35 »

А для чего такие синглтоны служат? Никогда не применял
Например, QCoreApplication типичный пример синглтона.
Записан
Пантер
Administrator
Джедай : наставник для всех
*****
Offline Offline

Сообщений: 5876


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


Просмотр профиля WWW
« Ответ #14 : Апрель 08, 2015, 12:37 »

В синглтонах конструктор делают приватным и работают через SingletonClassName::instance()->someMethod().
Записан

1. Qt - Qt Development Frameworks; QT - QuickTime
2. Не используйте в исходниках символы кириллицы!!!
3. Пользуйтесь тегом code при оформлении сообщений.
Страниц: [1] 2   Вверх
  Печать  
 
Перейти в:  


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