【发布时间】:2013-10-28 23:53:09
【问题描述】:
在 QML 中有没有办法获得任何视觉对象的顶级 Window?最好不要通过可视的parent 层次结构向上递归。
我正在尝试查找顶级窗口的几何形状,因此后代对象可以检测它们的边界是否已越过窗口。
【问题讨论】:
-
@FrankOsterfeld 谢谢,但我对 QML 方面感到好奇。
在 QML 中有没有办法获得任何视觉对象的顶级 Window?最好不要通过可视的parent 层次结构向上递归。
我正在尝试查找顶级窗口的几何形状,因此后代对象可以检测它们的边界是否已越过窗口。
【问题讨论】:
所有Items 都有Window 属性。哪些取决于 Qt 版本。例如。 Window.width 是当前顶级窗口/视图宽度。
您可以通过myItem.Window 获得特定的Item 的Window;
使用 Qt 5.7+,您甚至可以通过 Window.window 访问所有 Window 属性。
参见文档:http://doc.qt.io/qt-5/qml-qtquick-window-window.html#attached-properties
【讨论】:
Window.window 属性,请在QML 文件中导入窗口包:import QtQuick.Window 2.2。
import QtQuick.Window 2.2 必须存在,否则它不起作用,尽管没有运行时错误。
我想目前的答案是“不”。这看起来像是可以发送给 QML 团队的功能建议。
我最终将自己的 C++ 类导出到 QML。
ItemWithWindow.h:
#include <QQuickItem>
class ItemWithWindow : public QQuickItem
{
Q_OBJECT
public:
Q_PROPERTY( QQuickWindow* window READ window NOTIFY windowChanged )
signals:
void windowChanged();
};
(像往常一样使用qmlRegisterType<ItemWithWindow>( uri, 1, 0, "ItemWithWindow" );注册)
【讨论】: