繁体   English   中英

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

[英]Using QML with a qt widgets type of ui form?

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

点击这里

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

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

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

对于您应用程序的绘图部分,使用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);

    // ..

}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM