带有SizeGrip的QML StatusBar

时间:2016-03-30 05:52:47

标签: qt qml statusbar qstatusbar

我注意到QML的StatusBar类型不像QStatusBar那样包含SizeGrip。

为了获得大小的抓地力,我不得不将QML嵌入到带有QStatusBar的QMainWindow中。虽然这有效,但它使应用程序的其余部分变得复杂,并不是我所追求的设计。

是否有可能通过对QML进行子类化直接在QML中实现QStatusBar以及QML如何识别/使用SizeGrip?

修改 我试图派生QQuickPaintedItem尝试在QML中渲染QStatusBar,但到目前为止还没有运气。在渲染调用中触发错误:QCoreApplication :: sendEvent中的ASSERT失败:“无法将事件发送到不同线程拥有的对象。当前线程399d3d8。接收器''(类型'QStatusBar')是在线程8c9f00中创建的” ,文件kernel \ 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);
}

1 个答案:

答案 0 :(得分:0)

是的,您可以从StatusBar派生自己的状态栏QML类型,或者您可以将标准QML StatusBar与您设计的contentItem一起使用。要实现大小夹点,您可以将MouseArea置于右边界 - 在onPositionChanged中,您将发出一个由主窗口解释为resize命令的信号。避免反馈循环(因为调整主窗口的大小可能会改变MouseArea中的位置)留给读者练习。