QT 4: программирование GUI на С++ | страница 44



>09 for (int i = 0; i < MaxRecentFiles; ++i)

>10 {

>11 recentFileActions[i] = new QAction(this);

>12 recentFileActions[i]->setVisible(false);

>13 connect(recentFileActions[i], SIGNAL(triggered()),

>14 this, SLOT(openRecentFile()));

>15 }

Мы заполняем действиями массив recentFileActions. Каждое действие скрыто и подключается к слоту openRecentFile(). Далее мы покажем, как действия в списке недавно используемых файлов сделать видимыми, чтобы можно было ими воспользоваться.

Теперь перейдем к действию Select All (выделить все):

>16 selectAllAction = new QAction(tr("&All"), this);

>17 selectAllAction->setShortcut(tr("Ctrl+A"));

>18 selectAllAction->setStatusTip(tr("Select all the cells in the spreadsheet"));

>19 connect(selectAllAction, SIGNAL(triggered()),

>20 spreadsheet, SLOT(selectAll()));

Слот selectAll() обеспечивается в QAbstractItemView, который является одним из базовых классов QTableWidget, поэтому нам самим не надо его реализовывать.

Давайте теперь перейдем к действию Show Grid (показать сетку) из меню Options (опции):

>21 showGridAction = new QAction(tr("&Show Grid"), this);

>22 showGridAction->setCheckable(true);

>23 showGridAction->setChecked(spreadsheet->showGrid());

>24 showGridAction->setStatusTip(tr("Show or hide the spreadsheet's grid"));

>25 connect(showGridAction, SIGNAL(toggled(bool)),

>26 spreadsheet, SLOT(setShowGrid(bool)));

Действие Show Grid является включаемым. Оно имеет маркер флажка в меню и реализуется как кнопка—переключатель на панели инструментов. Когда это действие включено, на компоненте Spreadsheet отображается сетка. При запуске приложения мы инициализируем это действие в соответствии со значениями, которые принимаются по умолчанию компонентом Spreadsheet, и поэтому работа этого переключателя будет с самого начала синхронизирована. Затем мы соединяем сигнал toggled(bool) действия Show Grid со слотом setShowGrid(bool) компонента Spreadsheet, который наследуется от QTableWidget. После добавления этого действия к меню или панели инструментов пользователь сможет включать и выключать сетку.

Действия—переключатели Show Grid и Auto—Recalculate (автопересчет) работают независимо. Кроме того, Qt обеспечивает возможность определения взаимоисключающих действий путем применения своего собственного класса QActionGroup.

>27 aboutQtAction = new QAction(tr("About &Qt"), this);