Russian Qt Forum
Октябрь 02, 2024, 17:26 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

Войти
 
  Начало   Форум  WIKI (Вики)FAQ Помощь Поиск Войти Регистрация  

Страниц: [1]   Вниз
  Печать  
Автор Тема: [Решено]Завершение приложение по клику на одном из виджетов!  (Прочитано 2188 раз)
kuzulis
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 2812


Просмотр профиля
« : Август 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();
}

« Последнее редактирование: Август 02, 2010, 15:28 от kuzulis » Записан

ArchLinux x86_64 / Win10 64 bit
kolob
Частый гость
***
Offline Offline

Сообщений: 296



Просмотр профиля
« Ответ #1 : Февраль 08, 2011, 18:00 »

Не совсем уверен в тему это или нет, но у меня было что то подобное.
Наследовал класс от базового класса интерфейса.

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

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

Qt 5.11.0, Win, MinGW
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


Страница сгенерирована за 0.137 секунд. Запросов: 23.