在 QT 上将 MarbleWidget 添加到 main window
Add MarbleWidget into main window on QT
我正在尝试将 MarbleWidget 集成到 QT 项目中。如果我只想像这样显示小部件:
Marble::MarbleWidget *mapWidget = new Marble::MarbleWidget();
mapWidget->setMapThemeId("earth/openstreetmap/openstreetmap.dgml");
mapWidget->show()
一切都很好。但我想做的是将小部件集成到现有的 window 中。我所做的是使用 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')
我做错了什么?
当您在设计器中提升一个小部件时,该小部件将成为您提升到的 class 的一个实例。
您在这里所做的是创建另一个 Marble::Widget 并告诉第二个大理石小部件加载数据。
你提升的那个是ui
指针的某个成员,你需要在那个对象上调用setMapThemeId()
。
凯文说的。代码方面是
MainWindow::MainWindow(QWidget *parent) :
QMainWindow(parent),
ui(new Ui::MainWindow)
{
ui->setupUi(this);
ui->widget->setMapThemeId("earth/openstreetmap/openstreetmap.dgml");
}
我正在尝试将 MarbleWidget 集成到 QT 项目中。如果我只想像这样显示小部件:
Marble::MarbleWidget *mapWidget = new Marble::MarbleWidget();
mapWidget->setMapThemeId("earth/openstreetmap/openstreetmap.dgml");
mapWidget->show()
一切都很好。但我想做的是将小部件集成到现有的 window 中。我所做的是使用 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')
我做错了什么?
当您在设计器中提升一个小部件时,该小部件将成为您提升到的 class 的一个实例。
您在这里所做的是创建另一个 Marble::Widget 并告诉第二个大理石小部件加载数据。
你提升的那个是ui
指针的某个成员,你需要在那个对象上调用setMapThemeId()
。
凯文说的。代码方面是
MainWindow::MainWindow(QWidget *parent) :
QMainWindow(parent),
ui(new Ui::MainWindow)
{
ui->setupUi(this);
ui->widget->setMapThemeId("earth/openstreetmap/openstreetmap.dgml");
}