Π§ΠΈΡ‚Π°ΠΉΡ‚Π΅ ΠΊΠ½ΠΈΠ³ΠΈ ΠΎΠ½Π»Π°ΠΉΠ½ Π½Π° Bookidrom.ru! БСсплатныС ΠΊΠ½ΠΈΠ³ΠΈ Π² ΠΎΠ΄Π½ΠΎΠΌ ΠΊΠ»ΠΈΠΊΠ΅

Π§ΠΈΡ‚Π°Ρ‚ΡŒ ΠΎΠ½Π»Π°ΠΉΠ½ Β«QT 4: ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ GUI Π½Π° Π‘++Β». Π‘Ρ‚Ρ€Π°Π½ΠΈΡ†Π° 109

Автор Жасмин Π‘Π»Π°Π½ΡˆΠ΅Ρ‚

ΠœΠ΅Π½Π΅Π΄ΠΆΠ΅Ρ€ сСансов ΠΈΠΌΠ΅Π΅Ρ‚ Ρ‚Π°ΠΊΠΆΠ΅ ΠΊΠΎΠΌΠ°Π½Π΄Ρƒ рСстарта (restart command). Π­Ρ‚Ρƒ ΠΊΠΎΠΌΠ°Π½Π΄Ρƒ ΠΌΠ΅Π½Π΅Π΄ΠΆΠ΅Ρ€ сСансов Π΄ΠΎΠ»ΠΆΠ΅Π½ Π²Ρ‹ΠΏΠΎΠ»Π½ΡΡ‚ΡŒ для возобновлСния Ρ€Π°Π±ΠΎΡ‚Ρ‹ прилоТСния. По ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ Qt обСспСчиваСт ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΡƒΡŽ ΠΊΠΎΠΌΠ°Π½Π΄Ρƒ рСстарта:

ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ -session ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€_ΠΊΠ»ΡŽΡ‡

ΠŸΠ΅Ρ€Π²Π°Ρ Ρ‡Π°ΡΡ‚ΡŒ, ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅, извлСкаСтся ΠΈΠ· argv[0]. Π˜Π΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€ β€” это ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€ сСанса, ΠΏΠ΅Ρ€Π΅Π΄Π°Π½Π½Ρ‹ΠΉ ΠΌΠ΅Π½Π΅Π΄ΠΆΠ΅Ρ€ΠΎΠΌ сСансов; Π³Π°Ρ€Π°Π½Ρ‚ΠΈΡ€ΠΎΠ²Π°Π½Π½ΠΎ обСспСчиваСтся Π΅Π³ΠΎ ΡƒΠ½ΠΈΠΊΠ°Π»ΡŒΠ½ΠΎΡΡ‚ΡŒ для Ρ€Π°Π·Π»ΠΈΡ‡Π½Ρ‹Ρ… ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΉ ΠΈ Ρ€Π°Π·Π»ΠΈΡ‡Π½Ρ‹Ρ… сСансов Ρ€Π°Π±ΠΎΡ‚Ρ‹ ΠΎΠ΄Π½ΠΎΠ³ΠΎ прилоТСния. ΠšΠ»ΡŽΡ‡ добавляСтся для ΠΎΠ΄Π½ΠΎΠ·Π½Π°Ρ‡Π½ΠΎΠΉ ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ†ΠΈΠΈ Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ сохранСния сСанса. По Ρ€Π°Π·Π»ΠΈΡ‡Π½Ρ‹ΠΌ ΠΏΡ€ΠΈΡ‡ΠΈΠ½Π°ΠΌ ΠΌΠ΅Π½Π΅Π΄ΠΆΠ΅Ρ€ сСансов ΠΌΠΎΠΆΠ΅Ρ‚ Π²Ρ‹Π·Ρ‹Π²Π°Ρ‚ΡŒ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ saveState() нСсколько Ρ€Π°Π· Π² ΠΎΠ΄Π½ΠΎΠΌ сСансС, ΠΈ Ρ€Π°Π·Π»ΠΈΡ‡Π½Ρ‹Π΅ состояния Π΄ΠΎΠ»ΠΆΠ½Ρ‹ ΠΎΡ‚Π»ΠΈΡ‡Π°Ρ‚ΡŒΡΡ.

