diff --git a/examples/dbus/remotecontrolledcar/car/car.cpp b/examples/dbus/remotecontrolledcar/car/car.cpp index 7d12e540717..0920658281e 100644 --- a/examples/dbus/remotecontrolledcar/car/car.cpp +++ b/examples/dbus/remotecontrolledcar/car/car.cpp @@ -93,5 +93,24 @@ void Car::timerEvent(QTimerEvent *event) setTransform(QTransform().rotate(rotation), true); setTransform(QTransform::fromTranslate(0, -speed), true); + + if (!scene()->views().isEmpty()) { + QRect viewRect = scene()->views().at(0)->sceneRect().toRect(); + QTransform fx = transform(); + qreal dx = fx.dx(); + qreal dy = fx.dy(); + while (dx < viewRect.left() - 10) + dx += viewRect.width(); + while (dy < viewRect.top() - 10) + dy += viewRect.height(); + while (dx > viewRect.right() + 10) + dx -= viewRect.width(); + while (dy > viewRect.bottom() + 10) + dy -= viewRect.width(); + setTransform(QTransform(fx.m11(), fx.m12(), fx.m13(), + fx.m21(), fx.m22(), fx.m23(), + dx, dy, fx.m33())); + } + update(); } diff --git a/examples/dbus/remotecontrolledcar/car/main.cpp b/examples/dbus/remotecontrolledcar/car/main.cpp index 9c732fed5ef..81b8cdfc202 100644 --- a/examples/dbus/remotecontrolledcar/car/main.cpp +++ b/examples/dbus/remotecontrolledcar/car/main.cpp @@ -23,7 +23,7 @@ int main(int argc, char *argv[]) view.setRenderHint(QPainter::Antialiasing); view.setBackgroundBrush(Qt::darkGray); view.setWindowTitle(QT_TRANSLATE_NOOP(QGraphicsView, "Qt DBus Controlled Car")); - view.resize(400, 300); + view.resize(view.sizeHint()); view.show(); new CarInterfaceAdaptor(car); diff --git a/examples/dbus/remotecontrolledcar/controller/CMakeLists.txt b/examples/dbus/remotecontrolledcar/controller/CMakeLists.txt index e94d79a6344..acdf1c9efe3 100644 --- a/examples/dbus/remotecontrolledcar/controller/CMakeLists.txt +++ b/examples/dbus/remotecontrolledcar/controller/CMakeLists.txt @@ -16,11 +16,23 @@ qt_add_dbus_interface(controller_SRCS ) qt_add_executable(controller - controller.cpp controller.h controller.ui + controller.cpp controller.h main.cpp ${controller_SRCS} ) +qt_add_resources(controller + PREFIX + "/" + FILES + down.svg + left.svg + right.svg + up.svg + connected.svg + connecting.svg +) + set_target_properties(controller PROPERTIES WIN32_EXECUTABLE TRUE MACOSX_BUNDLE TRUE diff --git a/examples/dbus/remotecontrolledcar/controller/connected.svg b/examples/dbus/remotecontrolledcar/controller/connected.svg new file mode 100644 index 00000000000..a3616b769e3 --- /dev/null +++ b/examples/dbus/remotecontrolledcar/controller/connected.svg @@ -0,0 +1,4 @@ + + + + diff --git a/examples/dbus/remotecontrolledcar/controller/connecting.svg b/examples/dbus/remotecontrolledcar/controller/connecting.svg new file mode 100644 index 00000000000..4097d0b2767 --- /dev/null +++ b/examples/dbus/remotecontrolledcar/controller/connecting.svg @@ -0,0 +1,4 @@ + + + + diff --git a/examples/dbus/remotecontrolledcar/controller/controller.cpp b/examples/dbus/remotecontrolledcar/controller/controller.cpp index f5f0fa88662..ccff2b1743a 100644 --- a/examples/dbus/remotecontrolledcar/controller/controller.cpp +++ b/examples/dbus/remotecontrolledcar/controller/controller.cpp @@ -2,18 +2,47 @@ // SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause #include "controller.h" +#include +#include using org::example::Examples::CarInterface; Controller::Controller(QWidget *parent) : QWidget(parent) { - ui.setupUi(this); car = new CarInterface("org.example.CarExample", "/Car", QDBusConnection::sessionBus(), this); - connect(ui.accelerate, &QPushButton::clicked, car, &CarInterface::accelerate); - connect(ui.decelerate, &QPushButton::clicked, car, &CarInterface::decelerate); - connect(ui.left, &QPushButton::clicked, car, &CarInterface::turnLeft); - connect(ui.right, &QPushButton::clicked, car, &CarInterface::turnRight); + accelerate = new QPushButton(QIcon(":up.svg"), "", this); + accelerate->setFixedSize(80, 64); + accelerate->setIconSize(QSize(44, 44)); + decelerate = new QPushButton(QIcon(":down.svg"), "", this); + decelerate->setFixedSize(80, 64); + decelerate->setIconSize(QSize(44, 44)); + left = new QPushButton(QIcon(":left.svg"), "", this); + left->setFixedSize(64, 80); + left->setIconSize(QSize(44, 44)); + right = new QPushButton(QIcon(":right.svg"), "", this); + right->setFixedSize(64, 80); + right->setIconSize(QSize(44, 44)); + + status = new QLabel(this); + statusSymbol = new QLabel(this); + statusSymbol->setFixedHeight(24); + + QGridLayout *layout = new QGridLayout(this); + layout->addWidget(accelerate, 1, 1); + layout->addWidget(left, 2, 0); + layout->addWidget(right, 2, 2); + layout->addWidget(decelerate, 3, 1); + + QHBoxLayout *statusLayout = new QHBoxLayout(); + statusLayout->addWidget(status); + statusLayout->addWidget(statusSymbol); + layout->addLayout(statusLayout, 0, 1, 1, 2, Qt::AlignTop | Qt::AlignRight); + + connect(accelerate, &QPushButton::clicked, car, &CarInterface::accelerate); + connect(decelerate, &QPushButton::clicked, car, &CarInterface::decelerate); + connect(left, &QPushButton::clicked, car, &CarInterface::turnLeft); + connect(right, &QPushButton::clicked, car, &CarInterface::turnRight); startTimer(1000); } @@ -21,5 +50,9 @@ Controller::Controller(QWidget *parent) : QWidget(parent) void Controller::timerEvent(QTimerEvent *event) { Q_UNUSED(event); - ui.label->setText(car->isValid() ? tr("connected") : tr("disconnected")); + + static QPixmap connectedIcon = QPixmap::fromImage(QImage(":connected.svg")); + static QPixmap connectingIcon = QPixmap::fromImage(QImage(":connecting.svg")); + status->setText(car->isValid() ? tr("connected") : tr("searching...")); + statusSymbol->setPixmap(car->isValid() ? connectedIcon : connectingIcon); } diff --git a/examples/dbus/remotecontrolledcar/controller/controller.h b/examples/dbus/remotecontrolledcar/controller/controller.h index 4fd18333309..8df4ed2d1e6 100644 --- a/examples/dbus/remotecontrolledcar/controller/controller.h +++ b/examples/dbus/remotecontrolledcar/controller/controller.h @@ -4,7 +4,10 @@ #ifndef CONTROLLER_H #define CONTROLLER_H -#include "ui_controller.h" +#include +#include +#include + #include "car_interface.h" class Controller : public QWidget @@ -18,8 +21,13 @@ protected: void timerEvent(QTimerEvent *event) override; private: - Ui::Controller ui; org::example::Examples::CarInterface *car; + QPushButton *accelerate; + QPushButton *decelerate; + QPushButton *left; + QPushButton *right; + QLabel *statusSymbol; + QLabel *status; }; #endif diff --git a/examples/dbus/remotecontrolledcar/controller/controller.pro b/examples/dbus/remotecontrolledcar/controller/controller.pro index eddcbdefdf7..ce16f21f363 100644 --- a/examples/dbus/remotecontrolledcar/controller/controller.pro +++ b/examples/dbus/remotecontrolledcar/controller/controller.pro @@ -1,9 +1,9 @@ QT += dbus widgets DBUS_INTERFACES += ../common/car.xml -FORMS += controller.ui HEADERS += controller.h SOURCES += main.cpp controller.cpp +RESOURCES += icons.qrc # Work-around CI issue. Not needed in user code. CONFIG += no_batch diff --git a/examples/dbus/remotecontrolledcar/controller/controller.ui b/examples/dbus/remotecontrolledcar/controller/controller.ui deleted file mode 100644 index 379015bf303..00000000000 --- a/examples/dbus/remotecontrolledcar/controller/controller.ui +++ /dev/null @@ -1,64 +0,0 @@ - - Controller - - - - 0 - 0 - 255 - 111 - - - - Controller - - - - 9 - - - 6 - - - - - Controller - - - Qt::AlignCenter - - - - - - - Decelerate - - - - - - - Accelerate - - - - - - - Right - - - - - - - Left - - - - - - - - diff --git a/examples/dbus/remotecontrolledcar/controller/down.svg b/examples/dbus/remotecontrolledcar/controller/down.svg new file mode 100644 index 00000000000..f9a417b65eb --- /dev/null +++ b/examples/dbus/remotecontrolledcar/controller/down.svg @@ -0,0 +1,3 @@ + + + diff --git a/examples/dbus/remotecontrolledcar/controller/icons.qrc b/examples/dbus/remotecontrolledcar/controller/icons.qrc new file mode 100644 index 00000000000..0aad87cf327 --- /dev/null +++ b/examples/dbus/remotecontrolledcar/controller/icons.qrc @@ -0,0 +1,10 @@ + + + connected.svg + connecting.svg + down.svg + left.svg + right.svg + up.svg + + diff --git a/examples/dbus/remotecontrolledcar/controller/left.svg b/examples/dbus/remotecontrolledcar/controller/left.svg new file mode 100644 index 00000000000..12d6420f48f --- /dev/null +++ b/examples/dbus/remotecontrolledcar/controller/left.svg @@ -0,0 +1,3 @@ + + + diff --git a/examples/dbus/remotecontrolledcar/controller/right.svg b/examples/dbus/remotecontrolledcar/controller/right.svg new file mode 100644 index 00000000000..26a39a74caf --- /dev/null +++ b/examples/dbus/remotecontrolledcar/controller/right.svg @@ -0,0 +1,3 @@ + + + diff --git a/examples/dbus/remotecontrolledcar/controller/up.svg b/examples/dbus/remotecontrolledcar/controller/up.svg new file mode 100644 index 00000000000..ea5f1bfcfb8 --- /dev/null +++ b/examples/dbus/remotecontrolledcar/controller/up.svg @@ -0,0 +1,3 @@ + + + diff --git a/examples/dbus/remotecontrolledcar/doc/images/remotecontrolledcar-car-example.webp b/examples/dbus/remotecontrolledcar/doc/images/remotecontrolledcar-car-example.webp index cc2f1de3dca..958b466e9f1 100644 Binary files a/examples/dbus/remotecontrolledcar/doc/images/remotecontrolledcar-car-example.webp and b/examples/dbus/remotecontrolledcar/doc/images/remotecontrolledcar-car-example.webp differ diff --git a/examples/dbus/remotecontrolledcar/remotecontrolledcar.pro b/examples/dbus/remotecontrolledcar/remotecontrolledcar.pro index 2a1fddb500e..dd275b10999 100644 --- a/examples/dbus/remotecontrolledcar/remotecontrolledcar.pro +++ b/examples/dbus/remotecontrolledcar/remotecontrolledcar.pro @@ -1,3 +1,3 @@ TEMPLATE = subdirs SUBDIRS = car \ - controller + controller