【问题标题】:How to resize QML widget embedded in QWidget?如何调整嵌入在 QWidget 中的 QML 小部件的大小?
【发布时间】:2011-07-14 21:49:34
【问题描述】:

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

【问题讨论】:

    标签: qt qml


    【解决方案1】:

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

    【讨论】:

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

    【讨论】:

      【解决方案3】:
      FocusScope
      {
           anchors.fill: parent
      
      
           [... some qml]
      }
      

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2014-01-17
        • 2016-08-18
        • 2021-06-08
        • 2011-11-23
        • 1970-01-01
        • 2012-02-15
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多