我在 QML 中有一个二维浮点数组。我如何在 C++ 中获取它的值。
我用 C++ 创建了一个类,并完成了qmlRegisterType. 现在可以在 QML 中访问该类。
请用一个小例子来演示。
这是我尝试过的:
标题:
#include <QQuickItem>
#include <iostream>
class Controller : public QObject
{
Q_OBJECT
Q_PROPERTY(QList <QVariantList> names READ names WRITE setnames NOTIFY namesChanged)
QList <QVariantList> m_names;
public:
Controller()
{
}
~Controller() {
}
QList <QVariantList> names() const
{
return m_names;
}
public slots:
void setnames(QList <QVariantList> arg)
{
QVariantList p;
if (arg.size () > 0)
{
p = arg.first ();
std::cout << "\narg: \n" << p[0].toInt (); …Run Code Online (Sandbox Code Playgroud) 假设我有一个 C++ 对象,其中包含一个向 QML 公开的成员对象:
class X : public QObject
{
Q_OBJECT
};
class Y : public QObject
{
Q_OBJECT
Q_PROPERTY(X* x READ getX CONSTANT)
public:
X* getX(void) { return &x; }
X x;
};
Run Code Online (Sandbox Code Playgroud)
大多数情况下这有效,但有时会导致崩溃。调用堆栈相当长,但如下所示:
QScopedPointer<QObjectData, QScopedPointerDeleter<QObjectData> >::data
qGetPtrHelper<QScopedPointer<QObjectData>>
QObject::d_func
QObjectPrivate::get
QQmlNotifierEndpoint::disconnect
QQmlNotifierEndpoint::~QQmlNotifierEndpoint
QQmlJavaScriptExpressionGuard::~QQmlJavaScriptExpressionGuard
QRecyclePool<QQmlJavaScriptExpressionGuard, 1024>::Delete
QQmlJavaScriptExpressionGuard::Delete
QQmlJavaScriptExpression::GuardCapture::captureProperty
QQmlEnginePrivate::captureProperty
QV4::QObjectWrapper::getProperty
etc.
Run Code Online (Sandbox Code Playgroud)
如果我设置X为一个指针:
class Y : public QObject
{
Q_OBJECT
Q_PROPERTY(X* x READ getX CONSTANT)
public:
Y()
{ x = new X; }
X* getX(void) { return x; …Run Code Online (Sandbox Code Playgroud) 如果下一个元素的宽度超过指定布局的宽度,是否有 QML 布局或某些配置会自动将 QML 项目包装到下一行?
当我使用QML GridLayout时,项目只是离开窗口边缘并被剪切:
GridLayout {
id: header_focused_container;
width: parent.width;
anchors.margins: 20;
Text {
text: "header_focused_container.width=" +
header_focused_container.width +
" and my width is =" + width
}
Rectangle { height:20; width:250; color: "red" }
Rectangle { height:20; width:250; color: "blue" }
Rectangle { height:20; width:250; color: "green" }
}
Run Code Online (Sandbox Code Playgroud)
![网格布局工作[1]](https://i.stack.imgur.com/fJ4EN.png)
当我查看 Qt 标记为“可扩展性”的文档页面时,我发现正在进行非常手动的缩放。基本上,他们建议我需要计算所需的列。
是否有某种布局类型或配置可以自动换行项目?
我正在使用 pyqt5 开发桌面应用程序,并且我想使用具有手写识别功能的虚拟键盘。我看到Qt、QtVirtualKeyboard已经支持它了。
这是一个链接!
我在 QtCreator 上运行了 C++ Qt 示例代码。但是使用 python3.5 和 PyQt5 会给出以下消息:
module "QtQuick.VirtualKeyboard" is not installed
import QtQuick.VirtualKeyboard 2.1
Run Code Online (Sandbox Code Playgroud)
我应该如何继续?PyQt5 是否带有 VirtualKeyboard 模块?如果没有如何在PyQt5上安装它?
Qt Quick Templates 弹出窗口与 QtQuick Controls 弹出窗口有什么区别?
import QtQuick.Templates 2.0我从vs得到的弹出窗口import QtQuick.Controls 2.0似乎有细微的行为差异。
[1] https://doc-snapshots.qt.io/qt5-5.8/qml-qtquick-controls2-popup.html
我想用QAbstractListModel. 似乎有两个 Qml 工具适合于此,MapItemView[1] 和Repeater[2]。更Repeater强大(例如,它允许嵌套模型) - 那么有什么理由使用 theMapItemView代替 a Repeater?
问候,
[1] http://doc.qt.io/qt-5/qml-qtlocation-mapitemview.html
[2] http://doc.qt.io/qt-5/qml-qtquick-repeater.html
MapItemView源:http://code.qt.io/cgit/qt/qtlocation.git/tree/src/location/declarativemaps/qdeclarativegeomapitemview.cpp
转发器源:http://code.qt.io/cgit/qt/qtdeclarative.git/tree/src/quick/items/qquickrepeater.cpp
有没有一种方法可以Component在不使用 的情况下实例化内联(即在同一文件中定义)Loader?我不太关心使用Loaders 的性能影响,因为我担心大量Loader包装器会污染我的文件。
有一个 TextArea,我已将activeFocusOnPress属性设置为false阻止虚拟键盘弹出,但是当用户单击 TextArea 时,光标位置应该移动。为了实现这一目标,我认为 mousearea 将是一个不错的选择。以下是代码:
TextArea{
id:textArea
text:"ABCDEFGHIJKLMNOPQRSTUVWXYZ"
width:100
height: 200
color: "white"
cursorVisible: true
activeFocusOnPress: false //To Block virtual Keyboard popup
background: Rectangle{
color:"transparent"
border.color : "white"
border.width:2
MouseArea{
id:mousearea
anchors.fill:parent
onClicked: {
//*** How to set cursor position??
}
}
}
}
Run Code Online (Sandbox Code Playgroud) 目前我有一个以下列方式打开的窗口:
property variant win
Button {
id: testButton
MouseArea {
onClicked: {
var component = Qt.createComponent("test.qml");
win = component.createObject(testButton);
win.show();
}
}
}
Run Code Online (Sandbox Code Playgroud)
创建这样的窗口是否可以,或者有更好的方法来做到这一点(来自 QML,而不是来自 C++)?
当我关闭这个附加窗口时(只需单击“x”按钮),我想将它连接到另一个事件(例如,更改按钮的颜色)。怎么做?
谢谢。
我将在触摸屏上开发一个系统。我尝试使用 Qwidget。但是我在 QT 文档中找到了这个。
它说,“Qt Widgets 通常需要鼠标光标才能进行良好的交互,而 Qt Quick 只提供了设计时考虑到触摸交互的原始构建块。”
那是什么意思?鼠标光标和原始积木有什么区别?