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

Qt 如何调整QWidget中嵌入的QML小部件的大小?,qt,qml,Qt,Qml,如何自动调整QML小部件的大小 我有手工制作的QWidget。 在此小部件中创建了QML组件 但当我调整QWidget的大小时,QML组件不会调整大小 一些代码 我有我的CustomQWidget类 标题: Class MyCustomQWidget : public QWidget { Q_OBJECT public: QDeclarativeView* view; private: QWidget* m_GUI; public: QWidget* getGUI

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

我有手工制作的QWidget。 在此小部件中创建了QML组件

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

一些代码

我有我的CustomQWidget类

标题:

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);

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

FocusScope
{
     anchors.fill: parent


     [... some qml]
}
这使聚焦镜适合父对象的大小,
在这种情况下,QDeclarativeView。

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

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

我不太清楚为什么这里有3层小部件,但假设你不能为你的自定义小部件划分QDeclarativeView子类,你可能会得到如下结果:

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


我使用的是QDeclarativeContext*ctxt(但这不会呈现QML,是吗?在调整大小时遇到了什么问题?(最好是在您的问题中添加一些简短的示例代码。)嗯,我不太明白,为什么您有MyCustomQWidget,它创建了一个新的QWidget,但这至少似乎在m_gui和QDeclarativeView之间缺少一些连接。您应该对布局做些什么来处理调整大小操作。只要视图的大小正确调整,view->setResizeMode(QDeclarativeView::SizeRootObjectToView)应该调整QML上下文的根对象的大小。(顺便说一句,最后一行有getGUI而不是getGUI(),但我想这只是一个输入错误)Steffen感谢关于“缺少连接”的想法。只需删除QWidget*m_GUI并在getGUI()函数中直接返回视图。谢谢!
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);
}