标签: qml

在Qt QML中指定许多Text-elements的字体

我有一个通过QML文件指定的小部件.此小部件包含一个Rectangle包含两个的顶级Columns.每个都Columns包含许多Text元素.这个QML小部件包装QDeclarativeView在C++ 的子类中.

我想为每个Text元素指定字体.今天我通过指定顶级属性来做到这一点:

property string fontfamily: "Arial"
property bool fontbold: false
property bool fontitalic: false
property int fontpixelsize: 11
property string fontcolor: "White"
Run Code Online (Sandbox Code Playgroud)

并将每个Text元素绑定到这些属性:

Text
{   
    color: fontcolor
    font.family: fontfamily
    font.bold: fontbold
    font.italic: fontitalic
    font.pixelSize: fontpixelsize
    ...
}
Run Code Online (Sandbox Code Playgroud)

这不是很优雅,每次我需要支持新的东西时都需要添加新的字段(例如带下划线的字体).我无法声明类型的属性font并绑定到此属性(小部件是空白的,qmlviewer警告"属性后的预期类型").

是否有更好的方法为所有Text元素指定字体?

注意!我正在手写QML文件.

c++ user-interface qt qml

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

使用Q_INVOKABLE将C++与QML连接

我有一个Qt功能:

void MainWindow::button_clicked(Qstring a, Qstring b, Qstring c, Qstring d)
Run Code Online (Sandbox Code Playgroud)

我从QML收集数据,我想将数据传递给Qt中的这个函数.所以我知道我需要使用Q_INVOKABLE但不知道如何使用它.

还有一件事是,当调用上面的某个函数时,可以调用其他函数.
例如:我调用上面的函数,但在她的身体中我调用refresh()函数.这可能吗?

c++ qt qml qt-slot

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

为QML组件分配键盘快捷键

我正在使用QML和Qt Creator构建桌面应用程序,我目前正在研究键盘处理以及它如何与QML元素一起工作.我已经意识到桌面小部件缺少适当的QML替换.

我目前的问题是,我希望为一些特定的QML组件分配一些全局键盘快捷键(比如为GUI上的按钮分配键盘快捷键),这些快捷键应该激活它们.我能管理的最好的是使用FocusScopes和Key Navigation能够通过键盘导航GUI,但这不是一回事.

任何人都可以建议在这种情况下做什么?Qt 5有没有这样的功能?我在互联网上找不到任何相关信息.

qt qml qt-quick qt4.7 qt5.1

12
推荐指数
3
解决办法
6522
查看次数

QML更改Click上的视图

我和我的团队正在合作一个项目.我的工作是为嵌入式系统创建一个带有QML和C++的Gui.

我为每个View都有一个qml文件.

但现在我想在它们之间导航.这意味着当我点击按钮时,视图应该切换.每个视图都有一个后退按钮,所以我可以回到我的主视图.

这可能在qml中吗?如果不是我必须用c ++解决它

c++ qt qml

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

如何在c ++和QML应用程序中使用qrc?

我在Windows7上用c ++ qnd Qt Creator(QML)编写了一个Qt Quick Desktop应用程序.现在我必须部署它,我需要隐藏qml文件和图像(意思是:将它们放在资源等中)

我已经读过使用.qrc文件有一个很好的方法.我阅读了有关这些文件的文档,并为我的应用程序创建了一个文件,如下所示:

<RCC>
<qresource prefix="/">
    <file>qml/GenericHostApplicationQML/myMain.qml</file>
    <file>qml/GenericHostApplicationQML/content/PressAndHoldButton.qml</file>
    <file>qml/GenericHostApplicationQML/content/TextButton.qml</file>
    <file>qml/GenericHostApplicationQML/content/pics/advancedsettings.png</file>
    <file>qml/GenericHostApplicationQML/content/pics/cnruninstall.png</file>
    <file>qml/GenericHostApplicationQML/content/pics/dialog_cancel.png</file>
    <file>qml/GenericHostApplicationQML/content/pics/folder_explore.png</file>
    <file>qml/GenericHostApplicationQML/content/pics/gnome_session_switch.png</file>
    <file>qml/GenericHostApplicationQML/content/pics/mail2_send.png</file>
    <file>qml/GenericHostApplicationQML/content/pics/Picture1.png</file>
    <file>qml/GenericHostApplicationQML/content/pics/Picture2.png</file>
</qresource>
Run Code Online (Sandbox Code Playgroud)

