Поиск:

Ответ в темуСоздание новой темы Создание опроса
> [QT] приложение висит в процессах после закрытия. 
V
    Опции темы
Programister0
Дата 27.11.2007, 15:09 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 119
Регистрация: 28.5.2007

Репутация: нет
Всего: нет



подскажите пожайлуста,
перенес приложение(вместе с необходимыми библиотеками) на другой компьютер(без QT и minGW) и там оно после закрытия всех форм остается в процессах и не позволяет нормально запустить его второй раз.
я приблизительно знаю что проблема скорее всего в параметрах pro файла проекта,  
он у меня так выглядит:
Код

TEMPLATE = app
TARGET =
DEPENDPATH += .
INCLUDEPATH += .

FORMS += my*.ui 
SOURCES += my*.cpp 
HEADERS += my*.h

QT += gui core sql
CONFIG += release 

на компьютере где оно собиралось приложение работает нормально!


PM MAIL WWW ICQ Skype   Вверх
Elfebet
Дата 27.11.2007, 15:19 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 545
Регистрация: 15.5.2006
Где: Украина. Запорожь е.

Репутация: 5
Всего: 14



мне кажется что приложение не завершилось потому что какой-то виджет не убился (или окно не закрылось) и в мэйне прописано
Код

a.connect(&a, SIGNAL(lastWindowClosed()), &a, SLOT(quit()));



--------------------
Программист не должен всё знать... он должен знать где можно посмотреть
PM MAIL ICQ GTalk   Вверх
archimed7592
Дата 27.11.2007, 15:24 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Архимед
****


Профиль
Группа: Завсегдатай
Сообщений: 2531
Регистрация: 12.6.2004
Где: Moscow

Репутация: 11
Всего: 93



Цитата(Programister0 @  27.11.2007,  15:09 Найти цитируемый пост)
я приблизительно знаю что проблема скорее всего в параметрах pro файла проекта, 

При чём тут они? smile

Зависит от специфики твоего приложения. Используется ли многопоточность?


--------------------
If you have an apple and I have an apple and we exchange apples then you and I will still each have one apple. But if you have an idea and I have an idea and we exchange these ideas, then each of us will have two ideas.
© George Bernard Shaw
PM Jabber   Вверх
Programister0
Дата 27.11.2007, 16:09 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 119
Регистрация: 28.5.2007

Репутация: нет
Всего: нет



нет к потоками пока не подхожу, пока все просто - но все равно не верно работает.
Цитата

a.connect(&a, SIGNAL(lastWindowClosed()), &a, SLOT(quit()));


у меня в main.cpp следующее :
Код

#include <QtGui>
#include <QtSql>

#include "frmMainWND.h"
#include "frmDLG.h"

int main(int argc,char **argv)
{
    QApplication app(argc, argv);
    
    frmMainWND  *mw  = new frmMainWND();   
    mw->frmdlg->show();
    return app.exec();
    
}


frmMainWND.h:
Код

#ifndef __FRMMAINWND_H__
#define __FRMMAINWND_H__

#include ...
 
class frmMainWND: 
      public QMainWindow,
      public Ui_MainWndw
{
    Q_OBJECT
  public:  
    frmMainWND(QWidget *parent=0);    
    
    //------------------ forms -------------------------
    frmDiaog      *frmdlg;
    frmOther      *Otherdlg;
    //----------------- /forms -------------------------
    bool        showfirst;

  public slots:
    void show();
};
#endif // __FRMMAINWND_H__


а в frmMainWND.cpp:
Код

#include ...

