Форум программистов, компьютерный форум, киберфорум
Наши страницы
C++ Qt
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.58/12: Рейтинг темы: голосов - 12, средняя оценка - 4.58
GaG
0 / 0 / 0
Регистрация: 05.03.2014
Сообщений: 96
1

Подтверждения закрытия приложения

30.03.2014, 21:56. Просмотров 2299. Ответов 14
Метки нет (Все метки)

Как можно сделать так ,чтобы при нажатие на крестик главного окна(закртыттие главного окна) появлялся messagebox,который спрашывает что-то.... и при нажатие "ок",что бы закрывось главное окно!!!

 Комментарий модератора 
Я же Вас предупреждал касательно создания тем с не информативным названием!
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
30.03.2014, 21:56
Ответы с готовыми решениями:

Сохранение данных приложения после закрытия
Здравствуйте. Мне нужно чтобы после закрытия приложения у меня сохранялись...

Глобальная константа в qt после закрытия приложения выдает ошибку
Добрый вечер, вообщем всегда использовал макросы #define для всяких общих вещей...

Возможен ли запуск стороннего приложения в окне моего приложения?
Возможно ли запускать стороннее приложение в окне моего приложения ? В...

Сигнал закрытия виджета
Здравствуйте! Есть игра змейка. Игровой цикл выглядит так - void...

Анимация закрытия QMainWidget
=============================================================================...

14
Chernobyl
217 / 217 / 69
Регистрация: 30.09.2012
Сообщений: 545
30.03.2014, 23:01 2
GaG, Отвечал уже на подобный вопрос другому человеку. Посмотрите эту тему, уверен, поможет.
Получить MessageBox при закрытии программы с "Крестика"
0
GaG
0 / 0 / 0
Регистрация: 05.03.2014
Сообщений: 96
30.03.2014, 23:06  [ТС] 3
Да я видел эту тему,но у меня почему то ничего не происходит при закрытии!!!
0
Chernobyl
217 / 217 / 69
Регистрация: 30.09.2012
Сообщений: 545
30.03.2014, 23:09 4
GaG, Тогда покажите код.
0
GaG
0 / 0 / 0
Регистрация: 05.03.2014
Сообщений: 96
30.03.2014, 23:15  [ТС] 5
Тот же код,каоторый вы написали в той теме.... я сначала ваш код попробовал,потом только тему создал!!!
0
Chernobyl
217 / 217 / 69
Регистрация: 30.09.2012
Сообщений: 545
30.03.2014, 23:28 6
GaG, Попробую себя в телепатии.
Если с тем кодом, при нажатии на крестик,выскакивает бокс, но независимо от того, нажато ли бы да или нет,прога все равно не закрывается,а работает дальше,то замените в том коде
event->accept(); на
QCoreApplication::quit();

Это должно закрыть прогу
0
GaG
0 / 0 / 0
Регистрация: 05.03.2014
Сообщений: 96
30.03.2014, 23:32  [ТС] 7
Дело в том что messagebox при закрытии не выскакивает !!!
0
Chernobyl
217 / 217 / 69
Регистрация: 30.09.2012
Сообщений: 545
30.03.2014, 23:37 8
GaG, ну тогда без кода, я точно уже ничем не помогу.
0
GaG
0 / 0 / 0
Регистрация: 05.03.2014
Сообщений: 96
30.03.2014, 23:39  [ТС] 9
Вам весь код написать?
0
Chernobyl
217 / 217 / 69
Регистрация: 30.09.2012
Сообщений: 545
30.03.2014, 23:41 10
GaG, Да,все что есть,про-файл,хедер с инклудами и все остальное
0
GaG
0 / 0 / 0
Регистрация: 05.03.2014
Сообщений: 96
30.03.2014, 23:48  [ТС] 11
C++ (Qt)
1
2
3
4
5
6
7
8
9
10
11
12
QT+=widgets
QT+=core
QT += multimedia
SOURCES += \
    mijankyal.cpp \
    main.cpp
 
HEADERS += \
    mijankyal.h
 
RESOURCES += \
    res.qrc
вот .pro файл.

C++ (Qt)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
#ifndef MIJANKYAL_H
#define MIJANKYAL_H
#include <QtGui>
#include <QMainWindow>
#include <QApplication>
#include <QMenu>
#include <QMenuBar>
#include <QGridLayout>
#include <QLabel>
#include <QToolBar>
#include <QComboBox>
#include <QLineEdit>
#include <QTextEdit>
#include <QSpinBox>
#include <QAction>
#include <QToolBar>
#include <QObject>
#include <QList>
#include <QtMultimedia>
#include <QSound>
#include <QPalette>
#include <QMessageBox>
#include <QCloseEvent>
#include <QPushButton>
class mijankyal:public QMainWindow
{
Q_OBJECT
    void closeEvent(QCloseEvent *event);
public:
    mijankyal();
 
