如何调整QWidget中嵌入的QML小部件的大小?

时间:2011-03-14 10:12:28

标签: qt qml

如何自动调整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);

3 个答案:

答案 0 :(得分:6)

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

答案 1 :(得分: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);
}

答案 2 :(得分:0)

FocusScope
{
     anchors.fill: parent


     [... some qml]
}

这使FocusScope符合父对象的大小, 在这种情况下是QDeclarativeView。