Первая часть,
Из-за ограничений существующих менеджеров сеансов нам необходимо убедиться, что каталог приложения содержится в переменной среды
Для простых приложений, в том числе и для TicTacToe, мы могли бы для обеспечения команды рестарта сохранять состояние в дополнительном аргументе командной строки. Например:
tictactoe -state 0X-X0-X-0
Это избавило бы нас от сохранения данных в файле и выдачи команды сброса состояния для удаления файла.
01 void Application::commitData(QSessionManager &sessionManager)
02 {
03 if (ticTacToe->gameInProgress
04 && sessionManager.allowsInteraction) {
05 int r = QMessageBox::warning(ticTacToe, tr("Tic-Tac-Toe"),
06 tr("The game hasn't finished.\n"
07 "Do you really want to quit?"),
08 QMessageBox::Yes | QMessageBox::Default,
09 QMessageBox::No | QMessageBox::Escape);
10 if (г == QMessageBox::Yes) {
11 sessionManager.release;
12 } else {
13 sessionManager.cancel;
14 }
15 }
16 }
Функция
Теперь давайте рассмотрим класс
01 class TicTacToe : public QWidget
02 {
03 Q_OBJECT
04 public:
05 TicTacToe(QWidget *parent = 0);
06 bool gameInProgress const;
07 QString saveState const;
08 QSize sizeHint const;
09 protected:
10 void paintEvent(QPaintEvent *event);
11 void mousePressEvent(QMouseEvent *event);
12 private:
13 enum { Empty = '-', Cross = 'X', Nought = '0' };
14 void clearBoard;
15 void restoreState;
16 QString sessionFileName const;
17 QRect cellRect(int row, int column) const;
18 int cellWidth const { return width / 3; }
19 int cellHeight const { return height / 3; }
20 bool threeInARow(int row1, int col1, int row3, int col3) const;
21 char board[3][3];
22 int turnNumber;
23 };
Класс
01 TicTacToe::TicTacToe(QWidget *parent, const char *name)
02 : QWidget(parent, name)
03 {