    QMainWindow *window;
    QWidget *widget;
    QWidget *label1;
    QLabel *label2;
    QLabel *label3;
    QLineEdit *lineedit1;
    QLineEdit *lineedit2;
    QTextEdit *textedit1;
    QTextEdit *textedit2;
    QTextEdit *textedit3;
    QTextEdit *textedit4;
    QComboBox *combobox1;
    QComboBox *combobox2;
    QSpinBox *spinbox;
    QGridLayout *layout;
    QMenu *deleteobject;
    QAction *deletelabel;
    QAction *deletetextedit;
    QAction *deletelineedit;
    QAction *deletecombobox;
    QAction *deletespinbox;
    QToolBar *toolbar;
    QList <QWidget*> list;
    QPixmap *aboutWindowPix;
    QLabel *aboutWindowPixLabel;
    QPalette *palette;
    QMessageBox* message;
    QPushButton *quitButton;
public slots:
    void deletelabelfoo();
    void deletetexteditfoo();
    void deletelineeditfoo();
    void deletecomboboxfoo();
    void deletespinboxfoo();
 
 
};
 
#endif // MIJANKYAL_H
вот .h файл.

C++ (Qt)
1
2
3
4
5
6
7
8
#include "mijankyal.h"
 
int main(int argc,char **argv)
{
    QApplication app(argc,argv);
    mijankyal ob;
    return app.exec();
}
вот main.cpp файл.

C++ (Qt)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
#include "mijankyal.h"
 
