问题标签 [qtquick2]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
3800 浏览

qt - 在 QML 中设置公共属性值,例如 QSS

例如,我有 2 个具有共同属性的不同 QML 元素,例如:

您可以看到,Text 和 TextInput 具有相同的属性,称为“颜色”,具有相同的值。

在 QSS 中,我可以使用公共属性值,例如:

并且所有属于 qss 小部件的 QWidgets 也将具有红色背景。

是在 QML 中设置公共属性的方法吗?

0 投票
3 回答
24259 浏览

qt - 没有 QtCreator,exe 文件无法运行

为 Windows 32 位安装了 Qt 5.0.1 (MinGW 4.7, 823 MB)

然后我创建了简单的 Quick 2 应用程序并编译了它。应用程序位于其文件夹中,应用程序从 QtCreator 运行。我想在没有 QtCreator 的情况下运行这个 exe 文件。为此,我从C:\Qt\Qt5.0.1\5.0.1\mingw47_32\bin复制文件:

  1. Qt5Core.dll
  2. icuin49.dll
  3. libgcc_s_sjlj-1.dll
  4. libwinpthread-1.dll
  5. libGLESv2.dll
  6. libstdc++-6.dll
  7. qminimal.dll
  8. Qt5Gui.dll
  9. Qt5Network.dll
  10. Qt5Qml.dll
  11. Qt5Quick.dll
  12. Qt5V8.dll
  13. qwindows.dll

然后我得到错误:

Точка входа в процедуру _ZN6icu_4910CharString15getAppendBufferEiiRiR10UErrorCode не найдена в библиотеке DLL icuuc49.dll

翻译:

在库 DLL icuuc49.dll 中找不到程序入口点 _ZN6icu_4910CharString15getAppendBufferEiiRiR10UErrorCode

如果我将 exe 文件复制到文件夹C:\Qt\Qt5.0.1\5.0.1\mingw47_32\bin(所有 dll 都在哪里),程序运行,但没有显示。

如果我将 exe 文件复制到文件夹C:\Qt\Qt5.0.1\Tools\QtCreator\bin(所有 dll 都在哪里),则程序无法运行。

该怎么办?程序运行在哪里和哪些库?

解决了。来自C:\Qt\Qt5.0.1\5.0.1\mingw47_32\bin的库的最终列表:

  1. icuin49.dll
  2. icuuc49.dll
  3. libEGL.dll
  4. libgcc_s_sjlj-1.dll
  5. libGLESv2.dll
  6. libstdc++-6.dll
  7. libwinpthread-1.dll
  8. Qt5Core.dll
  9. Qt5Gui.dll
  10. Qt5Network.dll
  11. Qt5Qml.dll
  12. Qt5Quick.dll
  13. Qt5V8.dll

我忘了添加带有 qml 文件的文件夹。

0 投票
1 回答
1247 浏览

qt - Windows XP 中的 Qt Quick 2.0

我为 Windows 32 位安装了 Qt 5.0.1 (MinGW 4.7, 823 MB)

然后我创建了简单的 Quick 2 应用程序并编译了它。程序在干净的 Windows 7、Windows 8 上运行。但程序不能在 Windows XP 上运行。我有这个错误:

Точка входа в процедуру _vsnprintf_s не найдена в библиотеке DLL msvcrt.dll

翻译:在库 DLL msvcrt.dll 中找不到过程入口点 _vsnprintf_s

错误

该怎么办?程序运行在哪里和哪些库?

0 投票
4 回答
5639 浏览

qt - Qt5 & QtQuick2 - 透明主窗口

我正在尝试创建一个带有无框窗口和圆角的简单 Qt UI。从使用QtQuick 2 应用程序模板的新项目开始,我的代码如下所示:

主文件

main.qml

这是结果:

这就是结果

我不想做的是通过使主窗口透明来摆脱白色角落。但是,据我所知,Qt5 中没有办法做到这一点,因为我们没有样式表等,而且我没有使用 QtWidget。我应该使用 QtWidget 吗?

顺便说一句,我是 Qt 和 Qt5 的新手。

0 投票
5 回答
6914 浏览

syntax-highlighting - QML 中的 Qt5 语法高亮

我正在做一个QtQuick 2.0演示文稿,我想嵌入一些代码示例。是否可以轻松创建语法突出显示 QML 元素。

有问题的目标是将语法突出显示应用于 aTextEdit或 a TextArea。我知道 Qt 有 a QSyntaxHighlighter,但文档不是很清楚如何将它应用到 aTextEdit或 a TextArea

你能举例说明它是如何完成的吗?

0 投票
1 回答
4375 浏览

qt - 应用程序在调试时工作,但在“发布”时不工作

所以,我只是做了一个标准的QtQuick 2应用程序,它有默认的Recangle,TextMouseArea. 所以,我只是尝试在发布模式下编译应用程序,看看它会生成什么文件,然后我尝试打开应用程序并发生了这种情况:

