#c #qt #qt5
#c #qt #qt5
Вопрос:
Каждый раз, когда я динамически добавляю кнопку на главную панель QMainWindow, QDockWidget изменяет свой первоначальный размер.
Мой вопрос:
- Могу ли я запретить автоматическое изменение размера QDockWidget и как мне это сделать?
- Если я не могу этого сделать, какие другие варианты открыты для меня? возможно, ‘resizeDocks’?
Это иллюстрация моей дилеммы. Это пример приложения при запуске:
Теперь я вручную изменяю размер QDockWindow.
Теперь я нажимаю ‘F1’, которая создает toolbutton на панели инструментов QMainWindow, и QDockWindow автоматически изменяет свой первоначальный размер.
Это код для этого простого приложения:
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. Мне не удалось воспроизвести вашу проблему. Не могли бы вы предоставить свой файл пользовательского интерфейса?
Ответ №1:
Я использую 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;
}