mijankyal::mijankyal()
{
 
    window=new QMainWindow;
    widget=new QWidget;
    window->setCentralWidget(widget);
    quitButton = new QPushButton("&Quit");
    label1=new QLabel("Large Text");
    label2=new QLabel("Extra Large Text");
    label3=new QLabel("Quite Large Text");
    lineedit1=new QLineEdit("LineEdit1");
    lineedit2=new QLineEdit("LineEdit2");
    textedit1=new QTextEdit("ФёХ¶ХЇХҐЦЂ Ф»ХЅХєХ«ЦЂХµХЎХ¶ Х‹Ф±Х† Х«Х¶Х± ХёЦ‚ ФіХёХјХ«Х¶ 9 ХЇХ¤Х¶ХҐЦ„???");
    textedit2=new QTextEdit("9-Х«ЦЃ ХЎХѕХҐХ¬ Х№ХҐХґ ХёЦ‚Х¦ХёЦ‚Хґ");
    textedit3=new QTextEdit("Ф±Х*ЦЂ ХҐХЅЦ„ХЎХ¶ ХїХЎХ¶Х»ХѕХҐХ¬ ХҐХґ");
    textedit4=new QTextEdit("ХЂХЎХґ Х§Х¬ ХЎХјХЎХ»ХЎХ¤ЦЂХЎХ¶Ц„Х¶ ХЎЦЂХҐХ¬ ХҐХґ!!!");
    combobox1=new QComboBox;
    combobox2=new QComboBox;
    spinbox=new QSpinBox;
    layout=new QGridLayout;
 
        QFont font = label1->font();
 
        font.setPointSize(20);
        label1->setFont(font);
 
        font.setPointSize(30);
        label2->setFont(font);
 
        font.setPointSize(40);
        label3->setFont(font);
 
    
    list.append(textedit1);
    list.append(combobox2);
    list.append(label3);
    list.append(lineedit2);
    list.append(textedit2);
    list.append(label1);
    list.append(textedit4);
    list.append(lineedit1);
    list.append(label2);
    list.append(combobox1);
    list.append(textedit3);
    list.append(spinbox);
 
   
 
       palette = new QPalette();
 
       palette->setColor(QPalette::Text,Qt::red);
       lineedit1->setPalette(*palette);
       palette->setColor(QPalette::Text,Qt::blue);
       textedit1->setPalette(*palette);
       palette->setColor(QPalette::Text,Qt::red);
       textedit2->setPalette(*palette);
       palette->setColor(QPalette::Text,Qt::cyan);
       textedit3->setPalette(*palette);
       palette->setColor(QPalette::Text,Qt::green);
       lineedit2->setPalette(*palette);
 
  
 
   label1->setStyleSheet("QLabel { background-color : blue; color : black; }");
   label2->setStyleSheet("QLabel { background-color : black; color : white; }");
   label3->setStyleSheet("QLabel { background-color : yellow; color : red; }");
 
    layout->addWidget(quitButton,2,3);
    layout->addWidget(label1,0,0);
    layout->addWidget(textedit2,1,0);
    layout->addWidget(label2,0,1);
    layout->addWidget(spinbox,1,1);
    layout->addWidget(combobox1,0,2);
    layout->addWidget(textedit4,2,0);
    layout->addWidget(lineedit1,2,1);
    layout->addWidget(textedit3,1,2);
    layout->addWidget(lineedit2,2,2);
    layout->addWidget(label3,1,3);
    layout->addWidget(combobox2,3,1);
    layout->addWidget(textedit1,0,3);
    widget->setLayout(layout);
 
    QMainWindow::menuBar();
    QMenuBar *menubar=menuBar();
 
    deleteobject=menubar->addMenu("Delete Object");
    window->resize(1290,700);
    window->setMenuBar(menubar);
 
    deletelabel=new QAction(QIcon(":new/prefix1/label_w_rope02.png"),tr("&Delete Label"), this);
    deleteobject->addAction(deletelabel);
    deletetextedit=new QAction(QIcon(":new/prefix1/text-edit-5.png"),tr("&Delete Text Edit"),this);
    deleteobject->addAction(deletetextedit);
    deletelineedit=new QAction(QIcon(":new/prefix1/browse_dialog.png"),tr("&Delete Line Edit"),this);
    deleteobject->addAction(deletelineedit);
    deletecombobox=new QAction(QIcon(":new/prefix1/combobox.png"),tr("&Delete Combo Box"),this);
    deleteobject->addAction(deletecombobox);
    deletespinbox=new QAction(QIcon(":new/prefix1/Spin_Box.png"),tr("&Delete Spin Box"),this);
    deleteobject->addAction(deletespinbox);
 
    toolbar=new QToolBar(tr("&Tool Bar"),this);
    window->addToolBar(Qt::TopToolBarArea, toolbar);
 
    deletelabel->setShortcut(QKeySequence("Ctrl+L"));
    deletetextedit->setShortcut(QKeySequence("Ctrl+T"));
    deletelineedit->setShortcut(QKeySequence("Ctrl+E"));
    deletecombobox->setShortcut(QKeySequence("Ctrl+C"));
    deletespinbox->setShortcut(QKeySequence("Ctrl+S"));
 
    toolbar->addAction(deletelabel);
    toolbar->addAction(deletetextedit);
    toolbar->addAction(deletelineedit);
    toolbar->addAction(deletecombobox);
    toolbar->addAction(deletespinbox);
 
    connect(deletelabel,SIGNAL(triggered()),this,SLOT(deletelabelfoo()));
    connect(deletetextedit,SIGNAL(triggered()),this,SLOT(deletetexteditfoo()));
    connect(deletelineedit,SIGNAL(triggered()),this,SLOT(deletelineeditfoo()));
    connect(deletespinbox,SIGNAL(triggered()),this,SLOT(deletespinboxfoo()));
    connect(deletecombobox,SIGNAL(triggered()),this,SLOT(deletecomboboxfoo()));
    connect(quitButton, SIGNAL(clicked()), qApp, SLOT(quit()));
 
      QSound::play("D:\\credits.wav");
      QPixmap pix;
      pix.load(":new/prefix1/xuumb.jpg");
      QPalette pal;
      pal.setBrush(window->backgroundRole(), QBrush(pix));
      window->setPalette(pal);
      window->setAutoFillBackground(true);
   lineedit1->setEchoMode(QLineEdit::Password);
 
 message =new QMessageBox("ФїХЎЦЂЦ‡ХёЦЂ Х°ХЎХІХёЦЂХ¤ХЎХЈЦЂХёЦ‚Х©ХµХёЦ‚Х¶",
                    "<b>Х€Х’Х‡Ф±ФґХђХ€Х’Ф№Х…Х€Х’Х†!!!</b>  ХЌХҐХІХґХҐХ¬ХёХѕ <b>YES</b> ХЇХёХіХЎХЇХЁ Х¤ХёЦ‚Ц„ <i>ХЂФ±Х„Ф±ХЃФ±Х…Х†ХЋХ€Х’Х„</i> ХҐЦ„ ХЈХ¶ХЎХ°ХЎХїХҐХ¬  <u>Х„Ф±Х”ХЌФ»Х„Ф±Фј</u> !!!ФµХ©ХҐ ХёХ№,Х*Х¶Х¤ЦЂХёЦ‚Хґ ХҐХґ ХЅХҐХІХґХҐЦ„ <b>NO</b> ХЇХёХіХЎХЇХЁ!!!",
                    QMessageBox::Information,
                    QMessageBox::Yes,
                    QMessageBox::No,
                    QMessageBox::Cancel | QMessageBox::Escape);
int n = message->exec();
delete message;
if (n == QMessageBox::No)
{
 window->deleteLater();
}
 
window->show();
 
}
 
 
 
