Я не хочу, чтобы размер QDockwidget изменялся при динамическом добавлении кнопки инструментов в mainToolBar QMainWindow. - PullRequest
0 голосов
/ 12 марта 2019

Каждый раз, когда я динамически добавляю кнопку в mainToolBar QMainWindow, QDockWidget меняет свой первоначальный размер.

Мой вопрос:

  • Можно ли запретить автоматическое изменение размера QDockWidget и как это сделать?
  • Если я не могу сделать это, какие другие варианты открыты для меня? возможно, resizeDocks?

Это иллюстрация моей дилеммы. Это пример приложения при запуске:

enter image description here

Теперь я вручную изменяю размер окна QDockWindow.

enter image description here

Теперь я нажимаю 'F1', которая создает кнопку инструмента на mainToolBar QMainWindow, и QDockWindow автоматически изменяет свой размер до исходного.

enter image description here

Вот код этого простого приложения:

mainwindow.h:

#ifndef MAINWINDOW_H
#define MAINWINDOW_H

#include <QMainWindow>
#include <QKeyEvent>
#include <QInputDialog>
#include <QToolButton>
#include <QPlainTextEdit>
#include <QDockWidget>

namespace Ui {
class MainWindow;
}

class MainWindow : public QMainWindow
{
    Q_OBJECT

public:
    explicit MainWindow(QWidget *parent = nullptr);
    ~MainWindow();

private:
    Ui::MainWindow *ui;    
    QToolButton *Create_toolbutton(QString);

protected:
    void keyPressEvent(QKeyEvent*);

};

#endif // MAINWINDOW_H

mainwindow.cpp:

#include "mainwindow.h"
#include "ui_mainwindow.h"

MainWindow::MainWindow(QWidget *parent) :
    QMainWindow(parent),
    ui(new Ui::MainWindow)
{
    ui->setupUi(this);

    this->setCentralWidget(new QPlainTextEdit());
    this->addDockWidget(Qt::RightDockWidgetArea, new QDockWidget());
}

MainWindow::~MainWindow()
{
    delete ui;
}

void MainWindow::keyPressEvent(QKeyEvent * ke)
{

    if(ke->key() == Qt::Key_F1){
        ui->mainToolBar->addWidget(Create_toolbutton("new button"));
    }

    QMainWindow::keyPressEvent(ke);
}

QToolButton * MainWindow::Create_toolbutton(QString toolbutton_name)
{
    QToolButton * new_qtoolbutton = new QToolButton();
    new_qtoolbutton->setText(toolbutton_name);
    new_qtoolbutton->setArrowType(Qt::ArrowType::RightArrow);
    new_qtoolbutton->setToolButtonStyle(Qt::ToolButtonStyle::ToolButtonTextBesideIcon);
    return new_qtoolbutton;
}

1 Ответ

0 голосов
/ 12 марта 2019

Я использую resizeDocks , и он работает достаточно для меня.

#include "mainwindow.h"
#include "ui_mainwindow.h"

MainWindow::MainWindow(QWidget *parent) :
    QMainWindow(parent),
    ui(new Ui::MainWindow)
{
    ui->setupUi(this);

    this->setCentralWidget(new QPlainTextEdit());
    auto * dock = new QDockWidget();
    this->addDockWidget(Qt::RightDockWidgetArea, dock);
    resizeDocks({dock}, {100}, Qt::Horizontal);
}

MainWindow::~MainWindow()
{
    delete ui;
}

void MainWindow::keyPressEvent(QKeyEvent * ke)
{
    if(ke->key() == Qt::Key_F1){
        ui->mainToolBar->addWidget(Create_toolbutton("new button"));
    }

    QMainWindow::keyPressEvent(ke);
}

QToolButton * MainWindow::Create_toolbutton(QString toolbutton_name)
{
    QToolButton * new_qtoolbutton = new QToolButton();
    new_qtoolbutton->setText(toolbutton_name);
    new_qtoolbutton->setArrowType(Qt::ArrowType::RightArrow);
    new_qtoolbutton->setToolButtonStyle(Qt::ToolButtonStyle::ToolButtonTextBesideIcon);
    return new_qtoolbutton;
}
...