QWidget 中的 QML 小部件

Posted

技术标签:

【中文标题】QWidget 中的 QML 小部件【英文标题】:QML widgets in QWidget 【发布时间】:2011-07-06 17:08:45 【问题描述】:

我有一个 QWidget,我有一些 Simples Controlls,如 Button、ProgressBar、TextEdit 等。在 QML 中完成,我从 QML 示例中获取。我正在阅读http://doc.qt.io/archives/qt-4.7/qtbinding.html 和http://doc.qt.io/archives/qt-4.7/qml-integration.html 目前我正在尝试 QDeclarativeView。

setAttribute(Qt::WA_TranslucentBackground);
layout = new QVBoxLayout(this);
QDeclarativeView* btnView = new QDeclarativeView;
btnView->setSource(QUrl::fromLocalFile("Button.qml"));
QObject* btnObj = btnView->rootObject();
btnObj->setProperty("width", 140);
btnObj->setProperty("height", 32);
btnObj->setProperty("text", "Close");
//progressBar = new QProgressBar(this);
button = new QPushButton("Click", this);
//layout->addWidget(progressBar);
layout->addWidget(button);
btnView->setGeometry(0, 0, 140, 32);
btnView->setBaseSize(140, 32);
layout->addWidget(btnView);
setLayout(layout);

为什么我的 btnView 占用了这么多空间?而且它(QDeclarativeView)是一种好方法吗?还是有更好的解决方案?

使用 QDeclarativeComponent 时,我得到一个 QObject。但不是 QWidget 。这甚至是一个好的解决方案吗?在传统 QWidget 中拥有利润丰厚的简单小部件的最佳解决方案是什么?

【问题讨论】:

【参考方案1】:

您没有告诉布局如何调整小部件的大小。所以它会在它的所有孩子之间平均分配空间,在这种情况下,因为它只有 1 个孩子,所以 QDeclarativeView 占据了整个空间。使用 QLayout::setSizePolicy() 和 QWidget::setMaximumWidth() / QWidget::setMaximumHeight() 根据您的意愿调整大小。你也可以使用 QLayout::addSpacing();

QDeclarativeView 是向 QWidgets 添加新 UI 元素的一种不错的方式。但它比使用 QWidgets 本身要慢。

【讨论】:

以上是关于QWidget 中的 QML 小部件的主要内容,如果未能解决你的问题,请参考以下文章

如何将菜单添加到从 Qwidget 派生的小部件

QWidget 没有显示

QWidget::mousePressEvent() 同时在两个小部件上

当小部件集更改时,调整 QWidget 的大小以仅保存当前小部件

在运行时更改 QML 小部件

每当将 QWidget 添加到 QApplication 的小部件树时,如何接收事件?