void mijankyal::deletelabelfoo()
{
 
for(int i=0;i<list.size();i++)
{
   if (list.at(i)->metaObject()->className()==QLabel::staticMetaObject.className())
{list.takeAt(i)->deleteLater();i--; }}}
 
void mijankyal::deletetexteditfoo()
{
 
for(int i=0;i<list.size();i++)
{
   if (list.at(i)->metaObject()->className()==QTextEdit::staticMetaObject.className())
  {list.takeAt(i)->deleteLater();i--; }}}
 
void mijankyal::deletelineeditfoo()
{
 
for(int i=0;i<list.size();i++)
{
   if (list.at(i)->metaObject()->className()==QLineEdit::staticMetaObject.className())
   {list.takeAt(i)->deleteLater();i--; }}}
 
void mijankyal::deletespinboxfoo()
{
 
for(int i=0;i<list.size();i++)
{
   if (list.at(i)->metaObject()->className()==QSpinBox::staticMetaObject.className())
   {list.takeAt(i)->deleteLater();i--; }}}
 
void mijankyal::deletecomboboxfoo()
{
 
for(int i=0;i<list.size();i++)
{
   if (list.at(i)->metaObject()->className()==QComboBox::staticMetaObject.className())
   {list.takeAt(i)->deleteLater();i--; }}}
 
void mijankyal::closeEvent(QCloseEvent *event)
{
    event->ignore();
    if (QMessageBox::Yes == QMessageBox::question(this, "ФґХёЦ‚Ц„ Х°ХЎХґХёХ¦ХѕХЎХ® ХҐЦ„,ХёЦЂ ХёЦ‚Х¦ХёЦ‚Хґ ХҐЦ„ Х¤ХёЦ‚ЦЂХЅ ХЈХЎХ¬?",
                          "Х€Х¶ЦЃ?ХЎХµХЅЦ„ХЎХ¶ Х·ХёЦ‚Хї ХҐЦ„ ХёЦ‚Х¦ХёЦ‚Хґ Х¤ХёЦ‚ЦЂХЅ ХЈХЎХ¬?",
                          QMessageBox::Yes|QMessageBox::No))
    {
    event->accept();
    }
 
}
а вот и .cpp файл
0
Chernobyl
217 / 217 / 69
Регистрация: 30.09.2012
Сообщений: 545
31.03.2014, 00:32 12
GaG, попробуйте объявить как protected.
C++ (Qt)
1
2
3
4
5
6
7
8
9
10
class MainWindow : public QMainWindow {
 
    Q_OBJECT;
 
public:
    MainWindow();
 
protected:
     void closeEvent(QCloseEvent *event);
}
0
GaG
0 / 0 / 0
Регистрация: 05.03.2014
Сообщений: 96
31.03.2014, 00:35  [ТС] 13
то же самое...нету messagebox а !!!
0
alexey_rage
591 / 391 / 79
Регистрация: 23.10.2013
Сообщений: 1,143
31.03.2014, 11:01 14
У вас closeEvent определен для класса mijankyal.
В main.cpp создается экземпляр этого класса, но само окно не открывается.
Соответственно, если окно не открывалось, то closeEvent никогда не сработает.
Вместо этого вы создаете внутри класса QMainWindow *window; и QWidget *widget;
И это вообще какой-то бред!
Нафига делать mijankyal наследником от QMainWindow, а потом внутри класса создавать еще один QMainWindow?
Разберитесь в своем стиле программирования!
1
GaG
0 / 0 / 0
Регистрация: 05.03.2014
Сообщений: 96
31.03.2014, 21:52  [ТС] 15
Спасибо!!!Я нашел ошыбку!!!
0
31.03.2014, 21:52
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
31.03.2014, 21:52

Уничтожение окна после закрытия
Form1 и Form2 наследники QDialog int openForm(const QString &amp;name) { ...

Сохранение данных после закрытия окна
]У меня есть программа в которой есть график, слайдер, кнопка и спинбоксы......

Создание виджета, границы, кнопки закрытия
Создал виждет. со своей формой. в отдельном проекте. виджет должен просто...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
15
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2018, vBulletin Solutions, Inc.
Рейтинг@Mail.ru