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
- Abra o Qt Creator e selecione File → New Project → Qt Widgets Application;
- Nomeie o projeto como
AppTabPersonalizada; - Após a criação, os arquivos
janelaprincipal.h,janelaprincipal.cppejanelaprincipal.uiserão gerados automaticamente.
Etapa 2: Adicionar QTabWidget à Janela Principal
- Abra o arquivo
janelaprincipal.ui; - Arraste um componente QTabWidget da seção Widget Box para o formulário;
- Por padrão, você verá duas abas (
tabetab_2), cada uma contendo umQWidgetcomum.
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
AbaUmeAbaDois - Escolha
QWidgetcomo 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.
- Abra o arquivo
janelaprincipal.ui; - Clique no
QWidgetda primeira aba; - Clique com o botão direito → selecione Promote to... (Promover para...)
- Preencha os campos na janela que aparece:
- Promoted class name:
AbaUm - Header file:
abaum.h - Clique em Add → Promote
- Promoted class name:
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
.uiorganizados 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.