Из-Π·Π° ΠΎΠ³Ρ€Π°Π½ΠΈΡ‡Π΅Π½ΠΈΠΉ ΡΡƒΡ‰Π΅ΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΡ… ΠΌΠ΅Π½Π΅Π΄ΠΆΠ΅Ρ€ΠΎΠ² сСансов Π½Π°ΠΌ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ ΡƒΠ±Π΅Π΄ΠΈΡ‚ΡŒΡΡ, Ρ‡Ρ‚ΠΎ ΠΊΠ°Ρ‚Π°Π»ΠΎΠ³ прилоТСния содСрТится Π² ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ срСды PATH, Ссли ΠΌΡ‹ Ρ…ΠΎΡ‚ΠΈΠΌ ΠΎΠ±Π΅ΡΠΏΠ΅Ρ‡ΠΈΡ‚ΡŒ ΠΏΡ€Π°Π²ΠΈΠ»ΡŒΠ½Ρ‹ΠΉ рСстарт прилоТСния. Π’ частности, Ссли Π²Ρ‹ сами ΡΠΎΠ±ΠΈΡ€Π°Π΅Ρ‚Π΅ΡΡŒ ΠΏΠΎΠΏΡ€ΠΎΠ±ΠΎΠ²Π°Ρ‚ΡŒ ΠΏΡ€ΠΈΠΌΠ΅Ρ€ TicTacToe, Π²Ρ‹ Π΄ΠΎΠ»ΠΆΠ½Ρ‹ ΡƒΡΡ‚Π°Π½ΠΎΠ²ΠΈΡ‚ΡŒ Π΅Π³ΠΎ Π² ΠΊΠ°Ρ‚Π°Π»ΠΎΠ³, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, /usr/bin ΠΈ Π²Ρ‹Π·Ρ‹Π²Π°Ρ‚ΡŒ Π΅Π³ΠΎ ΠΏΠΎ ΠΊΠΎΠΌΠ°Π½Π΄Π΅ tictactoe.

Для простых ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΉ, Π² Ρ‚ΠΎΠΌ числС ΠΈ для 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 }

Ѐункция commitData() вызываСтся, ΠΊΠΎΠ³Π΄Π° ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒ Π²Ρ‹Ρ…ΠΎΠ΄ΠΈΡ‚ ΠΈΠ· систСмы. ΠœΡ‹ ΠΌΠΎΠΆΠ΅ΠΌ ΠΏΠ΅Ρ€Π΅ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΠΈΡ‚ΡŒ Π΅Π΅ для Π²Ρ‹Π²ΠΎΠ΄Π° сообщСния, ΠΏΡ€Π΅Π΄ΡƒΠΏΡ€Π΅ΠΆΠ΄Π°ΡŽΡ‰Π΅Π³ΠΎ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Ρ ΠΎ ΠΏΠΎΡ‚Π΅Π½Ρ†ΠΈΠ°Π»ΡŒΠ½ΠΎΠΉ ΠΏΠΎΡ‚Π΅Ρ€Π΅ Π΄Π°Π½Π½Ρ‹Ρ…. Π’ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌΠΎΠΉ ΠΏΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ Π·Π°ΠΊΡ€Ρ‹Π²Π°ΡŽΡ‚ΡΡ всС Π²ΠΈΠ΄ΠΆΠ΅Ρ‚Ρ‹ Π²Π΅Ρ€Ρ…Π½Π΅Π³ΠΎ уровня, Ρ‡Ρ‚ΠΎ Ρ€Π°Π²Π½ΠΎΡΠΈΠ»ΡŒΠ½ΠΎ ситуации, ΠΊΠΎΠ³Π΄Π° ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒ ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎ Π·Π°ΠΊΡ€Ρ‹Π²Π°Π΅Ρ‚ всС ΠΎΠΊΠ½Π°, наТимая ΠΊΠ½ΠΎΠΏΠΊΡƒ закрытия Π² Π·Π°Π³ΠΎΠ»ΠΎΠ²ΠΊΠ°Ρ… ΠΎΠΊΠΎΠ½. Π’ Π³Π»Π°Π²Π΅ 3 ΠΌΡ‹ ΠΏΠΎΠΊΠ°Π·Π°Π»ΠΈ, ΠΊΠ°ΠΊ ΠΌΠΎΠΆΠ½ΠΎ ΠΏΠ΅Ρ€Π΅ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΡΡ‚ΡŒ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ closeEvent(), ΠΏΠ΅Ρ€Π΅Ρ…Π²Π°Ρ‚Ρ‹Π²Π°ΡŽΡ‰ΡƒΡŽ этот ΠΌΠΎΠΌΠ΅Π½Ρ‚ ΠΈ Π²Ρ‹Π²ΠΎΠ΄ΡΡ‰ΡƒΡŽ Π½Π° экран сообщСниС.

