Classe QDockWidget da janela de ancoragem do QT
Introdução à classe QDockWidget
QDockWidget
A classe fornece um widget que pode ser QMainWindow
encaixado ou flutuado como uma janela de nível superior na área de trabalho.
QDockWidget
Fornece o conceito de widgets encaixados, também conhecidos como painéis de ferramentas ou janelas de utilitários. Janelas encaixadas são janelas secundárias localizadas na área do widget encaixado ao redor do widget QMainWindow
central .
Uma janela encaixada pode ser movida dentro de sua área atual, movida para uma nova área ou flutuada (por exemplo, desencaixada). QDockWidget
A API permite aos programadores a capacidade de restringir o movimento, a flutuação e o fechamento de widgets encaixados, bem como a área em que eles podem ser colocados.
QDockWidget
Consiste em uma barra de título e uma área de conteúdo. A barra de título exibe o título da janela, botões flutuantes e botão Fechar para widgets encaixados. Dependendo do estado QDockWidget
do , os botões de flutuação e fechamento podem ser desativados ou não exibidos. A aparência visual das barras de título e botões depende dos estilos usados. QDockWidget
Pode ser usado como um wrapper para seus subwidgets, configurando setWidget()
subwidgets. Dicas de tamanho personalizado, tamanhos mínimo e máximo e políticas de tamanho devem ser implementados por widgets filhos. QDockWidget
irá obedecê-los, ajustando suas próprias restrições, incluindo molduras e barras de ferramentas. Não devemos QDockWidget
definir restrições de tamanho para isso, porque elas QDockWidget
mudam dependendo se ele está bloqueado ou não, e um QDockWidget
widget bloqueado não inclui um quadro ou uma pequena barra de ferramentas.
QDockWidget
O objeto contém algumas propriedades, como: move, hover, close, etc., que são todos tipos enumerados:
[Falha na transferência da imagem do link externo, o site de origem pode ter um mecanismo anti-leeching, é recomendável salvar a imagem e carregá-la diretamente (img-0R46lf3M-1682740086615) (Pictures/QT Basic Docking Window QDockWidget Class/B_QT Basic Docking Window QDockWidget Class.PNG )]
QDockWidget
O local que pode ser colocado também é um tipo de enumeração:
Funções e métodos explicados
O fluxo geral de configuração de uma janela encaixada é o seguinte:
- Criar
QDockWidget
um formulário encaixado para um objeto - Define as propriedades deste formulário encaixado, normalmente chamando
setFeatures()
esetAllowedAreas()
- Crie um novo controle para ser inserido no formulário encaixado, por exemplo
QListWidget
,QTextEdit
- Para inserir um controle em um formulário encaixado, o método
QDockWidget
chamadosetWidget()
- Inclua este formulário encaixado usando
addDockWidget()
o métodoMainWindow
setWindowTitle(tr("QT基础之停靠窗口QDockWidget类"));
QTextEdit *textEdit = new QTextEdit(this);
textEdit->setText(tr("主窗口"));
textEdit->setAlignment(Qt::AlignCenter);
this->setCentralWidget(textEdit); // 设置 textEdit 为主窗口的中央窗体
// 停靠窗口1
// 步骤1 创建一个`QDockWidget`对象的停靠窗体
QDockWidget *dock1 = new QDockWidget(tr("停靠窗口1"),this);
// 步骤2 设置此停靠窗体的属性,通常调用 `setFeatures()`以及 `setAllowedAreas()`
dock1->setFeatures(QDockWidget::DockWidgetMovable); // 可移动
dock1->setAllowedAreas(Qt::LeftDockWidgetArea|Qt::RightDockWidgetArea); // 可 左侧停靠 和 右侧停靠
// 步骤3 新建一个要插入停靠窗体的控件,比如 `QListWidget`、`QTextEdit`
QTextEdit *textEdit1 = new QTextEdit(this);
textEdit1->setText(tr("停靠窗口1,可移动到左侧停靠和右侧停靠"));
// 步骤4 将控件插入停靠窗体,调用`QDockWidget`的`setWidget()`方法
dock1->setWidget(textEdit1);
// 步骤5 使用 `addDockWidget()`方法在`MainWindow`中加入此停靠窗体
this->addDockWidget(Qt::RightDockWidgetArea,dock1);
// 停靠窗口2
// 步骤1
QDockWidget *dock2 = new QDockWidget(tr("停靠窗口2"),this);
// 步骤2
dock2->setFeatures(QDockWidget::DockWidgetClosable|QDockWidget::DockWidgetFloatable); // 可关闭 可浮动
// 步骤3
QTextEdit *textEdit2 = new QTextEdit(this);
textEdit2->setText(tr("停靠窗口2,可关闭 可浮动"));
// 步骤4
dock2->setWidget(textEdit2);
// 步骤5
this->addDockWidget(Qt::RightDockWidgetArea,dock2);
// 停靠窗口3
// 步骤1
QDockWidget *dock3 = new QDockWidget(tr("停靠窗口3"),this);
// 步骤2
dock3->setFeatures(QDockWidget::AllDockWidgetFeatures); // 可移动 可关闭 可浮动
// 步骤3
QTextEdit *textEdit3 = new QTextEdit(this);
textEdit3->setText(tr("停靠窗口3,可移动 可关闭 可浮动"));
// 步骤4
dock3->setWidget(textEdit3);
// 步骤5
this->addDockWidget(Qt::RightDockWidgetArea,dock3);
setFeatures(QDockWidget::DockWidgetFeatures features)
Definir as propriedades de um formulário encaixado
QDockWidget::DockWidgetFeatures
Refere-se às propriedades das janelas encaixadas
enum DockWidgetFeature {
DockWidgetClosable = 0x01,
DockWidgetMovable = 0x02,
DockWidgetFloatable = 0x04,
DockWidgetVerticalTitleBar = 0x08,
DockWidgetFeatureMask = 0x0f,
AllDockWidgetFeatures = DockWidgetClosable|DockWidgetMovable|DockWidgetFloatable, // ### Qt 6: remove
NoDockWidgetFeatures = 0x00,
Reserved = 0xff
};
característica | ilustrar |
---|---|
DockWidgetClosable |
O formulário encaixado pode ser fechado |
DockWidgetMovable |
O formulário encaixado pode ser movido |
DockWidgetFloatable |
Formulários encaixados podem ser flutuantes |
DockWidgetVerticalTitleBar |
Exibir uma barra de título vertical à esquerda |
DockWidgetFeatureMask |
mascarar |
AllDockWidgetFeatures |
Fechável Removível Flutuável |
NoDockWidgetFeatures |
não pode ser fechado não é móvel não é flutuante |
setAllowedAreas(Qt::DockWidgetAreas areas)
Defina a área encaixável do formulário ancorado
Qt::DockWidgetAreas
Refere-se à área acoplável
enum DockWidgetArea {
LeftDockWidgetArea = 0x1,
RightDockWidgetArea = 0x2,
TopDockWidgetArea = 0x4,
BottomDockWidgetArea = 0x8,
DockWidgetArea_Mask = 0xf,
AllDockWidgetAreas = DockWidgetArea_Mask,
NoDockWidgetArea = 0
};
característica | ilustrar |
---|---|
LeftDockWidgetArea |
Acoplável no lado esquerdo da janela principal |
RightDockWidgetArea |
Acoplável no lado direito da janela principal |
TopDockWidgetArea |
Acoplável na parte superior da janela principal |
BottomDockWidgetArea |
Acoplável na parte inferior da janela principal |
DockWidgetArea_Mask |
mascarar |
AllDockWidgetAreas |
Pode ser encaixado em qualquer posição (quatro superiores) |
NoDockWidgetArea |
só pode ser encaixado no in-out |