当我调整它的大小时,我可以看到空白:

但是,在调试中一切正常:

在此处输入图像描述

我正在使用 Qt 5.0.1 和 QtQuick2

更新

因此,在通过Dependency Walker运行它之后,似乎缺少三个文件:qt5quick.dllqt5gui.dllqt5core.dll. 我必须从某个地方手动添加它们吗?

当前目录结构为:

注意:我按照父目录中Nemanja Boric 的回答中的建议粘贴了 qml 目录,但这并没有解决问题!:(

另外,我的印象是,没有任何源代码(可能除了 JavaScript)不会与应用程序一起公开分发,而是以某种方式编译或打包在应用程序中(注意.cpp文件和qml目录)?

更新 2

从 Qt 5 Creator 内部运行时,该应用程序运行良好:

好吧,除了那个尴尬的警告...

0 投票
1 回答
3627 浏览

c++ - OpenGL 和 QtQuick 纹理问题

我正在基于 Qt 附带的“openglunderqml”示例在 C++ 中开发一个简单的 QQuickItem 实现。我做了一些修改以使用不同的着色器和我加载的两个纹理。这个想法是着色器将在两个纹理之间交叉淡入淡出(这基本上只是我加载到纹理中的图像)。

当我将这个 QQuickItem 单独放在 QML 文件中并运行它时,一切正常。图像彼此交叉淡入淡出(我设置了一个属性动画以保持它们交叉淡入淡出)并且一切看起来都很好。但是,如果我放置其他元素(例如文本),则文本无法正确呈现——只是形状奇特的小块。如果我把一张图片放进去,事情就会变得很奇怪。而不是 QQuickItem 呈现它应该呈现的框,它呈现全屏和倒置。据我所知,其他图像从未加载。

我想我一定没有做我应该做的事情,但我不知道是什么。请注意,第一个代码块包含着色器和渲染内容,第二个包含函数 loadNewTexture(),它将新图像加载到纹理中(每个纹理仅调用一次 - 不是每次渲染),第三个包含 QtQuick .qml 文件.

下面是 opengl 代码(在 QQuckItem::Paint 方法中):

loadNewTexture() 函数:

.qml 文件:

0 投票
3 回答
1743 浏览

visual-c++ - 在 Windows 7 和 XP 中使用 QtQuick 2.0 部署 HelloWorld

几个星期以来,我一直在努力正确部署我的应用程序(这是一种爱好),我只是不知道还能尝试什么。

我通过选择 Applications -> Qt Quick 2 Application (Built-in Elements) 在 Qt Creator (2.6.1) 中启动了一个新项目。我调整了 QML,使背景为蓝色,文本为红色:

main.qml

我正在使用 Qt 5.0.1 和 x86 MSVC 2010 编译器。我构建了发布版本,它在 QtCreator 中运行良好。如果您需要更多编译器细节,我会发布它们。

为了部署,我在我的桌面上创建了一个名为的新文件夹,HelloWorld/并将所有内容H:\Qt\Qt5.0.1\5.0.1\msvc2010\bin\*andH:\Qt\Qt5.0.1\5.0.1\msvc2010\plugins\*和 'H:\Qt\Qt5.0.1\5.0.1\msvc2010\qml* 以及 Release HelloWorld.exe 可执行文件复制到其中。

矫枉过正?是的。但我很绝望。

当我在 Windows 7 64 位中运行 HelloWorld/HelloWorld.exe 时,应用程序运行良好。但是,当我将此 HelloWorld/ 文件夹复制到运行 Windows XP 32 位的虚拟机中时,它会显示一个大小合适的窗口,但其中没有任何内容(白色,没有文本)。单击窗口中心时,窗口将按原样关闭。

所以我在 Dependency Walker 中加载了可执行文件,但没有任何异常(当然缺少 IESHIMS.DLL 和 WER.DLL)。我运行了 Start Profile,并得到了一系列红色错误:

GetProcAddress(0x7C800000 [KERNEL32.DLL], "FlsAlloc") 从地址 0x78ABBA3B 的“MSVCR100.DLL”调用并返回 NULL。错误:找不到指定的过程 (127)。

GetProcAddress(0x7C800000 [KERNEL32.DLL], "FlsGetValue") 从地址 0x78ABBA48 的“MSVCR100.DLL”调用并返回 NULL。错误:找不到指定的过程 (127)。

GetProcAddress(0x7C800000 [KERNEL32.DLL], "FlsSetValue") 从地址 0x78ABBA55 的“MSVCR100.DLL”调用并返回 NULL。错误:找不到指定的过程 (127)。

GetProcAddress(0x7C800000 [KERNEL32.DLL], "FlsFree") 从地址 0x78ABBA62 的“MSVCR100.DLL”调用并返回 NULL。错误:找不到指定的过程 (127)。

LoadLibraryExW("C:\documents and settings\owner\desktop\helloworld\platforms\qminimald.pdb", 0x00000000, DONT_RESOLVE_DLL_REFERENCES) 返回 NULL。错误:%1 不是有效的 Win32 应用程序 (193)。

LoadLibraryExW("C:\documents and settings\owner\desktop\helloworld\platforms\qwindowsd.pdb", 0x00000000, DONT_RESOLVE_DLL_REFERENCES) 返回 NULL。错误:%1 不是有效的 Win32 应用程序 (193)。

GetProcAddress(0x7E410000 [USER32.DLL], "UpdateLayeredWindowIndirect") 从地址 0x013A8749 的“QWINDOWS.DLL”调用并返回 NULL。错误:找不到指定的过程 (127)。

GetProcAddress(0x7C9C0000 [SHELL32.DLL], "SHCreateItemFromParsingName") 从地址 0x013A8997 的“QWINDOWS.DLL”调用并返回 NULL。错误:找不到指定的过程 (127)。

GetProcAddress(0x7C9C0000 [SHELL32.DLL], "SHGetStockIconInfo") 从地址 0x013A89C9 的“QWINDOWS.DLL”调用并返回 NULL。错误:找不到指定的过程 (127)。

GetProcAddress(0x7C800000 [KERNEL32.DLL], "GetTickCount64") 从地址 0x670726A7 的“QT5CORE.DLL”调用并返回 NULL。错误:找不到指定的过程 (127)。

GetProcAddress(0x755C0000 [MSCTFIME.IME], "ImeGetImeMenuItems") 从地址 0x76397354 的“IMM32.DLL”调用并返回 NULL。错误:找不到指定的过程 (127)。

GetProcAddress(0x4FDD0000 [D3D9.DLL], "Direct3DCreate9Ex") 从地址 0x01487198 处的“LIBEGL.DLL”调用并返回 NULL。错误:找不到指定的过程 (127)。

我也尝试运行调试版本,但我只有 64 位版本的 MSVC100 dll,所以我无法将它们复制到 XP 机器(我只能运行 32 位可再发行版本)。我不知道我可以使用哪些其他工具来尝试解决我的问题。

我知道我一定是在做一些愚蠢的事情,但我真的在互联网上找不到任何可以帮助的东西。花这么多时间开发一个 Qt 应用程序,然后在尝试部署它时陷入困境,真是令人沮丧。

我应该注意到,该程序在 Windows 7 32 位虚拟机中运行良好(在安装了 MSVC2012 可再发行组件之后)。

真正感兴趣的应用程序在 Windows XP 中运行起来非常奇怪。当我第一次运行它时,窗口大小正确,并显示了几个文本字符串。但是没有显示任何 Rectangle{} 元素。我让应用程序运行了几分钟,为自己煮了些咖啡,当我回到我的电脑时,窗口随着文本光标的节拍闪烁着随机的形状和文本!那是什么呀?!看起来一个基本的数学函数被搞砸了,所以界面的某些部分以不正确的尺寸和位置显示。我什至看到鼠标光标一眨眼就出现了真实的界面(是的,随机形状会随着鼠标光标的节拍出现和消失)。

一时兴起,我尝试使用该应用程序(单击我知道存在文本框的位置)来填充其中一个列表,并且成功了!除图形外,该应用程序运行良好。我知道 Qt 5.0 重新处理了一些 OpenGL 处理,对吗?这可能是一个错误,或者可能是我尚未安装的库?

0 投票
1 回答
2922 浏览

qt - 资源文件中带有 qml 的程序不会打开非主 qml 文件

我为 Windows 32 位安装了 Qt 5.0.1 (MinGW 4.7, 823 MB)

然后我创建了简单的 Quick 2 应用程序。我有两个简单的 qml 文件:

main.qml

HarrixMainButton.qml

并且该程序运行良好。然后我将 qml 文件放入前缀 qml 的资源 res.qrc 中并更改 main.cpp:

并且该程序不起作用。第二个文件 HarrixMainButton.qml 未加载。仅加载主要的第一个文件 main.qml。

qrc:qml/qml/HarrixAI/main.qml:16:5:HarrixMainButton 不是类型 尝试呈现 QtQuick2ApplicationViewer(0x28fe08) ( QRect(8,30 116x0) ) 时,无法找到可呈现的主窗口 QtQuick2ApplicationViewer(0x28fe08)。

如何解决问题?在带有 Qt Quick 1.1 的 Qt 4.7 中,同样的方法有效。

0 投票
3 回答
1995 浏览

qt - QObject 可以从 Java 脚本调用吗

是否可以从 Java 脚本中调用 QObject?我的意思是像这样注册 QObject 派生类实例:

然后能够从 Java Script调用myFunction

环境:Qt 5.0.1

编辑:此操作的主要目的是在 Java 脚本引擎中注册 C++ 函数或仿函数,并使其不是作为对象的属性而是作为独立函数可用。