小编fol*_*bis的帖子

部署Qt5 QML应用程序

为了测试QML部署,我创建了一个非常简单的QML应用程序.这是代码:

main.cpp中

#include <QApplication>
#include <QQmlApplicationEngine>
#include <QFile>

int main(int argc, char **argv) {
    QApplication app(argc, argv);
    QQmlApplicationEngine engine;

    QString path = app.applicationDirPath() + "/qml/main.qml";
    if(QFile::exists(path))
        engine.load(path);
    else {
        return 1;
    }
    return app.exec();
}
Run Code Online (Sandbox Code Playgroud)

main.qml

import QtQuick 2.2
import QtQuick.Controls 1.2

ApplicationWindow {
    id: mainWindow
    title: "Test window"
    width: 800
    height: 600
    visible: true
}
Run Code Online (Sandbox Code Playgroud)

为了确保系统中没有安装任何开发库,我设置了一个纯Windows XP安装的虚拟机.然后,我按照此处所述的说明将所有 Qt5*.dll 复制到程序目录中,以及platforms/qwindows.dll和icu*52.dll.Dependency Walker确认没有遗留任何破坏的依赖关系,即一切都应该已经正确设置.

但是,由于某些原因,当我运行我的应用程序时,我什么也看不见.既不是窗口,也不是错误消息.从控制台运行也没有错误.尽管如此,我可以看到我的应用程序在任务管理器中运行,就像它在后台运行一样.在开发机器上运行应用程序没有问题:应用程序正确启动,我可以看到它的窗口.

我究竟做错了什么?如何部署QML应用程序以确保它可以在任何其他 - 非开发 - 机器上运行?

deployment qt qml qtquick2

11
推荐指数
2
解决办法
7323
查看次数

如何在QML Javascript中创建和使用C++对象

我的应用程序使用c ++和QML.

我在C++部分定义了几个对象来访问SQL等.

看起来像:

class MyObject : public QObject
{
    Q_OBJECT
public:
    MyObject(QObject *parent = 0);
    Q_INVOKABLE void someFunction(const QString &query);
};

qmlRegisterType<MyObject>("xxx.xxx", 1, 0, "MyObject");
Run Code Online (Sandbox Code Playgroud)

理想情况下,我只需要在JML中使用这些对象,而不是在QML中.

我尝试了很多例子并阅读了所有文档,但仍然无法解决我的问题.

所以我的问题:

  • 如何在Javascript中实例化C++中定义的对象?我试过var obj = Qt.createComponent("MyObject");但看起来不行.是否有可能以正常的JS风格定义新对象 - var obj = new MyObject;
  • 如何在javascript中访问此创建的对象?我试过obj.someFunction("xxx")但是有一些错误 - TypeError: Property 'someFunction' of object QQmlComponent(0x3605f5c0) is not a function.我在这里做错了什么?我的对象派生自QObject,而不是来自QQmlComponent.

javascript qml qt-quick qt5 qtquick2

10
推荐指数
1
解决办法
7651
查看次数

在自定义QML元素中进行平滑绘制

我现在尝试创建自定义的QML元素QQuickItem.所以我压倒了QQuickItem::updatePaintNode,现在想要画一条线.我的代码:

QSGNode *StrikeLine::updatePaintNode(QSGNode *oldNode, QQuickItem::UpdatePaintNodeData *)
{
    QSGGeometryNode *node = 0;

    QSGGeometry *geometry;
    QSGFlatColorMaterial *material;
    node = static_cast<QSGGeometryNode *>(oldNode);
    if(!node) {
        node = new QSGGeometryNode;
        geometry = new QSGGeometry(QSGGeometry::defaultAttributes_Point2D(), 2);
        geometry->setDrawingMode(GL_LINES);
        geometry->setLineWidth(3);
        material = new QSGFlatColorMaterial;
        material->setColor(QColor(255, 0, 0));
        node->setGeometry(geometry);
        node->setFlag(QSGNode::OwnsGeometry);
        node->setMaterial(material);
        node->setFlag(QSGNode::OwnsMaterial);
        getColor();
    } else {
        geometry = node->geometry();
        material = static_cast<QSGFlatColorMaterial *>(node->material());
    }
    geometry->vertexDataAsPoint2D()[0].set(p_startPoint.x(), p_startPoint.y());
    geometry->vertexDataAsPoint2D()[1].set(p_endPoint.x(), p_endPoint.y());
    material->setColor(getColor());
    node->markDirty(QSGNode::DirtyGeometry);

    return node;
}
Run Code Online (Sandbox Code Playgroud)

