Панель инструментов QToolBar в Qt


Оглавление

Основная цель панели инструментов (Tool Bar) — предоставить пользователю быстрый доступ к командам программы одним нажатием кнопки мыши. Это делает панель инструментов более удобной по сравнению с меню, в котором нужно сделать, по меньшей мере, два нажатия. Еще одно достоинство состоит в том, что панель инструментов всегда видима, и не нужно тратить время на поиски необходимой команды в меню или вспоминать комбинацию клавиш ускорителя.

Панель инструментов представляет собой область, в которой расположены кнопки, дублирующие часто используемые команды меню. Для панелей инструментов библиотека Qt предоставляет класс QToolBar, который определен в заголовочном файле QToolBar. Процесс создания панели инструментов несложен, и, со временем, вы сможете формировать панели, имеющие довольно сложную структуру и удовлетворяющую любым требованиям.

Для того чтобы поместить кнопку на панель инструментов, необходимо вызвать метод addAction(), который неявно создаст объект действия. В этот метод можно передать растровое изображение, поясняющий текст и соединение со слотом.

Старайтесь не игнорировать и всегда передавать поясняющий текст. Ввиду отсутствия текста на кнопках инструментов дополнительные небольшие текстовые пояснения играют важную информационную роль. Эти пояснения всплывают в тот момент, когда пользователь задержит указатель мыши в области кнопки на небольшой промежуток времени.

Наряду с кнопками, в панели инструментов могут быть размещены и любые другие виджеты. Для этого в классе QToolBar определен метод addWidget().

Программа, окно которой показано на рисунке, демонстрирует использование панелей инструментов. Панели инструментов могут перемещаться с одного места на другое. В нашем случае был использован класс QMainWindow.

Класс QMainWindow представляет собой класс главного окна приложения, который содержит в себе строку меню, несколько зон для размещения панелей инструментов и строку состояния.

QToolBar - пример панели инструментов


#ifndef _MainWindow_h_
#define _MainWindow_h_

#include <QtGui>
#include "img1.xpm"
#include "img2.xpm"
#include "img3.xpm"
#include "img4.xpm"

class MainWindow : public QMainWindow {
Q_OBJECT
public:
    MainWindow(QWidget* pwgt = 0) : QMainWindow(pwgt) 
    {
        addToolBar(Qt::TopToolBarArea, createToolBar());
        addToolBar(Qt::BottomToolBarArea, createToolBar());
        addToolBar(Qt::LeftToolBarArea, createToolBar());
        addToolBar(Qt::RightToolBarArea, createToolBar());
    }

    QToolBar* createToolBar()
    {
        QToolBar* ptb = new QToolBar("Linker ToolBar");

        ptb->addAction(QPixmap(img1_xpm), "1", this, SLOT(slotNoImpl()));
        ptb->addAction(QPixmap(img2_xpm), "2", this, SLOT(slotNoImpl()));
        ptb->addSeparator();
        ptb->addAction(QPixmap(img3_xpm), "3", this, SLOT(slotNoImpl()));
        ptb->addAction(QPixmap(img4_xpm), "4", this, SLOT(slotNoImpl()));

        return ptb;
    }

public slots:
    void slotNoImpl()
    {
        QMessageBox::information(0, "Message", "Not implemented");
    }
};
#endif  //_MainWindow_h_

Класс MainWindow унаследован от класса QMainWindow. С помощью метода addToolBar() в конструкторе класса к главному окну добавляются четыре панели инструментов, создаваемые методом createToolBar() класса MainWindow. Первый параметр метода addToolBar() задает расположение панели инструментов в главном окне приложения. В самом методе createToolBar() производится неявное создание четырех объектов действий метода addAction(), в который передаются:

  • растровое изображение — массив растровых данных, хранящихся в файле формата ХРМ. Из этих данных создается объект класса QPixmap;
  • поясняющая надпись (в нашем случае это номер);
  • два последних параметра определяют соединение со слотом slotNoImpl(), который отображает диалоговое окно при нажатии.

Разделитель между кнопками вставляется с помощью метода addSeparator().

Читать далее: Строка состояния QStatusBar в Qt