14 updateStatusBar();
15 }
Π€ΡΠ½ΠΊΡΠΈΡ QMainWindow::statusBar() Π²ΠΎΠ·Π²ΡΠ°ΡΠ°Π΅Ρ ΡΠΊΠ°Π·Π°ΡΠ΅Π»Ρ Π½Π° ΡΡΡΠΎΠΊΡ ΡΠΎΡΡΠΎΡΠ½ΠΈΡ. (Π‘ΡΡΠΎΠΊΠ° ΡΠΎΡΡΠΎΡΠ½ΠΈΡ ΡΠΎΠ·Π΄Π°Π΅ΡΡΡ ΠΏΡΠΈ ΠΏΠ΅ΡΠ²ΠΎΠΌ Π²ΡΠ·ΠΎΠ²Π΅ ΡΡΠ½ΠΊΡΠΈΠΈ statusBar.) Π ΠΊΠ°ΡΠ΅ΡΡΠ²Π΅ ΠΈΠ½Π΄ΠΈΠΊΠ°ΡΠΎΡΠΎΠ² ΡΠΎΡΡΠΎΡΠ½ΠΈΡ ΠΏΡΠΎΡΡΠΎ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΡΡΡΡ ΡΠ΅ΠΊΡΡΠΎΠ²ΡΠ΅ ΠΌΠ΅ΡΠΊΠΈ QLabel, ΡΠ΅ΠΊΡΡ ΠΊΠΎΡΠΎΡΡΡ ΠΈΠ·ΠΌΠ΅Π½ΡΠ΅ΡΡΡ ΠΏΠΎ ΠΌΠ΅ΡΠ΅ Π½Π΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌΠΎΡΡΠΈ. ΠΡ Π΄ΠΎΠ±Π°Π²ΠΈΠ»ΠΈ ΠΎΡΡΡΡΠΏ Π΄Π»Ρ formulaLabel, ΡΡΠΎΠ±Ρ ΡΠΊΠ°Π·Π°Π½Π½ΡΠΉ Π·Π΄Π΅ΡΡ ΡΠ΅ΠΊΡΡ ΠΎΡΠΎΠ±ΡΠ°ΠΆΠ°Π»ΡΡ Ρ Π½Π΅Π±ΠΎΠ»ΡΡΠΈΠΌ ΡΠΌΠ΅ΡΠ΅Π½ΠΈΠ΅ΠΌ ΠΎΡ Π»Π΅Π²ΠΎΠ³ΠΎ ΠΊΡΠ°Ρ. ΠΡΠΈ Π΄ΠΎΠ±Π°Π²Π»Π΅Π½ΠΈΠΈ ΡΠ΅ΠΊΡΡΠΎΠ²ΡΡ ΠΌΠ΅ΡΠΎΠΊ QLabel Π² ΡΡΡΠΎΠΊΡ ΡΠΎΡΡΠΎΡΠ½ΠΈΡ ΠΎΠ½ΠΈ Π°Π²ΡΠΎΠΌΠ°ΡΠΈΡΠ΅ΡΠΊΠΈ ΡΡΠ°Π½ΠΎΠ²ΡΡΡΡ Π΄ΠΎΡΠ΅ΡΠ½ΠΈΠΌΠΈ ΠΏΠΎ ΠΎΡΠ½ΠΎΡΠ΅Π½ΠΈΡ ΠΊ ΡΡΡΠΎΠΊΠ΅ ΡΠΎΡΡΠΎΡΠ½ΠΈΡ.
Π ΠΈΡ. 3.8 ΠΏΠΎΠΊΠ°Π·ΡΠ²Π°Π΅Ρ, ΡΡΠΎ ΡΡΠΈ Π΄Π²Π΅ ΡΠ΅ΠΊΡΡΠΎΠ²ΡΠ΅ ΠΌΠ΅ΡΠΊΠΈ Π·Π°Π½ΠΈΠΌΠ°ΡΡ ΡΠ°Π·Π»ΠΈΡΠ½ΠΎΠ΅ ΠΏΡΠΎΡΡΡΠ°Π½ΡΡΠ²ΠΎ. ΠΠ½Π΄ΠΈΠΊΠ°ΡΠΎΡ ΡΡΠ΅ΠΉΠΊΠΈ Π·Π°Π½ΠΈΠΌΠ°Π΅Ρ ΠΎΡΠ΅Π½Ρ Π½Π΅ΠΌΠ½ΠΎΠ³ΠΎ ΠΌΠ΅ΡΡΠ°, ΠΈ ΠΏΡΠΈ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠΈ ΡΠ°Π·ΠΌΠ΅ΡΠΎΠ² ΠΎΠΊΠ½Π° Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡΠ΅Π»ΡΠ½ΠΎΠ΅ ΠΏΡΠΎΡΡΡΠ°Π½ΡΡΠ²ΠΎ Π±ΡΠ΄Π΅Ρ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΎ Π΄Π»Ρ ΠΏΡΠ°Π²ΠΎΠ³ΠΎ ΠΈΠ½Π΄ΠΈΠΊΠ°ΡΠΎΡΠ°, Π³Π΄Π΅ ΠΎΡΠΎΠ±ΡΠ°ΠΆΠ°Π΅ΡΡΡ ΡΠΎΡΠΌΡΠ»Π° ΡΡΠ΅ΠΉΠΊΠΈ. ΠΡΠΎ Π΄ΠΎΡΡΠΈΠ³Π°Π΅ΡΡΡ ΠΏΡΡΠ΅ΠΌ ΡΡΡΠ°Π½ΠΎΠ²ΠΊΠΈ ΡΠ°ΠΊΡΠΎΡΠ° ΡΠ°ΡΡΡΠΆΠ΅Π½ΠΈΡ Π½Π° 1 ΠΏΡΠΈ Π²ΡΠ·ΠΎΠ²Π΅ ΡΡΠ½ΠΊΡΠΈΠΈ QStatusBar::addWidget() Π΄Π»Ρ ΡΠΎΡΠΌΡΠ»Ρ ΡΡΠ΅ΠΉΠΊΠΈ ΠΏΡΠΈ ΡΠΎΠ·Π΄Π°Π½ΠΈΠΈ Π΄Π²ΡΡ Π΄ΡΡΠ³ΠΈΡ ΠΈΠ½Π΄ΠΈΠΊΠ°ΡΠΎΡΠΎΠ². ΠΠ»Ρ ΠΈΠ½Π΄ΠΈΠΊΠ°ΡΠΎΡΠ° ΠΏΠΎΠ·ΠΈΡΠΈΠΈ ΡΠ°ΠΊΡΠΎΡ ΡΠ°ΡΡΡΠΆΠ΅Π½ΠΈΡ ΠΏΠΎ ΡΠΌΠΎΠ»ΡΠ°Π½ΠΈΡ ΡΠ°Π²Π΅Π½ 0, ΠΈ ΠΏΠΎΡΡΠΎΠΌΡ ΠΎΠ½ Π½Π΅ Π±ΡΠ΄Π΅Ρ ΡΠ°ΡΡΡΠ³ΠΈΠ²Π°ΡΡΡΡ.
Π ΠΈΡ. 3.8. Π‘ΡΡΠΎΠΊΠ° ΡΠΎΡΡΠΎΡΠ½ΠΈΡ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡ ΠΠ»Π΅ΠΊΡΡΠΎΠ½Π½Π°Ρ ΡΠ°Π±Π»ΠΈΡΠ°.
ΠΠΎΠ³Π΄Π° QStatusBar ΡΠ°ΡΠΏΠΎΠ»Π°Π³Π°Π΅Ρ Π²ΠΈΠ΄ΠΆΠ΅ΡΡ ΠΈΠ½Π΄ΠΈΠΊΠ°ΡΠΎΡΠΎΠ², ΠΎΠ½ ΠΏΠΎΡΡΠ°ΡΠ°Π΅ΡΡΡ ΠΎΠ±Π΅ΡΠΏΠ΅ΡΠΈΡΡ Β«ΠΈΠ΄Π΅Π°Π»ΡΠ½ΡΠΉΒ» ΡΠ°Π·ΠΌΠ΅Ρ Π²ΠΈΠ΄ΠΆΠ΅ΡΠΎΠ², Π·Π°Π΄Π°Π½Π½ΡΠΉ ΡΡΠ½ΠΊΡΠΈΠ΅ΠΉ QWidget::sizeHint(), ΠΈ Π·Π°ΡΠ΅ΠΌ ΡΠ°ΡΡΡΠ½Π΅Ρ Π²ΠΈΠ΄ΠΆΠ΅ΡΡ, ΠΊΠΎΡΠΎΡΡΠ΅ Π΄ΠΎΠΏΡΡΠΊΠ°ΡΡ ΡΠ°ΡΡΡΠΆΠ΅Π½ΠΈΠ΅, Π·Π°ΠΏΠΎΠ»Π½ΡΡ Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡΠ΅Π»ΡΠ½ΠΎΠ΅ ΠΏΡΠΎΡΡΡΠ°Π½ΡΡΠ²ΠΎ. ΠΠ΄Π΅Π°Π»ΡΠ½ΡΠΉ ΡΠ°Π·ΠΌΠ΅Ρ Π²ΠΈΠ΄ΠΆΠ΅ΡΠ° Π·Π°Π²ΠΈΡΠΈΡ ΠΎΡ Π΅Π³ΠΎ ΡΠΎΠ΄Π΅ΡΠΆΠ°Π½ΠΈΡ ΠΈ Π±ΡΠ΄Π΅Ρ ΡΠ°ΠΌ ΠΈΠ·ΠΌΠ΅Π½ΡΡΡΡΡ ΠΏΠΎ ΠΌΠ΅ΡΠ΅ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΡ ΡΠΎΠ΄Π΅ΡΠΆΠ°Π½ΠΈΡ. Π§ΡΠΎΠ±Ρ ΠΏΡΠ΅Π΄ΠΎΡΠ²ΡΠ°ΡΠΈΡΡ ΠΏΠΎΡΡΠΎΡΠ½Π½ΠΎΠ΅ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠ΅ ΡΠ°Π·ΠΌΠ΅ΡΠ° ΠΈΠ½Π΄ΠΈΠΊΠ°ΡΠΎΡΠ° ΡΡΠ΅ΠΉΠΊΠΈ, ΠΌΡ ΡΡΡΠ°Π½Π°Π²Π»ΠΈΠ²Π°Π΅ΠΌ Π΅Π³ΠΎ ΠΌΠΈΠ½ΠΈΠΌΠ°Π»ΡΠ½ΡΠΉ ΡΠ°Π·ΠΌΠ΅Ρ Π½Π° Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅, Π΄ΠΎΡΡΠ°ΡΠΎΡΠ½ΠΎΠ΅ Π΄Π»Ρ ΡΠ°Π·ΠΌΠ΅ΡΠ΅Π½ΠΈΡ Π² Π½Π΅ΠΌ ΡΠ°ΠΌΠΎΠ³ΠΎ Π±ΠΎΠ»ΡΡΠΎΠ³ΠΎ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΠ³ΠΎ ΡΠ΅ΠΊΡΡΠΎΠ²ΠΎΠ³ΠΎ Π·Π½Π°ΡΠ΅Π½ΠΈΡ (Β«W999Β»), ΠΈ Π΄ΠΎΠ±Π°Π²Π»ΡΠ΅ΠΌ Π΅ΡΠ΅ Π½Π΅ΠΌΠ½ΠΎΠ³ΠΎ ΠΏΡΠΎΡΡΡΠ°Π½ΡΡΠ²Π°. ΠΡ ΡΠ°ΠΊΠΆΠ΅ ΡΡΡΠ°Π½Π°Π²Π»ΠΈΠ²Π°Π΅ΠΌ Π΅Π³ΠΎ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡ Π²ΡΡΠ°Π²Π½ΠΈΠ²Π°Π½ΠΈΡ Π½Π° Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ AlignHCenter Π΄Π»Ρ Π²ΡΡΠ°Π²Π½ΠΈΠ²Π°Π½ΠΈΡ ΠΏΠΎ ΡΠ΅Π½ΡΡΡ ΡΠ΅ΠΊΡΡΠ° Π² ΠΎΠ±Π»Π°ΡΡΠΈ ΠΈΠ½Π΄ΠΈΠΊΠ°ΡΠΎΡΠ°.
ΠΠ΅ΡΠ΅Π΄ Π·Π°Π²Π΅ΡΡΠ΅Π½ΠΈΠ΅ΠΌ ΡΡΠ½ΠΊΡΠΈΠΈ ΠΌΡ ΡΠΎΠ΅Π΄ΠΈΠ½ΡΠ΅ΠΌ Π΄Π²Π° ΡΠΈΠ³Π½Π°Π»Π° Spreadsheet Ρ Π΄Π²ΡΠΌΡ ΡΠ»ΠΎΡΠ°ΠΌΠΈ Π³Π»Π°Π²Π½ΠΎΠ³ΠΎ ΠΎΠΊΠ½Π° MainWindow: updateStatusBar() ΠΈ spreadsheetModified().
01 void MainWindow::updateStatusBar()
02 {
03 locationLabel->setText(spreadsheet->currentLocation());
04 formulaLabel->setText(spreadsheet->currentFormula());
05 }
Π‘Π»ΠΎΡ updateStatusBar() ΠΎΠ±Π½ΠΎΠ²Π»ΡΠ΅Ρ ΠΈΠ½Π΄ΠΈΠΊΠ°ΡΠΎΡΡ ΡΠ°ΡΠΏΠΎΠ»ΠΎΠΆΠ΅Π½ΠΈΡ ΡΡΠ΅ΠΉΠΊΠΈ ΠΈ ΡΠΎΡΠΌΡΠ»Ρ ΡΡΠ΅ΠΉΠΊΠΈ. ΠΠ½ Π²ΡΠ·ΡΠ²Π°Π΅ΡΡΡ ΠΏΡΠΈ Π»ΡΠ±ΠΎΠΌ ΠΏΠ΅ΡΠ΅ΠΌΠ΅ΡΠ΅Π½ΠΈΠΈ ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»Π΅ΠΌ ΠΊΡΡΡΠΎΡΠ° ΡΡΠ΅ΠΉΠΊΠΈ Π½Π° Π½ΠΎΠ²ΡΡ ΡΡΠ΅ΠΉΠΊΡ. Π ΠΊΠΎΠ½ΡΠ΅ ΡΡΠ½ΠΊΡΠΈΠΈ createStatusBar() ΡΡΠΎΡ ΡΠ»ΠΎΡ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΡΡΡ ΠΊΠ°ΠΊ ΠΎΠ±ΡΡΠ½Π°Ρ ΡΡΠ½ΠΊΡΠΈΡ Π΄Π»Ρ ΠΈΠ½ΠΈΡΠΈΠ°Π»ΠΈΠ·Π°ΡΠΈΠΈ ΠΈΠ½Π΄ΠΈΠΊΠ°ΡΠΎΡΠΎΠ². ΠΡΠΎ Π½Π΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌΠΎ, ΠΏΠΎΡΠΊΠΎΠ»ΡΠΊΡ Spreadsheet ΠΏΡΠΈ Π·Π°ΠΏΡΡΠΊΠ΅ Π½Π΅ Π³Π΅Π½Π΅ΡΠΈΡΡΠ΅Ρ ΡΠΈΠ³Π½Π°Π» currentCellChanged().
06 void MainWindow::spreadsheetModified()
07 {
08 setWindowModified(true);
09 updateStatusBar();
10 }
Π‘Π»ΠΎΡ spreadsheetModified() ΠΎΠ±Π½ΠΎΠ²Π»ΡΠ΅Ρ Π²ΡΠ΅ ΡΡΠΈ ΠΈΠ½Π΄ΠΈΠΊΠ°ΡΠΎΡΠ° Π΄Π»Ρ ΠΎΡΡΠ°ΠΆΠ΅Π½ΠΈΡ ΠΈΠΌΠΈ ΡΠ΅ΠΊΡΡΠ΅Π³ΠΎ ΡΠΎΡΡΠΎΡΠ½ΠΈΡ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡ ΠΈ ΡΡΡΠ°Π½Π°Π²Π»ΠΈΠ²Π°Π΅Ρ ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΡΡ modified Π½Π° Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ true. (ΠΡ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π»ΠΈ ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΡΡ modified ΠΏΡΠΈ ΡΠ΅Π°Π»ΠΈΠ·Π°ΡΠΈΠΈ ΠΌΠ΅Π½Ρ File Π΄Π»Ρ ΠΊΠΎΠ½ΡΡΠΎΠ»Ρ Π½Π΅ΡΠΎΡ ΡΠ°Π½Π΅Π½Π½ΡΡ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠΉ.) Π‘Π»ΠΎΡ spreadsheetModified() ΡΡΡΠ°Π½Π°Π²Π»ΠΈΠ²Π°Π΅Ρ ΡΠ²ΠΎΠΉΡΡΠ²ΠΎ windowModified Π² Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ true, ΠΎΠ±Π½ΠΎΠ²Π»ΡΡ ΡΡΡΠΎΠΊΡ Π·Π°Π³ΠΎΠ»ΠΎΠ²ΠΊΠ°. ΠΡΠ° ΡΡΠ½ΠΊΡΠΈΡ ΠΎΠ±Π½ΠΎΠ²Π»ΡΠ΅Ρ ΡΠ°ΠΊΠΆΠ΅ ΠΈΠ½Π΄ΠΈΠΊΠ°ΡΠΎΡΡ ΡΠ°ΡΠΏΠΎΠ»ΠΎΠΆΠ΅Π½ΠΈΡ ΠΈ ΡΠΎΡΠΌΡΠ»Ρ ΡΡΠ΅ΠΉΠΊΠΈ, ΡΡΠΎΠ±Ρ ΠΎΠ½ΠΈ ΠΎΡΡΠ°ΠΆΠ°Π»ΠΈ ΡΠ΅ΠΊΡΡΠ΅Π΅ ΡΠΎΡΡΠΎΡΠ½ΠΈΠ΅.
Π Π΅Π°Π»ΠΈΠ·Π°ΡΠΈΡ ΠΌΠ΅Π½Ρ File
Π Π΄Π°Π½Π½ΠΎΠΌ ΡΠ°Π·Π΄Π΅Π»Π΅ ΠΌΡ ΠΎΠΏΡΠ΅Π΄Π΅Π»ΠΈΠΌ ΡΠ»ΠΎΡΡ ΠΈ Π·Π°ΠΊΡΡΡΡΠ΅ ΡΡΠ½ΠΊΡΠΈΠΈ, Π½Π΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌΡΠ΅ Π΄Π»Ρ ΠΎΠ±Π΅ΡΠΏΠ΅ΡΠ΅Π½ΠΈΡ ΡΠ°Π±ΠΎΡΡ ΠΌΠ΅Π½Ρ File ΠΈ Π΄Π»Ρ ΡΠΏΡΠ°Π²Π»Π΅Π½ΠΈΡ ΡΠΏΠΈΡΠΊΠΎΠΌ Π½Π΅Π΄Π°Π²Π½ΠΎ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΠΌΡΡ ΡΠ°ΠΉΠ»ΠΎΠ².
01 void MainWindow::newFile()
02 {
03 if (okToContinue ())
04 {
05 spreadsheet->clear();
06 setCurrentFile("");
07 }
08 }
Π‘Π»ΠΎΡ newFile() Π²ΡΠ·ΡΠ²Π°Π΅ΡΡΡ ΠΏΡΠΈ Π²ΡΠ±ΠΎΡΠ΅ ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»Π΅ΠΌ ΠΏΡΠ½ΠΊΡΠ° ΠΌΠ΅Π½Ρ File | New ΠΈΠ»ΠΈ ΠΏΡΠΈ Π½Π°ΠΆΠ°ΡΠΈΠΈ ΠΊΠ½ΠΎΠΏΠΊΠΈ New Π½Π° ΠΏΠ°Π½Π΅Π»ΠΈ ΠΈΠ½ΡΡΡΡΠΌΠ΅Π½ΡΠΎΠ². ΠΠ°ΠΊΡΡΡΠ°Ρ ΡΡΠ½ΠΊΡΠΈΡ okToContinue() Π·Π°Π΄Π°Π΅Ρ ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»Ρ Π²ΠΎΠΏΡΠΎΡ ΠΎΡΠ½ΠΎΡΠΈΡΠ΅Π»ΡΠ½ΠΎ Π½Π΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌΠΎΡΡΠΈ ΡΠΎΡ ΡΠ°Π½Π΅Π½ΠΈΡ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠΉ (Β«Do you want to save your changes?Β» β Π‘ΠΎΡ ΡΠ°Π½ΠΈΡΡ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΡ?), Π΅ΡΠ»ΠΈ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΡ Π΄ΠΎ ΡΡΠΎΠ³ΠΎ Π½Π΅ Π±ΡΠ»ΠΈ ΡΠΎΡ ΡΠ°Π½Π΅Π½Ρ. ΠΠ½Π° Π²ΠΎΠ·Π²ΡΠ°ΡΠ°Π΅Ρ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ true, Π΅ΡΠ»ΠΈ ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»Ρ ΠΎΡΠ²Π΅ΡΠ°Π΅Ρ Yes ΠΈΠ»ΠΈ No (ΡΠΎΡ ΡΠ°Π½ΡΡ Π΄ΠΎΠΊΡΠΌΠ΅Π½Ρ ΠΏΡΠΈ ΠΎΡΠ²Π΅ΡΠ΅ Yes), ΠΈ ΠΎΠ½Π° Π²ΠΎΠ·Π²ΡΠ°ΡΠ°Π΅Ρ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ false, Π΅ΡΠ»ΠΈ ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»Ρ ΠΎΡΠ²Π΅ΡΠ°Π΅Ρ Cancel. Π€ΡΠ½ΠΊΡΠΈΡ Spreadsheet::clear() ΠΎΡΠΈΡΠ°Π΅Ρ Π²ΡΠ΅ ΡΡΠ΅ΠΉΠΊΠΈ ΠΈ ΡΠΎΡΠΌΡΠ»Ρ ΡΠ»Π΅ΠΊΡΡΠΎΠ½Π½ΠΎΠΉ ΡΠ°Π±Π»ΠΈΡΡ. ΠΠ°ΠΊΡΡΡΠ°Ρ ΡΡΠ½ΠΊΡΠΈΡ setCurrentFile() ΠΊΡΠΎΠΌΠ΅ ΡΡΡΠ°Π½ΠΎΠ²ΠΊΠΈ Π·Π°ΠΊΡΡΡΠΎΠΉ ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΠΎΠΉ curFile ΠΈ ΠΎΠ±Π½ΠΎΠ²Π»Π΅Π½ΠΈΡ ΡΠΏΠΈΡΠΊΠ° Π½Π΅Π΄Π°Π²Π½ΠΎ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΠΌΡΡ ΡΠ°ΠΉΠ»ΠΎΠ² ΠΈΠ·ΠΌΠ΅Π½ΡΠ΅Ρ Π·Π°Π³ΠΎΠ»ΠΎΠ²ΠΎΠΊ ΠΎΠΊΠ½Π°, ΠΎΡΡΠ°ΠΆΠ°Ρ ΡΠΎΡ ΡΠ°ΠΊΡ, ΡΡΠΎ ΡΠ΅Π΄Π°ΠΊΡΠΈΡΡΠ΅ΠΌΡΠΉ Π΄ΠΎΠΊΡΠΌΠ΅Π½Ρ Π½Π΅ ΠΈΠΌΠ΅Π΅Ρ Π·Π°Π³ΠΎΠ»ΠΎΠ²ΠΊΠ°.
01 bool MainWindow::okToContinue()
02 {
03 if (isWindowModified()) {
04 int r = QMessageBox::warning(this,
05 tr("Spreadsheet"), tr("The document has been modified.\n"
06 "Do you want to save your changes?"),
07 QMessageBox::Yes | QMessageBox::Default,
08 QMessageBox::No,
09 QMessageBox::Cancel | QMessageBox::Escape);
10 if (r == QMessageBox::Yes) {
11 return save();
12 } else if (r == QMessageBox::Cancel) {
13 return false;
14 }
15 }
16 return true;
17 }
B okToContinue() ΠΌΡ ΠΏΡΠΎΠ²Π΅ΡΡΠ΅ΠΌ ΡΠ²ΠΎΠΉΡΡΠ²ΠΎ windowModified. ΠΡΠ»ΠΈ ΠΎΠ½ΠΎ ΠΈΠΌΠ΅Π΅Ρ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ true, ΠΌΡ Π²ΡΠ²ΠΎΠ΄ΠΈΠΌ Π½Π° ΡΠΊΡΠ°Π½ ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΠ΅, ΠΏΠΎΠΊΠ°Π·Π°Π½Π½ΠΎΠ΅ Π½Π° ΡΠΈΡ. 3.9. ΠΠΊΠ½ΠΎ ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΡ ΡΠΎΠ΄Π΅ΡΠΆΠΈΡ ΠΊΠ½ΠΎΠΏΠΊΠΈ Yes, No ΠΈ Cancel. ΠΠΎΠ΄ΠΈΡΠΈΠΊΠ°ΡΠΎΡ QMessageBox::Default Π΄Π΅Π»Π°Π΅Ρ Yes ΠΊΠ½ΠΎΠΏΠΊΠΎΠΉ, ΠΊΠΎΡΠΎΡΠ°Ρ Π²ΡΠ±ΠΈΡΠ°Π΅ΡΡΡ ΠΏΠΎ ΡΠΌΠΎΠ»ΡΠ°Π½ΠΈΡ. ΠΠΎΠ΄ΠΈΡΠΈΠΊΠ°ΡΠΎΡ QMessageBox::Escape Π·Π°Π΄Π°Π΅Ρ ΠΊΠ»Π°Π²ΠΈΡΡ Esc Π² ΠΊΠ°ΡΠ΅ΡΡΠ²Π΅ ΡΠΈΠ½ΠΎΠ½ΠΈΠΌΠ° ΠΊΠ½ΠΎΠΏΠΊΠΈ Cancel.
Π ΠΈΡ. 3.9. Β«Π‘ΠΎΡ ΡΠ°Π½ΠΈΡΡ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΡ?Β»
ΠΡΠ·ΠΎΠ² ΡΡΠ½ΠΊΡΠΈΠΈ warning() Π½Π° ΠΏΠ΅ΡΠ²ΡΠΉ Π²Π·Π³Π»ΡΠ΄ ΠΌΠΎΠΆΠ΅Ρ ΠΏΠΎΠΊΠ°Π·Π°ΡΡΡΡ ΡΠ»ΠΈΡΠΊΠΎΠΌ ΡΠ»ΠΎΠΆΠ½ΡΠΌ, Π½ΠΎ ΠΎΠ½ ΠΈΠΌΠ΅Π΅Ρ ΠΎΡΠ΅Π½Ρ ΠΏΡΠΎΡΡΠΎΠΉ ΡΠΎΡΠΌΠ°Ρ:
QMessageBox::warning(ΡΠΎΠ΄ΠΈΡΠ΅Π»ΡΡΠΊΠΈΠΉ ΠΎΠ±ΡΠ΅ΠΊΡ, Π·Π°Π³ΠΎΠ»ΠΎΠ²ΠΎΠΊ, ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΠ΅, ΠΊΠ½ΠΎΠΏΠΊΠ°0, ΠΊΠ½ΠΎΠΏΠΊΠ°1, β¦);
QMessageBox ΡΠΎΠ΄Π΅ΡΠΆΠΈΡ ΡΡΠ½ΠΊΡΠΈΠΈ information(), question() ΠΈ critical(), ΠΊΠ°ΠΆΠ΄Π°Ρ ΠΈΠ· ΠΊΠΎΡΠΎΡΡΡ ΠΈΠΌΠ΅Π΅Ρ ΡΠΎΠ±ΡΡΠ²Π΅Π½Π½ΡΡ ΠΏΠΈΠΊΡΠΎΠ³ΡΠ°ΠΌΠΌΡ.
Π ΠΈΡ. 3.10. ΠΠΈΠΊΡΠΎΠ³ΡΠ°ΠΌΠΌΡ ΠΎΠΊΠ½Π° ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΡ.
01 void MainWindow::open()
02 {
03 if (okToContinue()) {
04 QString fileName = QFileDialog::getOpenFileName(".", fileFilters, this);
05 if (!fileName.isEmpty())
06 loadFile(fileName);
07 }
08 }
Π‘Π»ΠΎΡ open() ΡΠΎΠΎΡΠ²Π΅ΡΡΡΠ²ΡΠ΅Ρ ΠΏΡΠ½ΠΊΡΡ ΠΌΠ΅Π½Ρ File | Open. ΠΠ°ΠΊ ΠΈ ΡΠ»ΠΎΡ newFile(), ΠΎΠ½ ΡΠ½Π°ΡΠ°Π»Π° Π²ΡΠ·ΡΠ²Π°Π΅Ρ okToContinue() Π΄Π»Ρ ΠΎΠ±ΡΠ°Π±ΠΎΡΠΊΠΈ Π½Π΅ΡΠΎΡ ΡΠ°Π½Π΅Π½Π½ΡΡ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠΉ. ΠΠ°ΡΠ΅ΠΌ ΠΎΠ½ Π²ΡΠ·ΡΠ²Π°Π΅Ρ ΡΠ΄ΠΎΠ±Π½ΡΡ ΡΡΠ°ΡΠΈΡΠ΅ΡΠΊΡΡ ΡΡΠ½ΠΊΡΠΈΡ QFileDialog::getOpenFileName() Π΄Π»Ρ ΠΏΠΎΠ»ΡΡΠ΅Π½ΠΈΡ ΠΎΡ ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»Ρ Π½ΠΎΠ²ΠΎΠ³ΠΎ ΠΈΠΌΠ΅Π½ΠΈ ΡΠ°ΠΉΠ»Π°. ΠΡΠ° ΡΡΠ½ΠΊΡΠΈΡ Π²ΡΠ²ΠΎΠ΄ΠΈΡ Π½Π° ΡΠΊΡΠ°Π½ Π΄ΠΈΠ°Π»ΠΎΠ³ΠΎΠ²ΠΎΠ΅ ΠΎΠΊΠ½ΠΎ Π΄Π»Ρ Π²ΡΠ±ΠΎΡΠ° ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»Π΅ΠΌ ΡΠ°ΠΉΠ»Π° ΠΈ Π²ΠΎΠ·Π²ΡΠ°ΡΠ°Π΅Ρ ΠΈΠΌΡ ΡΠ°ΠΉΠ»Π° ΠΈΠ»ΠΈ ΠΏΡΡΡΡΡ ΡΡΡΠΎΠΊΡ ΠΏΡΠΈ Π½Π°ΠΆΠ°ΡΠΈΠΈ ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»Π΅ΠΌ ΠΊΠ»Π°Π²ΠΈΡΠΈ Cancel.
Π ΠΏΠ΅ΡΠ²ΠΎΠΌ Π°ΡΠ³ΡΠΌΠ΅Π½ΡΠ΅ ΡΡΠ½ΠΊΡΠΈΠΈ QFileDialog::getOpenFileName() Π·Π°Π΄Π°Π΅ΡΡΡ ΡΠΎΠ΄ΠΈΡΠ΅Π»ΡΡΠΊΠΈΠΉ Π²ΠΈΠ΄ΠΆΠ΅Ρ. ΠΠ·Π°ΠΈΠΌΠΎΠ΄Π΅ΠΉΡΡΠ²ΠΈΠ΅ ΡΠΎΠ΄ΠΈΡΠ΅Π»ΡΡΠΊΠΈΡ ΠΈ Π΄ΠΎΡΠ΅ΡΠ½ΠΈΡ ΠΎΠ±ΡΠ΅ΠΊΡΠΎΠ² Π΄Π»Ρ Π΄ΠΈΠ°Π»ΠΎΠ³ΠΎΠ²ΡΡ ΠΎΠΊΠΎΠ½ ΠΈ Π΄Π»Ρ Π΄ΡΡΠ³ΠΈΡ Π²ΠΈΠ΄ΠΆΠ΅ΡΠΎΠ² Π±ΡΠ΄Π΅Ρ ΡΠ°Π·Π»ΠΈΡΠ½ΠΎ. ΠΠΈΠ°Π»ΠΎΠ³ΠΎΠ²ΠΎΠ΅ ΠΎΠΊΠ½ΠΎ Π²ΡΠ΅Π³Π΄Π° ΡΠ²Π»ΡΠ΅ΡΡΡ ΡΠ°ΠΌΠΎΡΡΠΎΡΡΠ΅Π»ΡΠ½ΡΠΌ ΠΎΠΊΠ½ΠΎΠΌ, ΠΎΠ΄Π½Π°ΠΊΠΎ Π΅ΡΠ»ΠΈ Ρ Π½Π΅Π³ΠΎ ΠΈΠΌΠ΅Π΅ΡΡΡ ΡΠΎΠ΄ΠΈΡΠ΅Π»Ρ, ΡΠΎ ΠΎΠ½ΠΎ ΡΠ°Π·ΠΌΠ΅ΡΠ°Π΅ΡΡΡ ΠΏΠΎ ΡΠΌΠΎΠ»ΡΠ°Π½ΠΈΡ Π² Π²Π΅ΡΡ Π½Π΅ΠΉ ΡΠ°ΡΡΠΈ ΡΠΎΠ΄ΠΈΡΠ΅Π»ΡΡΠΊΠΎΠ³ΠΎ ΠΎΠ±ΡΠ΅ΠΊΡΠ°. ΠΡΠΎΠΌΠ΅ ΡΠΎΠ³ΠΎ, Π΄ΠΎΡΠ΅ΡΠ½Π΅Π΅ Π΄ΠΈΠ°Π»ΠΎΠ³ΠΎΠ²ΠΎΠ΅ ΠΎΠΊΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅Ρ ΠΏΠ°Π½Π΅Π»Ρ Π·Π°Π΄Π°Ρ ΡΠΎΠ΄ΠΈΡΠ΅Π»ΡΡΠΊΠΎΠ³ΠΎ ΠΎΠ±ΡΠ΅ΠΊΡΠ°.
ΠΠΎ Π²ΡΠΎΡΠΎΠΌ Π°ΡΠ³ΡΠΌΠ΅Π½ΡΠ΅ Π·Π°Π΄Π°Π΅ΡΡΡ Π½Π°Π·Π²Π°Π½ΠΈΠ΅ Π΄ΠΈΠ°Π»ΠΎΠ³ΠΎΠ²ΠΎΠ³ΠΎ ΠΎΠΊΠ½Π°. Π ΡΡΠ΅ΡΡΠ΅ΠΌ Π°ΡΠ³ΡΠΌΠ΅Π½ΡΠ΅ Π·Π°Π΄Π°Π΅ΡΡΡ ΠΊΠ°ΡΠ°Π»ΠΎΠ³ Π½Π°ΡΠ°Π»Π° ΠΏΡΠΎΡΠΌΠΎΡΡΠ° ΡΠ°ΠΉΠ»ΠΎΠ²; Π² Π½Π°ΡΠ΅ΠΌ ΡΠ»ΡΡΠ°Π΅ ΡΡΠΎ Π±ΡΠ΄Π΅Ρ ΡΠ΅ΠΊΡΡΠΈΠΉ ΠΊΠ°ΡΠ°Π»ΠΎΠ³.
Π§Π΅ΡΠ²Π΅ΡΡΡΠΉ Π°ΡΠ³ΡΠΌΠ΅Π½Ρ ΠΎΠΏΡΠ΅Π΄Π΅Π»ΡΠ΅Ρ ΡΠΈΠ»ΡΡΡΡ ΡΠ°ΠΉΠ»ΠΎΠ². Π€ΠΈΠ»ΡΡΡ ΡΠ°ΠΉΠ»Π° ΡΠΎΡΡΠΎΠΈΡ ΠΈΠ· ΠΎΠΏΠΈΡΠ°ΡΠ΅Π»ΡΠ½ΠΎΠΉ ΡΠ°ΡΡΠΈ ΠΈ ΠΎΠ±ΡΠ°Π·ΡΠ° ΠΏΠΎΠΈΡΠΊΠ°. ΠΡΠ»ΠΈ Π΄ΠΎΠΏΡΡΡΠΈΡΡ ΠΏΠΎΠ΄Π΄Π΅ΡΠΆΠΊΡ Π½Π΅ ΡΠΎΠ»ΡΠΊΠΎ ΡΠΎΠ΄Π½ΠΎΠ³ΠΎ ΡΠΎΡΠΌΠ°ΡΠ° ΡΠ°ΠΉΠ»ΠΎΠ² ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡ ΠΠ»Π΅ΠΊΡΡΠΎΠ½Π½Π°Ρ ΡΠ°Π±Π»ΠΈΡΠ°, Π° ΡΠ°ΠΊΠΆΠ΅ ΡΠΎΡΠΌΠ°ΡΠ° ΡΠ°ΠΉΠ»ΠΎΠ² Ρ Π·Π°ΠΏΡΡΠΎΠΉ Π² ΠΊΠ°ΡΠ΅ΡΡΠ²Π΅ ΡΠ°Π·Π΄Π΅Π»ΠΈΡΠ΅Π»Ρ ΠΈ ΡΠ°ΠΉΠ»ΠΎΠ² Lotus 1-2-3, Π½Π°ΠΌ ΠΏΡΠΈΡΠ»ΠΎΡΡ Π±Ρ ΠΈΠ½ΠΈΡΠΈΠ°Π»ΠΈΠ·ΠΈΡΠΎΠ²Π°ΡΡ ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΡΠ΅ ΡΠ»Π΅Π΄ΡΡΡΠΈΠΌ ΠΎΠ±ΡΠ°Π·ΠΎΠΌ:
tr("Spreadsheet files (*.sp)\n"
"Comma-separated values files (*.csv)\n"
"Lotus 1-2-3 files (*.wk1 *.wks)")
ΠΠ°ΠΊΡΡΡΠ°Ρ ΡΡΠ½ΠΊΡΠΈΡ loadFile() Π²ΡΠ·Π²Π°Π½Π° Π² open() Π΄Π»Ρ Π·Π°Π³ΡΡΠ·ΠΊΠΈ ΡΠ°ΠΉΠ»Π°. ΠΡ Π΄Π΅Π»Π°Π΅ΠΌ ΡΡΡ ΡΡΠ½ΠΊΡΠΈΡ Π½Π΅Π·Π°Π²ΠΈΡΠΈΠΌΠΎΠΉ, ΠΏΠΎΡΠΊΠΎΠ»ΡΠΊΡ Π½Π°ΠΌ ΠΏΠΎΡΡΠ΅Π±ΡΠ΅ΡΡΡ Π²ΡΠΏΠΎΠ»Π½ΠΈΡΡ ΡΠ΅ ΠΆΠ΅ Π΄Π΅ΠΉΡΡΠ²ΠΈΡ Π΄Π»Ρ Π·Π°Π³ΡΡΠ·ΠΊΠΈ ΡΠ°ΠΉΠ»ΠΎΠ², ΠΊΠΎΡΠΎΡΡΠ΅ ΠΎΡΠΊΡΡΠ²Π°Π»ΠΈΡΡ Π½Π΅Π΄Π°Π²Π½ΠΎ:
01 bool MainWindow::loadFile(const QString &fileName)
02 {
03 if (!spreadsheet->readFile(fileName)) {
04 statusBar()->showMessage(tr("Loading canceled"), 2000);
05 return false;
06 }
07 setCurrentFile(fileName);
08 statusBar()->showMessage(tr("File loaded"), 2000);
09 return true;
10 }
ΠΡ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΠΌ ΡΡΠ½ΠΊΡΠΈΡ Spreadsheet::readFile() Π΄Π»Ρ ΡΡΠ΅Π½ΠΈΡ ΡΠ°ΠΉΠ»Π° Ρ Π΄ΠΈΡΠΊΠ°. ΠΡΠ»ΠΈ Π·Π°Π³ΡΡΠ·ΠΊΠ° Π·Π°Π²Π΅ΡΡΠΈΠ»Π°ΡΡ ΡΡΠΏΠ΅ΡΠ½ΠΎ, ΠΌΡ Π²ΡΠ·ΡΠ²Π°Π΅ΠΌ ΡΡΠ½ΠΊΡΠΈΡ setCurrentFile() Π΄Π»Ρ ΠΎΠ±Π½ΠΎΠ²Π»Π΅Π½ΠΈΡ Π·Π°Π³ΠΎΠ»ΠΎΠ²ΠΊΠ° ΠΎΠΊΠ½Π°; Π² ΠΏΡΠΎΡΠΈΠ²Π½ΠΎΠΌ ΡΠ»ΡΡΠ°Π΅ ΡΡΠ½ΠΊΡΠΈΡ Spreadsheet::readFile() ΡΠ²Π΅Π΄ΠΎΠΌΠΈΡ ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»Ρ ΠΎ Π²ΠΎΠ·Π½ΠΈΠΊΡΠ΅ΠΉ ΠΏΡΠΎΠ±Π»Π΅ΠΌΠ΅, Π²ΡΠ΄Π°Π² ΡΠΎΠΎΡΠ²Π΅ΡΡΡΠ²ΡΡΡΠ΅Π΅ ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΠ΅. Π ΡΠ΅Π»ΠΎΠΌ ΠΏΠΎΠ»Π΅Π·Π½ΠΎ ΠΏΡΠ΅Π΄ΡΡΠΌΠ°ΡΡΠΈΠ²Π°ΡΡ Π²ΡΠ΄Π°ΡΡ ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΠΉ ΠΎΠ± ΠΎΡΠΈΠ±ΠΊΠ°Ρ Π² ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½ΡΠ°Ρ Π½ΠΈΠ·ΠΊΠΎΠ³ΠΎ ΡΡΠΎΠ²Π½Ρ, ΠΏΠΎΡΠΊΠΎΠ»ΡΠΊΡ ΠΎΠ½ΠΈ ΠΌΠΎΠ³ΡΡ ΠΎΠ±Π΅ΡΠΏΠ΅ΡΠΈΡΡ ΠΏΠΎΠ»ΡΡΠ΅Π½ΠΈΠ΅ ΡΠΎΡΠ½ΠΎΠΉ ΠΈΠ½ΡΠΎΡΠΌΠ°ΡΠΈΠΈ ΠΎ ΠΏΡΠΈΡΠΈΠ½Π°Ρ ΠΎΡΠΈΠ±ΠΊΠΈ.