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) оставлено в качестве упражнения для читателя.