2017-01-21 12 views
0

Я пишу свой собственный виджет рабочего стола как практику. Мне нужно, чтобы он всегда оставался на рабочем столе и отключил минимизацию.Qt Quick Window Minimize Event

Окно Qt Quick ApplicationWindow. Я не могу узнать, как поймать события, когда он сведен к минимуму. Например, когда я нажимаю кнопку «Свернуть все окна», я вижу только рабочий стол, но я хочу, чтобы мой виджет оставался неограниченным.

Я пытался использовать сигналы как в QML, так и в C++, но в этом не получилось.

Может ли кто-нибудь помочь?

+1

Вам нужно разместить код, как минимум, и полный пример. Для чего это? То, что вы хотите, выполнимо наверняка. – AlexanderVX

ответ

1

Редактировать # 1: У меня есть uploaded код для GitHub.

Вы можете установить фильтр событий для обработки требуемого события. В этом случае необходимо обработать событие QEvent::WindowStateChange.

Установите фильтр событий на свой основной объект. В следующем примере используется QQmlApplicationEngine, но вместо этого вы можете использовать QQuickView.

Идея состоит в том, чтобы отправить сигнал с C++ в ваше приложение QML и снова показать окно. То есть путем вызова метода show().

main.cpp

#include <QApplication> 
#include <QQmlApplicationEngine> 
#include "myeventfilter.h" 

int main(int argc, char *argv[]) 
{ 
    QApplication app(argc, argv); 

    MyEventFilter filter; 

    QQmlApplicationEngine engine; 
    app.installEventFilter(&filter); 
    engine.load(QUrl(QStringLiteral("qrc:/main.qml"))); 

    QObject::connect(&filter, 
        SIGNAL(windowStateChange()), 
        engine.rootObjects().takeFirst(), 
        SLOT(windowStateChange())); 

    return app.exec(); 
} 

main.qml

import QtQuick 2.1 
import QtQuick.Window 2.0 
import QtQuick.Controls 2.0 

ApplicationWindow { 
    visible: true 
    width: 640 
    height: 480 
    title: qsTr("Hello World") 

    function windowStateChange() 
    { 
     console.log("qml slot - windowStateChange"); 
     show(); 
    } 
} 

myeventfilter.h

#ifndef MYEVENTFILTER_H 
#define MYEVENTFILTER_H 

#include <QObject> 

class MyEventFilter : public QObject 
{ 
    Q_OBJECT 

public: 
    explicit MyEventFilter(QObject *parent = 0); 

protected: 
    bool eventFilter(QObject *obj, QEvent *event); 

signals: 
    void windowStateChange(); 
}; 

#endif // MYEVENTFILTER_H 

myeventfilter.cpp

#include "myeventfilter.h" 
#include <QEvent> 
#include <QDebug> 

MyEventFilter::MyEventFilter(QObject *parent) : 
    QObject(parent) 
{ 
} 

bool MyEventFilter::eventFilter(QObject *obj, QEvent *event) 
{ 
    if (event->type() == QEvent::Close) 
    { 
     qDebug() << Q_FUNC_INFO << " QEvent::Close "; 
     return false; 
    } else if (event->type() == QEvent::WindowStateChange) 
    { 
     qDebug() << Q_FUNC_INFO << " QEvent::WindowStateChange "; 
     emit windowStateChange(); 
     return true; 
    } else 
    { 
     return QObject::eventFilter(obj, event); 
    } 
} 
+1

Спасибо! Это работа для меня. :) – gkhanacer

0

Вы можете использовать Безрамное окно, которое будет удалять кнопки свернуть, развернуть и закрыть. Пример: here