在main.cpp中,我正在加载Main.qml文件,如:

int main(int argc, char *argv[])
{
   QApplication app(argc, argv);
   QDeclarativeView view;
   view.setSource(QUrl::fromLocalFile("qml/GenericHostApplicationQML/myMain.qml"));
   view.show();
   return app.exec();
}
Run Code Online (Sandbox Code Playgroud)

我试图从Resources.qrc中读取myMain.qml文件,如:

view.setSource(QUrl(":/qml/GenericHostApplicationQML/myMain.qml"));//I added the ":/"
Run Code Online (Sandbox Code Playgroud)

但我有这个错误:

file:///qml/GenericHostApplicationQML/myMain.qml: File not found 
Run Code Online (Sandbox Code Playgroud)

当我尝试这个:

view.setSource(QUrl::fromLocalFile(":/qml/GenericHostApplicationQML/myMain.qml"));
Run Code Online (Sandbox Code Playgroud)

我明白了:

file:///C:/Users/ayalafre/Desktop/ghaQML/GenericHostApplicationQML-build-desktop-Qt_4_7_4_for_Desktop_-_MinGW_4_4__Qt_SDK__Release/:/qml/GenericHostApplicationQML/myMain.qml: File not found
Run Code Online (Sandbox Code Playgroud)

好像我的Qt不知道该怎么办:":/".

我必须使用.qrc文件:

  • 加载myMain.qml文件
  • 使用导入到myMain.qml中的qml文件
  • 在我的qml文件中使用图像

你能解释一下有什么问题吗?以及为了在c ++和qml中使用.qrc我必须做些什么?

非常感谢:)

c++ qt deploying qml

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

QML - MouseArea - 传播onPositionChanged

是否有可能将一个MouseAreapositionChanged事件传播给一个基础事件?

我试图设置mouse.acceptedfalse为最上面的任何现有的信号处理程序MouseArea,以及设置propagateComposedEventstrue.这些都没有起作用(虽然我对propagateComposedEvents并不工作并不感到惊讶,因为文档说它只传递类似的事件clicked,doubleClickedpressAndHold).

qt qml qt-quick qtquick2

12
推荐指数
1
解决办法
4416
查看次数

从C++(Qt5)向QML项发送信号

我有一个包含以下内容的QML文件:

Text {
    id: testData
    onTaskClicked:{
        testData.text = task.name
    }
}
Run Code Online (Sandbox Code Playgroud)

捕获是这个任务点击信号.它由另一个小部件(C++)发出,需要中继到QML.

这类似于这个SO问题,除了那里发布的解决方案不起作用(为什么写在下面).

C++代码:

ctxt->setContextProperty(QLatin1Literal("holiday"), m_model);
ctxt->setContextProperty(QLatin1Literal("bgcolor"), color);

view->setResizeMode(QQuickView::SizeRootObjectToView);

auto mainPath = QStandardPaths::locate(QStandardPaths::DataLocation,
                                           QLatin1Literal("taskview.qml"));

view->setSource(QUrl::fromLocalFile(mainPath));

ctxt->setContextProperty(QLatin1Literal("viewer"), m_view);
Run Code Online (Sandbox Code Playgroud)

m_view是一个QListView发出taskClicked(HolidayTask* task)信号的子类(来自.h文件):

Q_SIGNALS:
    void taskClicked(HolidayTask* task);
Run Code Online (Sandbox Code Playgroud)

colorm_model在QML注册并在其他地方使用.来自信号的对象已经在QML中注册.view是我的QQuickView.

首先,我尝试了上述问题中提出的解决方案:

