Qt Signal при добавлении нового окна в приложении

123
07 августа 2019, 15:10

Существует ли возможность в Qt посредством SIGNAL отследить, если было добавлено новое QWindow окно? Необходимо, чтобы определённый объект следил за появлением данных окон.

Answer 1

Готового сигнала нет. Но можно обрабатывать сообщения о создании виджетов. Для этого потребуется определить фильтр сообщений и подлючить его к объекту приложения QApplication.

Вот пример:

class WindowsMon: public QObject
{
   Q_OBJECT;
public:
   using QObject::QObject;
private:        
   bool eventFilter(QObject * target, QEvent * e) override;
public: signals:
    void windowCreated(QWindow * w);
};
bool WindowsMon::eventFilter(QObject * target, QEvent * e)
{
    if(e && QEvent::Create == e->type())
    {
        const auto window = qobject_cast<QWindow *>(target);
        if(window) // смогли пребразовать к QWindow
        {
            emit windowCreated(window);
        }
    }
    // на самом деле мы ничего не фильтруем, поэтому пробрасываем
    // сообщения дальше, тем более что висим на QApplication
    return QObject::eventFilter(target, e); 
}

Подключение:

auto winmon = new WindowsMon(QCoreApplication::instance());
QCoreApplication::instance()->installEventFilter(winmon);
READ ALSO
С чем связано ограничение на объявление friend функций в локальных классах?

С чем связано ограничение на объявление friend функций в локальных классах?

С чем связано ограничение на объявление friend функций в локальных классах?

98
Как сделать , чтобы после нажатия на крестик(закрыть приложение), выскакивал MessageBox?

Как сделать , чтобы после нажатия на крестик(закрыть приложение), выскакивал MessageBox?

Вот про логику, как сделать сам MessageBox , я знаюВпихиваю код в деструктор:

125
Нужно поменять тип линии в JFreeChart

Нужно поменять тип линии в JFreeChart

Здравствуйте появилась проблема с поиском в документации информации :( А именно то, что я не нашел как поменять тип линии, ее цвет и как добавить...

110