Панель с вкладками

Для создания панели с вкладками предназначен класс QTabWidget. Панель состоит из области заголовка с ярлыками и набора вкладок с различными компонентами. В один момент времени показывается содержимое только одной вкладки. Щелчок мышью на ярлыке в области заголовка приводит к отображению содержимого соответствующий вкладки. Иерархия наследования для класса QTabWidget выглядит так:

(QObject, QPaintDevice) — QWidget — QTabWidget

Конструктор класса QTabWidget имеет следующий прототип:

#include <QTabWidget>
QTabWidget(QWidget *parent = nullptr)

В параметре parent передается указатель на родительский компонент. Если параметр не указан, то компонент будет обладать своим собственным окном. Типичный пример использования класса QTabWidget выглядит так:

QWidget window;
window.setWindowTitle("Класс QTabWidget");
window.resize(350, 120);
QTabWidget *tab = new QTabWidget();
tab->addTab(new QLabel("Содержимое вкладки 1"), "Вкладка &1");
tab->addTab(new QLabel("Содержимое вкладки 2"), "Вкладка &2");
tab->addTab(new QLabel("Содержимое вкладки 3"), "Вкладка &3");
tab->setCurrentIndex(0);
QVBoxLayout *vbox = new QVBoxLayout();
vbox->addWidget(tab);
window.setLayout(vbox);
window.show();

Результат выполнения этого кода показан на рис. 5.3.

Рис. 5.3. Пример использования класса QTabWidget

Класс QTabWidget содержит следующие методы (перечислены только основные методы; полный список смотрите в документации):

  • addTab() — добавляет вкладку в конец контейнера. Метод возвращает индекс добавленной вкладки. Прототипы метода:
int addTab(QWidget *page, const QString &label)
int addTab(QWidget *page, const QIcon &icon,
           const QString &label)

В параметре page передается указатель на компонент, который будет отображаться на вкладке. Чаще всего этот компонент является лишь родителем для других компонентов. Параметр label задает текст, который будет отображаться на ярлыке в области заголовка. Внутри текста заголовка символ &, указанный перед буквой, задает комбинацию клавиш быстрого доступа. В этом случае буква, перед которой указан символ &, будет подчеркнута, что является подсказкой пользователю. При одновременном нажатии клавиши <Alt> и подчеркнутой буквы соответствующая вкладка будет отображена. Параметр icon позволяет указать значок (экземпляр класса QIcon), который отобразится перед текстом в области заголовка. Пример указания стандартного значка:

QIcon icon1 = window.style()->standardIcon(
                                      QStyle::SP_DriveHDIcon);
tab->addTab(new QLabel("Содержимое вкладки 1"), icon1,
            "Вкладка &1");

Пример загрузки значка из файла:

QIcon icon3("C:\\cpp\\projectsQt\\Test\\test.ico");
tab->addTab(new QLabel("Содержимое вкладки 3"), icon3,
            "Вкладка &3");
  • insertTab() — добавляет вкладку в указанную позицию. Метод возвращает индекс добавленной вкладки. Прототипы метода:
int insertTab(int index, QWidget *page, const QString &label)
int insertTab(int index, QWidget *page, const QIcon &icon,
              const QString &label)

Пример добавления вкладки в конец контейнера после нажатия кнопки:

void Widget::on_btn1_clicked()
{
   tab->setUpdatesEnabled(false); // Для предотвращения мерцания
   int ind = tab->insertTab(-1,
             new QLabel("Содержимое вкладки 3"), "Вкладка &3");
   tab->setCurrentIndex(ind);
   tab->setUpdatesEnabled(true);  // Устанавливаем обратно
   btn1->setEnabled(false);
}
  • removeTab() — удаляет вкладку с указанным индексом, при этом компонент, который отображался на вкладке, не удаляется. Прототип метода:
void removeTab(int index)
  • clear() — удаляет все вкладки, при этом компоненты, которые отображались на вкладках, не удаляются. Прототип метода:
void clear()
  • setTabText() — задает текст заголовка для вкладки с указанным индексом. Прототип метода:
void setTabText(int index, const QString &label)
  • tabText() — возвращает текст заголовка вкладки с указанным индексом. Прототип метода:
QString tabText(int index) const
  • setElideMode() — задает режим обрезки текста в названии вкладки, если он не помещается в отведенную область. В месте пропуска выводится троеточие. Прототип метода:
void setElideMode(Qt::TextElideMode mode)

Могут быть указаны следующие константы:

  • Qt::ElideLeft — текст обрезается слева;
  • Qt::ElideRight — текст обрезается справа;
  • Qt::ElideMiddle — текст обрезается по середине;
  • Qt::ElideNone — текст не обрезается;

Получение значения:

Qt::TextElideMode elideMode() const
  • setTabIcon() — устанавливает значок перед текстом в заголовке вкладки с указанным индексом. Прототип метода:
void setTabIcon(int index, const QIcon &icon)

Получение значения:

QIcon tabIcon(int index) const
  • setTabPosition() — задает позицию области заголовка. Прототип метода:
void setTabPosition(QTabWidget::TabPosition position)

Могут быть указаны следующие константы:

  • QTabWidget::North — сверху;
  • QTabWidget::South — снизу;
  • QTabWidget::West — слева;
  • QTabWidget::East — справа.

