Qt 如何调整QWidget中嵌入的QML小部件的大小?
如何自动调整QML小部件的大小 我有手工制作的QWidget。 在此小部件中创建了QML组件 但当我调整QWidget的大小时,QML组件不会调整大小 一些代码 我有我的CustomQWidget类 标题: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
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);
}