标签: qt-quick

如何在QML中从显示中删除/删除屏幕/页面?

我有一个Loader使用我正在加载多个屏幕/页面.

我有大约10个QML屏幕/页面,我在鼠标事件中逐个加载到加载程序中.

在某些屏幕上,我需要使用QWidget::setMask()功能设置透明度,使屏幕/页面的某些部分变得透明,并在屏幕上打孔.

我使用CPP代码做设定屏蔽QWidget::setMask()rootObject,这是Loader屏幕.

QWidget::setMask 工作正常,但屏蔽区域显示以前加载的屏幕/页面.

所以我有一个问题,如在文档http://doc.qt.nokia.com/4.7-snapshot/qml-中提到的那样,Loader元素在加载新屏幕/页面之前是否正确地从显示中删除/删除了已加载的组件.loader.html.Loader

还有两个名为Component.onDestroyedand的函数Component.onDestruction

当我在Loader onDestruction事件中加载新的屏幕/页面时,被加载的屏幕被触发.

我想在加载器中加载新页面后,从显示中完全删除/销毁屏幕/页面.我还尝试设置以前加载的屏幕的可见性和不透明度,但我仍然可以在蒙版区域中看到以前加载的屏幕/页面.

如果我设置了加载器source = "",sourceComponent = undefined然后我也可以在Loader中看到之前加载的页面,它不会刷新屏幕.上一页被销毁,但未从显示中清除/删除.

应该是什么原因?

qt qml qt-quick

5
推荐指数
1
解决办法
1781
查看次数

如何在运行时以编程方式更改主窗口的几何形状?

我有Qt Creator 2.6.1.我从项目模板创建了简单的Qt Qucik 2.0项目并更改了main.qml文件:

import QtQuick 2.0

Rectangle {
    width: 360
    height: 360

    color: "red"

    MouseArea {
        anchors.fill: parent
        onClicked: parent.height = 180
    }
}
Run Code Online (Sandbox Code Playgroud)

如果我点击矩形,它应该减少一半.它发生了,但窗口没有减少.

什么是最佳解决方案,如果我想要主窗口必须重复主qml矩形的几何?

UPDATE.找到了一个解决方案.见Amit Tomar回答.但是存在更简单的解决方案,例如,使用QtQuick 5.0:Qt Quick Window QML Types

qt qml qt-quick qt5 qtquick2

5
推荐指数
1
解决办法
5896
查看次数

如何打印(使用打印机)QML对象?

我用Qt Quick设计了销售收据,我想用打印机打印.

我怎样才能做到这一点?

这是我的main.cpp

QtQuick2ApplicationViewer viewer;
viewer.setMainQmlFile(QStringLiteral("qml/Caisse-MBM/main.qml"));
viewer.showFullScreen();
Run Code Online (Sandbox Code Playgroud)

printing qt qml qt-quick qtquick2

5
推荐指数
1
解决办法
2818
查看次数

QML - 解决祖先问题

我有一个容器,它在运行时被动态创建的组件填充.每个元素(让我们称之为DynamicObjects)都有一个子元素树Node,也是动态创建的.更重要的是,Node组件可以彼此嵌套(如树结构).

让容器将id参数设置为,"main_container"并将每个参数DynamicObject设置为"dynamic_object".

每当我尝试main_container从任何嵌套Node元素中解决它时,一切正常.问题是当我试图解决除了根目录之外的dynamic_object任何Node一个(一个是直接后代/孩子dynamic_object).它导致:

ReferenceError:未定义dynamic_object

我的问题是:这种行为背后可能是什么原因?它可以与这些对象动态创建的事实有关吗?(这是我的第一个想法,因为我总能解决它main_container,它在qml代码中静态声明).

代码示例:(如果有任何遗漏,请在评论中告诉我)

// Container.qml

import "container_logic.js" as Logic

