Как избежать дублирования dockwidget с другим объектом в главном окне при изменении его размера в коде во время выполнения? - PullRequest
0 голосов
/ 22 октября 2018

Я создаю виджет-док в графическом интерфейсе qt и добавляю к нему виджет таблицы дерева.Более того, в главном меню у меня есть другие объекты, такие как QGraphicsView.Во время выполнения, когда я вручную изменяю ширину дока, он толкает или тянет главное окно со своими объектами и работает хорошо.когда я изменяю размер док в коде, док и его объекты перекрываются с объектами главного окна.Как я могу это исправить?спасибо за ваше внимание.

в заголовочном файле:

#include <QtWidgets/QMainWindow>
#include "ui_QtGuiApplication.h"
#include <QtWidgets/QDockWidget>
#include <QtWidgets/QTreeWidget>
#include <QGraphicsView>
#include <QtWidgets/QPushButton>

class QtGuiApplication : public QMainWindow
{
    Q_OBJECT

public:
    QtGuiApplication(QWidget *parent = Q_NULLPTR);


private:
    Ui::QtGuiApplicationClass ui;
    QDockWidget *dockWidget;
    QWidget *dockWidgetContents;
    QTreeWidget *treeWidget;
    QGraphicsView* qGraph;
    QGraphicsScene* scene;
private slots:
    void worker_fn();
};

в исходном файле:

#include "QtGuiApplication.h"

QtGuiApplication::QtGuiApplication(QWidget *parent)
    : QMainWindow(parent)
{
    ui.setupUi(this);

    /// creat dock
    dockWidget = new QDockWidget(this);
    dockWidgetContents = new QWidget(); 
    dockWidget->setMinimumSize(QSize(50, 38));
    dockWidget->setWidget(dockWidgetContents);
    this->addDockWidget(static_cast<Qt::DockWidgetArea>(1), dockWidget);

    //// add tree table widget to dock
    treeWidget = new QTreeWidget(dockWidgetContents);

    //// creat an object in  main window
    qGraph = new QGraphicsView(ui.centralWidget);
    qGraph->setGeometry(QRect(70, 30, 300, 300));
    scene = new QGraphicsScene(qGraph);
    scene->setSceneRect(0, 0, 300, 300);
    qGraph->setScene(scene);
    qGraph->show();

    //////// creat push button to resize the dock
    QPushButton* btn_Ok = new QPushButton(ui.centralWidget);
    btn_Ok->setGeometry(QRect(340, 340, 75, 23));
    btn_Ok->setText("Ok");
    connect(btn_Ok, SIGNAL(clicked()), this, SLOT(worker_fn()));
}
void QtGuiApplication::worker_fn()
{
    QRect rect = dockWidget->geometry();
    dockWidget->resize(300, rect.height());
}
...