c++ - 如何在 QML 文档中嵌入 QLabel?
问题描述
我找到了如何在 QML 文档中显示 QWidget(特别是 QLabel)的示例:
https://kunalmaemo.blogspot.com/2011/07/how-to-display-qwidget-into-qml.html
问题是它使用 QtQuick 1 并且不会在我的应用程序(使用 QtQuick 2)中编译。
如何使用 QtQuick 2 做到这一点?我需要做这个原始示例所做的事情:QLabel
在 c++ 端创建一个并将其嵌入到 QML 文档中。
到目前为止,这是我能够做到的。这类似于我在上面发布的示例,除了没有,QGraphicsProxyWidget* mProxy;
因为它没有在 QtQuick 2 中编译,并且出于同样的原因,我将其设为 aQQuickView
而不是 a 。QDeclarativeItem
在 c++ 方面,我定义了一个名为QmlLabel
.
标题:
class QmlLabel : public QQuickView
{
Q_OBJECT
Q_PROPERTY(QString text READ text WRITE setText)
public:
explicit QmlLabel(QQuickView *parent = 0);
~QmlLabel();
public slots:
void setText(const QString& text);
QString text() const;
private:
QLabel* mLabel;
};
执行:
QmlLabel::QmlLabel(QQuickView *parent) :
QQuickView(parent)
{
mLabel = new QLabel(QString(""));
mLabel->setText("Your mother sews socks");
mLabel->setStyleSheet("QLabel { background-color : red; color :
blue; white-space : pre-wrap; }");
}
QmlLabel::~QmlLabel()
{
delete mLabel;
}
void QmlLabel::setText(const QString& text)
{
mLabel->setText(text);
}
QString QmlLabel::text() const
{
return mLabel->text();
}
我正在调用qmlRegisterType
这个类,这允许我QmlLabel
在我的 QML 文件中声明一个类型的对象,如下所示:
QmlLabel {
id: whatever
height: 50
width: 200
}
一切都编译、构建和运行,但 QmlLabel 根本不可见。显然,构造函数中没有将创建的代码实际添加QLabel
到任何内容的代码,因此即使标签创建成功,如果不添加到任何内容,它也不会可见。原始示例中的这一行:
mProxy = new QGraphicsProxyWidget(this);
mProxy->setWidget(mLabel);
...大概是标签出现的原因,但是如果没有 QGraphicsProxyWidget 将其添加到,我就无法调用它。
那么我怎样才能使这项工作呢?
解决方案
推荐阅读
- java - 如何让我的 MouseListener 方法在 Java 中工作?
- javascript - 在滚动顶部闪烁
- flutter - 在 flutter_local_notifications 中添加 mp3 声音
- assembly - 为什么这个数组指针移动了 1?
- vue.js - 如何在 vue-cli / webpack 项目的编译过程中禁用 SSI 解析?
- ios - 推送通知请求授权错误 - Swift
- c# - 泛型类构造函数的泛型约束
- python - 如何根据我在 pyspark 中的前一行值将分钟添加到给定的时间戳
- python - Python函数复杂度
- android - 错误:无法解决:com.github.nkzawa:socket.io-client:1.0.0