Рис. 20.9. Β«Π’Ρ‹ Π΄Π΅ΠΉΡΡ‚Π²ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ Ρ…ΠΎΡ‚ΠΈΡ‚Π΅ Π·Π°Π²Π΅Ρ€ΡˆΠΈΡ‚ΡŒ Ρ€Π°Π±ΠΎΡ‚Ρƒ?Β».

Π’Π΅ΠΏΠ΅Ρ€ΡŒ Π΄Π°Π²Π°ΠΉΡ‚Π΅ рассмотрим класс TicTacToe:

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

Класс TicTacToe наслСдуСт QWidget ΠΈ пСрСопрСдСляСт Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ sizeHint(), paintEvent() ΠΈ mousePressEvent(). Он Ρ‚Π°ΠΊΠΆΠ΅ обСспСчиваСт Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ gameInProgress() ΠΈ saveState(), ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΌΡ‹ использовали Π² нашСм классС Application.

01 TicTacToe::TicTacToe(QWidget *parent, const char *name)

02 : QWidget(parent, name)

03 {

04 clearBoard();

05 if (qApp->isSessionRestored())

06 restoreState();

07 setWindowTitle(tr("Tic-Tac-Toe"));

08 }

Π’ конструкторС ΠΌΡ‹ стираСм ΠΈΠ³Ρ€ΠΎΠ²ΠΎΠ΅ ΠΏΠΎΠ»Π΅ ΠΈ, Ссли ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ Π±Ρ‹Π»ΠΎ Π²Ρ‹Π·Π²Π°Π½ΠΎ с ΠΎΠΏΡ†ΠΈΠ΅ΠΉ β€”session, Π²Ρ‹Π·Ρ‹Π²Π°Π΅ΠΌ Π·Π°ΠΊΡ€Ρ‹Ρ‚ΡƒΡŽ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ restoreState() для восстановлСния старого сСанса.

01 void TicTacToe::clearBoard()

02 {

03 for (int row= 0; row < 3; ++row) {

04 for (int column = 0; column < 3; ++column) {

05 board[row][column] = Empty;

06 }

07 }

08 turnNumber = 0;

09 }

Π’ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ clearBoard() ΠΌΡ‹ стираСм всС ячСйки ΠΈ устанавливаСм turnNumber Π½Π° Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ 0.

01 QString TicTacToe::saveState() const

02 {

03 QFile file(sessionFileName());

04 if (file.open(QIODevice::WriteOnly)) {

05 QTextStream out(&file);

06 for (int row = 0; row < 3; ++row) {

07 for (int column = 0; column < 3; ++column) {

08 out << board[row][column];

09 }

10 }

11 }

12 return file.fileName();

13 }

Π’ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ saveState() ΠΌΡ‹ записываСм состояниС ΠΈΠ³Ρ€ΠΎΠ²ΠΎΠ³ΠΎ поля Π½Π° диск. Π€ΠΎΡ€ΠΌΠ°Ρ‚ достаточно простой: Β«XΒ» для крСстиков, Β«0Β» для Π½ΠΎΠ»ΠΈΠΊΠΎΠ² ΠΈ Β«β€”Β» для пустых ячССк.

01 QString TicTacToe::sessionFileName() const

02 {

03 return QDir::homePath() + "/.tictactoe_"

04 + qApp->sessionId() + "_" + qApp->sessionKey();

05 }

Закрытая функция sessionFileName() Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ имя Ρ„Π°ΠΉΠ»Π° для Ρ‚Π΅ΠΊΡƒΡ‰Π΅Π³ΠΎ ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€Π° сСанса ΠΈ ΠΊΠ»ΡŽΡ‡Π° сСанса. Данная функция ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ ΠΊΠ°ΠΊ Π² saveState(), Ρ‚Π°ΠΊ ΠΈ Π² restoreState(). Имя Ρ„Π°ΠΉΠ»Π° опрСдСляСтся Π½Π° основС ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€Π° сСанса ΠΈ ΠΊΠ»ΡŽΡ‡Π° сСанса.

