我有使用flex和AS3开发丰富的用户界面应用程序的经验.然而,问题是它很难在这些flex应用程序中使用现有的c ++业务逻辑.随着QML的出现,我很好奇是否有可能将Q ++业务逻辑与QT一起用于丰富的UI应用程序.
我想知道是否有可能为桌面开发全屏丰富的用户界面应用程序(在移动设备中变得越来越常见).例如(http://blog.flexexamples.com/2007/08/07/creating-full-screen-flex-applications/)Adobe有Flash Player,可以在全屏模式下使用,并运行用AS3编写的内容.是否可以使用QT/QML编写类似的应用程序?
我想在QtQuick 2.0中创建一个滚动条,
我发现该Scrollbar组件在QtQuick 1.0中可用,但我在QtQuick 2.0中找不到这样的组件.如何ListView在QtQuick 2.0中创建滚动条?
有帮助吗?提前致谢.
我有一个用qml和c ++编写的GUI.有2个组合框(qt control 5.1).只要第一个组合的值发生变化,第二个组合框就必须在运行时更新.
maincontext->setContextProperty("typemodel", QVariant::fromValue(m_typemodel));
maincontext->setContextProperty("unitmodel", QVariant::fromValue(m_unitmodel));
Run Code Online (Sandbox Code Playgroud)
这是我从c ++给qml的两个模型.
ComboBox {
id: typebox
anchors.left: text1.right
anchors.leftMargin: 5
signal changed(string newtext)
width: 70
height: 23
anchors.top: parent.top
anchors.topMargin: 37
model: typemodel
onCurrentTextChanged: {
mainwin.unitGenerator(typebox.currentText);
}
Run Code Online (Sandbox Code Playgroud)
这是第一个组合框.如您所见,每次更改第一个组合框的值时,第二个组合框的c ++模型都会更新(mainwin.unitGenerator(typebox.currentText)).但它似乎没有更新组合框的模型.
如何在运行时更新qml的模型?
QMessageBox::information()当用户希望使用Qt Quick Controls编写QML应用程序时,相当于什么?
使用Qt 5和QtQuick 2.0
的.pro
# Add more folders to ship with the application, here
folder_01.source = qml/untitled
folder_01.target = qml
DEPLOYMENTFOLDERS = folder_01
# Additional import path used to resolve QML modules in Creator's code model
QML_IMPORT_PATH =
# If your application uses the Qt Mobility libraries, uncomment the following
# lines and add the respective components to the MOBILITY variable.
# CONFIG += mobility
# MOBILITY +=
#CONFIG += qt plugin
#QT += qml quick
# The .cpp file …Run Code Online (Sandbox Code Playgroud) 我们正在开发我们的第一个Qt/QML应用程序(尝试技术).虽然技术看起来很有前景,但我们面临着许多意想不到的奇怪问题,这些问题在一开始就几乎放弃了.
这里有一个这样的问题.
我们希望应用程序具有以下文件夹布局:
--> ApplicationFolder
|--> qml // QML files (also structured by subfolders)
|--> resources // Application resources (images, sounds, data-files, etc.)
| |--> images // Image resources (also structured by subfolders)
| |--> data // Different data files
| |--> ... // Other resources
|--> Application.exe // Application executable
|--> *.dll // DLLs application depends on
Run Code Online (Sandbox Code Playgroud)
问题是,为了指定ImageQML项目的图像文件,我们必须使用相对于QML文件的路径?!这绝对是疯了.在开发过程中,文件有时会在文件夹之间移动(你移动QML文件并且必须修复它拥有的所有路径?!); 一些不同的QML文件必须引用相同的图像(相同的图像资源,但不同的QML文件中的实际路径不同).
所以问题是:如何指定相对于应用程序文件夹的图像路径?有可能吗?
提前致谢!
PS.在我们的案例中,使用Qt的资源系统(当资源嵌入到可执行文件中时)不是一个选项.我们需要磁盘上的原始资源(包括QML文件本身,至少在开发阶段).
PPS.在花了一整天的时间通过文档/ google/stackoverflow解决了这个问题后写了这个问题; 根本没有成功(大多数示例使用资源嵌入,其他示例太简单,只使用相对路径).
我为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复制文件:
然后我得到错误:
Точкавходавпроцедуру_ZN6icu_4910CharString15getAppendBufferEiiRiR10UErrorCodeненайденавбиблиотекеDLIicuuc49.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中的最终库列表:
我忘了添加qml文件的文件夹.
我想跟踪一个对象的全局位置(或相对于它的一个祖先)并将其绑定到其他项目的位置.
我正在考虑使用mapFromItem如下:
SomeObject {
x: ancestor.mapFromItem(trackedObject, trackedObject.x, 0).x
y: ancestor.mapFromItem(trackedObject, 0, trackedObject.y).y
}
Run Code Online (Sandbox Code Playgroud)
这种方法的问题是,它mapFromItem被评估一次,并且不会更新,因为其中一个参数得到更新.此外,映射有时返回由我无法在代码中跟踪的偏移量改变的新位置(但这不是手头的问题).
我的第二个想法是通过实现一个函数来计算全局位置,该函数将递归地求和偏移量,停止在提供的祖先(类似的东西calculateOffsetFrom(ancestor)).这仍然只是一个函数,就我而言,它不会被重新评估为祖先位置变化之一(除非,在该函数中,我将绑定调用它的onXChanged每一个信号的信号)沿途的祖先,这似乎是一个肮脏的解决方案).
所以最后我已经添加了我想要跟踪的对象的属性,然后我绑定到它们:
TrackedObject {
property real offsetX: x + parent.x + parent.parent.x + parent.parent.parent.x ...
property real offsetY: y + parent.y + parent.parent.y + parent.parent.parent.y ...
}
SomeObject {
x: trackedObject.globalX
y: trackedObject.globalY
}
Run Code Online (Sandbox Code Playgroud)
但是......好吧......这个根本不会扩展,而且会像它那样难看.
有谁知道如何以更清洁的方式解决这个问题?
编辑:
据我所知,在这种情况下我不能使用锚点.该SomeObject组件是一个自定义组件,从一个点到另一个点绘制贝塞尔曲线(它将连接两个TrackedObjects).为此,我需要坐标之间的差异.如果我是正确的锚,则不提供任何计算它们之间距离的方法.
我花了很多时间在网上搜索,但没有任何帮助我..
我使用QML构建GUI,我希望他没有框架.
我试着像这样改变我的main.cpp:
#include <QtGui/QGuiApplication>
#include "qtquick2applicationviewer.h"
int main(int argc, char *argv[])
{
QGuiApplication app(argc, argv);
QtQuick2ApplicationViewer viewer;
viewer.setMainQmlFile(QStringLiteral("qml/RR_QML/main.qml"));
viewer.setFlags(Qt::FramelessWindowHint | Qt::Window);
viewer.showExpanded();
return app.exec();
}
Run Code Online (Sandbox Code Playgroud)
我还尝试更改main.qml文件:
Window
{
id: rootWindow
flags: Qt.FramelessWindowHint | Qt.Window
// my qml code here
}
Run Code Online (Sandbox Code Playgroud)
但没什么用.
我很乐意提供任何帮助,谢谢!
我合作:
在Qt 5.4中,创建新"QtQuick UI文件"时的模板生成两个文件:MyScreen.qml和MyScreen.ui.qml.
该MyScreen.ui.qml文件似乎仅适用于UI,因为Qt Creator建议您只应在设计模式下编辑它.这意味着我应该在那里创建UI对象(标签,按钮等),并以某种方式MyScreen.qml在逻辑所在的文件中引用它们.原则上这听起来不错,但遗憾的是Qt没有提供如何使用这两个文件的任何示例.
以下是这些文件的内容:
MyScreen.qml:
import QtQuick 2.4
MyScreen {
}
Run Code Online (Sandbox Code Playgroud)
MyScreen.ui.qml (我在设计模式中添加了Text标签):
import QtQuick 2.4
Item {
width: 400
height: 400
Text {
id: text1
x: 144
y: 151
width: 103
height: 31
text: qsTr("Text")
font.pixelSize: 12
}
}
Run Code Online (Sandbox Code Playgroud)
我尝试实例化一个MyScreen用于a StackView(见下文),但(不出所料)我没有看到标签.
main.qml :
import QtQuick 2.4
import QtQuick.Controls 1.3
import QtQuick.Window 2.2
Window {
visible: true
StackView {
id: stack
anchors.fill: parent
initialItem: myscreen
} …Run Code Online (Sandbox Code Playgroud) qml ×10
qt ×9
qtquick2 ×6
qt-quick ×4
c++ ×2
combobox ×1
fullscreen ×1
qt-creator ×1
qt4 ×1
qt5 ×1