当我将工具按钮动态添加到 QMainWindow 的 mainToolBar 时,我不希望 QDockwidget 调整大小 [英] I don't want the QDockwidget to resize when I dynamically add a toolbutton to QMainWindow's mainToolBar

查看:53
本文介绍了当我将工具按钮动态添加到 QMainWindow 的 mainToolBar 时,我不希望 QDockwidget 调整大小的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

每次我向 QMainWindow 的 mainToolBar 动态添加按钮时,QDockWidget 都会调整到其原始大小.

Each time I dynamically add a button to the mainToolBar of a QMainWindow, the QDockWidget resizes to its original size.

我的问题:

  • 我可以阻止 QDockWidget 自动调整大小吗?我该怎么做?
  • 如果我不能做到这一点,我还有哪些其他选择?也许是resizeDocks"?

这是我的困境的一个例证.这是启动时的示例应用:

This is an illustration of my dilemma. This is a sample app on startup:

现在我手动调整 QDockWindow 的大小.

Now I manually resize the QDockWindow.

现在我按下F1",它会在 QMainWindow 的 mainToolBar 上创建一个工具按钮,QDockWindow 会自动调整到其原始大小.

Now I press 'F1' which creates a toolbutton on QMainWindow's mainToolBar and the QDockWindow auto resizes to its original size.

这是这个简单应用的代码:

This is the code for this simple app:

mainwindow.h:

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:

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;
}

推荐答案

我正在使用 resizeDocks 并且它对我来说已经足够了.

I am using resizeDocks and it is working sufficiently for me.

#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;
}

这篇关于当我将工具按钮动态添加到 QMainWindow 的 mainToolBar 时,我不希望 QDockwidget 调整大小的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