Utilizando a Função Promote no Qt Creator para Exibir Páginas Personalizadas em QTabWidget

Quando desenvolvemos interfaces com Qt Creator, frequentemente precisamos exibir páginas personalizadas em um QTabWidget em vez de simples QWidgets. Este tutorial detalha como utilizar a funcionalidade Promote (Promover) para que cada aba do QTabWidget utilize suas próprias classes personalizadas.

Estrutura do Projeto

A estrutura final do projeto será a seguinte:

AppTabPersonalizada/
├── main.cpp
├── janelaprincipal.h
├── janelaprincipal.cpp
├── janelaprincipal.ui
├── abaum.h
├── abaum.cpp
├── abaum.ui
├── abadois.h
├── abadois.cpp
└── abadois.ui

Etapa 1: Criar a Janela Principal

  1. Abra o Qt Creator e selecione File → New Project → Qt Widgets Application;
  2. Nomeie o projeto como AppTabPersonalizada;
  3. Após a criação, os arquivos janelaprincipal.h, janelaprincipal.cpp e janelaprincipal.ui serão gerados automaticamente.

Etapa 2: Adicionar QTabWidget à Janela Principal

  1. Abra o arquivo janelaprincipal.ui;
  2. Arraste um componente QTabWidget da seção Widget Box para o formulário;
  3. Por padrão, você verá duas abas (tab e tab_2), cada uma contendo um QWidget comum.

Etapa 3: Criar Classes de Páginas Personalizadas

Agora vamos criar duas classes de páginas: AbaUm e AbaDois.

No Qt Creator:

  • Selecione File → New File or Project → Qt Designer Form Class
  • Nomeie-as como AbaUm e AbaDois
  • Escolha QWidget como classe base

abaum.h

#pragma once
#include <QWidget>

namespace Ui {
class AbaUm;
}

class AbaUm : public QWidget {
    Q_OBJECT
public:
    explicit AbaUm(QWidget *parent = nullptr);
    ~AbaUm();

private:
    Ui::AbaUm *interface;
};

abaum.cpp

#include "abaum.h"
#include "ui_abaum.h"

AbaUm::AbaUm(QWidget *parent)
    : QWidget(parent), interface(new Ui::AbaUm) {
    interface->setupUi(this);
}

AbaUm::~AbaUm() {
    delete interface;
}

Abra o arquivo abaum.ui e adicione um rótulo (QLabel) com o texto:

Esta é a Pirmeira Aba (AbaUm)

abadois.h

#pragma once
#include <QWidget>

namespace Ui {
class AbaDois;
}

class AbaDois : public QWidget {
    Q_OBJECT
public:
    explicit AbaDois(QWidget *parent = nullptr);
    ~AbaDois();

private:
    Ui::AbaDois *interface;
};

abadois.cpp

#include "abadois.h"
#include "ui_abadois.h"

AbaDois::AbaDois(QWidget *parent)
    : QWidget(parent), interface(new Ui::AbaDois) {
    interface->setupUi(this);
}

AbaDois::~AbaDois() {
    delete interface;
}

Da mesma forma, no arquivo abadois.ui, adicione um rótulo:

Esta é a Segunda Aba (AbaDois)

Etapa 4: Utilizar a Função Promote no janelaprincipal.ui

Agora vamos fazer com que cada aba do QTabWidget exiba suas páginas personalizadas.

  1. Abra o arquivo janelaprincipal.ui;
  2. Clique no QWidget da primeira aba;
  3. Clique com o botão direito → selecione Promote to... (Promover para...)
  4. Preencha os campos na janela que aparece:
    • Promoted class name: AbaUm
    • Header file: abaum.h
    • Clique em AddPromote

Repita o mesmo procedimento para a segunda aba:

  • Promoted class name: AbaDois
  • Header file: abadois.h

Salve o arquivo .ui.

Etapa 5: Implementar main.cpp

#include "janelaprincipal.h"
#include <QApplication>

int main(int argc, char *argv[])
{
    QApplication app(argc, argv);
    JanelaPrincipal janela;
    janela.show();
    return app.exec();
}

Resultado da Execução

Ao executar o projeto, a janela principal exibirá um QTabWidget com duas abas:

  • Primeira aba: Exibe o conteúdo de AbaUm
  • Segunda aba: Exibe o conteúdo de AbaDois

Cada página pode ter sua interface independentemente projetada, sem interferências mútuas, o que é ideal para modularização de interfaces complexas.

Informações Adicionais

  • A funcionalidade "Promote" afeta apenas o nível do Qt Designer, sem modificar o código .cpp;
  • É aplicável a qualquer classe personalizada que herde de QWidget, QFrame, QDialog, etc.;
  • Esta abordagem mantém os arquivos .ui organizados enquanto proporciona grande reutilização de código.

Estrutura Visual

JanelaPrincipal
 └── QTabWidget
      ├── Aba 1 → AbaUm (QWidget personalizado)
      └── Aba 2 → AbaDois (QWidget personalizado)

Através da funcionalidade Promote (Prmoover), você pode substituir controles comuns por suas próprias classes no Qt Designer, tornando a interface mais modular e o código mais claro, sem necessidade de modificar manualmente o código gerado dos arquivos .ui. Esta é uma técnica extremamente útil no desenvolvimento de interfaces com Qt, especialmente ao gerenciar múltiplas páginas em projetos de grande escala.

Tags: Qt qtcreator qtabwidget promote UI

Publicado em 9-2 19:32