01 void TicTacToe::restoreState()

02 {

03 QFile file(sessionFileName());

04 if (file.open(QIODevice::ReadOnly)) {

05 QTextStream in(&file);

06 for (int row = 0; row < 3; ++row) {

07 for (int column = 0; column < 3; ++column) {

08 in >> board[row][column];

09 if (board[row][column] != Empty)

10 ++turnNumber;

11 }

12 }

13 }

14 update();

15 }

Π’ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ restoreState() ΠΌΡ‹ Π·Π°Π³Ρ€ΡƒΠΆΠ°Π΅ΠΌ Ρ„Π°ΠΉΠ» восстанавливаСмого сСанса ΠΈ заполняСм ΠΈΠ³Ρ€ΠΎΠ²ΠΎΠ΅ ΠΏΠΎΠ»Π΅ Π΅Π³ΠΎ ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΠ΅ΠΉ. ΠœΡ‹ рассчитываСм Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ turnNumber исходя ΠΈΠ· количСства крСстиков ΠΈ Π½ΠΎΠ»ΠΈΠΊΠΎΠ² Π½Π° ΠΈΠ³Ρ€ΠΎΠ²ΠΎΠΌ ΠΏΠΎΠ»Π΅.

Π’ конструкторС TicTacToe ΠΌΡ‹ Π²Ρ‹Π·Ρ‹Π²Π°Π»ΠΈ restoreState(), Ссли функция QApplication::isSessionRestored() Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π»Π° true. Π’ этом случаС sessionId() ΠΈ sessionKey() Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°ΡŽΡ‚ ΠΈΠΌΠ΅Π½Π½ΠΎ Ρ‚Π΅ значСния, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π±Ρ‹Π»ΠΈ ΠΏΡ€ΠΈ ΠΏΡ€ΠΎΡˆΠ»ΠΎΠΌ сохранСнии состояния прилоТСния, Π° функция sessionFileName() Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ имя Ρ„Π°ΠΉΠ»Π° Ρ‚ΠΎΠ³ΠΎ сСанса.

ВСстированиС ΠΈ ΠΎΡ‚Π»Π°Π΄ΠΊΠ° ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ½ΠΎΠ³ΠΎ ΠΊΠΎΠ΄Π° ΠΏΠΎ ΡƒΠΏΡ€Π°Π²Π»Π΅Π½ΠΈΡŽ сСансами ΠΌΠΎΠ³ΡƒΡ‚ Π±Ρ‹Ρ‚ΡŒ достаточно ΡƒΡ‚ΠΎΠΌΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹ΠΌ Π΄Π΅Π»ΠΎΠΌ, ΠΏΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ Π½Π°ΠΌ приходится всС врСмя Π²Ρ…ΠΎΠ΄ΠΈΡ‚ΡŒ ΠΈ Π²Ρ‹Ρ…ΠΎΠ΄ΠΈΡ‚ΡŒ ΠΈΠ· систСмы. Один ΠΈΠ· способов, ΠΏΠΎΠ·Π²ΠΎΠ»ΡΡŽΡ‰ΠΈΠΉ ΠΈΠ·Π±Π΅ΠΆΠ°Ρ‚ΡŒ этого, Π·Π°ΠΊΠ»ΡŽΡ‡Π°Π΅Ρ‚ΡΡ Π² ΠΏΡ€ΠΈΠΌΠ΅Π½Π΅Π½ΠΈΠΈ стандартной ΡƒΡ‚ΠΈΠ»ΠΈΡ‚Ρ‹ xsm, прСдусмотрСнной Π² систСмС X11. ΠŸΡ€ΠΈ ΠΏΠ΅Ρ€Π²ΠΎΠΌ Π²Ρ‹Π·ΠΎΠ²Π΅ xsm Π½Π° экран выводятся ΠΎΠΊΠ½ΠΎ ΠΌΠ΅Π½Π΅Π΄ΠΆΠ΅Ρ€Π° сСансов ΠΈ ΠΎΠΊΠ½ΠΎ консольного Ρ€Π΅ΠΆΠΈΠΌΠ°. ВсС прилоТСния, запускаСмыС с Π΄Π°Π½Π½ΠΎΠ³ΠΎ ΠΎΠΊΠ½Π° консольного Ρ€Π΅ΠΆΠΈΠΌΠ°, Π±ΡƒΠ΄ΡƒΡ‚ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ xsm Π² качСствС своСго ΠΌΠ΅Π½Π΅Π΄ΠΆΠ΅Ρ€Π° сСансов, Π° Π½Π΅ стандартный общСсистСмный ΠΌΠ΅Π½Π΅Π΄ΠΆΠ΅Ρ€ сСансов. ΠœΡ‹ ΠΌΠΎΠΆΠ΅ΠΌ Π·Π°Ρ‚Π΅ΠΌ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ ΠΎΠΊΠ½ΠΎ xsm для Π·Π°Π²Π΅Ρ€ΡˆΠ΅Π½ΠΈΡ, рСстарта ΠΈΠ»ΠΈ сброса сСанса ΠΈ ΠΏΡ€ΠΎΠΊΠΎΠ½Ρ‚Ρ€ΠΎΠ»ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ ΠΏΡ€Π°Π²ΠΈΠ»ΡŒΠ½ΠΎΡΡ‚ΡŒ повСдСния прилоТСния. ΠŸΠΎΠ΄Ρ€ΠΎΠ±Π½ΠΎΠ΅ описаниС Ρ‚ΠΎΠ³ΠΎ, ΠΊΠ°ΠΊ это дСлаСтся, Π²Ρ‹ Π½Π°ΠΉΠ΄Π΅Ρ‚Π΅ Π² сСти Π˜Π½Ρ‚Π΅Ρ€Π½Π΅Ρ‚ ΠΏΠΎ адрСсу http://doc.trolltech.com/4.1/session.html.