但我的线看起来很难看.边缘粗糙,看起来像DOS图形.所以我的问题 - 如何应用流畅的绘画?我现在可能是一些着色器或其他东西,但我找不到任何文档.

shader qt qml qtquick2

10
推荐指数
1
解决办法
4016
查看次数

避免 GitHub 操作缓冲

我有一个 Github 存储库,其中包含一些 Linux 实用程序。

为了运行测试,我使用 GitHub 操作和一些简单的自定义工作流程,这些工作流程使用自托管运行器在远程 Linux 服务器上运行:

name: CMake
on: [push]
env:  
  BUILD_TYPE: Release
jobs:
  build:
    runs-on: self-hosted
    steps:
    - uses: actions/checkout@v2
    - name: Build
      working-directory: ${{runner.workspace}}/Utils
      shell: bash
      run: cmake --build . --config $BUILD_TYPE

    - name: Run test
      working-directory: ${{runner.workspace}}/Utils
      shell: bash
      run: ./testing/test.sh
Run Code Online (Sandbox Code Playgroud)

工作流程非常简单 - 我使用编译源代码cmake,然后运行来自同一存储库的脚本来测试构建。测试脚本是一个 bash 脚本,如下所示:

#!/bin/bash

export LD_LIBRARY_PATH=/path/to/bin

cd /path/to/bin

echo -e "Starting the tests"

./run_server &
./run_tests

if [ $? -eq 0 ]; then
    echo "successful"
else
    echo "failed" …
Run Code Online (Sandbox Code Playgroud)

github github-actions

7
推荐指数
0
解决办法
492
查看次数

QML 表单布局

我在我的应用程序中使用 QML 作为 UI,现在我想构建一些表单。这是一个代码:

Window {
    width: 400
    height: 600
    flags: Qt.Dialog
    modality: Qt.ApplicationModal

    GridLayout {
        id: mainLayout
        columns: 2
        rowSpacing: 5
        columnSpacing: 5
        anchors {
            top: parent.top;
            left: parent.left
            right: parent.right
        }

        Label { text: "field1" }
        TextField { id: field1; }

        Label { text: "field2"}
        TextField { id: field2 }
    }
}
Run Code Online (Sandbox Code Playgroud)

如何设置TextFields 的宽度?他们中的大多数必须适合右列中的所有空间。

现在的样子:

在此处输入图片说明

qt qml qt-quick qtquick2 qtquickcontrols

6
推荐指数
1
解决办法
2500
查看次数

使用 cpp 代码从加载的 qml 访问 qml 对象

我有一个 main.qml,它使用加载器加载 Page1.qml。如何从我的 cpp 代码中找到 Page1.qml 中的对象“whiteArea”?

我目前正在使用以下内容来获取对象,并且希望也像这样获取加载的 qml。

QObject * object = engine.rootObjects().at(0)->findChild<QObject *>  ("yourObjectName");
Run Code Online (Sandbox Code Playgroud)

主.qml

import QtQuick 2.3
import QtQuick.Controls 1.2
import myplugin 1.0

