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);