frmMainWND::frmMainWND(QWidget *parent)
           :QMainWindow(parent),
           showfirst(0)
{
    frmdlg = new frmDialog(this);
}
//---------------------------------------------------------------------
void frmMainWND::show()
{
  if(!showfirst) //типа чтобы если в frmdlg пользователь решил продолжить запуск
  {              //то только тогда и загружались все остальные формы приложения
    showfirst=1; 
    setupUi(this); 
    Otherdlg     =new frmOther(this);  
    ...  //много new frm..
    connect(action_1, SIGNAL(triggered()),  Otherdlg, SLOT( OtherdlgFunc() ) ); // <-- из-за этого может быть?

если да то как тогда правильно прописать запуск события Otherdlg из MainWND?

Это сообщение отредактировал(а) Programister0 - 27.11.2007, 16:10
PM MAIL WWW ICQ Skype   Вверх
Elfebet
Дата 27.11.2007, 17:25 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 545
Регистрация: 15.5.2006
Где: Украина. Запорожь е.

Репутация: 5
Всего: 14



а тебя не смущает такой вызов в майне
Код

mw->frmdlg->show();

в таком случае мне кажется что форма frmdlg закрываеться а mw висит и ее невидно, а так как mw - главная форма, программа не закроется

и еще чтобы убедиться что выход из проги произошел напиши функцию
Код

void  frmMainWND::closeEvent(QCloseEvent *)
{
   if(frmdlg) delete frmdlg;
   if(frmOther) delete frmOther;
}

тока сначала обнули указатели


--------------------
Программист не должен всё знать... он должен знать где можно посмотреть
PM MAIL ICQ GTalk   Вверх
Programister0
Дата 28.11.2007, 03:44 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 119
Регистрация: 28.5.2007

Репутация: нет
Всего: нет



пишу следующее:
Код

void frmMainWND::closeEvent(QCloseEvent *event) 
{
      frmdlg->close();
      frmOther->close();

      if(frmdlg) delete frmdlg;
      if(frmOther) delete frmOther;
      //и меню тоже туда 
      if(popmenu) delete popmenu;
      
      event->accept();

} 

все равно приложение так-же после закрытия висит в процессах!
PM MAIL WWW ICQ Skype   Вверх
Любитель
Дата 28.11.2007, 11:29 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Программист-романтик
****


Профиль
Группа: Комодератор
Сообщений: 3645
Регистрация: 21.5.2005
Где: Воронеж

Репутация: 16
Всего: 92



Во-первых, для точного определения причины ошибки - не достаточно кода.

В-вторых, много бросающихся в глаза нелепостей:

[code]
frmMainWND  *mw  = new frmMainWND();
mw->frmdlg->show();
return app.exec();
[/quote]
Указатель mw никто не удаляет.

mw->frmdlg выглядит крайне странно (кто кстати учил поля в паблик писать?).

Цитата(Programister0 @  28.11.2007,  03:44 Найти цитируемый пост)
if(frmdlg) delete frmdlg;

Бессмысленная проверка. delete 0 отработает нормально smile


Цитата(Programister0 @  27.11.2007,  16:09 Найти цитируемый пост)
 bool showfirst;

Цитата(Programister0 @  27.11.2007,  16:09 Найти цитируемый пост)
showfirst=1;

Стилистически странно  smile

А вообще - объясни, что ты хочешь от всех этих форм, тогда подумаем как это сделать smile


--------------------
PM MAIL ICQ Skype   Вверх
Programister0
Дата 29.11.2007, 04:19 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 119
Регистрация: 28.5.2007

Репутация: нет
Всего: нет



Цитата

В-вторых, много бросающихся в глаза нелепостей

это попытка связать frmMainWND с остальными формами - зависящими от нее.

Цитата

Стилистически странно

согласен, но это еще цветочки, там еще стока всего "странного" - боюсь код показывать.

Цитата

А вообще - объясни, что ты хочешь от всех этих форм, тогда подумаем как это сделать

спасибо конечно, но лучше приведите примеры как вы связали-бы одну главную форму с несколькими диалогами(не стандартными (своими) ) и данные которые были введены в них отображались на главной

Цитата

if(frmdlg) delete frmdlg;
Бессмысленная проверка. delete 0 отработает нормально

как тогда вообще удалять обьекты? 
Код

int main(int argc,char **argv)
{
    QApplication app(argc, argv);
    FRM  *frm  = new FRM();   
    frm->show();
    return app.exec();  
    //здесь уже delete frm уже не поможет! 
}




Это сообщение отредактировал(а) Programister0 - 29.11.2007, 04:21
PM MAIL WWW ICQ Skype   Вверх
archimed7592
Дата 29.11.2007, 04:37 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Архимед
****


Профиль
Группа: Завсегдатай
Сообщений: 2531
Регистрация: 12.6.2004
Где: Moscow

Репутация: 11
Всего: 93



Код

int main(int argc,char **argv)
{
    QApplication app(argc, argv);
    FRM  *frm  = new FRM();   
    frm->show();
    int result = app.exec();  
    delete frm;
    return result;
}

// или

int main(int argc,char **argv)
{
    QApplication app(argc, argv);
    FRM  frm;   
    frm.show();
    return app.exec();
}


Добавлено через 1 минуту и 14 секунд
2-й вариант лучше.

Это сообщение отредактировал(а) archimed7592 - 29.11.2007, 04:37


--------------------
If you have an apple and I have an apple and we exchange apples then you and I will still each have one apple. But if you have an idea and I have an idea and we exchange these ideas, then each of us will have two ideas.
© George Bernard Shaw
PM Jabber   Вверх
Programister0
Дата 29.11.2007, 18:32 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 119
Регистрация: 28.5.2007

Репутация: нет
Всего: нет



блин, простите вопрос был не по теме,
я разобрался проблема оказалась в main:
Код

int main(int argc,char **argv)
{

    QApplication app(argc, argv);
    
    ...
    
    QSqlDatabase db = QSqlDatabase::addDatabase("QIBASE");
    db.setDatabaseName("test");
    db.setUserName("SYSDBA");
    db.setPassword("masterkey");
    //db.setHostName("localhost");
    if(!db.open()) 
    {
      QMessageBox::information(0,
                               QObject::tr("error"),
                               QObject::tr("<b>can't</b> connect to database")
                               );
      return 1;    
    }

    frmDiaog frmdlg;
    frmdlg.show();
    return app.exec();
}

тут оказалось QSqlDatabase просто незакрыта! 
а остальные формы только с ibase sql и работают
PM MAIL WWW ICQ Skype   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "С/С++: Кроссплатформенное программирование, QT/Gtk+/wxWidgets"
JackYF
Любитель
  • В заголовке темы в квадратных скобках обозначьте используемую вами библиотеку, например: [QT],[GTK],[wx].
  • Если вопрос актуален только для некоторой версии библиотеки, либо, если вы пользуетесь не самой последней версией, укажите это. Например: [QT4], [GTK2].
  • Все начинающие изучать Qt - не забудьте зайти сюда.
  • Проставьте несколько ключевых слов темы, чтобы её можно было легче найти.
  • В вопросе укажите полную версию версию библиотеки, а также все дополнительные используемые программные пакеты.
  • Не забывайте пользоваться кнопкой "Код".
  • Телепатов на форуме нет! Задавайте чёткий, конкретный и полный вопрос. Указывайте полностью ошибки компилятора и компоновщика.
  • Новое сообщение должно иметь прямое отношение к тематике этого раздела. Флуд, флейм, оффтопик запрещены.
  • Категорически запрещается обсуждение вареза, "кряков", взлома программ и т.д.

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, JackYF, Любитель.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | С/С++: Кроссплатформенное программирование, Qt/Gtk+/wxWidgets | Следующая тема »


 




[ Время генерации скрипта: 0.0617 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.