我注意到 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);
}