从项目中获取窗口

Posted

技术标签:

【中文标题】从项目中获取窗口【英文标题】:Get Window from Item 【发布时间】:2013-10-28 23:53:09 【问题描述】:

在 QML 中有没有办法获得任何视觉对象的*** Window?最好不要通过可视的parent 层次结构向上递归。

我正在尝试查找***窗口的几何形状,因此后代对象可以检测它们的边界是否已越过窗口。

【问题讨论】:

qt-project.org/doc/qt-5.1/qtquick/qquickitem.html#window @FrankOsterfeld 谢谢,但我对 QML 方面感到好奇。 【参考方案1】:

所有Items 都有Window 属性。哪些取决于 Qt 版本。例如。 Window.width 是当前***窗口/视图宽度。

您可以通过myItem.Window 获得特定的ItemWindow

使用 Qt 5.7+,您甚至可以通过 Window.window 访问所有 Window 属性。

参见文档:http://doc.qt.io/qt-5/qml-qtquick-window-window.html#attached-properties

【讨论】:

这种方法应该比公认的答案更受欢迎,因为它无需额外的 C++ 代码就可以回答问题。要使用附加的Window.window 属性,请在QML 文件中导入窗口包:import QtQuick.Window 2.2 是的! import QtQuick.Window 2.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&lt;ItemWithWindow&gt;( uri, 1, 0, "ItemWithWindow" );注册)

【讨论】:

以上是关于从项目中获取窗口的主要内容,如果未能解决你的问题,请参考以下文章

从 JComboBox 弹出窗口中获取当前突出显示的项目(未选中的项目)

如何从 C++/MFC 程序中获取控制台窗口? [复制]

创建 Visual Studio 扩展时如何获取源代码管理历史记录窗口中的选定项目?

如何从亚马逊缩放窗口中获取完整的分辨率图像

如何从 JBoss Drools Eclipse 插件获取审计窗口的日志文件?

如何从打开的窗口列表中检索 QWidget