Russian Qt Forum

Qt => Вопросы новичков => Тема начата: nvek от Февраль 22, 2017, 06:49



Название: toolbar и widget
Отправлено: nvek от Февраль 22, 2017, 06:49
Надо чтобы actionы в тулбаре становились активными и неактивными если в виджете есть чтолибо/нет ничего
какой сигнал в виджете показывает, заполнен чем либо виджет или нет?


Название: Re: toolbar и widget
Отправлено: __Heaven__ от Февраль 22, 2017, 07:31
Наверное, можно реализовать:
Цитировать
[virtual protected] void QObject::childEvent(QChildEvent *event)
This event handler can be reimplemented in a subclass to receive child events. The event is passed in the event parameter.
QEvent::ChildAdded and QEvent::ChildRemoved events are sent to objects when children are added or removed.


Название: Re: toolbar и widget
Отправлено: nvek от Февраль 22, 2017, 08:08
Охото бы просто соединить этот слот с сигналом
connect(treeWidget, &QTreeWidget::childEvent, disconnectAct, &QAction::setEnabled);
что то типо такого, конечно это не будет работать
в примере qt там виджет textedit и у него сигнал copyavalible(или как то так)
в коннекте сразу же соединяет со скоим актионом


Название: Re: toolbar и widget
Отправлено: nvek от Февраль 22, 2017, 08:15
Неужели нету сигнала который бы определял, если виджет не пустой????


Название: Re: toolbar и widget
Отправлено: gil9red от Февраль 22, 2017, 08:58
Неужели нету сигнала который бы определял, если виджет не пустой????

Зачем? Виджет сам по себе не контейнер, а самостоятельная единица интерфейса


Название: Re: toolbar и widget
Отправлено: __Heaven__ от Февраль 22, 2017, 09:22
Виджеты - это не только сигналы и слоты, но и три, четыре килограмма различных эвентов.
А что мешает переопределить метод и посылать свои сигналы?


Название: Re: toolbar и widget
Отправлено: Racheengel от Февраль 22, 2017, 12:16
Неужели нету сигнала который бы определял, если виджет не пустой????

а смысл???


Название: Re: toolbar и widget
Отправлено: Igors от Февраль 22, 2017, 12:53
Виджет сам по себе не контейнер,
Может иметь чайлдво - стало быть контейнер

Неужели нету сигнала который бы определял, если виджет не пустой????
А чем не устраивает QEvent::ChildRemoved (ChildAdded)? Ну и в слоте проверить на пустоту. Или цель вообще ничего не делать, а лишь вязать слот-сигнал веники?  :)


Название: Re: toolbar и widget
Отправлено: gil9red от Февраль 22, 2017, 13:02
Виджет сам по себе не контейнер,
Может иметь чайлдво - стало быть контейнер

И не поспоришь с таким утверждением ;D


Название: Re: toolbar и widget
Отправлено: __Heaven__ от Февраль 22, 2017, 13:18
Код:
И не поспоришь 
Ну да :)


Название: Re: toolbar и widget
Отправлено: gil9red от Февраль 22, 2017, 13:59
Просто, виджет -- как "кусок бумаги". Можешь на нем нарисовать что-то, можешь сложить в определенную фигуру, можешь из него "сделать пакет" и положить в него что-то, т.е. свойства контейнера есть, ибо он базовый класс всего, но конкретным контейнером не является (делается это неявно -- через парент у детей или через компоновщики (у контейнеров ведь всегда есть определенный набор свойств и методов хотя бы: получение количества элементов, добавление и удаление элементов)). Я это так вижу и прошу не разводить срач, если оно не совпадает с вашим (или создавайте в говорилке тему).

В кнопки тоже можно что-то положить, но в дизайнере они не попадают под группу "Контейнеры", __Heaven__ :)


Название: Re: toolbar и widget
Отправлено: panAlexey от Февраль 22, 2017, 15:14
какой сигнал в виджете показывает, заполнен чем либо виджет или нет?
Исключительно вашего собственного творения сигнал.
Курим Глава 17. Основы архитектуры документ/представление (http://www.realcoding.net/articles/glava-17-osnovy-arkhitektury-dokumentpredstavlenie.html) до посинения.


Название: Re: toolbar и widget
Отправлено: Igors от Февраль 23, 2017, 15:32
..но конкретным контейнером не является
Может лучше сказать - не является хранилищем как vector и др

В кнопки тоже можно что-то положить..
Кстати - а как же принцип подстановки Лисков?


Название: Re: toolbar и widget
Отправлено: gil9red от Февраль 23, 2017, 17:53
В кнопки тоже можно что-то положить..
Кстати - а как же принцип подстановки Лисков?

Принцип подстановки Барбары Лисков (https://habrahabr.ru/post/83269/)
Цитировать
Итак, принцип подстановки Барбары Лисков. Он же Liskov Substitution Principle. Он же LSP. Простыми словами принцип звучит так:
Наследующий класс должен дополнять, а не замещать поведение базового класса.


Название: Re: toolbar и widget
Отправлено: Igors от Февраль 23, 2017, 18:29
Принцип подстановки Барбары Лисков (https://habrahabr.ru/post/83269/)
Цитировать
Итак, принцип подстановки Барбары Лисков. Он же Liskov Substitution Principle. Он же LSP. Простыми словами принцип звучит так:
Наследующий класс должен дополнять, а не замещать поведение базового класса.
Как же кнопка дополняет ф-ционал базового виджета-контейнера? Засунуть кого-то в кнопку - ничего доброго не выйдет. Выходит что работает для базового не работает для потомка - а по Лисков должно

Впрочем что это за принципы если их не нарушать?  :)