我发现了一个关于如何在QML文档中显示QWidget(特别是QLabel)的示例:
https://kunalmaemo.blogspot.com/2011/07/how-to-display-qwidget-into-qml.html
问题是它使用了qtquick1,无法在我的应用程序(使用qtquick2)中编译。
如何使用qtwick 2执行此操作?我需要做的就是这个原始示例所做的:创建一个
QLabel
并将其嵌入到QML文档中。
以下是我目前所能做的。这与我上面发布的示例类似,只是没有
QGraphicsProxyWidget* mProxy;
QQuickView
而不是
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
对于这个类,这允许我声明一个
QML标签
在我的QML文件中:
QmlLabel {
id: whatever
height: 50
width: 200
}
一切都在编译、构建和运行,但QmlLabel根本不可见。显然,构造函数中没有实际添加
QLabel公司
因此,即使标签创建成功,如果不添加到任何内容,它也不会可见。原始示例中的这一行:
mProxy = new QGraphicsProxyWidget(this);
mProxy->setWidget(mLabel);
... 这大概就是标签出现的原因,但是如果没有qgraphicsproxy widget来添加它,我就不能调用它。
那我该怎么做呢?