【问题标题】:Trouble using QML material design: "QtQuick.Controls.Material" is not installed使用 QML 材料设计时遇到问题:未安装“QtQuick.Controls.Material”
【发布时间】:2018-02-27 06:48:39
【问题描述】:

我正在关注this 教程,但我遇到了很多 QML 模块错误。我不得不修改为QtQuick.Controls 1.1,因为2.0, 2.1, 2.3 不起作用。这是我现在的 QML:

import QtQuick.Window 2.1
import QtQuick 2.0
import QtQuick.Controls 1.1
import QtQuick.Controls.Material 2.1

现在我只得到

"QtQuick.Controls.Material" is not installed

我使用的是 Ubuntu 17.10.1,我的 PyQt 报告版本 5.7。 Qt 的website 说:

Import Statement:   import QtQuick.Controls.Material 2.3
Since:  Qt 5.7

但它不会工作。因为我有Qt 5.7,所以我应该能够使用网站上所说的材料设计。但我什至不能使用QtQuick.Controls 2.x

我不想安装 Qt 5.8,因为那样我的应用程序将与旧版 linux 不兼容。我需要使用 5.7。

我应该如何进行这项工作?

更新:

在我的机器上尝试并忘记了我安装了什么之后,我创建了一个 docker 容器来测试它:

FROM ubuntu:latest

ARG SIP_LINK=https://sourceforge.net/projects/pyqt/files/sip/sip-4.19.7/sip-4.19.7.tar.gz

ARG PYQT5_LINK=https://sourceforge.net/projects/pyqt/files/PyQt5/PyQt-5.10/PyQt5_gpl-5.10.tar.gz

RUN apt-get update \
    && apt-get install -y build-essential make wget ca-certificates \
    python3 python3-dev \
    qt5-default qml-module-qtquick-controls libqt5qml5 \
    --no-install-recommends \
    && rm -rf /var/lib/apt/lists/*

#SIP INSTALLAITON

RUN wget --progress=bar:force -O sip.tar.gz $SIP_LINK \
    && mkdir sip \
    && tar -xzvf sip.tar.gz -C sip --strip-components=1 \
    && rm sip.tar.gz \
    && cd sip \
    && python3 configure.py && make && make install \
    && cd .. \
    && rm -rf sip

#PYQT5 INSTALLAITON

RUN wget --progress=bar:force -O pyqt5.tar.gz $PYQT5_LINK \
    && mkdir pyqt5 \
    && tar -xzvf pyqt5.tar.gz -C pyqt5 --strip-components=1 \
    && rm pyqt5.tar.gz \
    && cd pyqt5 \
    && python3 configure.py --confirm-license && make && make install \
    && cd .. \
    && rm -rf pyqt5

WORKDIR /home/project

ENTRYPOINT "/bin/bash"

当我这样做时

docker run --rm -it -v /tmp/.X11-unix:/tmp/.X11-unix -v /home/lz/project:/home/project -e DISPLAY=unix$DISPLAY test

然后做./main.py(我从here 关注main.py,我得到:

root@3054a751f04b:/home/prject# ./main.py 
Traceback (most recent call last):
  File "./main.py", line 4, in <module>
    from PyQt5.QtQml import *
ImportError: No module named 'PyQt5.QtQml'

添加包qml-module-qtquick-controls libqt5qml5 只是为了尝试使其工作,但没有帮助

更新 2: 添加包python3-pyqt5.qtquick后,我现在只得到错误:

QQmlApplicationEngine failed to load component
file:///home/project/main.qml:4 module "QtQuick.Controls.Material" is not installed

process 12: D-Bus library appears to be incorrectly set up; failed to read machine uuid: UUID file '/etc/machine-id' should contain a hex string of length 32, not length 0, with no other text
See the manual page for dbus-uuidgen to correct this issue.

但是,我不应该添加 python3 qt 包,因为我正在构建它们

【问题讨论】:

  • 如果您无法加载QtQuick.Controls 2.0 或更高版本,那么就没有必要也没有可能加载QtQuick.Controls.Material。没有必要,因为它只适用于新样式 QtQuick.Controls 2.x 并且不可能,因为它仅在安装了 QtQuick.Controls 2.x 时才安装 - 因为它是其中的一部分。
  • 通常在你的 qt 安装目录中应该有一个目录 qml/QtQuick/Controls.2 和它的子目录 Material - 请检查一下。
  • 直到最近,Ubuntu 还附带了 Qt5.6,它不包含 QtQuick.Controls 2.x,因此不包含 QtQuick.Controls.Material 2.x - 我不知道这何时或是否变了。
  • @derM 我有 qtquick/controls.2 但里面没有材料文件夹。请查看我在做什么的摘要:pastebin.com/FxqQKKc8
  • 我用的是最新的ubuntu,应该有材料吧。无论如何,我也在尝试安装最新的库:stackoverflow.com/questions/48983281/… 但我还没有成功

标签: qt qml


【解决方案1】:

Qt Quick Controls 2 的正确 Ubuntu 软件包是 qml-module-qtquick-controls2。此包包含 Material 样式。

【讨论】:

  • 最后我还需要window包。这是软件包的摘要(仅适用于较新的 ubuntus,例如仿生): python3 python3-pyqt5 python3-pyqt5.qtquick qt5-default qml-module-qtquick-controls2 libqt5qml5 qml-module-qtquick2 qml-module-qtquick-窗口2
  • 看起来 Ubuntu 包中缺少依赖项声明。 Qt 在其 qmldir 文件中声明了以下依赖项:QtQuick.Controls -> QtQuick.Templates -> QtQuick.Window -> QtQuick.
【解决方案2】:

根据QtQuick.Controls 版本的Qt Documentation,您可能应该在使用Qt 5.7 时导入QtQuick 2.7 而不是2.0

import QtQuick 2.7
import QtQuick.Window 2.0
import QtQuick.Controls 2.0
import QtQuick.Controls.Material 2.0

【讨论】:

  • 曾经有人在这里评论并删除。这是当我像你说的那样时的输出:QQmlApplicationEngine failed to load component file:///home/project/pycam.qml:1 module "QtQuick" version 2.7 is not installed process 11: D-Bus library似乎设置不正确向上;无法读取机器 uuid:UUID 文件“/etc/machine-id”应包含长度为 32 的十六进制字符串,而不是长度 0,没有其他文本请参阅 dbus-uuidgen 的手册页以更正此问题。
  • dbus 错误似乎与 xorg 有关,我认为它发生是因为我在 docker 中,但我认为它与 qt 无关
  • 您可以导入任何您想要的 QtQuick 版本,只要您不使用较新版本的功能。由于 QtQuick.Controls 2.0QtQuick.Controls.Material 2.0 具有较新功能是单独导入的,因此您可以使用 QtQuick 2.0. Since QtQuick.Controls 1.x` 和 QtQuick.Controls 2.x 完全不同,QtQuick.Controls.Material 2.x 构建在 QtQuick.Controls 2.x 您需要(能够to) 导入QtQuick.Controls 2.x。您可以导入QtQuick.Controls 1.x2.x 的两个版本,最好给它们(其中一个)一个别名。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多