Пример указания значения:

tab->setTabPosition(QTabWidget::East);

Получение значения:

QTabWidget::TabPosition tabPosition() const
  • setTabShape() — задает форму углов ярлыка вкладки в области заголовка. Прототип метода:
void setTabShape(QTabWidget::TabShape s)

Могут быть указаны следующие константы:

  • QTabWidget::Rounded — скругленные углы (значение по умолчанию);
  • QTabWidget::Triangular — треугольная форма.

Получение значения:

QTabWidget::TabShape tabShape() const
  • setTabsClosable() — если в качестве параметра указано значение true, то после текста заголовка будет отображена кнопка закрытия вкладки. При нажатии этой кнопки генерируется сигнал tabCloseRequested(int). Прототип метода:
void setTabsClosable(bool closeable)

Получение значения:

bool tabsClosable() const
  • setMovable() — если в качестве параметра указано значение true, то ярлыки вкладок можно перемещать с помощью мыши. Прототип метода:
void setMovable(bool movable)

Получение значения:

bool isMovable() const
  • setDocumentMode() — если в качестве параметра указано значение true, то область компонента не будет отображаться как панель. Прототип метода:
void setDocumentMode(bool set)

Получение значения:

bool documentMode() const
  • setUsesScrollButtons() — если в качестве параметра указано значение true, то когда все ярлыки вкладок не помещаются в область заголовка появляются две кнопки, с помощью которых можно прокручивать область заголовка, тем самым отображая только часть ярлыков. Значение false запрещает сокрытие ярлыков. Прототип метода:
void setUsesScrollButtons(bool useButtons)

Получение значения:

bool usesScrollButtons() const
  • setTabToolTip() — задает текст вплывающей подсказки для ярлыка вкладки с указанным индексом. Прототип метода:
void setTabToolTip(int index, const QString &tip)

Получение значения:

QString tabToolTip(int index) const
  • setTabWhatsThis() — задает текст справки для ярлыка вкладки с указанным индексом. Прототип метода:
void setTabWhatsThis(int index, const QString &text)

Получение значения:

QString tabWhatsThis(int index) const
  • setTabEnabled() — если во втором параметре указано значение false, то вкладка с указанным в первом параметре индексом станет недоступной. Значение true делает вкладку доступной. Прототип метода:
void setTabEnabled(int index, bool enable)
  • isTabEnabled() — возвращает значение true, если вкладка с указанным индексом доступна, и false — в противном случае. Прототип метода:
bool isTabEnabled(int index) const
  • setTabVisible() — если во втором параметре указано значение false, то вкладка с указанным в первом параметре индексом будет скрыта. Значение true делает вкладку видимой. Прототип метода:
void setTabVisible(int index, bool visible)

Получение значения:

bool isTabVisible(int index) const
  • setTabBarAutoHide() — если в параметре указано значение true, то область ярлыков вкладок будет скрываться, если панель содержит меньше двух вкладок. Прототип метода:
void setTabBarAutoHide(bool enabled)

Получение значения:

bool tabBarAutoHide() const
  • count() — возвращает количество вкладок. Прототип метода:
int count() const
  • currentIndex() — возвращает индекс видимой вкладки. Прототип метода:
int currentIndex() const
  • currentWidget() — возвращает указатель на компонент, расположенный на видимой вкладке. Прототип метода:
QWidget *currentWidget() const
  • widget() — возвращает указатель на компонент, который расположен по указанному индексу, или нулевой указатель. Прототип метода:
QWidget *widget(int index) const
  • indexOf() — возвращает индекс вкладки, на которой расположен компонент. Если компонент не найден возвращается значение -1. Прототип метода:
int indexOf(const QWidget *w) const
  • setCurrentIndex() — делает видимой вкладку с указанным в параметре индексом. Метод является слотом. Прототип метода:
void setCurrentIndex(int index)
  • setCurrentWidget() — делает видимым компонент, указатель на который указан в параметре. Метод является слотом. Прототип метода:
void setCurrentWidget(QWidget *widget)

Класс QTabWidget содержит следующие сигналы:

  • currentChanged(int) — генерируется при изменении вкладки. Через параметр внутри обработчика доступен индекс новой вкладки;
  • tabCloseRequested(int) — генерируется при нажатии кнопки закрытия вкладки. Через параметр внутри обработчика доступен индекс вкладки;
  • tabBarClicked(int) — генерируется при щелчке мышью в области заголовков вкладок. Через параметр внутри обработчика доступен индекс вкладки или значение -1;
  • tabCloseRequested(int) — генерируется при двойном щелчке мышью в области заголовков вкладок. Через параметр внутри обработчика доступен индекс вкладки или значение -1.

Учебник C++ (Qt Creator и MinGW)
Учебник C++ (Qt Creator и MinGW) в формате PDF

Помощь сайту

ЮMoney (Yandex-деньги): 410011140483022

ПАО Сбербанк:
Счет: 40817810855006152256
Реквизиты банка:
Наименование: СЕВЕРО-ЗАПАДНЫЙ БАНК ПАО СБЕРБАНК
Корреспондентский счет: 30101810500000000653
БИК: 044030653
КПП: 784243001
ОКПО: 09171401
ОКОНХ: 96130
Скриншот реквизитов