Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/qt/7.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在QtQuick中显示没有任何顶级窗口的弹出窗口_Qt_Qml_Qt5_Qtquick2_Popupwindow - Fatal编程技术网

在QtQuick中显示没有任何顶级窗口的弹出窗口

在QtQuick中显示没有任何顶级窗口的弹出窗口,qt,qml,qt5,qtquick2,popupwindow,Qt,Qml,Qt5,Qtquick2,Popupwindow,我想做一个游戏叠加显示我的自定义十字头发。我希望它一直存在,没有关闭政策 我在ApplicationWindow中使用了Popup项目,并将其不透明度设置为0,将弹出窗口的不透明度设置为1,但它没有显示任何内容。我还尝试在没有任何顶级窗口的情况下使用该弹出项目,但同样没有显示任何内容 问题是“是否可以在没有任何可见顶层窗口的情况下显示始终位于顶部的弹出窗口?” 如果没有弹出窗口,我们可以尝试使用QQuickItem的“z”属性。将十字线始终堆叠在其他项目的顶部。如果你想在屏幕上移动十字线,你可以

我想做一个游戏叠加显示我的自定义十字头发。我希望它一直存在,没有关闭政策

我在
ApplicationWindow
中使用了
Popup
项目,并将其不透明度设置为
0
,将弹出窗口的不透明度设置为
1
,但它没有显示任何内容。我还尝试在没有任何顶级窗口的情况下使用该弹出项目,但同样没有显示任何内容

问题是“是否可以在没有任何可见顶层窗口的情况下显示始终位于顶部的弹出窗口?”


如果没有弹出窗口,我们可以尝试使用QQuickItem的“z”属性。将十字线始终堆叠在其他项目的顶部。如果你想在屏幕上移动十字线,你可以使用它们的“x,y”属性

我试过一个简单的样品。将图像项用于滚动视图顶部的十字线。它按预期工作。我试过了。我们会看看是否有其他想法

此处的示例代码:

import QtQuick 2.9
import QtQuick.Window 2.2
import QtQuick.Controls 2.2

Window {
    visible: true
    width: 640
    height: 480

    // used here only to indicate image loading is going on
    BusyIndicator {
        id: busyindicatorId
        visible: backgroundImgId.status === Image.Loading ||
                 crossImgId.status === Image.Loading
        anchors.centerIn: parent
    }

    // background item
    ScrollView {
        anchors.fill: parent
        anchors.margins: 10
        clip: true
        visible: !busyindicatorId.visible
        Image {
            id: backgroundImgId
            source: "https://i.ibb.co/ZBNLvzb/andriod.jpg"
        }
    }

    // crosshair item
    Image {
        id:  crossImgId
        z: 1
        width: 100
        height: width
        visible: !busyindicatorId.visible
        source: "https://i.ibb.co/SJFTLwN/cross.png"
        anchors.centerIn: parent
    }
}
更新 该窗口的两个实例化窗口可用于十字线,并且必须设置一些窗口属性(透明、alwaysontop)以始终显示在顶部。让我们看看这个基本代码。样品

#包括
#包括
#包括
#包括
int main(int argc,char*argv[])
{
QCoreApplication::setAttribute(Qt::AA_enableHighdDiscaling);
QGUI应用程序应用程序(argc、argv);
qqmlaplicationengine;
engine.load(QUrl(QStringLiteral(“qrc:/main.qml”));
if(engine.rootObjects().isEmpty())
返回-1;
QScreen*screen=QGuiApplication::primaryScreen();
QQuickView视图;
view.setSource(QUrl(QStringLiteral(“qrc:/crosshair.qml”));
view.setX(屏幕->几何体().width()/2-view.width()/2);
view.setY(屏幕->几何体().height()/2-view.height()/2);
view.setColor(“透明”);
view.setFlags(Qt::SubWindow | Qt::FramelessWindowHint | Qt::WindowStaysOnTopHint);
view.show();
返回app.exec();
}

你能分享一下你的想法吗?@Ramkumar,有点像谢谢。但我希望它即使在我打开另一个应用程序时也能出现在屏幕的中央。(某种程度上是一种像在linux的KDE桌面环境中一样的保留功能。)但只是十字线,而不是整个窗口。
//////////////// main.qml ////////////////
import QtQuick 2.9
import QtQuick.Window 2.2
import QtQuick.Controls 2.2

Window {
    visible: true
    visibility: "FullScreen"
    objectName: "mainWindow"

    // used here only to indicate image loading is going on
    BusyIndicator {
        id: busyindicatorId
        visible: backgroundImgId.status === Image.Loading
        anchors.centerIn: parent
    }

    // background item
    ScrollView {
        anchors.fill: parent
        anchors.margins: 10
        clip: true
        visible: !busyindicatorId.visible
        Image {
            id: backgroundImgId
            source: "https://i.ibb.co/ZBNLvzb/andriod.jpg"
        }
    }
}

//////////////// crosshair.qml ////////////////
import QtQuick 2.9
import QtQuick.Controls 2.2

Item {
    width: 100
    height: 100
    // crosshair item
    Image {
        width: parent.width
        height: parent.height
        source: "https://i.ibb.co/SJFTLwN/cross.png"
    }
}