QML StatusBar с SizeGrip

Я заметил, что тип StatusBar в QML не включает SizeGrip, как QStatusBar.

Чтобы получить контроль над размером, мне пришлось вместо этого встроить QML в QMainWindow с QStatusBar. Хотя это работает, оно усложняет остальную часть приложения, и это не совсем тот дизайн, который мне нужен.

Можно ли реализовать QStatusBar непосредственно в QML, создав его подклассы, и как QML сможет распознавать / использовать SizeGrip?

РЕДАКТИРОВАТЬ: Я пытался получить QQuickPaintedItem, чтобы попытаться отрендерить QStatusBar в QML, но до сих пор не повезло. В вызове рендеринга возникает ошибка: сбой ASSERT в QCoreApplication::sendEvent: "Невозможно отправить события объектам, принадлежащим другому потоку. Текущий поток 399d3d8. Получатель" (типа "QStatusBar") создан в потоке 8c9f00", файл kernel\qcoreapplication.cpp, строка 553

.час

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 ответ

Да, вы можете получить свой собственный тип QML строки состояния из StatusBar или использовать стандартную панель состояния QML с созданным вами элементом contentItem. Чтобы реализовать ручку размера, вы должны поместить MouseArea на правой границе - в onPositionChanged вы будете испускать сигнал, который интерпретируется главным окном как команда изменения размера. Избегание петель обратной связи (поскольку изменение размера главного окна может изменить положение в MouseArea) оставлено в качестве упражнения для читателя.

Другие вопросы по тегам