auto root = view->rootObject();
auto myElement = root->findChild<QObject*>(QLatin1Literal("testData");

connect(m_view, SIGNAL(taskClicked(HolidayTask* task), myElement,
        SLOT(taskClicked(HolidayTask* task);
Run Code Online (Sandbox Code Playgroud)

但是,myElement始终为null(我得到关于不存在的插槽的运行时警告).

如果我尝试将视图(QListView)指针设置为QML视图的上下文属性,它仍然不起作用.

在所有情况下,我也得到:

QML Connections: Cannot assign to non-existent property "onTaskClicked"
Run Code Online (Sandbox Code Playgroud)

我可能在这里做错了什么?

编辑澄清一些细节:HolidayTask是自定义QObject子类,信号 …

c++ qt qml qt5 qtquick2

12
推荐指数
1
解决办法
9088
查看次数

如何在QML中设计多级流体布局

我在QML中设计了一个布局,以了解有关其功能的更多信息,并在设计此类布局时对"最佳实践"有一些疑问.这里是:

在此输入图像描述

它本质上是一个由三个RowLayout组成的ColumnLayout,每个RowLayout都有一些Rectangle s.应计算每个Row和Rectangle的大小,例如:

  • 第一行:高度= 40%,宽度= 100%
    • 红色矩形填充整个区域
  • 第二行:高度= 20%,宽度= 100%
    • 深绿色矩形:高度= 100%,宽度= 20%,
    • 浅绿色矩形:高度= 100%,宽度= 80%
  • 第三排:高度= 40%,宽度= 100%
    • 深蓝色矩形:高度= 100%,宽度= 40%,
    • 蓝色矩形:高度= 100%,宽度= 20%
    • 浅蓝色矩形:高度= 100%,宽度= 40%

我想出的QML正在发挥作用,如下所示.我有一些问题:

  1. 我使用Layout.preferredHeight:x*parent.height模式设置了宽度和高度百分比.其他选项导致一些问题(例如preferredHeight导致绑定循环警告).我的方法是正确有效的吗?
  2. 作为一个黑客,我为第2行和第3行的第一个元素设置了Layout.fillWidth:true,这对我来说没有意义,但确实有效.如果我将它们的宽度设置为百分比(例如Layout.preferredWidth:0.2*parent.width),它们的行将折叠为宽度0.这是预期的行为吗?有没有更好的解决方法?
  3. 你有关于布局的任何建议吗?我在正确的道路上吗?

这是我的布局QML代码:

ApplicationWindow {
    x: 500
    y: 100
    width: 250
    height: 150
    visible: true

    ColumnLayout {
        anchors.fill: parent
        spacing: 0
        RowLayout {
            spacing: 0
            Layout.preferredHeight: 0.4*parent.height
            Layout.fillHeight: false
            Rectangle {
                Layout.fillHeight: true
                Layout.fillWidth: true
                color: "red" …
Run Code Online (Sandbox Code Playgroud)

layout qt fluid-layout qml

12
推荐指数
3
解决办法
6119
查看次数

QML中双向绑定C++模型

我正在尝试更多地了解QtQuick和QML.我目前的目标是了解如何将数据从C++模型绑定到我的视图.到目前为止,我已经能够在我的QML中设置模型并从模型中获取数据,但我无法弄清楚如何更新我的数据.

如何为我的C++模型设置双向绑定?下面是我到目前为止编写的代码.

message.h

class Message : public QObject
{
    Q_OBJECT

    Q_PROPERTY(QString author READ getAuthor WRITE setAuthor NOTIFY authorChanged)
    Q_PROPERTY(QString message READ getMessage WRITE setMessage NOTIFY messageChanged)

    Q_SIGNALS:
        void authorChanged(QString author);
        void messageChanged(QString message);

    public:
        Message(QObject *parent = 0);

        QString getAuthor();
        void setAuthor(QString author);

        QString getMessage();
        void setMessage(QString message);

    private:
        QString _author;
        QString _message;
};
Run Code Online (Sandbox Code Playgroud)

message.cpp

#include "message.h"

Message::Message(QObject *parent) : QObject(parent)
{
}

QString Message::getAuthor()
{
    return _author;
}

void Message::setAuthor(QString author)
{
    if(author != _author)
    {
        _author = author; …
Run Code Online (Sandbox Code Playgroud)

c++ qt qml qtquick2

12
推荐指数
1
解决办法
5668
查看次数

Qt 5.8中的QML缓存是否可以针对特定项目禁用?

Qt 5.8应该是提前使用qtquick编译器的可选用法,而是它带有一个jit-jit编译器,默认情况下启用并在磁盘上缓存已编译的QML文件以提高启动性能并减少内存使用量.

然而,该功能带来了严重的 错误,这些错误大大减少,或者在我的情况下甚至完全否定了它的好处,因为我没有启动时间的问题,并且测试没有显示任何内存使用改进.

所以我想做的是在我的项目中选择退出该功能,但我似乎没有找到如何做到这一点.回到Qt 5.7.1不是一个选择,因为我的项目依赖于5.8引入的其他新功能.

configuration qt caching qml qt5.8

12
推荐指数
2
解决办法
3630
查看次数