Russian Qt Forum

Qt => Пользовательский интерфейс (GUI) => Тема начата: kuzulis от Август 02, 2010, 15:18



Название: [Решено]Завершение приложение по клику на одном из виджетов!
Отправлено: kuzulis от Август 02, 2010, 15:18
Доброго времени суток.

Давно не создавал ГУЙ в Qt4 и споткнулся на простой вещи.

Имею приложение, которое представляет собой кнопку, по клику на которой создается и отображается еще один виджет.
т.е. "главным" виджетом приложения у меня является кнопка, "второстепенным" - виджет.

Так вот, если после клика на кнопке виджет находится в состоянии "show" - то, если я кликаю на "Х" кнопки, то приложение не завершается,
т.е. сама кнопка пропадает - но виджет остается в состоянии "show" (т.е. видимый на экране).
Если же я закрываю виджет или вообще его не создаю (не кликаю по ннопке)  - то при клике на "X" кнопки приложение завершается.

Вопрос: что нужно добавить в проект чтобы при "активном/видимом" виджете при клике на "X" кнопки приложение завершалось?  ::)

Сорцы:

widget.h
Код:
#ifndef WIDGET_H
#define WIDGET_H

#include <QtGui/QPushButton>

class Widget : public QPushButton
{
    Q_OBJECT

public:
    Widget(QWidget *parent = 0);
    ~Widget();

private slots:
    void slotProcClick();

private:
    QWidget *w;
};

#endif // WIDGET_H

widget.cpp
Код:
#include "widget.h"

Widget::Widget(QWidget *parent)
    : QPushButton(parent), w(0)
{
    setText("Click me");
    connect(this, SIGNAL(clicked()), this, SLOT(slotProcClick()));
}

Widget::~Widget()
{
    if (w)
        delete w;
    w = 0;
}

void Widget::slotProcClick()
{
    if (!w)
        w = new QWidget();
    w->show();
}

Проектик прилагаю.

---

Упс.. решение во вложении, нужно было добавить что то типа:
Код:
void Widget::closeEvent(QCloseEvent *event)
{
    Q_UNUSED(event);
    if (w)
        w->hide();
}



Название: Re: [Решено]Завершение приложение по клику на одном из виджетов!
Отправлено: kolob от Февраль 08, 2011, 18:00
Не совсем уверен в тему это или нет, но у меня было что то подобное.
Наследовал класс от базового класса интерфейса.

Код:
MainForm::MainForm(QWidget *parent):MainFormBase(parent)

и при нажатии на крестик в обработчике событий писал
Код:
void MainForm::eventClose(QCloseEvent *event)
{
      //бла-бла-бла
      this->close();
}
Но метод close() не выполнялся.