这是我的 QML 视图:
// Imports ommitted
Item {
id: paymentMethods
required property PaymentMethodsModel model
ColumnLayout {
anchors.fill: parent;
Text {
text: "Payment methods";
}
ListView {
Layout.fillHeight: true
Layout.fillWidth: true
model: paymentMethods.model
delegate: PaymentMethods.Item { }
}
ToolBar { }
}
}
Run Code Online (Sandbox Code Playgroud)
问题是,它看起来像这样:
我认为这是因为委托没有指定宽度,因为如果我这样做:
delegate: PaymentMethods.Item {
width: parent.width
onPmSaved: {
ListView.view.model.rename(index, newName)
}
}
Run Code Online (Sandbox Code Playgroud)
它看起来好多了:
问题是,当我进行对项目重新排序的编辑时,我收到此错误:
qrc:/PaymentMethods.qml:32: TypeError: Cannot read property 'width' of null
Run Code Online (Sandbox Code Playgroud)
有没有一种好方法将 QML ListView 的委托宽度设置为完整父级的宽度?
qml查看器(适用于4.8和5.0)实现如下:
在.h(eader)我们有:
class QtQuick2ApplicationViewer : public QQuickView
{
Q_OBJECT
...
private:
class QtQuick2ApplicationViewerPrivate *d;
};
Run Code Online (Sandbox Code Playgroud)
然后在.CPP文件中:
class QtQuick2ApplicationViewerPrivate
{
QString mainQmlFile;
friend class QtQuick2ApplicationViewer;
static QString adjustPath(const QString &path);
};
QtQuick2ApplicationViewer::QtQuick2ApplicationViewer(QWindow *parent)
: QQuickView(parent)
, d(new QtQuick2ApplicationViewerPrivate())
{
connect(engine(), SIGNAL(quit()), SLOT(close()));
setResizeMode(QQuickView::SizeRootObjectToView);
#ifdef Q_OS_ANDROID
engine()->setBaseUrl(QUrl::fromLocalFile("/"));
#endif
}
Run Code Online (Sandbox Code Playgroud)
为什么friend在这里需要使用?我没有看到任何人使用friend课程的原因.朋友课有没有真正的用途(除了任何人都可以没有的外来物种)?
.h #include
class QtQuick2ApplicationViewer : public QQuickView
{
Q_OBJECT
public:
explicit QtQuick2ApplicationViewer(QWindow *parent = 0);
virtual ~QtQuick2ApplicationViewer();
void setMainQmlFile(const QString &file);
void addImportPath(const QString &path);
void showExpanded();
private: …Run Code Online (Sandbox Code Playgroud) 我有一个转发器,它们在创建时被动画化.
Repeater {
model : 0
Image {
...
Animation {
...
}
}
}
Run Code Online (Sandbox Code Playgroud)
如果我在上一个元素的动画结束后向模型添加元素,那么一切都正常.但如果我之前添加一个eleent,它就无法工作.例如,如果我有枪射击子弹,如果我等到子弹的动画结束一切正常.但如果我想在第一个结束之前拍摄另一个子弹,第一个消失,我只看到第二个动画.
我该怎么做才能看到所有的动画?
如何使用QtQuick 2绘制矩形并控制它是显示左边界还是右边界?
鉴于我的想法,我咆哮着错误的树?或者提供以下信息我是否滥用Qt API来获取标题中的错误?
我正在尝试修改http://doc.qt.io/qt-5/qtquick-scenegraph-openglunderqml-example.html上的示例,以使用Qt Creator 3.3.0(opensource)生成的默认QtQuick项目. Qt 5.4.0(GCC 4.6.1,64位).
仔细查看代码后,第一件事就是:
样本main.cpp使用:
qmlRegisterType<Squircle>("OpenGLUnderQML", 1, 0, "Squircle");
QQuickView view;
view.setResizeMode(QQuickView::SizeRootObjectToView);
view.setSource(QUrl("qrc:///scenegraph/openglunderqml/main.qml"));
view.show();
Run Code Online (Sandbox Code Playgroud)
有些重命名我的main.cpp使用
qmlRegisterType<MainScreen>("OpenGLUnderQML", 1, 0, "MainScreen");
QQmlApplicationEngine engine;
engine.load(QUrl(QStringLiteral("qrc:/main.qml")));
Run Code Online (Sandbox Code Playgroud)
我不确定使用QQmlApplicationEngine而不是QuickView的差异是否会导致我的错误:
QQmlApplicationEngine无法加载组件qrc:/main.qml:23
无效的附加对象分配
我的main.qml看起来像:
import QtQuick 2.4
import QtQuick.Window 2.2
import OpenGLUnderQML 1.0
import "qmlmodel"
Window {
id: mainWindow
width: 800
height: 600
visible: true
color: "black"
title: "Army Calculator"
objectName: "mainWindow"
ListView {
id: mainListView
anchors.fill: parent
objectName: "mainListView"
}
MainScreen {
SequentialAnimation on DeltaT {
NumberAnimation { to: 1; …Run Code Online (Sandbox Code Playgroud) 有没有办法设置旋转点Rectangle并简单地使用旋转属性而不需要任何其他附加组件?我想旋转Rectangle与绑定的属性rotation: value * 180是这样
Rectangle{
id: body
rotation: value
anchors.centerIn: parent.Center
antialiasing: true
}
onValueChanged: body.rotation = value
Run Code Online (Sandbox Code Playgroud)
我只绕父母的左上角旋转.请帮助我理解这种行为或建议我在中心实施轮换的另一种方法.
我正在创建一个自定义QML组件(其特殊性ListView允许多个选择).我想为提供给我的组件的对象提供附加属性.我看到如何使用C++创建附加属性.但是,我找不到有关在纯QML中添加自定义属性的信息.这可能使用QML吗?
我是QMl的初学者,在QT C++中使用StackWidget做了更多.在QML中,我很困惑使用stackView并编写了以下代码:
Window {
visible: true
width: 640
height: 480
title: qsTr("Stack view")
MainForm {
StackView {
id: stackView
x: 0
y: 0
width: 360
height: 360
initialItem: page1
Rectangle {
id: page1
//anchors.fill: parent
color: "lightgreen"
Button {
id: buttonPage1
text: "back to 2"
anchors.centerIn: parent
onClicked: {
stackView.pop() //**Is THIS CORRECT**
stackView.push(page2) //**Is THIS CORRECT**
}
}
TextEdit {
id: te1
width: 105
height: 40
text: "enter"
}
}
Rectangle {
id: page2
//anchors.fill: …Run Code Online (Sandbox Code Playgroud)