我正在为QtQuick 2.0编写我的第一个QML/Javascript应用程序.我需要放置一个DatePicker控件,但是我没有在QtQuick.Controls下找到任何像这样的控件 - 实际上也没有.
我开始相信没有办法在QML中调用'native'DatePicker.我必须实现一个还是存在一个?
如果我在qml.qrc文件下的不同文件夹中有一堆资源(图像,字体等),有没有办法在Qt Creator中组织它?
例如,如果我在qml.qrc文件中有以下内容:
<RCC>
<qresource prefix="/">
<file>main.qml</file>
<file>pages/MainPage.qml</file>
<file>pages/NewContactPage.qml</file>
<file>images/plus.png</file>
<file>images/minus.png</file>
<file>images/exit.png</file>
</qresource>
</RCC>
Run Code Online (Sandbox Code Playgroud)
它将在Qt Creator中显示为一个长列表,如下所示:
Resources
qml.qrc
/
main.qml
pages/MainPage.qml
pages/NewContactPage.qml
images/plus.png
images/minus.png
images/exit.png
Run Code Online (Sandbox Code Playgroud)
由于这个列表在项目的持续时间内可能会非常长,如果这些列表更好地组织并分成像我们目录中的文件夹那样会很好.有任何想法吗?
潜在相关:https://stackoverflow.com/a/30860285/3363018
我一直在尝试使用跨越可变数量的行和列的项创建QML布局.因此,例如,一个跨越两行和四列的矩形,一个在其右侧,跨越一行和两列,另一个跨越三行和五列.创建此的一般尝试如下:
import QtQuick 2.5
import QtQuick.Layouts 1.2
import QtQuick.Controls 1.4
ApplicationWindow {
visible: true
width: 640
height: 480
title: qsTr("Hello World")
GridLayout {
anchors.fill: parent
columns: 5
rows: 2
Rectangle {
Layout.column: 0
Layout.columnSpan: 4
Layout.row: 0
Layout.rowSpan: 2
Layout.fillHeight: true
Layout.fillWidth: true
color: "red"
}
Rectangle {
Layout.column: 4
Layout.columnSpan: 1
Layout.row: 0
Layout.rowSpan: 2
Layout.fillHeight: true
Layout.fillWidth: true
color: "green"
}
Rectangle {
Layout.column: 0
Layout.columnSpan: 5
Layout.row: 2
Layout.rowSpan: 3
Layout.fillHeight: true
Layout.fillWidth: …Run Code Online (Sandbox Code Playgroud) 我试图使用Canvas对象在QML中绘制环形扇区.首先,我编写了javascript代码,并通过在浏览器中执行它验证了它是正确的.
这里是:
var can = document.getElementById('myCanvas');
var ctx=can.getContext("2d");
var center = {
x: can.width / 2,
y: can.height / 2
};
var minRad = 100;
var maxRad = 250;
var startAngle = toRad(290);
var endAngle = toRad(310);
drawAxis();
drawSector();
function drawSector() {
var p1 = {
x: maxRad * Math.cos(startAngle),
y: maxRad * Math.sin(startAngle)
}
p1 = toCanvasSpace(p1);
var p2 = {
x: minRad * Math.cos(startAngle),
y: minRad * Math.sin(startAngle)
}
p2 = toCanvasSpace(p2);
var p3 = {
x: minRad …Run Code Online (Sandbox Code Playgroud) 我在Fedora 23上使用Qt 5.6,我注意到console.log()并且console.debug()没有向控制台写任何东西.我的示例代码:
import QtQuick 2.6
import QtQuick.Window 2.2
Window {
visible: true
Text {
text: qsTr("Hello World")
anchors.centerIn: parent
Component.onCompleted: {
console.warn("warn completed")
console.log("log completed")
console.error("error completed")
console.debug("debug completed")
console.exception("exception completed")
console.info("info completed")
}
}
}
Run Code Online (Sandbox Code Playgroud)
打印到控制台:
QML debugging is enabled. Only use this in a safe environment.
qml: warn completed
qml: error completed
qml: exception completed
onCompleted (qrc:/main.qml:16)
qml: info completed
Run Code Online (Sandbox Code Playgroud)
所以warn,error,exception,和info做工精细.我究竟做错了什么?
编辑#1:项目是新创建的,我的所有来源:
main.cpp中
#include <QGuiApplication> …Run Code Online (Sandbox Code Playgroud) 我正在尝试运行一个非常简单的程序,只需在单击"退出"按钮时关闭窗口,但如果包含该按钮的应用程序窗口未显示,则获取以下输出:
Starting C:\Users\Ola\Desktop\signal_slot1-build-desktop-Qt_4_8_1_for_Desktop_-_MSVC2008__Qt_SDK__Debug\debug\signal_slot1.exe...
Qml debugging is enabled. Only use this in a safe environment!
Run Code Online (Sandbox Code Playgroud)
在这种情况下我该怎么办?
我有这条QML代码:
Column {
spacing: units.gu(2)
anchors {
fill: parent
centerIn: parent
}
Row {
spacing: units.gu(4)
...
}
Row {
spacing: units.gu(4)
...
}
Row {
spacing: units.gu(4)
...
}
Row {
spacing: units.gu(4)
...
}
}
Run Code Online (Sandbox Code Playgroud)
关于QML编程的最佳实践,如何重用代码以避免常见元素的重复属性?例如,在上面的示例中,避免行"spacing:units.gu(4)".
我试图从Qt 5.1.0安装程序导入TimeExample Qt快速扩展插件.
libqmlqtimeexampleplugin.so 是成功建造的 build-plugins-Android_for_arm_GCC_4_6_Qt_5_1_0-Debug/imports
然后我从Qt Creator创建了简单的Qt Quick2应用程序(内置元素).我应该在应用程序项目文件中添加什么来获取输出".apk"包中的QML插件?
现在它说:
W/Qt(23528):assets:/qml/TimeExampleTest/main.qml:2():assets:/qml/TimeExampleTest/main.qml:2:1:模块"TimeExample"未安装
main.qml
import QtQuick 2.0
import TimeExample 1.0 // import types from the plugin
Rectangle {
width: 360
height: 360
Text {
text: qsTr("Hello World")
anchors.centerIn: parent
}
MouseArea {
anchors.fill: parent
onClicked: {
Qt.quit();
}
}
Clock { // this class is defined in QML (imports/TimeExample/Clock.qml)
Time { // this class is defined in C++ (plugin.cpp)
id: time
}
hours: time.hour
minutes: time.minute
}
}
Run Code Online (Sandbox Code Playgroud)
TimeExampleTest.pro
folder_01.source = qml/TimeExampleTest …Run Code Online (Sandbox Code Playgroud) 我的应用程序使用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中.
我尝试了很多例子并阅读了所有文档,但仍然无法解决我的问题.
所以我的问题:
var obj = Qt.createComponent("MyObject");但看起来不行.是否有可能以正常的JS风格定义新对象 - var obj = new MyObject;?TypeError: Property 'someFunction' of object QQmlComponent(0x3605f5c0) is not a function.我在这里做错了什么?我的对象派生自QObject,而不是来自QQmlComponent.当我需要在运行时创建任何QML组件时,我可以使用该指南:http: //qt-project.org/doc/qt-5/qtqml-javascript-dynamicobjectcreation.html
即只需调用Qt.createComponent和component.createObject
但我找不到如何在运行时创建ListModel?用qml,而不是用c ++.
你可以问,为什么我需要它.所以,我有一个嵌套的ListModel:有外部模型,它委托包含的内部模型.因此,当我调用outer_model.append({})时,我必须为内部模型传递新创建的ListModel .我不能在外部委托中使用静态定义的内部模型,因为我无法在运行时访问此类模型.顺便说一句,可以以某种方式访问它吗?
PS也许在javascript中尝试管理模型是完全错误的想法?
qml ×10
qt ×6
javascript ×3
qt5 ×3
qtquick2 ×2
android ×1
canvas ×1
datepicker ×1
fedora ×1
html ×1
qt-creator ×1
qt-quick ×1
runtime ×1