
我正在尝试使用带有QtGraphicalEffects的QtQuick 2为我的项目添加效果,但我不太明白如何调整真正模糊的效果来看起来正确.
在这种情况下,投影的尺寸很小,并且在完全消失之前会在边缘处被剪裁.我怎样才能让它很好地融入而不会被切断?
这是窗口的代码:
import QtQuick 2.0
import QtGraphicalEffects 1.0
Item {
width: 250
height: 75
Text {
id: textItem
x: 10; y: 10
text: "how can I fix my shadow?"
}
DropShadow {
id: shadowEffect
anchors.fill: textItem
source: textItem
radius: 8
samples: 16
horizontalOffset: 20
verticalOffset: 20
}
}
Run Code Online (Sandbox Code Playgroud) 如何timeout在Qt5 QML Quick 2.0中读取位于Loader对象内的属性?
import QtQuick 2.0
Rectangle {
width: 100
height: 100
color: "black"
property Component comp1 : Component {
Rectangle {
id: abc
property int timeout: 5000
width: 10; height: 10;
color: "red"
}
}
Loader {
id: loader
sourceComponent: comp1
}
Component.onCompleted: console.log( "timeout: " + loader.item.abc.timeout )
}
Run Code Online (Sandbox Code Playgroud)
TypeError:无法读取undefined的属性'timeout'
我一直试图想出一个解决方案,将QtQuick 2.0场景与Direct3D场景一起使用很长一段时间,但不是很成功.我的目标是让Direct3D引擎以合理的速度(60 FPS?)与QML UI一起运行.这两件事都可以自己运行150-200 FPS.但是当被迫在一个窗口内合作时,一切都只是香蕉.我调查了几种方法,但似乎没有一种方法足够:
解决方案A:将Direct3D场景渲染到纹理中,使用QImage和QQuickPaintedItem进行可视化
解决方案B:将QtQuick场景渲染到FBO中,然后使用Direct3D纹理
解决方案C:在具有Direct3D场景的QWidget顶部启用透明度的QQuickView
解决方案X:修改ANGLE库并尝试使用Direct3D渲染器提取和共享D3D设备上下文
我这里显而易见的问题是:我做错了吗?什么是首选解决方案?A,B,C,X或者可能是完全不同的东西?有人能指出我正确的方向吗?
TL; DR: 在Direct3D场景之上渲染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,当我创建空的 QT Quick 项目或打开任何现有的 QT Quick 示例时,我的 QML 设计器不起作用。它显示“无法连接到 QML 仿真层(QML Puppet)”错误。
我尝试重新安装 QT、重新启动、安装其他 QT 套件版本并尝试在套件的 32 位/64 位默认/opengl 版本之间切换,但似乎对我没有任何作用。我能够成功运行设计器一次,在我关闭它并尝试重新打开文件后,它再次停止工作。我也尝试搜索,但没有找到任何解决方案。我也尝试在QT论坛上提问,但没有得到任何答复。
我的系统是 Windows 7,安装了 Visual Studio 2013。谢谢你的帮助!
让我们考虑以下示例:我们有一个Qt Quick Controls Button.用户在5秒内点击两次.在Button第一次推送之后,QML Timer正在运行这5秒钟.我们希望测量两次点击之间经过的时间,精确度为毫秒.
不幸的是,QML Timer无法向我们显示经过的时间.
正如BlackBerry论坛上所建议的那样,可以比较日期.但是,这不是很方便,因为第一次点击可能发生在31 Dec 2015, 23:59:55第二次点击,第二次点击1 Jan 2016, 00:00:05,检查必须是复杂的.
还有更好的选择吗?
我想C++从QML. 我创建了一个QObject名为的派生类Car并将其公开给QML使用qmlRegisterType<Car>("org.qtproject.models", 1, 0, "Car");. 在里面,QML我能够实例化一个Car这样的对象:
Car {
id : car_1
carName : "H1"
carBrand : "Hummer"
carPrice : 125000
}
Run Code Online (Sandbox Code Playgroud)
然后使用该car_1对象并C++在需要时轻松将其传回。但我想是创建一个Car动态的对象QML,这样我就可以把它传递回C++。
我试过:
MouseArea
{
anchors.fill: parent
onClicked: {
component = Qt.createQmlObject("Car { id: car_1; carName : \"H1\"; carBrand : \"Hummer\"; carPrice : 125000; }",
parent, "dynamicSnippet1");
myCarModel.appendRowFromQml(component);
}
}
Run Code Online (Sandbox Code Playgroud)
但没有运气。使用静态方法,工作正常:
MouseArea
{
anchors.fill: …Run Code Online (Sandbox Code Playgroud) 我使用Qt example for QAbstractItemModel并尝试将 更新为Item给定的index.
我尝试使用emit DataChanged但它不起作用,视图未更新。
下面是一个例子:
我想什么:当你点击按钮,它会在索引0更新数据,该type动物将被改变,它会成为一个狮子。
#include <QAbstractListModel>
#include <QStringList>
#include <qqmlcontext.h>
//![0]
class Animal
{
public:
Animal(const QString &type, const QString &size);
//![0]
QString type() const;
QString size() const;
void setType(QString q) {
m_type = q;
}
private:
QString m_type;
QString m_size;
//![1]
};
class AnimalModel : public QAbstractListModel
{
Q_OBJECT
public:
Q_INVOKABLE void test() ;
void setName(const QString …Run Code Online (Sandbox Code Playgroud) 我们正在使用 QtQuick/QML 构建图形用户界面。我们有一些来自数据库的动态多行文本,它们应该显示在应用程序中。目前,我们正在使用Text元素来显示文本。但是,我们需要将一些 QML 组件内联嵌入到文本中。为此,来自数据库的文本包含占位符,例如::checkbox|1::应该由程序替换和显示的。
在 HTML 中,这很容易,您可以简单地将内联元素与文本混合以产生如下结果:
但在 QML 中,这似乎更困难,因为Text如果空间不足(文本和容器大小都应该是动态的),则元素无法自动换行成两半。
我们能想出的最佳解决方案是为每个单词创建Flow一个Text元素的布局,但这似乎太hacky了。RichText与 HTML 一起使用还不够,因为我们确实需要在文本中自定义 QML 元素。此外,WebView由于性能原因,我们希望避免使用 a 。
是否有一种复杂的方法可以仅使用 QML/C++ 来实现?
最近我买了一台全新的 Raspberry Pi 4B,内存为 8Gb,并安装了 Ubuntu Desktop 21.04。
我的目标是在触摸屏上创建一个 GUI,用于控制 GPIO 引脚(某些硬件设备)。
由于控制 GPIO 是由 Python 完成的,所以我也想用它来编写 GUI。我看了几个教程,决定使用 PySide6 + Qt Quick。这种程序在我的个人笔记本电脑上运行良好,但当尝试下载 Raspberry 上所需的依赖项时,例如:
python3.9 -m pip install PySide6
我收到以下错误:
ERROR: Could not find a version that satisfies the requirement PySide6 (from versions: none)
ERROR: No matching distribution found for PySide6
Run Code Online (Sandbox Code Playgroud)
我认为这个问题可能是由交叉编译引起的。
您知道是否有机会在 Raspberry Pi 4B 上运行 PySide6 和 QtQuick?
更新:
在采用 Manjaro ARM KDE Plasma 21.07 64 位操作系统的 Raspberry Pi 4B 上进行测试
运行以下命令:
* Update the package database …Run Code Online (Sandbox Code Playgroud)