Qt - Создание панели, которая перекрывает QGraphicsView - PullRequest
0 голосов
/ 21 февраля 2019

Я пытаюсь создать панель, которая отображает некоторые данные, которые добавляются при нажатии кнопки.Я объясню это с помощью следующих изображений:

это будет начальное состояние приложения, окно с QGraphicsView This would be the initial state of the app

, если я нажму «Справка»над ним должно отображаться окно, которое никогда не выходит из фокуса enter image description here

Я изучил использование QDockWidget, но это просто создает панель рядом с ним, что это не то, что я хочу,Если кто-нибудь знает, как это сделать, я был бы очень признателен, спасибо.

1 Ответ

0 голосов
/ 21 февраля 2019

Вы можете установить дочерние виджеты в QGraphicsView и рассматривать его как обычный QWidget:

    QApplication app(argc, argv);
    QGraphicsScene* scene = new QGraphicsScene(0, 0, 1000, 1000);
    QGraphicsView* view = new QGraphicsView(scene);
    view->show();

    QPushButton* button = new QPushButton("Show label");
    QLabel* label = new QLabel("Foobar");
    QVBoxLayout* layout = new QVBoxLayout(view);
    layout->setAlignment(Qt::AlignRight | Qt::AlignTop);
    layout->addWidget(button);
    layout->addWidget(label);
    label->hide();
    QObject::connect(button, &QPushButton::clicked, label, &QLabel::show);
    return app.exec();

Метка будет видна в QGraphicsView при нажатии на кнопку.

Вытакже можно встроить виджет в вашу сцену с помощью QGraphicsProxyWidget class:

    QApplication app(argc, argv);
    QGraphicsScene* scene = new QGraphicsScene(0, 0, 1000, 1000);
    scene->addItem(new QGraphicsRectItem(500, 500, 50, 50));
    QGraphicsView* view = new QGraphicsView(scene);
    view->show();

    QWidget* w = new QWidget();
    QGraphicsProxyWidget* proxy = new QGraphicsProxyWidget();


    QPushButton* button = new QPushButton("Show label");
    QLabel* label = new QLabel("Foobar");
    QVBoxLayout* layout = new QVBoxLayout(w);
    layout->addWidget(button);
    layout->addWidget(label);
    layout->setAlignment(Qt::AlignRight | Qt::AlignTop);
    label->hide();
    QObject::connect(button, &QPushButton::clicked, label, &QLabel::show);

    proxy->setWidget(w);
    scene->addItem(proxy);
    return app.exec();
...