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.

¿Fue útil?

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 ()

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top