我有一个奇怪的场景。我创建了一个嵌入在 QGraphicsScene 中的 QMainWindow。我想在场景中有多个 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 作为我的操作系统。