2016-03-30 3 views
1

QStatusBarのようにQMLのStatusBarタイプにSizeGripが含まれていないことに気付きました。QML StatusBar with SizeGrip

サイズグリップを得るために、代わりにQStatusBarを使用してQMainWindowにQMLを埋め込む必要がありました。これは動作しますが、それはアプリケーションの残りの部分を複雑にし、実際に私が後にしているデザインではありません。

QStatusBarをサブクラス化することでQStatusBarを直接実装することはできますか?QMLはどのようにしてSizeGripを認識/使用できますか?

編集:私は試してみて、QMLでQStatusBarをレンダリングするQQuickPaintedItemを導出しようとしましたが、これまでの任意の運を持っていなかった 。 QCoreApplication :: sendEventのASSERTエラー: "別のスレッドが所有するオブジェクトにイベントを送信できません。現在のスレッド399d3d8。( 'QStatusBar'タイプの)受信者 'がスレッド8c9f00で作成されました。 、ファイルのカーネル\ qcoreapplication.cpp、ライン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); 
} 

答えて

0

はい、あなたはステータスバーから独自のステータスバーのQMLタイプを導出することもできますし、標準を使用することができますあなたが設計したcontentItemを持つQML StatusBar。サイズグリップを実装するには、MouseAreaを右側の境界に配置します。つまり、onPositionChangedでは、メインウィンドウによってサイズ変更コマンドとして解釈される信号が出力されます。メインウィンドウのサイズを変更するとMouseAreaの位置が変わる可能性があるため、フィードバックループを回避することは、読者の練習として残されています。

+0

QML QStatusBarを作成する際の私の現在の試みで質問を更新しました。これは主に、ウィンドウのQSizeGripの代わりにMouseAreaを使用することで、ウィンドウのサイズ変更がほぼスムーズではないことがわかっていたため、私が注目していたパスです。 –