绿色网站配色,广州番禺楼盘,综合门户型网站有哪些,网店运营推广1+x证书查询由于我项目开始使用Widgets,换公司后直接使用QML开发#xff0c;没有了解过如何实现widget到qml过渡#xff0c;恰逢面试时遇到一家公司希望从widget迁移到qml开发#xff0c;询问相关实现#xff0c;一时语塞#xff0c;很尴尬#xff0c;粗略研究并总结下。 对qwidget嵌…由于我项目开始使用Widgets,换公司后直接使用QML开发没有了解过如何实现widget到qml过渡恰逢面试时遇到一家公司希望从widget迁移到qml开发询问相关实现一时语塞很尴尬粗略研究并总结下。 对qwidget嵌入qml的操作qt提供了两种方式(1) QQuickView 和 QWidget::createWindowContainer ()结合使用但存在堆栈限制问题被放弃(2) QQuickWidget但是使用该种方式也存在如下问题需要注意 对于qquickwidgetqt官方也提供了相应例子quickwidget简单如下所示。
// main.cpp
MainWindow::MainWindow(): m_quickWidget(new QQuickWidget)
{
...QUrl source(qrc:quickwidget/rotatingsquare.qml);connect(m_quickWidget, QQuickWidget::statusChanged,this, MainWindow::quickWidgetStatusChanged);connect(m_quickWidget, QQuickWidget::sceneGraphError,this, MainWindow::sceneGraphError);m_quickWidget-resize(300,300);m_quickWidget-setResizeMode(QQuickWidget::SizeRootObjectToView );m_quickWidget-setSource(source);centralWidget-addSubWindow(m_quickWidget);...}
void MainWindow::quickWidgetStatusChanged(QQuickWidget::Status status)
{if (status QQuickWidget::Error) {QStringList errors;const auto widgetErrors m_quickWidget-errors();for (const QQmlError error : widgetErrors)errors.append(error.toString());}
}
void MainWindow::grabToImage()
{QFileDialog fd(this);fd.setAcceptMode(QFileDialog::AcceptSave);fd.setDefaultSuffix(png);fd.selectFile(test_grabToImage.png);if (fd.exec() QDialog::Accepted) {// 这里C层使用invokeMethod调用rotatingsquare.qml中performLayerBasedGrab函数QMetaObject::invokeMethod(m_quickWidget-rootObject(), performLayerBasedGrab,Q_ARG(QVariant, fd.selectedFiles().first()));}
}
// rotatingsquare.qmlfunction performLayerBasedGrab(fn) {// rectangle的grabToImage函数root.grabToImage(function(result) {result.saveToFile(fn);});}对于网上反应的某些信号获取不到测试后没发现问题不知道是不是版本问题我测试版本为Qt5.12.12 https://blog.csdn.net/u011283226/article/details/117398629