Добавьте MarbleWidget в главное окно на QT

Я пытаюсь интегрировать MarbleWidget в проект QT. Если я только хочу показать виджет так:

Marble::MarbleWidget *mapWidget = new Marble::MarbleWidget();
mapWidget->setMapThemeId("earth/openstreetmap/openstreetmap.dgml");
mapWidget->show()

Все отлично. Но то, что я хотел бы сделать, это интегрировать виджет в существующее окно. Что я сделал, так это то, что я добавил виджет с помощью QtDesigner, повысил виджет до Marble::MarbleWidget, а затем использовал следующий код:

MainWindow::MainWindow(QWidget *parent) :
    QMainWindow(parent),
    ui(new Ui::MainWindow)
{
    ui->widget = new Marble::MarbleWidget();
    ui->widget->setMapThemeId("earth/openstreetmap/openstreetmap.dgml");
    ui->setupUi(this);
}

Я могу видеть виджет, но нет карты:

виджет при интеграции

и я вижу следующие ошибки на консоли:

QObject::connect: No such signal MarbleWebView::titleChanged(QString) in ~/marble/sources/src/lib/marble/PopupItem.cpp:71
QObject::connect:  (sender name:   'webView')
QObject::connect:  (receiver name: 'titleText')
QObject::connect: No such signal MarbleWebView::urlChanged(QUrl) in ~/marble/sources/src/lib/marble/PopupItem.cpp:72
QObject::connect:  (sender name:   'webView')
QObject::connect: No such signal MarbleWebView::titleChanged(QString) in ~/marble/sources/src/lib/marble/PopupItem.cpp:71
QObject::connect:  (sender name:   'webView')
QObject::connect:  (receiver name: 'titleText')
QObject::connect: No such signal MarbleWebView::urlChanged(QUrl) in ~/marble/sources/src/lib/marble/PopupItem.cpp:72
QObject::connect:  (sender name:   'webView')

Что я сделал не так?

2 ответа

Решение

Что сказал Кевин Код, который будет

MainWindow::MainWindow(QWidget *parent) :
    QMainWindow(parent),
    ui(new Ui::MainWindow)
{
    ui->setupUi(this);
    ui->widget->setMapThemeId("earth/openstreetmap/openstreetmap.dgml");
}

Когда вы продвигаете виджет в конструкторе, этот виджет будет экземпляром класса, который вы продвигали.

Здесь вы создаете еще один Marble::Widget и сообщаете второму мраморному виджету о загрузке данных.

Тот, кого вы повысили, является одним из членов ui указатель, вам нужно вызвать setMapThemeId() на этом объекте.

Другие вопросы по тегам