Добавьте 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')

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

0

Решение

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

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

Другие решения

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

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

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

1

По вопросам рекламы [email protected]