Поиск:

Ответ в темуСоздание новой темы Создание опроса
> QMessageBox ошибка сегментации 
:(
    Опции темы
KrupaKarlo
Дата 16.12.2008, 12:50 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Данный класс использован в старой проге и все нормально работает - в новой версии в openDlg  на MessageBox- ах вываливается по ошибке сегментации. Вызовы класса  в программе остались неизменны. Все что связано с работой этого класса не затрагивалось при модификации программы.

gdb говорит что вылет идет в функции QApplication::internalNotify()

не могу разобраться помогите плз

хидер

--------------------------------------------------------------------------------------------------------------------------------
Код


#include <qvariant.h>
#include <qobjectlist.h> 
#include <qdialog.h>
#include <qapplication.h>

#include <sevqt/local.h>
#include "setreglamentdlg.h"

class QVBoxLayout;
class QHBoxLayout;
class QGridLayout;
class QSpacerItem;

class QProcess;

class QExecControlUVM : public QDialog
{
        Q_OBJECT

    public:
        QExecControlUVM ( QWidget* parent = 0, const char* name = 0, bool modal = FALSE, WFlags fl = 0 );
        ~QExecControlUVM();
        // Функция открытия диалога
        void openDlg ( int num, QString code );
        // 1-я перегруженная функция открытия диалога
        void openDlg ( QSetReglamentDlg *s, int num, QString code, int com_num );

    protected:
        QProcess* proc;        // Объект для работы с консольной командой
        int number;        // Номер ШФШВ, в который выдается команда
        QString command_code;    // Код выдаваемой команды
        QLocal loc;        // Объект для работы с русским языком
        QSetReglamentDlg *regl;    // Указатель на класс установки/отмены режима РР
        int command_number;    // Номер команды в цепочке
        int flag;        // Флаг открытия окна
        // 1 - открыто из окна управления УВМ
        // 2 - открыто из установки режима РР
        
    protected slots:
        // Слот обработки события завершения консольной команды
        void slotProcessExited();
        void closeEvent ( QCloseEvent *e );
};



Добавлено @ 12:53
цпп-ник

-------------------------------------------------------

Код


#include "execcontroluvm.h"

#include <qvariant.h>
#include <qlayout.h>
#include <qtooltip.h>
#include <qwhatsthis.h>
#include <qprocess.h>
#include <qmessagebox.h>
#include <iostream.h>

#include "setreglamentdlg.h"

QExecControlUVM::QExecControlUVM( QWidget* parent, const char* name, bool modal, WFlags fl )
    : QDialog( parent, name, modal, fl )
{
    if ( !name )
    setName( "QExecControlUVM" );
    
    //create all components and init they zero-order properties
    resize( QSize( 600, 195 ).expandedTo(minimumSizeHint()) );
    clearWState( WState_Polished );

    // Создаем объект для работы с консольной командой
    proc = new QProcess( this );
    
    // Подключаем слоты
    // Слот обработки завершения выполнения консольной команды
    connect( proc, SIGNAL( processExited() ), this, SLOT( slotProcessExited() ) );

}

/*
 *  Destroys the object and frees any allocated resources
 */
QExecControlUVM::~QExecControlUVM()
{
    // no need to delete child widgets, Qt does it all for us
}

/************************************************************************
*                                    *
*    Функция открытия диалога                        *
*    Передаваемые параметры:                        *
*    int num      - номер ШФШВ, в который выдается команда        *
*    QString code - код выдаваемой команды                *
*                                    *
*    Возвращаемые параметры:                        *
*    нет                                *
*                                    *
*************************************************************************/
void QExecControlUVM::openDlg( int num, QString code )
{
    number = num;        // Получаем номер ШФШВ
    command_code = code;    // Получаем код команды

    
    flag = 1;
        
     switch( number )
     {
    case 1:
        if( strstr( command_code, "e" ) != 0 )
        {
        proc->addArgument( "write_socket" );
        proc->addArgument( "1" );
        proc->addArgument( command_code );
        if( !proc->start() )
        {
------------------------------------ВЫЛЕТАЕТ НА ЭТОМ МЕССЕДЖЕ И ВСЕХ ПОСЛЕДУЮЩИХ--------------------------------
            QMessageBox::critical( this, loc.local( "Балтика СЕВ-22" ),
                loc.local( "Невозможно запустить команду\n" 
                     "удаленного запуска NTP сервера для УВМ!" ), "OK" );
            cout << "невозможно запустить команду NTP сервера для УВМ" << endl;
            close();
        }
        }

        if( strstr( command_code, "d" ) != 0 )
        {
        proc->addArgument( "write_socket" );
        proc->addArgument( "1" );
        proc->addArgument( command_code );
        if( !proc->start() )
        {
            QMessageBox::critical( this, loc.local( "Балтика СЕВ-22" ),
            loc.local( "Невозможно запустить команду\n" 
                     "удаленной остановки NTP сервера для УВМ!" ), "OK" );
            close();
        }
        }    
        
        if( strstr( command_code, "r" ) != 0 )
        {
        proc->addArgument( "write_socket" );
        proc->addArgument( "1" );
        proc->addArgument( command_code );
        if( !proc->start() )
        {
            QMessageBox::critical( this, loc.local( "Балтика СЕВ-22" ),
            loc.local( "Невозможно запустить команду\n" 
                     "удаленного перезапуска УВМ!" ), "OK" );
            close();
        }
        }    

        if( strstr( command_code, "s" ) != 0 )
        {
        proc->addArgument( "write_socket" );
        proc->addArgument( "1" );
        proc->addArgument( command_code );
        if( !proc->start() )
        {
            QMessageBox::critical( this, loc.local( "Балтика СЕВ-22" ),
            loc.local( "Невозможно запустить команду\n" 
                     "удаленного выключения УВМ!" ), "OK" );
            close();
        }
        }    

        if( strstr( command_code, "t" ) != 0 )
        {
        proc->addArgument( "write_socket" );
        proc->addArgument( "1" );
        proc->addArgument( command_code );
        if( !proc->start() )
        {
            QMessageBox::critical( this, loc.local( "Балтика СЕВ-22" ),
            loc.local( "Невозможно запустить команду удаленной\n" 
                     "установки времени и датыдля УВМ!" ), "OK" );
            close();
        }
        }    
        if( strstr( command_code, "1H" ) != 0 )
        {
        proc->addArgument( "write_socket" );
        proc->addArgument( "1" );
        proc->addArgument( command_code );
        if( !proc->start() )
        {
            QMessageBox::critical( this, loc.local( "Балтика СЕВ-22" ),
            loc.local( "Невозможно запустить команду удаленного\n" 
                     "запуска формирования сигнала с частотой 1Гц для УВМ!" ), "OK" );
            close();
        }
        }         
        break;
        
    case 2:
        if( strstr( command_code, "e" ) != 0 )
        {
        proc->addArgument( "write_socket" );
        proc->addArgument( "2" );
        proc->addArgument( command_code );
        if( !proc->start() )
        {
            QMessageBox::critical( this, loc.local( "Балтика СЕВ-22" ),
            loc.local( "Невозможно запустить команду\n" 
                     "удаленного запуска NTP сервера для УВМ!" ), "OK" );
            close();
        }
        }    

        if( strstr( command_code, "d" ) != 0 )
        {
        proc->addArgument( "write_socket" );
        proc->addArgument( "2" );
        proc->addArgument( command_code );
        if( !proc->start() )
        {
            QMessageBox::critical( this, loc.local( "Балтика СЕВ-22" ),
            loc.local( "Невозможно запустить команду\n" 
                     "удаленной остановки NTP сервера для УВМ!" ), "OK" );
            close();
        }
        }    
            
        if( strstr( command_code, "r" ) != 0 )
        {
        proc->addArgument( "write_socket" );
        proc->addArgument( "2" );
        proc->addArgument( command_code );
        if( !proc->start() )
        {
            QMessageBox::critical( this, loc.local( "Балтика СЕВ-22" ),
            loc.local( "Невозможно запустить команду\n" 
                     "удаленного перезапуска УВМ!" ), "OK" );
            close();
        }
        }    

        if( strstr( command_code, "s" ) != 0 )
        {
        proc->addArgument( "write_socket" );
        proc->addArgument( "2" );
        proc->addArgument( command_code );
        if( !proc->start() )
        {
            QMessageBox::critical( this, loc.local( "Балтика СЕВ-22" ),
            loc.local( "Невозможно запустить команду\n" 
                     "удаленного выключения УВМ!" ), "OK" );
            close();
        }
        }    

        if( strstr( command_code, "t" ) != 0 )
        {
        proc->addArgument( "write_socket" );
        proc->addArgument( "2" );
        proc->addArgument( command_code );
        if( !proc->start() )
        {
            QMessageBox::critical( this, loc.local( "Балтика СЕВ-22" ),
            loc.local( "Невозможно запустить команду удаленной\n" 
                     "установки времени и датыдля УВМ!" ), "OK" );
            close();
        }
        }    
        if( strstr( command_code, "1H" ) != 0 )
        {
        proc->addArgument( "write_socket" );
        proc->addArgument( "2" );
        proc->addArgument( command_code );
        if( !proc->start() )
        {
            QMessageBox::critical( this, loc.local( "Балтика СЕВ-22" ),
            loc.local( "Невозможно запустить команду удаленного\n" 
                     "запуска формирования сигнала с частотой 1Гц для УВМ!" ), "OK" );
            close();
        }
        }
        break;
    }
}

/************************************************************************
*                                    *
*    1-я перегруженная функция открытия диалога                *
*    Передаваемые параметры:                        *
*    int num      - номер ШФШВ, в который выдается команда        *
*    QString code - код выдаваемой команды                *
*                                    *
*    Возвращаемые параметры:                        *
*    нет                                *
*                                    *
*************************************************************************/
void QExecControlUVM::openDlg( QSetReglamentDlg *s, int num, QString code, int com_num )
{
    regl = s;        // Получаем указатель на класс установки/отмены режима РР
    number = num;            // Получаем номер ШФШВ
    command_code = code;        // Получаем код команды
    command_number = com_num;    // Получаем номер команды в цепочке
    
    flag = 2;

    switch( number )
    {
    case 1:
        if( strstr( command_code, "e" ) != 0 )
        {
        proc->addArgument( "write_socket" );
        proc->addArgument( "1" );
        proc->addArgument( command_code );
        if( !proc->start() )
        {
------------------------------------ВЫЛЕТАЕТ НА ЭТОМ МЕССЕДЖЕ И ВСЕХ ПОСЛЕДУЮЩИХ--------------------------------
            QMessageBox::critical( this, loc.local( "Балтика СЕВ-22" ),
            loc.local( "Невозможно запустить команду\n" 
                     "удаленного запуска NTP сервера для УВМ!" ), "OK" );
            close();
        }
        }

        if( strstr( command_code, "d" ) != 0 )
        {
        proc->addArgument( "write_socket" );
        proc->addArgument( "1" );
        proc->addArgument( command_code );
        if( !proc->start() )
        {
            QMessageBox::critical( this, loc.local( "Балтика СЕВ-22" ),
            loc.local( "Невозможно запустить команду\n" 
                     "удаленной остановки NTP сервера для УВМ!" ), "OK" );
            close();
        }
        }

    case 2:
        if( strstr( command_code, "e" ) != 0 )
        {
        proc->addArgument( "write_socket" );
        proc->addArgument( "2" );
        proc->addArgument( command_code );
        if( !proc->start() )
        {
            QMessageBox::critical( this, loc.local( "Балтика СЕВ-22" ),
            loc.local( "Невозможно запустить команду\n" 
                     "удаленного запуска NTP сервера для УВМ!" ), "OK" );
            close();
        }
        }

        if( strstr( command_code, "d" ) != 0 )
            {
        proc->addArgument( "write_socket" );
        proc->addArgument( "2" );
        proc->addArgument( command_code );
        if( !proc->start() )
        {
            QMessageBox::critical( this, loc.local( "Балтика СЕВ-22" ),
            loc.local( "Невозможно запустить команду\n" 
                     "удаленной остановки NTP сервера для УВМ!" ), "OK" );
            close();
        }
        }
    }
}

/************************************************************************
*                                    *
*    Слот обработки события завершения работы команды            *
*    Передаваемые параметры:                        *
*    нет                                *
*                                    *
*    Возвращаемые параметры:                        *
*    нет                                *
*                                    *
*************************************************************************/
void QExecControlUVM::slotProcessExited()
{
    if( flag == 2 )
     regl->GetRegWork( "r", command_number );

    close();
}

/***************4*********************************************************
*                                    *
*    Слот обработки события закрытия формы                *
*    Передаваемые параметры:                        *
*    нет                                *
*                                    *
*    Возвращаемые параметры:                        *
*    нет                                *
*                                    *
************************************************************************/
void QExecControlUVM::closeEvent( QCloseEvent *e )
{
    e->accept();
}




Это сообщение отредактировал(а) KrupaKarlo - 16.12.2008, 15:08
PM MAIL   Вверх
ecspertiza
Дата 17.12.2008, 17:38 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Может это из-за loc.local? пробовал убирать?


--------------------
С уважением,
мастер конфетного цеха!

онлайн компилер
залип
PM MAIL   Вверх
SABROG
Дата 17.12.2008, 19:02 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Hacker
****


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

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



Что такое вообще этот loc.local ?

Цитата(ecspertiza @  17.12.2008,  17:38 Найти цитируемый пост)
Один терапевт это 1024 гигапевта и  1048576 мегапевтов


А еще это 1099511627776 килопевтов и всего 1125899906842624 самих певтов.



--------------------
Национальная группа Russian Federation на QtCentre.
PM MAIL   Вверх
KrupaKarlo
Дата 18.12.2008, 00:05 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



точно не в Loc.local дело.  два дня не мог разобраться и вдруг сегодня больше не вываливается по ошибке... фантастика! ничего не понимаю smile 
PM MAIL   Вверх
SABROG
Дата 18.12.2008, 02:04 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Hacker
****


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

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



Цитата(KrupaKarlo @ 18.12.2008,  00:05)
точно не в Loc.local дело.  два дня не мог разобраться и вдруг сегодня больше не вываливается по ошибке... фантастика! ничего не понимаю smile

Магическое покровительство духа программистов снизошло на тебя. Правда обычно их не хватает на долго...


--------------------
Национальная группа Russian Federation на QtCentre.
PM MAIL   Вверх
ecspertiza
Дата 18.12.2008, 09:13 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Да ещё раз убеждаюсь что главный инструмент программиста это бубен smile 


--------------------
С уважением,
мастер конфетного цеха!

онлайн компилер
залип
PM MAIL   Вверх
KrupaKarlo
Дата 18.12.2008, 13:54 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



просто я когда искал проблему нарыл такой топик
http://forum.codenet.ru/showthread.php?threadid=40097

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

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

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


 




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


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

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