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