Данный класс использован в старой проге и все нормально работает - в новой версии в 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(); }
|
|