Π“Π»Π°Π²Π° 21. ΠŸΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ встроСнных систСм

Π Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠ° ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ½ΠΎΠ³ΠΎ обСспСчСния для Ρ‚Π°ΠΊΠΈΡ… ΠΌΠΎΠ±ΠΈΠ»ΡŒΠ½Ρ‹Ρ… устройств, ΠΊΠ°ΠΊ ΠΊΠ°Ρ€ΠΌΠ°Π½Π½Ρ‹Π΅ ΠΊΠΎΠΌΠΏΡŒΡŽΡ‚Π΅Ρ€Ρ‹ ΠΈ ΠΌΠΎΠ±ΠΈΠ»ΡŒΠ½Ρ‹Π΅ Ρ‚Π΅Π»Π΅Ρ„ΠΎΠ½Ρ‹, ΠΌΠΎΠΆΠ΅Ρ‚ ΠΏΡ€Π΅Π΄ΡΡ‚Π°Π²Π»ΡΡ‚ΡŒ собой ΠΎΡ‡Π΅Π½ΡŒ ΡΠ»ΠΎΠΆΠ½ΡƒΡŽ Π·Π°Π΄Π°Ρ‡Ρƒ, ΠΏΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ встроСнныС систСмы ΠΎΠ±Ρ‹Ρ‡Π½ΠΎ ΠΈΠΌΠ΅ΡŽΡ‚ Π±ΠΎΠ»Π΅Π΅ ΠΌΠ΅Π΄Π»Π΅Π½Π½Ρ‹Π΅ процСссоры, мСньший объСм постоянной памяти (Π½Π° Ρ„Π»Π΅Ρˆ-ΠΊΠ°Ρ€Ρ‚Π°Ρ… ΠΈΠ»ΠΈ Π½Π° ТСстких дисках), мСньший объСм основной памяти ΠΈ дисплСи мСньшСго Ρ€Π°Π·ΠΌΠ΅Ρ€Π°, Ρ‡Π΅ΠΌ Π½Π°ΡΡ‚ΠΎΠ»ΡŒΠ½Ρ‹Π΅ ΠΊΠΎΠΌΠΏΡŒΡŽΡ‚Π΅Ρ€Ρ‹.

