在Qt小部件类型的ui表单中使用QML?

时间:2019-02-27 16:33:18

标签: qt qml

所以我想创建一个看起来像这样的应用程序:

click here

此应用程序的作用是,我可以通过左侧的组合框选择形状,然后将其放在右侧的“区域”中。使用滑块,我可以改变大小。复选框选择边框或使形状具有填充颜色。

我的问题是我想使用QML创建这些形状,因为用矩形,圆形等创建基本形状相对容易,但是我也想在左侧看到漂亮的界面。仅QML能做到吗?还是需要将QML集成到qtwidgets或类似的东西中?我知道QML中也有一个滑块和一个按钮,看起来很不错,但是我想在右边有一个空白区域,向用户指示他可以在左边创建形状和ui的地方。这里正确的方法是什么?

2 个答案:

答案 0 :(得分:0)

我强烈建议对整个UI使用QML。首先,Qt Quick和QWidgets是完全不同的UI引擎。我发现基于标记的UI更易于进行源代码控制,调整和一般使用。此外,Qt Quick和QML是我使用过的最好的UI框架,并且有很多。您可以轻松地做所有您想做的事。

答案 1 :(得分:0)

对于您应用的绘图部分,使用QGraphicsScene https://doc.qt.io/qt-5/qgraphicsscene.html也可能是Qt Widget的替代方案,而不是将其与QML混合使用。

但是,如果您想坚持使用QML,可以看看QQuickView https://doc.qt.io/qt-5/qquickview.html,这是集成的一个小例子:

#include <QQuickView>
#include "mainwindow.h"
#include "ui_mainwindow.h"

MainWindow::MainWindow(QWidget *parent) :
    QMainWindow(parent),
    ui(new Ui::MainWindow)
{
    ui->setupUi(this);
    // ..

    QQuickView *view = new QQuickView;
    QWidget *container = QWidget::createWindowContainer(view, this);

    // some set up if needed
    container->setMinimumSize(1280, 600);
    container->setMaximumSize(1280, 600);
    container->setFocusPolicy(Qt::TabFocus);

    // ..

    view->setSource(QUrl("main.qml"));
    view->setResizeMode(QQuickView::SizeViewToRootObject);

    ui->verticalLayout->addWidget(container);

    // ..

}