c++ - 获取光标下的控制权

标签 c++ qml

我正在尝试在光标下进行控制。在我的示例中,我只能获得红色矩形,但我还需要获得其他矩形。

import QtQuick 2.4
import QtQuick.Controls 1.3
import QtQuick.Window 2.2
import QtQuick.Dialogs 1.2

ApplicationWindow {
    id: mainWindow
    title: qsTr("Hello World")
    width: 640
    height: 480
    Item {
        id: parentPanel
        anchors.fill: parent

        MouseArea {
            anchors.fill: parent
            hoverEnabled: true
            onMouseXChanged: moveMouse()
            onMouseYChanged: moveMouse()
            function moveMouse()
            {
                currentControl.text = parentPanel.childAt(mouseX, mouseY).color ? parentPanel.childAt(mouseX, mouseY).color : "not colored"
            }
        }

        Rectangle {
            id: redRect
               anchors {
                fill: parent
                leftMargin: 50
                bottomMargin: 50
            }
            color: "red"
            Rectangle {
                id: yellowRect
                anchors {
                    fill: parent
                    leftMargin: 50
                    bottomMargin: 50
                }
                color: "yellow"
                Rectangle {
                    id: greenRect
                    anchors {
                        fill: parent
                        leftMargin: 50
                        bottomMargin: 50
                    }
                    color: "green"
                }
            }
        }

        Text {
            id: currentControl
            anchors.left: parent.left
            anchors.bottom: parent.bottom
        }
    }
}

我有运行程序的屏幕截图。黄色里面是绿色矩形,红色里面是黄色。当鼠标光标悬停在控件上时,我需要获取控件引用。

Success get red color

最佳答案

我不熟悉 QML,所以我不知道它的确切语法,但你似乎想要循环直到找到最内层的控件并获得它的颜色。这是一些 C++ 风格的伪代码

auto control = parentPanel.childAt(mouseX, mouseY);
while (control)
{
    currentControl.text = control.color ? control.color : "not colored";
    control = control.childAt(mouseX, mouseY);
}

当然,这段代码假定传递的 X 和 Y 是绝对的,而不是相对的。如果它们是相对的,则需要在每个连续循环中将它们递减 control 的位置。

关于c++ - 获取光标下的控制权,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33881791/

相关文章:

c++ - 构建支持 OpenCL 的 OpenCV

c++ - 专门用于自定义容器的 std::swap 算法

c++ - 有没有一种工具可以让我将一行代码插入到 C++ 源文件中的所有函数和方法中?

qt - 我怎样才能做一个实体的中继器?

qml - 如何在黑莓10级联qml中的listview上实现按钮单击事件?

qml - 绑定(bind)两个属性值

c++ - 列表初始化(使用花括号)有什么好处?

c++ - inFile 应该放在 -o 标志之前还是之后?

qt - 如何根据属性向 DelegateModelGroup 添加元素

c++ - 从 QQuickWidget 上下文调用 QML 方法