标签: qml

QML:如何将模型属性传递给在GridView(或ListView)委托中加载的委托?

我正在尝试构建一个内部托管GridView的可重用QML组件.GridView中的每个元素都有一组在整个应用程序中很常见的行为(主要是显示和基于鼠标的东西).但是,GridView元素内显示的内容会根据用例而改变.(也就是说,一个GridView使用相同的封装组件,但在应用程序的其他地方,它可能使用不同的Component.)

所以,我想要做的是让每个调用提供一个委托,该委托被添加到GridView中的每个元素,该元素已经是委托.换句话说,这样的事情:

MyGrid.qml

import QtQuick 1.1

Rectangle {
  id: myGrid
  objectName: "myGrid"

  property Component internalDelegate
  property variant internalModel

  GridView {
    anchors.fill: parent

    delegate: Row {
      Loader {
        sourceComponent: myGrid.internalDelegate
      }
    }

    model: parent.internalModel
  }
}
Run Code Online (Sandbox Code Playgroud)

我们的想法是GridView委托中的Loader加载用户提供的委托,它看起来像这样:

Main.qml

import QtQuick 1.1

Rectangle {
  anchors.fill: parent

  width: 300
  height: 200

  MyGrid {
    anchors.fill: parent

    internalDelegate: Text {
      text: name
    }

    internalModel: ListModel {
      ListElement {
        name: "a"
      }

      ListElement {
        name: "b"
      }
    }
  }
}
Run Code Online (Sandbox Code Playgroud)

但是,这不起作用.QML报告"name"是Text元素中的未知变量.如果我用字符串替换name变量(即"hello"),它会按预期工作.

我的问题是,如何将"name"变量传递给internalDelegate,或者更好的是,使整个模型可用,以便internalDelegate可以访问所有这些变量(因为调用者也在定义模型).

一个侧面问题是:有更好的方法吗?

qt listview gridview model qml

16
推荐指数
3
解决办法
3万
查看次数

QML不透明度继承

在QML中,如何防止子元素从其父元素继承不透明度?我想为父元素及其子元素设置不同的不透明度值.

opacity qml

16
推荐指数
5
解决办法
9695
查看次数

QML是在编译时翻译成本机代码还是在运行时按照在Web浏览器中运行JavaScript的方式进行解释?

QML是在编译时翻译成本机代码还是在运行时解释几乎与在Web浏览器中运行JavaScript的方式相同?

c++ qt qml

16
推荐指数
3
解决办法
4700
查看次数

如何在QML中访问Repeater的子项的属性?

你能告诉我下面的代码有没有办法改变imgx元素属性.我必须使用javascript更改imgx.x值.或者还有其他方法吗?我搜索qt docs但没有帮助.谢谢.

