2016-03-30 1 views
1

Je remarque que le type StatusBar de QML n'inclut pas le SizeGrip comme le fait QStatusBar.QML StatusBar avec SizeGrip

Afin d'obtenir une prise de taille, j'ai dû à la place intégrer le QML dans un QMainWindow avec un QStatusBar. Bien que cela fonctionne, il complique le reste de l'application et ce n'est pas vraiment le design que je suis après.

Serait-il possible d'implémenter le QStatusBar directement dans QML en le sous-classant et comment QML pourrait-il reconnaître/utiliser le SizeGrip?

EDIT: Je ai essayé de tirer QQuickPaintedItem pour essayer de rendre une QStatusBar en QML, mais jusqu'à présent ne l'ai pas eu de chance. Une erreur est déclenchée dans l'appel render: Échec ASSERT dans QCoreApplication :: sendEvent: "Impossible d'envoyer des événements aux objets appartenant à un thread différent Le thread courant 399d3d8. Receiver '' (de type 'QStatusBar') a été créé dans le thread 8c9f00" , noyau fichier \ qcoreapplication.cpp, ligne 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); 
} 

Répondre

0

Oui, vous pouvez obtenir votre propre type statusbar QML de StatusBar ou vous pouvez utiliser la norme QML StatusBar avec un contentItem que vous avez conçu. Pour implémenter la poignée de taille, vous devez placer une MouseArea à la bordure droite - dans onPositionChanged, vous devez émettre un signal interprété par la mainwindow comme une commande de redimensionnement. Eviter les boucles de rétroaction (parce que le redimensionnement de la fenêtre principale peut changer la position dans MouseArea) est un exercice pour le lecteur.

+0

J'ai mis à jour la question avec ma tentative actuelle de création d'un QStatusBar QML. C'est principalement le chemin sur lequel je me concentre parce que je trouvais que le redimensionnement de la fenêtre n'est pas aussi lisse en utilisant un MouseArea au lieu d'un QSizeGrip dans une fenêtre. –