//окно процесса остановкиact_Stop *dlg_Stop;//флаг остановкиbool isCheck=FALSE;void MainWindow::init(){ ... connect (this, SIGNAL(checkStop()), this, SLOT(closeStopDlg()));}//void MainWindow::actStop(){ //this dialog AS QDialog - modal act_Stop *dlg_Stop = new act_Stop(this, QString::Null, TRUE, Qt::WStyle_Customize|Qt::WStyle_NoBorder); dlg_Stop->exec(); // OR - ? //dlg_Stop->show(); //dlg_Stop->raise(); //dlg_Stop->setActiveWindow(); isCheck=TRUE;}//void MainWindow::checkString(){ ... if (countString==0) if (isCheck) emit checkStop(); else ...//proceed working}//void MainWindow::closeStopDlg(){ dlg_Stop->hide(); OR delete dlg_Stop; isCheck=FALSE;}
enum {NoPartion = QEvent::User + 1, //Событие "Обработана последняя порция"CloseWnd //Событие "Закрыть окно"}; class CNoPartionEvent : public QEvent{public: CNoPartionEvent() : QEvent((QEvent::Type) NoPartion) {};}class CCloseMyWnd : public QEvent{public: CCloseMyWnd() : QEvent((QEvent::Type) CloseWnd) {};}
void MainWindow::customEvent(QEvent * event) { if ((int) event->type() == NoPartion) { QApplication::postEvent(pMyDlg, new CCloseMyWnd()); //... }}
class QMyThread : public QThread{ //... protected: void run() //Процедура, которая обрабатывает твои строки { //... //Проверили флаг останова, он есть //Добоработали полученные 5 строк //Послали событие в главное окно QApplication::postEvent(pMyHeadWnd, new CCloseMyWnd()); //... } //...} //pMyHeadWnd имеет тип MainWindow*
void MainWindow::customEvent(QEvent * event) { if ((int) event->type() == CCloseMyWnd) { //Здесь пиши код, который закрое твое окно, как тебе надо }}
myDialog::keyPressEvent(QKeyEvent *event){ if(event->key()!=Key_Escape) QDialog::keyPressEvent(event);}
void myDialog::keyPressEvent(QKeyEvent *event) { if(event->key() == Key_Escape) event->ignore(); else event->accept()}
event->ignore();
#ifndef HGEVENT_H#define HGEVENT_H#include <qevent.h>enum { IsHaveStop=1001, //Событие "имеем признак стоп" CloseProgressStop=1002 //Событие "удалить окно завершения"};class HaveStop : public QCustomEvent{ public: HaveStop() : QCustomEvent((QCustomEvent::Type) IsHaveStop) {};};class CloseProgressStopDlg : public QCustomEvent{ public: CloseProgressStopDlg() : QCustomEvent((QCustomEvent::Type) CloseProgressStop) {};};#endif
//mainwindowvoid MainWindow::customEvent(QCustomEvent * event) { if ((int) event->type() == IsHaveStop) { QApplication::postEvent(pMyDlg, new CloseProgressStopDlg()); //... } }void MainWindow:: run() //Процедура, которая обрабатывает строки { //... //Проверили флаг останова, он есть //Добоработали полученные 5 строк //Послали событие в главное окно QApplication::postEvent(this, new HaveStop()); //... }
void DlgWindow::customEvent(QCustomEvent * event) { if ((int) event->type() == CloseProgressStop) { reject(); } }