2016-03-30 8 views
1

Ich stelle fest, dass QML's StatusBar-Typ nicht den SizeGrip wie QStatusBar enthält.QML-Statusleiste mit SizeGrip

Um eine Größenbeschränkung zu bekommen, musste ich stattdessen die QML in ein QMainWindow mit einer QStatusBar einbetten. Obwohl dies funktioniert, kompliziert es den Rest der App und es ist nicht wirklich das Design, nach dem ich bin.

Wäre es möglich, die QStatusBar direkt in QML durch Unterklassenbildung zu implementieren und wie würde QML den SizeGrip erkennen/verwenden können?

EDIT: ich versucht habe QQuickPaintedItem abzuleiten eine QStatusBar in QML zu versuchen und machen, aber bisher noch kein Glück gehabt. Im Renderaufruf wird ein Fehler ausgelöst: ASSERT-Fehler in QCoreApplication :: sendEvent: "Ereignisse können nicht an Objekte gesendet werden, die einem anderen Thread gehören. Aktueller Thread 399d3d8. Empfänger '' (vom Typ 'QStatusBar') wurde im Thread 8c9f00 erstellt." , Datei-Kernel \ qcoreapplication.cpp, Linie 553

.h

class WindowStatusBar : public QQuickPaintedItem 
{ 
    Q_OBJECT 
public: 
    explicit WindowStatusBar(QQuickItem *parent = 0); 
    virtual ~WindowStatusBar(); 

    void paint(QPainter *painter); 

protected: 
    QStatusBar *statusBar_; 
}; 

CPP

WindowStatusBar::WindowStatusBar(QQuickItem *parent) 
    : QQuickPaintedItem(parent) 
    , statusBar_(NULL) 
{ 
    setOpaquePainting(true); 
    setAcceptHoverEvents(true); 
    setAcceptedMouseButtons(Qt::AllButtons); 

    statusBar_ = new QStatusBar; 
} 

WindowStatusBar::~WindowStatusBar() 
{ 
    delete statusBar_; 
} 

void WindowStatusBar::paint(QPainter *painter) 
{ 
    statusBar_->render(painter, QPoint(), QRegion(), 
     QStatusBar::DrawWindowBackground | QStatusBar::DrawChildren); 
} 

Antwort

0

Ja, können Sie Ihre eigenen statusbar QML Art von StatusBar ableiten oder Sie den Standard verwenden können QML-Statusleiste mit einem contentItem, das Sie entworfen haben. Um den Größen-Grip zu implementieren, würden Sie einen MouseArea an den rechten Rand setzen - in onPositionChanged würden Sie ein Signal ausgeben, das vom Hauptfenster als Resize-Befehl interpretiert wird. Das Vermeiden von Rückkopplungsschleifen (weil die Größe des Hauptfensters die Position in der MouseArea ändern kann) wird dem Leser als Übung überlassen.

+0

Ich habe die Frage mit meinem aktuellen Versuch, eine QML QStatusBar zu erstellen, aktualisiert. Dies ist hauptsächlich der Pfad, auf den ich mich konzentriere, da ich festgestellt habe, dass die Größenanpassung des Fensters nicht annähernd so glatt ist, wenn statt eines QSizeGrip in einem Fenster eine MouseArea verwendet wird. –