ApplicationWindow {
    id:app
    visible: true
    width: 640
    height: 480
    title: qsTr(" World")
    objectName: "Appwindow"
    property ApplicationWindow appwindow:app
    Label {
        objectName: "label"
        text: qsTr(" World")
        anchors.centerIn: parent
    }

    MyItemTest{
        objectName: "myItem"
        anchors.fill: parent
    }

    Rectangle{
        objectName: "Rectangle"
        id:rect
        width: 50
        height: 50
        color: "yellow"
    }

    Button {
        objectName: "MyButton"
        id: btnClick
        text : "btn"
        Loader …
Run Code Online (Sandbox Code Playgroud)

c++ qt qml

6
推荐指数
1
解决办法
1517
查看次数

更改 Drone 中 Exec Runner 的用户

Drone我已经在我的远程主机上设置了Ubuntu 18.04 Linux。为了方便起见,我安装了drone-runner-exec. 我已经成功地将它连接到我的GitHub等。所以现在它工作正常,即它克隆存储库并开始运行我的管道。步骤之一是简单的 bash 脚本,它必须更新存储库中的子文件夹。

steps:
- name: Getting subfolders
  commands:
  - ./my_script
Run Code Online (Sandbox Code Playgroud)

运行程序执行脚本,但在某些点上失败。搜索后,我发现在用户下执行的脚本我已经安装了Drone. 我在ps aux输出中看到 和dockerdroneroot.

所以我的问题 - 如何更改运行程序运行的系统用户?

linux docker drone.io ubuntu-18.04

6
推荐指数
1
解决办法
1093
查看次数

QML表单布局(GridLayout)的麻烦

我现在正在尝试将我的应用UI从C++转换为QML.在某些步骤我需要一个登录窗口,所以我用QML创建它,代码如下:

Window {
    id: loginWindow
    property string username: login.text;
    property string password: password.text;
    property bool issave: savePassword.checked;

    flags: Qt.Dialog
    modality: Qt.WindowModal
    width: 400
    height: 160
    minimumHeight: 160
    minimumWidth: 400
    title: "Login to program"

    GridLayout {
        columns: 2
        anchors.fill: parent
        anchors.margins: 10
        rowSpacing: 10
        columnSpacing: 10

        Label {
            text: "Login"
        }
        TextField {
            id: login
            text: Config.getParam("user")
            Layout.fillWidth: true
        }

        Label {
            text: "Password"
        }
        TextField {
            id: password
            text: Config.getParam("password")
            echoMode: TextInput.Password
            Layout.fillWidth: true
        }

        Label {
            text: "Save password?" …
Run Code Online (Sandbox Code Playgroud)

qt qml qtquick2 qtquickcontrols

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

QML - 将Javascript关联数组传递给C++

在我的应用程序中,我有一个注册为singleton的类QML.我的目的是在QML关联数组中收集值并将此数组传递给C++.这是该类的简化版本:

class Config : public QObject
{
Q_OBJECT
private:
  Config(QObject *parent = 0);
public:
  static Config *instance();
  ~Config();
  Q_INVOKABLE void sendValue (const QVariantMap &map) {
    qWarning() << map.size();
  }
}
Run Code Online (Sandbox Code Playgroud)

在这里我将该类的实例注册为singleton:

qmlRegisterSingletonType<Config>("myNS", 1, 0, "Config", config_singletontype_provider);
Run Code Online (Sandbox Code Playgroud)

在QML文件的某个地方,我尝试将javascript数组传递回c ++;

function sendValue() {
  var arr = [];
  arr["key"] = "value";
  Config.sendValue(arr);      
}
Run Code Online (Sandbox Code Playgroud)

但没有通过.将map.size()C++返回0.也许我需要一些额外的转换?

javascript c++ arrays qml qt-quick

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

如何获得QQuickItem的变换矩阵?

我工作了很长时间,QGraphicsItem它有transform()功能.现在我不会做同样的事情,QQuickItem但不幸的是它错过了transform().所以我的问题 - 如何获得变换矩阵QQuickItem

qt qml qtquick2

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