Row {
    Repeater {
        id:mmm
        model : 10
        Rectangle{
            clip: true
            width: 54
            height: 80
            color:"transparent"
            Image {
                id:imgx
                //x:-160
                //x:-105
                //x:-50
                x:0
                source: "images/tarama_lights.png"
            }
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

qt repeater element qml qt-quick

16
推荐指数
2
解决办法
2万
查看次数

在QML中使用C++ - slot,返回命名空间中的类型

我首先要提到的是,以下工作正常到Qt 5.0.0 beta 1(也许是beta 2和RC也不知道),但在Qt 5.0.0最终版本中失败了.我只想参考Qt 5.0.0最终版本中看到的结果.所以很可能这与Qt5最近的变化有关.

在C++方面,我在命名空间中有一组类(QObject派生)(可选地用编译器标志触发;类在一个单独的库中,并且库将命名空间的使用作为选项留给用户使用图书馆).这里的一个类Game可能看起来像这样(摘录):

OAE_BEGIN_NAMESPACE

// forward-declarations:
class Player;    // Player is just another class in the same library

class Game : public QObject
{
    Q_OBJECT

public:
    explicit Game(...);

public slots:
    Player *player() const;  // <-- the quesion is about such slots
};

OAE_END_NAMESPACE
Run Code Online (Sandbox Code Playgroud)

这些宏OAE_BEGIN/END_NAMESPACE扩展为namespace OAE_NAMESPACE {...... }或者没有,就像Qt所做的那样<qglobal.h>,只是在宏名称中用"OAE"替换"QT":

#ifndef OAE_NAMESPACE

# define OAE_PREPEND_NAMESPACE(name) ::name
# define OAE_USE_NAMESPACE
# define OAE_BEGIN_NAMESPACE
# define OAE_END_NAMESPACE
# define OAE_BEGIN_INCLUDE_NAMESPACE
# …
Run Code Online (Sandbox Code Playgroud)

c++ qt moc qml qt5

16
推荐指数
1
解决办法
2030
查看次数

Qt5语法在QML中突出显示

我正在进行QtQuick 2.0演示,我想嵌入一些代码示例.是否可以轻松创建突出显示qml元素的语法.

您能否举例说明如何实现它的示例技术和想法.

谢谢

syntax-highlighting qml qt5 qtquick2

16
推荐指数
4
解决办法
4956
查看次数

在QML中加载页面时运行javascript函数

我想像这样运行js函数

function setPersonalInfoValue(){
        console.debug("setPersonalInfoValue()");
    }
Run Code Online (Sandbox Code Playgroud)

当页面加载QML时.

我试过这个:

Rectangle {
    id: page2
    width: 100
    height: 62

    function setPersonalInfoValue(){
        console.debug("setPersonalInfoValue()");
    }
}
Run Code Online (Sandbox Code Playgroud)

我想在第1页到第2页之间切换时运行setPersonalInfoValue()函数.我该怎么做?

javascript qt qml

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

QML ListView方法positionViewAtEnd()完全相反

我要疯了.我在ScrollView中有一个ListView,连接到一个继承QAbstractListModel的模型.将对象添加到模型时,ListView使用委托显示它们.到现在为止还挺好.

但我真的希望视图保持滚动到底部(就像聊天窗口一样),而且我很难实现这一点.这是相关的QML代码:

Rectangle {
    ScrollView {
        [anchor stuff]

        ListView {
            id: messageList
            model: textMessageFiltered
            delegate: messageDelegate
        }
    }

    TextField {
        id: messageEditor
        [anchor stuff]

        onAccepted: {
            controller.sendTextMessage(text)
            text = ""

            /* This works. */
            //messageList.positionViewAtEnd();
        }
    }

    Component {
        id: messageDelegate
        Rectangle {
            anchors.left: parent.left
            anchors.right: parent.right

            color: "white"
            height: nameText.height + 4

            Text {
                id: nameText
                wrapMode: Text.Wrap
                text: "<b>" + authorName + " (" + authorId + ")</b>  " + message
                [anchor stuff]
            }
            ListView.onAdd: {
                console.log("This prints …
Run Code Online (Sandbox Code Playgroud)

qt listview qml qt5.3

16
推荐指数
2
解决办法
6547
查看次数

无法在QML图像中加载图像源

这看起来非常基本,但出于某种原因,我无法在下面的超简单QML应用程序中使用图像源.

仅供参考,我正在运行基于Qt 5.3.2的Mac OS-X 10.9.5,Qt Creator 3.2.1.

import QtQuick 2.3
import QtQuick.Controls 1.2

ApplicationWindow {
    visible: true
    width: 640
    height: 480
    title: qsTr("Test")

    Image {
        id: image1
        x: 10
        y: 10
        width: 100
        height: 100
        source: "testImage.png"
    }
} 
Run Code Online (Sandbox Code Playgroud)

我收到以下错误:

qrc:/main.qml:10:5: QML Image: Cannot open: qrc:/testImage.png
Run Code Online (Sandbox Code Playgroud)

已创建应用程序窗口但未显示任何图像.我也试过在Rectangle中包装图像,但这没有用.

我在这做错了什么?

"testImage.png"位于项目目录中,我尝试了各种方法来使用资源指定图像路径,绝对,相对,甚至使用QML UI设计器手动指定图像源.

我还要提到为了让Qt 5.3.2工作,我遵循了HERE建议的修改.

谢谢.

qt image qml

16
推荐指数
2
解决办法
3万
查看次数

Qt5(QML)中ui.qml文件的用途是什么?

据我所知,.qml文件可用于定义UI,它似乎覆盖了ui.qml文件中的任何内容.那么,ui.qml文件的用途究竟是什么?

我正在使用Qt5和Qt Creator.

qt qml

16
推荐指数
1
解决办法
8109
查看次数