БистСма Qtopia Core (Ρ€Π°Π½Π΅Π΅ ΠΎΠ½Π° Π½Π°Π·Ρ‹Π²Π°Π»Π°ΡΡŒ Qt/Embedded) β€” это вСрсия Qt, оптимизированная для Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ встроСнных систСм ΠΏΠΎΠ΄ Linux. Qtopia Core ΠΈΠΌΠ΅Π΅Ρ‚ Ρ‚Π°ΠΊΠΈΠ΅ ΠΆΠ΅ ΡƒΡ‚ΠΈΠ»ΠΈΡ‚Ρ‹ ΠΈ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ½Ρ‹ΠΉ интСрфСйс, ΠΊΠ°ΠΊΠΈΠ΅ прСдусмотрСны Π² вСрсиях Qt для Π½Π°ΡΡ‚ΠΎΠ»ΡŒΠ½Ρ‹Ρ… ΠΊΠΎΠΌΠΏΡŒΡŽΡ‚Π΅Ρ€ΠΎΠ² (Qt/Windows, Qt/X11 ΠΈ Qt/Mac), Π° Ρ‚Π°ΠΊΠΆΠ΅ Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ ΠΏΡ€Π΅Π΄Π»Π°Π³Π°Π΅Ρ‚ классы ΠΈ ΡƒΡ‚ΠΈΠ»ΠΈΡ‚Ρ‹, Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΡ‹Π΅ для программирования встроСнных систСм. Π§Π΅Ρ€Π΅Π· Π΄Π²ΠΎΠΉΠ½ΠΎΠ΅ Π»ΠΈΡ†Π΅Π½Π·ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ эта систСма доступна ΠΊΠ°ΠΊ для Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΎΠΊ с ΠΎΡ‚ΠΊΡ€Ρ‹Ρ‚Ρ‹ΠΌ исходным ΠΊΠΎΠ΄ΠΎΠΌ, Ρ‚Π°ΠΊ ΠΈ для коммСрчСских Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΎΠΊ.

Qtopia Core ΠΌΠΎΠΆΠ΅Ρ‚ Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚ΡŒ Π½Π° любом ΠΎΠ±ΠΎΡ€ΡƒΠ΄ΠΎΠ²Π°Π½ΠΈΠΈ, Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΎΠ½ΠΈΡ€ΡƒΡŽΡ‰Π΅ΠΌ ΠΏΠΎΠ΄ ΡƒΠΏΡ€Π°Π²Π»Π΅Π½ΠΈΠ΅ΠΌ Linux (Π²ΠΊΠ»ΡŽΡ‡Π°Ρ Π°Ρ€Ρ…ΠΈΡ‚Π΅ΠΊΡ‚ΡƒΡ€Ρ‹ Intel x86, MIPS, ARM, StrongARM, Motorola 68000 ΠΈ PowerPC). Π­Ρ‚Π° систСма ΠΈΠΌΠ΅Π΅Ρ‚ Π±ΡƒΡ„Π΅Ρ€ Ρ„Ρ€Π΅ΠΉΠΌΠΎΠ² основной памяти, ΠΎΡ‚ΠΎΠ±Ρ€Π°ΠΆΠ°Π΅ΠΌΠΎΠΉ Π½Π° дисплСй, ΠΈ ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°Π΅Ρ‚ компилятор Π‘++. Π’ ΠΎΡ‚Π»ΠΈΡ‡ΠΈΠ΅ ΠΎΡ‚ Qt/X11, ΠΎΠ½Π° Π½Π΅ нуТдаСтся Π² систСмС X Window; вмСсто этого Π² Π½Π΅ΠΉ рСализуСтся собствСнная оконная систСма (own window system β€” QWS), которая ΠΏΡ€ΠΈΠ²ΠΎΠ΄ΠΈΡ‚ ΠΊ Π·Π½Π°Ρ‡ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΠΉ экономии постоянной ΠΈ основной памяти. Для Π΅Ρ‰Π΅ большСго ΡƒΠΌΠ΅Π½ΡŒΡˆΠ΅Π½ΠΈΡ расхода памяти ΠΌΠΎΠΆΠ½ΠΎ ΠΏΠ΅Ρ€Π΅ΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ Qtopia Core ΠΈ ΠΈΡΠΊΠ»ΡŽΡ‡ΠΈΡ‚ΡŒ Π½Π΅ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌΡ‹Π΅ возмоТности. Если Π·Π°Ρ€Π°Π½Π΅Π΅ извСстны ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌΡ‹Π΅ устройством прилоТСния ΠΈ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚Ρ‹, ΠΎΠ½ΠΈ ΠΌΠΎΠ³ΡƒΡ‚ Π±Ρ‹Ρ‚ΡŒ скомпилированы совмСстно Π² ΠΎΠ΄ΠΈΠ½ исполняСмый ΠΌΠΎΠ΄ΡƒΠ»ΡŒ ΠΈ собраны статичСски с Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠ°ΠΌΠΈ Qtopia Core.