4

如何自动调整 QML 小部件的大小?

我有手工创建的 QWidget。在这个小部件中创建了 QML 组件。

但是当我调整 QWidget 的大小时,QML 组件不会调整大小。

一些代码...

我有 MyCustomQWidget 类

标题:

Class MyCustomQWidget : public QWidget
{
Q_OBJECT
public:
    QDeclarativeView* view;
private:
        QWidget* m_GUI;
public:
    QWidget* getGUI()  {return m_GUI;};
}

来源:

MyCustomQWidget:: MyCustomQWidget (QWidget *parent) :QWidget(parent)
{
    m_GUI = new QWidget();

    view = new QDeclarativeView(m_GUI);
    view->setSource(QUrl("qrc:/qml/gui.qml"));
    //view->setResizeMode(QDeclarativeView::SizeRootObjectToView);
}

在主 gui 框架小部件中

QWidget* pCustomGUI = new MyCustomQWidget(…)
pVLayoutLeft->addWidget(pCustomGUI->getGUI);
4

3 回答 3

6

问题中没有太多细节,但如果您使用 aQDeclarativeView来显示 QML,请查看其setResizeMode()成员。将此设置为QDeclarativeView::SizeRootObjectToView可能只是您正在寻找的:它会自动将 QML 的根对象调整为视图的大小。

于 2011-03-14T10:34:23.563 回答
2

当您将 Qt 小部件放入另一个 Qt 小部件时,您必须手动调整它的大小或使用布局来自动执行此操作。

创建一个没有显式父级的小部件并在添加小部件时让布局分配父级有点传统。

我不太确定为什么你在这里有 3 层小部件,但假设你不能只为你的自定义小部件子类 QDeclarativeView,你最终可能会得到这样的结果:

Class MyCustomQWidget : public QWidget
{
Q_OBJECT
private:
    QDeclarativeView* view;
}

MyCustomQWidget:: MyCustomQWidget (QWidget *parent)
    : QWidget(parent)
{
    QHBoxLayout *box = new QHBoxLayout(this);

    view = new QDeclarativeView;
    view->setSource(QUrl("qrc:/qml/gui.qml"));
    //view->setResizeMode(QDeclarativeView::SizeRootObjectToView);

    box->addWidget(view);
}
于 2011-06-13T02:59:49.250 回答
0
FocusScope
{
     anchors.fill: parent


     [... some qml]
}

这使 FocusScope 适合父对象的大小,在本例中为 QDeclarativeView。

于 2011-04-27T11:39:53.500 回答