Почему моя панель инструментов закреплена в неверном месте? - PullRequest
0 голосов
/ 08 ноября 2018

У меня странный сценарий.Я создаю QMainWindow, который встроен в QGraphicsScene.Я хочу иметь несколько окон QMainWindows с панелью инструментов внутри сцены.Я имитирую область MDI без использования класса QMdiArea.

Вот MainWindow.cpp

#include "mainwindow.h"


MainWindow::MainWindow(QWidget *parent) : QMainWindow(parent){
    resize(1000, 750);
    qApp->setStyle(QStyleFactory::create("Fusion"));

    QGraphicsView* view = new QGraphicsView;
    QGraphicsScene* scene = new QGraphicsScene;
    view->setFixedSize(1000, 750);
    view->setScene(scene);
    view->scene()->setSceneRect(-150, -150, view->size().width(), view->size().height());

    setCentralWidget(view);

    QWidget* widget = new QWidget;
    widget->resize(300, 300);
    QVBoxLayout* vLay = new QVBoxLayout;

    widget->setLayout(vLay);

    QMainWindow* testWindow = new QMainWindow;
    testWindow->resize(300, 300);

    QToolBar* toolbar = new QToolBar;
    toolbar->setFloatable(false);
    toolbar->setStyleSheet("border: 1px solid red"); //For better seeing the issue
    toolbar->addAction("Test");

    testWindow->addToolBar(toolbar);
    vLay->addWidget(testWindow);

    scene->addWidget(widget);
}

Что происходит, если QToolBar будет появляться в правильном месте во встроенном QMainWindow, но когда он перемещается и стыкуется в любом месте, он защелкивается слишком далеко и слишком далеко влево.Я добавил дополнительный код для контура панели инструментов, чтобы вы могли видеть окно панели инструментов.

Вот MainWindow.h

#ifndef MAINWINDOW_H
#define MAINWINDOW_H

#include <QMainWindow>
#include <QGraphicsScene>
#include <QGraphicsView>
#include <QToolBar>
#include <QVBoxLayout>

class MainWindow : public QMainWindow{
    Q_OBJECT

public:
    MainWindow(QWidget *parent = 0);

};

#endif // MAINWINDOW_H

Почему панель инструментов делает этот странный эффект привязки?Я специально добавил QMainWindow в QWidget, так как он нужен для того, что я делаю.Я понимаю, что встраивание только QMainWindow имеет желаемое взаимодействие, но мне нужно, чтобы оно было встроено в QWidget.Я также понимаю, что отсутствие родителей вредно для управления памятью, но я тоже с этим справляюсь.

Я использую Qt версии 5.10.1 и использую Redhat в качестве своей ОС.

...