我的应用程序是使用QML + JS制作的,我希望创建一个循环进度条小部件.我可以使用QML矩形创建圆,并将其半径设置为等于宽度/ 2,使其成为圆形.如何创建进度条呢?
我打算实现以下模型.

我只想知道我们在QML中是否有像QML中的私有属性那样的概念访问说明符.
如果不是,如果我想知道我的QML组件中有大约10个属性,但我必须限制只有2个属性的访问权限.我们怎样才能实现这种情况.
我知道QML不像小部件一样支持CSS样式,我已经阅读了关于样式/主题的替代方法:
这些方法的共同点是它们要求开发人员指定可以设置样式的QML部分,方法是绑定到"样式化QML文件/单例"中的属性,或者使用Loader加载不同的QML组件在样式名称上.我想要的是像CSS中的"id"选择器而不是"类"选择器,因此单个QML文件不必知道它们是否将在以后设置样式.
我目前的方法使所有QML文件看起来与此类似(使用链接2中的方法):
Main.qml
Rectangle {
Id: background
color: g_theme.background.color
//g_theme is defined in root context and loaded dynamically
}
Run Code Online (Sandbox Code Playgroud)
我想做的是:
Main.qml
Rectangle {
Id: background
color: “green” // default color
}
Run Code Online (Sandbox Code Playgroud)
然后有一个定义(或类似)的样式文件
Main.qml #background.color: red
Run Code Online (Sandbox Code Playgroud)
目前这是可能的,还是未来Qt版本的管道,或者首选的样式方式是否仍然类似于上面链接中描述的方法?
我的难题一般来说是:通过GridView之外的一些动作,我想根据之前选择的特定模型项或索引来计算GridView中特定委托项的坐标.
我有一个GridView,其中有许多项目在模型中.GridView的委托创建每个项目的缩略图视图.单击时,它会显示项目的详细全屏视图.我想要一个很好的转换,它显示缩略图从GridView中的位置扩展出来,当详细视图被解除时,缩小回到GridView中.
诀窍是,详细视图本身就是ListView的委托,因此您可以一次在一个屏幕之间在详细视图之间进行分页.这意味着只需调整GridView的委托项目大小或某些内容的解决方案将无效.此外,由于您可以寻呼到ListView中的任何项目,因此必须仅基于模型中可用的信息或模型项目的索引来返回GridView(例如,我无法存储用于启动的模拟项目的鼠标的坐标.详细的观点或东西).
扩展动画相当简单,因为委托项具有一个用于知道其自身位置的单击处理程序的MouseArea,因此可以将其传递给启动动画的函数.这是我无法弄清楚的反过来:从ListView中的模型项/索引,我如何计算GridView中相关项的坐标?
我在文档中找不到任何似乎可以让您从模型项实例甚至索引访问委托项实例的内容.GridView具有indexAt()基于坐标返回索引的功能.我想我可以反过来做,但它似乎不存在.
这是一个更具体的例子.道歉; 这是我能想出的最准确的代码,它准确地描述了我的问题:
import QtQuick 1.1
Item {
id: window
width: 400
height: 200
state: "summary"
states: [
State { name: "summary"; },
State { name: "details"; }
]
transitions: [
Transition { from: "summary"; to: "details";
SequentialAnimation {
PropertyAction { target: animationRect; property: "visible"; value: true; }
ParallelAnimation {
NumberAnimation { target: animationRect; properties: "x,y"; to: 0; duration: 200; }
NumberAnimation { target: animationRect; property: "width"; to: 400; duration: 200; }
NumberAnimation { …Run Code Online (Sandbox Code Playgroud) 我有一个桌面的QtQuick项目.这很简单:
// import QtQuick 1.0 // to target S60 5th Edition or Maemo 5
import QtQuick 1.1
Rectangle {
width: 360
height: 360
Grid
{
id: xGrid
width: parent.width
height: parent.height
columns: 2
spacing: 1
Rectangle
{
height: parent.height
width: 10
color: "#ff0000"
Text {
id: xText
text: qsTr("t\na\ns")
}
}
TextEdit
{
id: xTextEdit
height: parent.height
width: 350
Keys.onEnterPressed: {
console.log(event.key)
xText.text = (qsTr("A"))
}
}
}
}
Run Code Online (Sandbox Code Playgroud)
我的代码没有像我想的那样运行.在Keys.onEnterPressed似乎从来没有被捕获,所以我尝试Keys.onPressed它的工作,但不知道为什么,当我按下Enter,则even.key返回16777220.
有谁得到这个问题?我该如何解决?
感谢您的回答!
我搜索了如何着色图像(格式为svg或png ...).
我尝试使用填充图像的矩形覆盖我的图像,但由于我的图像不是矩形,因此它将整个矩形着色而不仅仅是图像.
是否可以用qml更改图像颜色?或者,是否可以使用QPixmap更改qt(使用C++)上的颜色,然后将QPixmap集成到QML项目上?
谢谢您的帮助.(如果没有解决方案,我将不得不将不同的图像加载到具有不同颜色的相同基本图像.)
我从Qml获取文件路径,如下所示:
mainView.projectFilePath = Qt.resolvedUrl(newProjectFileDlg.fileUrl).toString();
Run Code Online (Sandbox Code Playgroud)
上面的文件路径如下所示:file:/// C:/uuuu.a3
但当这条路径传递给QFile时,它会抱怨
The filename, directory name, or volume label syntax is incorrect
Run Code Online (Sandbox Code Playgroud)
如何解决这个问题呢?
我正在使用QML,并希望运行自定义OpenGL代码.我用C++创建了一个自定义Widget(扩展了QQuickItem)并覆盖了paint函数().
当我运行我的应用程序时,控制台打印
QSGContext::initialize: depth buffer support missing, expect rendering errors
QSGContext::initialize: stencil buffer support missing, expect rendering errors
Run Code Online (Sandbox Code Playgroud)
就像它预测的那样,我确实会出现渲染错误.我将以蜘蛛模型为例.这是它应该的样子
我也不知道如何描述它,但基本上相反的面(应该被正面阻挡)在旋转时显示出来.
我已设法摆脱深度缓冲区错误:
void MyGLWidget::handleWindowChanged(QQuickWindow *win)
{
if (win) {
connect(win, SIGNAL(beforeSynchronizing()), this, SLOT(sync()), Qt::DirectConnection);
connect(win, SIGNAL(sceneGraphInvalidated()), this, SLOT(cleanup()), Qt::DirectConnection);
win->setClearBeforeRendering(false);
QSurfaceFormat glFormat;
glFormat.setVersion(3,2);
glFormat.setProfile(QSurfaceFormat::CoreProfile);
/*I'm showing everything for context, but this is the key line*/
glFormat.setDepthBufferSize(1);
win->setFormat(glFormat);
}
}
Run Code Online (Sandbox Code Playgroud)
所以现在我只得到了模板错误,但这导致了另一个问题.一侧是完全黑色的,并没有显示任何照明.
其他一些背景信息:我正在显示一个QQuickView.我的OpenGLWidget导入到QML中并嵌入如下:
MyGLWidget {
id: glWidget
}
Run Code Online (Sandbox Code Playgroud)
在我的渲染器的paint()中,我正在调用glEnable(GL_DEPTH_TEST)并glEnable(GL_STENCIL_TEST)在顶部,但这似乎没有做任何事情.也许我在错误的背景下称之为?但是,我不知道我能在哪里调用它.
QML:如何在MouseArea上处理鼠标悬停事件?任何人都可以提供简单的例子或说出我的错误吗?
import QtQuick 1.1
Image {
source: "quit.png"
scale: mouseArea.containsMouse ? 0.8 : 1.0
smooth: quitMouse.containsMouse
MouseArea {
id: quitMouse
anchors.fill: parent
anchors.margins: -10
onClicked: Qt.quit()
}
}
Run Code Online (Sandbox Code Playgroud) 我正在尝试使用QAbstractTableModel的一个(派生类)和一个Qml TableView;
但是,仅显示第1列.
原因是没有为非零列调用QVariant MyModel :: data(const QModelIndex&index,int role),但我不明白为什么.
但是,QTableView工作正常.
我做了一个单独的,简单的项目来重现我的问题:
MyModel.h:
#ifndef MYMODEL_H
#define MYMODEL_H
#include <QObject>
#include <QAbstractTableModel>
#include <QList>
#include <QString>
#include <QDebug>
struct SimpleData
{
QString m_one;
qint32 m_two;
qreal m_three;
};
class MyModel : public QAbstractTableModel
{
Q_OBJECT
public:
explicit MyModel();//MyData *the_data);
int rowCount(const QModelIndex & parent = QModelIndex()) const Q_DECL_OVERRIDE;
int columnCount(const QModelIndex &parent = QModelIndex()) const Q_DECL_OVERRIDE;
QVariant data(const QModelIndex &index, int role = Qt::DisplayRole) const Q_DECL_OVERRIDE;
QHash<int, QByteArray> roleNames() const Q_DECL_OVERRIDE;
signals: …Run Code Online (Sandbox Code Playgroud)