Rectangle {
  id: main_container

  Keys.onTabPressed: {
    Logic.createComponent("DynamicObject.qml", {/* some parameters */});
    var dynamic_object = Logic.object;

    Logic.createComponent("Node.qml",{labelText: "asdefg"}, undefined, dynamic_object)
    var asdefg = Logic.object;
    Logic.createComponent("Node.qml",{labelText: "tree A"}, undefined, dynamic_object)
    var tree_a = Logic.object;

    Logic.createComponent("Node.qml",{labelText: "a"}, undefined, asdefg)
    var a = Logic.object; …
Run Code Online (Sandbox Code Playgroud)

qt qml qt-quick qtquick2

5
推荐指数
1
解决办法
679
查看次数

组件的QML屏幕坐标

如果我有一个简单的,自包含的QML应用程序,我可以通过说明获得组件的绝对屏幕坐标

Component.onCompeted: {    
    var l = myThing.mapToItem(null, 0, 0)
    console.log("X: " + l.x + " y: " + l.y)
}
Run Code Online (Sandbox Code Playgroud)

其中myThing是文件中任何其他组件的id.但是,如果这个文件被合并到另一个QML文件中并且它定义的组件被重用,我就不再获得屏幕坐标了; 我得到相对于执行上述语句的组件的本地坐标.

如何获取项目的绝对屏幕坐标?

qt qml qt-quick

5
推荐指数
1
解决办法
1万
查看次数

使用C++对象Q_PROPERTY将Checkbox'checked'属性绑定

我正在学习QtQuick,我正在玩C++类和QML属性之间的数据绑定.

在我的C++对象模型中,我有两个属性:

Q_PROPERTY(QString name READ getName WRITE setName NOTIFY nameChanged)
Q_PROPERTY(bool status READ getStatus WRITE setStatus NOTIFY statusChanged)
Run Code Online (Sandbox Code Playgroud)

在我的.qml文件中:

TextEdit {
    placeholderText: "Enter your name"
    text: user.name
}

Checkbox {
    checked: user.status
}
Run Code Online (Sandbox Code Playgroud)

当我setName从我的C++代码更改用户名时,它会自动反映在视图中.当我选中/取消选中该复选框,或者当我setStatus()从我的C++代码调用时,没有任何反应.似乎checked复选框的属性与TextEdit组件的行为不同.

我不想以声明方式绑定我的属性.Qt Quick不支持属性绑定吗?

谢谢您的帮助.

c++ data-binding checkbox qt qt-quick

5
推荐指数
1
解决办法
4812
查看次数

QML矩形上的内部阴影

如何在内部阴影的QML中实现Rectangle?

请参阅以下链接中的示例:

在UIView中创建内部阴影

更新:

这是我正在尝试做的简化版本(没有显示任何阴影):

import QtQuick 2.0
import QtGraphicalEffects 1.0

Item {
   width: 400
   height: 400

   Item {
      anchors.fill: parent

      Rectangle {
         id: myRectangle
         anchors.centerIn: parent
         width: 200
         height: 200
         color: "grey"
      }
   }

   InnerShadow {
      anchors.fill: myRectangle
      cached: true
      visible: true
      horizontalOffset: 0
      verticalOffset: 0
      radius: 25
      samples: 16
      color: "#b0000000"
      smooth: true
      source: myRectangle
   }
}
Run Code Online (Sandbox Code Playgroud)

对不起.我的愚蠢......当我简化代码时,我弄错了(该项用于DropShadow测试,有效).这是它应该是这样的样子:

import QtQuick 2.0
import QtGraphicalEffects 1.0

Item {
   width: 400
   height: 400

   Rectangle {
      id: myRectangle
      anchors.centerIn: parent
      width: 200 …
Run Code Online (Sandbox Code Playgroud)

qt qml qt-quick qtquick2

5
推荐指数
1
解决办法
2021
查看次数

在哪里放Qt QML非可视应用程序组件

(我正在使用Qt 5,QtQuick 2,带控件.)

我正在编写我的第一个QML应用程序,并希望保持模块化和相对较小的文件长度.

有些东西大批量出现,我想收集到帮助文件中,但我不确定这样做的正确方法.

我到目前为止遇到的两个例子是FontLoaderAction.

在我的特殊情况下,我将在我的整个应用程序中使用6种字体,所以我想尽早加载它们,而不必再担心它.我的问题是,我应该把它放在哪里FontLoader

一种选择是将它们放在main.qml某个地方,但这对我来说感觉有点混乱.我所做的是创建了一个文件FontLoaders.qml,其中包含:

Item {
    width: 0; height: 0
    FontLoader {
        name: "myFont1"
        source: "/fonts/myFont1.ttf"
    }
    FontLoader {
        name: "myFont2"
        source: "/fonts/myFont2.ttf"
    }
    // ...
}
Run Code Online (Sandbox Code Playgroud)

然后,在main.qml某个地方,我只有一个FontLoaders {}.

我的另一个例子是Action.我有一大堆Actions,我希望在应用程序范围内或多或少可见.我有一个AppMenuBar组件,这似乎是放置Actions 的自然场所,但这基本上是定义菜单栏的QML文件大小的两倍,从逻辑上讲,这两个可以分开.(许多操作都可以通过菜单栏和应用程序中的其他按钮访问.)

我已基本上工作的"解决方案",但他们对我(特别是FontLoaders)感到邋,,我想知道是否有一些更清洁的方法来做到这一点,我还没有想到.

qt qml qt-quick

5
推荐指数
1
解决办法
1166
查看次数

QML TextEdit中的占位符文本

我正在寻找一种方法来显示文本提示,说明预期的输入作为用户的建议.以Google搜索栏为例:

在此输入图像描述

是否有我缺少的属性,或者这是必须通过脚本实现的东西?

qml qt-quick

5
推荐指数
2
解决办法
6172
查看次数

qml使用行在中心对齐组件

Row习惯于在Rectangle自定义工具栏实现上布局一些按钮。问题是无论我做什么,组件始终从左对齐。我希望它们与行的中心对齐并向外流向边缘。该代码如下所示:

Rectangle {
        id: toolbar
        color: "green"
        anchors.left: parent.left
        anchors.right: parent.right
        anchors.bottom: parent.bottom
        height: 100

        Row
        {
            anchors.fill: parent                
            anchors.horizontalCenter: parent.horizontalCenter
            spacing: 60

            ToolButton {
                height: parent.height
                Image {
                    anchors.verticalCenter: parent.verticalCenter
                    source: "../images/image.png"
                }
            }

            ToolButton {
                height: parent.height
                Image {
                    anchors.verticalCenter: parent.verticalCenter
                    source: "../images/image.png"
                }
            }
        }
 }
Run Code Online (Sandbox Code Playgroud)

我的按钮总是从行的左侧开始布置。相反,我希望它们相对于工具栏的中心进行布局。我认为指定该行anchors.horizontalCenter: parent.horizontalCenter应该可以实现,但是无论我如何尝试,组件都应从左侧边界布局。

qt qml qt-quick qtquickcontrols

5
推荐指数
1
解决办法
4154
查看次数

标签 统计

qt-quick ×10

qml ×9

qt ×9

qtquick2 ×4

c++ ×1

checkbox ×1

data-binding ×1

printing ×1

qt5 ×1

qtquickcontrols ×1