La biblioteca requiere qapplication.¿Cómo usar QApplication en el proyecto QT Quick?
-
20-12-2019 - |
Pregunta
Tengo un proyecto rápido QT y acabo de agregar algunos archivos de origen.Al intentar construir, obtengo el mensaje de error:
QWidget: Cannot create a QWidget without QApplication
Ya que tengo un proyecto QT rápido, uso la complicación QGUIA.QApplication es una subclase de qguiapplication.¿Cómo hago que QApplication esté disponible para las fuentes recién agregadas?¿O cómo lo resuelve cuando uno tiene un QT rápido y un QWidget?
Los archivos de origen son la biblioteca QCustomlet que muestra un gráfico.
Editar:
main.cpp:
int main(int argc, char *argv[])
{
QGuiApplication app(argc, argv);
QtQuick2ApplicationViewer viewer;
//Register C++ classes with QML
qmlRegisterType<Bluetooth>("Bluetooth", 1, 0, "Bluetooth");
//Set start QML file
viewer.setMainQmlFile(QStringLiteral("qml/test/main.qml"));
//New Code:
// generate some data:
QWidget widget;
QCustomPlot * customPlot = new QCustomPlot(&widget);
QVector<double> x(101), y(101); // initialize with entries 0..100
for (int i=0; i<101; ++i)
{
x[i] = i/50.0 - 1; // x goes from -1 to 1
y[i] = x[i]*x[i]; // let's plot a quadratic function
}
// create graph and assign data to it:
customPlot->addGraph();
customPlot->graph(0)->setData(x, y);
// give the axes some labels:
customPlot->xAxis->setLabel("x");
customPlot->yAxis->setLabel("y");
// set axes ranges, so we see all data:
customPlot->xAxis->setRange(-1, 1);
customPlot->yAxis->setRange(0, 1);
customPlot->replot();
//New Code End
//Show GUI
viewer.showExpanded();
return app.exec();
}
Error:
QML debugging is enabled. Only use this in a safe environment.
QWidget: Cannot create a QWidget without QApplication
Invalid parameter passed to C runtime function.
Invalid parameter passed to C runtime function.
Solución
El concepto clave es qwidget :: createwindowcontainer () .Pruebe el siguiente código:
#include <QQuickView>
int main(int argc, char *argv[])
{
QApplication app(argc, argv);
QQuickView *view = new QQuickView();
QWidget *container = QWidget::createWindowContainer(view, this);
container->setMinimumSize(200, 200);
container->setMaximumSize(200, 200);
container->setFocusPolicy(Qt::TabFocus);
view->setSource(QUrl("qml/test/main.qml"));
...
}
Puede encontrar los detalles en las siguientes publicaciones:
presentando qwidget :: createwindowcontainer ()
combinando widgets qt y qml con qwidget :: createwindowcontainer ()