2

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

为了获得尺寸控制,我不得不将 QML 嵌入到带有 QStatusBar 的 QMainWindow 中。虽然这可行,但它使应用程序的其余部分复杂化,这并不是我真正想要的设计。

是否可以通过子类化直接在 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);
}
4

1 回答 1

0

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

于 2016-03-30T09:01:05.753 回答