ΠΡΠΈΠΌΠ΅Π½ΡΡ Π°ΡΡ ΠΈΡΠ΅ΠΊΡΡΡΡ Qt ΠΌΠΎΠ΄Π΅Π»Ρ/ΠΏΡΠ΅Π΄ΡΡΠ°Π²Π»Π΅Π½ΠΈΠ΅, ΠΌΡ ΠΌΠΎΠΆΠ΅ΠΌ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ ΠΌΠΎΠ΄Π΅Π»ΠΈ, ΠΊΠΎΡΠΎΡΡΠ΅ ΠΏΡΠ΅Π΄ΡΡΠ°Π²Π»ΡΡΡ ΡΠΎΠ»ΡΠΊΠΎ ΡΠ΅ Π΄Π°Π½Π½ΡΠ΅, ΠΊΠΎΡΠΎΡΡΠ΅ Π΄Π΅ΠΉΡΡΠ²ΠΈΡΠ΅Π»ΡΠ½ΠΎ Π½Π΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌΡ Π΄Π»Ρ ΠΎΡΠΎΠ±ΡΠ°ΠΆΠ΅Π½ΠΈΡ Π² ΠΏΡΠ΅Π΄ΡΡΠ°Π²Π»Π΅Π½ΠΈΠΈ. ΠΡΠΎ Π·Π½Π°ΡΠΈΡΠ΅Π»ΡΠ½ΠΎ ΠΏΠΎΠ²ΡΡΠ°Π΅Ρ ΡΠΊΠΎΡΠΎΡΡΡ ΠΎΠ±ΡΠ°Π±ΠΎΡΠΊΠΈ ΠΎΡΠ΅Π½Ρ Π±ΠΎΠ»ΡΡΠΈΡ Π½Π°Π±ΠΎΡΠΎΠ² Π΄Π°Π½Π½ΡΡ ΠΈ ΡΠΌΠ΅Π½ΡΡΠ°Π΅Ρ ΠΏΠΎΡΡΠ΅Π±Π½ΠΎΡΡΠΈ Π² ΠΏΠ°ΠΌΡΡΠΈ ΠΏΠΎ ΡΡΠ°Π²Π½Π΅Π½ΠΈΡ Ρ ΠΏΠΎΠ΄Ρ ΠΎΠ΄ΠΎΠΌ, ΡΡΠ΅Π±ΡΡΡΠΈΠΌ ΡΡΠΈΡΡΠ²Π°Π½ΠΈΡ Π²ΡΠ΅Ρ Π΄Π°Π½Π½ΡΡ . Π‘Π²ΡΠ·ΡΠ²Π°Ρ ΠΎΠ΄Π½Ρ ΠΌΠΎΠ΄Π΅Π»Ρ Ρ Π΄Π²ΡΠΌΡ ΠΈΠ»ΠΈ Π±ΠΎΠ»Π΅Π΅ ΠΏΡΠ΅Π΄ΡΡΠ°Π²Π»Π΅Π½ΠΈΡΠΌΠΈ, ΠΌΡ ΠΌΠΎΠΆΠ΅ΠΌ ΠΏΡΠ΅Π΄ΠΎΡΡΠ°Π²ΠΈΡΡ ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»Ρ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡΡ Π·Π° ΡΡΠ΅Ρ Π½Π΅Π·Π½Π°ΡΠΈΡΠ΅Π»ΡΠ½ΡΡ Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡΠ΅Π»ΡΠ½ΡΡ ΠΈΠ·Π΄Π΅ΡΠΆΠ΅ΠΊ ΠΏΡΠΎΡΠΌΠ°ΡΡΠΈΠ²Π°ΡΡ Π΄Π°Π½Π½ΡΠ΅ ΠΈ Π²Π·Π°ΠΈΠΌΠΎΠ΄Π΅ΠΉΡΡΠ²ΠΎΠ²Π°ΡΡ Ρ Π½ΠΈΠΌΠΈ ΡΠ°Π·Π»ΠΈΡΠ½ΡΠΌΠΈ ΡΠΏΠΎΡΠΎΠ±Π°ΠΌΠΈ. Qt Π°Π²ΡΠΎΠΌΠ°ΡΠΈΡΠ΅ΡΠΊΠΈ ΡΠΈΠ½Ρ ΡΠΎΠ½ΠΈΠ·ΠΈΡΡΠ΅Ρ ΠΌΠ½ΠΎΠΆΠ΅ΡΡΠ²Π΅Π½Π½ΡΠ΅ ΠΏΡΠ΅Π΄ΡΡΠ°Π²Π»Π΅Π½ΠΈΡ Π΄Π°Π½Π½ΡΡ β ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΡ Π² ΠΎΠ΄Π½ΠΎΠΌ ΠΈΠ· ΠΏΡΠ΅Π΄ΡΡΠ°Π²Π»Π΅Π½ΠΈΠΉ ΠΎΡΡΠ°ΠΆΠ°ΡΡΡΡ Π²ΠΎ Π²ΡΠ΅Ρ Π΄ΡΡΠ³ΠΈΡ . ΠΠΎΠΏΠΎΠ»Π½ΠΈΡΠ΅Π»ΡΠ½ΠΎΠ΅ ΠΏΡΠ΅ΠΈΠΌΡΡΠ΅ΡΡΠ²ΠΎ Π°ΡΡ ΠΈΡΠ΅ΠΊΡΡΡΡ ΠΌΠΎΠ΄Π΅Π»Ρ/ΠΏΡΠ΅Π΄ΡΡΠ°Π²Π»Π΅Π½ΠΈΠ΅ ΠΏΡΠΎΡΠ²Π»ΡΠ΅ΡΡΡ Π² ΡΠΎΠΌ, ΡΡΠΎ Π΅ΡΠ»ΠΈ ΠΌΡ ΡΠ΅ΡΠ°Π΅ΠΌ ΠΈΠ·ΠΌΠ΅Π½ΠΈΡΡ ΡΠΏΠΎΡΠΎΠ± Ρ ΡΠ°Π½Π΅Π½ΠΈΡ ΠΈΡΡ ΠΎΠ΄Π½ΡΡ Π΄Π°Π½Π½ΡΡ , Π½Π°ΠΌ ΠΏΡΠΎΡΡΠΎ ΠΏΠΎΡΡΠ΅Π±ΡΠ΅ΡΡΡ ΠΈΠ·ΠΌΠ΅Π½ΠΈΡΡ ΠΌΠΎΠ΄Π΅Π»Ρ; ΠΏΡΠ΅Π΄ΡΡΠ°Π²Π»Π΅Π½ΠΈΡ ΠΏΠΎ-ΠΏΡΠ΅ΠΆΠ½Π΅ΠΌΡ Π±ΡΠ΄ΡΡ ΡΠ°Π±ΠΎΡΠ°ΡΡ ΠΏΡΠ°Π²ΠΈΠ»ΡΠ½ΠΎ.
ΠΠΎ ΠΌΠ½ΠΎΠ³ΠΈΡ ΡΠ»ΡΡΠ°ΡΡ ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»Ρ Π½Π΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌΠΎ ΡΠ°Π±ΠΎΡΠ°ΡΡ ΡΠΎΠ»ΡΠΊΠΎ Ρ ΠΎΡΠ½ΠΎΡΠΈΡΠ΅Π»ΡΠ½ΠΎ Π½Π΅Π±ΠΎΠ»ΡΡΠΈΠΌ ΠΊΠΎΠ»ΠΈΡΠ΅ΡΡΠ²ΠΎΠΌ ΡΠ»Π΅ΠΌΠ΅Π½ΡΠΎΠ². Π ΡΠ°ΠΊΠΎΠΉ ΡΠΈΡΡΠ°ΡΠΈΠΈ, ΠΊΠ°ΠΊ ΠΏΡΠ°Π²ΠΈΠ»ΠΎ, ΠΌΡ ΠΌΠΎΠΆΠ΅ΠΌ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ ΡΠ΄ΠΎΠ±Π½ΡΠ΅ ΠΊΠ»Π°ΡΡΡ Qt ΠΏΠΎ ΠΎΡΠΎΠ±ΡΠ°ΠΆΠ΅Π½ΠΈΡ ΡΠ»Π΅ΠΌΠ΅Π½ΡΠΎΠ² (QListWidget, QTableWidget ΠΈ QTreeWidget), Π½Π΅ΠΏΠΎΡΡΠ΅Π΄ΡΡΠ²Π΅Π½Π½ΠΎ Π·Π°ΠΏΠΎΠ»Π½ΡΡ Π²ΡΠ΅ ΡΠ»Π΅ΠΌΠ΅Π½ΡΡ Π·Π½Π°ΡΠ΅Π½ΠΈΡΠΌΠΈ. ΠΡΠΈ ΠΊΠ»Π°ΡΡΡ ΡΠ°Π±ΠΎΡΠ°ΡΡ ΠΏΠΎΠ΄ΠΎΠ±Π½ΠΎ ΠΊΠ»Π°ΡΡΠ°ΠΌ ΠΎΡΠΎΠ±ΡΠ°ΠΆΠ΅Π½ΠΈΡ ΡΠ»Π΅ΠΌΠ΅Π½ΡΠΎΠ² Π² ΠΏΡΠ΅Π΄ΡΠ΄ΡΡΠΈΡ Π²Π΅ΡΡΠΈΡΡ Qt. ΠΠ½ΠΈ Ρ ΡΠ°Π½ΡΡ ΡΠ²ΠΎΠΈ Π΄Π°Π½Π½ΡΠ΅ Π² Β«ΡΠ»Π΅ΠΌΠ΅Π½ΡΠ°Ρ Β» (Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ, QTableWidget ΡΠΎΠ΄Π΅ΡΠΆΠΈΡ ΡΠ»Π΅ΠΌΠ΅Π½ΡΡ QTableWidgetltem). ΠΡΠΈ ΡΠ΅Π°Π»ΠΈΠ·Π°ΡΠΈΠΈ ΡΡΠΈΡ ΡΠ΄ΠΎΠ±Π½ΡΡ ΠΊΠ»Π°ΡΡΠΎΠ² ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΡΡΡΡ ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»ΡΡΠΊΠΈΠ΅ ΠΌΠΎΠ΄Π΅Π»ΠΈ, ΠΎΠ±Π΅ΡΠΏΠ΅ΡΠΈΠ²Π°ΡΡΠΈΠ΅ ΠΏΠΎΡΠ²Π»Π΅Π½ΠΈΠ΅ ΡΡΠ΅Π±ΡΠ΅ΠΌΡΡ ΡΠ»Π΅ΠΌΠ΅Π½ΡΠΎΠ² Π² ΠΏΡΠ΅Π΄ΡΡΠ°Π²Π»Π΅Π½ΠΈΡΡ .
Π ΠΈΡ. 10.2. ΠΠ΄Π½Π° ΠΌΠΎΠ΄Π΅Π»Ρ ΠΌΠΎΠΆΠ΅Ρ ΠΎΠ±ΡΠ»ΡΠΆΠΈΠ²Π°ΡΡ Π½Π΅ΡΠΊΠΎΠ»ΡΠΊΠΎ ΠΏΡΠ΅Π΄ΡΡΠ°Π²Π»Π΅Π½ΠΈΠΉ.
ΠΡΠΈ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΠΈ Π±ΠΎΠ»ΡΡΠΈΡ Π½Π°Π±ΠΎΡΠΎΠ² Π΄Π°Π½Π½ΡΡ ΡΠ°ΡΡΠΎ ΠΎΠΊΠ°Π·ΡΠ²Π°Π΅ΡΡΡ Π½Π΅Π΄ΠΎΠΏΡΡΡΠΈΠΌΡΠΌ Π΄ΡΠ±Π»ΠΈΡΠΎΠ²Π°Π½ΠΈΠ΅ Π΄Π°Π½Π½ΡΡ . Π ΡΡΠΈΡ ΡΠ»ΡΡΠ°ΡΡ ΠΌΡ ΠΌΠΎΠΆΠ΅ΠΌ ΠΏΡΠΈΠΌΠ΅Π½ΡΡΡ ΠΊΠ»Π°ΡΡΡ Qt ΠΏΠΎ ΠΎΡΠΎΠ±ΡΠ°ΠΆΠ΅Π½ΠΈΡ ΡΠ»Π΅ΠΌΠ΅Π½ΡΠΎΠ² (QListView, QTableView ΠΈ QTreeView) Π² ΡΠΎΡΠ΅ΡΠ°Π½ΠΈΠΈ Ρ ΠΌΠΎΠ΄Π΅Π»ΡΡ Π΄Π°Π½Π½ΡΡ , ΠΊΠΎΡΠΎΡΠΎΠΉ ΠΌΠΎΠΆΠ΅Ρ Π±ΡΡΡ ΠΊΠ°ΠΊ ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»ΡΡΠΊΠ°Ρ ΠΌΠΎΠ΄Π΅Π»Ρ, ΡΠ°ΠΊ ΠΈ ΠΎΠ΄Π½Π° ΠΈΠ· Π·Π°ΡΠ°Π½Π΅Π΅ ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½Π½ΡΡ Π² Qt ΠΌΠΎΠ΄Π΅Π»Π΅ΠΉ. ΠΠ°ΠΏΡΠΈΠΌΠ΅Ρ, Π΅ΡΠ»ΠΈ Π½Π°Π±ΠΎΡ Π΄Π°Π½Π½ΡΡ Ρ ΡΠ°Π½ΠΈΡΡΡ Π² Π±Π°Π·Π΅ Π΄Π°Π½Π½ΡΡ , ΠΌΡ ΠΌΠΎΠΆΠ΅ΠΌ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ QTableView Π² ΡΠΎΡΠ΅ΡΠ°Π½ΠΈΠΈ Ρ QSqlTableModel.
ΠΡΠΈΠΌΠ΅Π½Π΅Π½ΠΈΠ΅ ΡΠ΄ΠΎΠ±Π½ΡΡ ΠΊΠ»Π°ΡΡΠΎΠ² ΠΎΡΠΎΠ±ΡΠ°ΠΆΠ΅Π½ΠΈΡ ΡΠ»Π΅ΠΌΠ΅Π½ΡΠΎΠ²
Π£Π΄ΠΎΠ±Π½ΡΠ΅ QtβΠΏΠΎΠ΄ΠΊΠ»Π°ΡΡΡ ΠΎΡΠΎΠ±ΡΠ°ΠΆΠ΅Π½ΠΈΡ ΡΠ»Π΅ΠΌΠ΅Π½ΡΠΎΠ² ΠΎΠ±ΡΡΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ ΠΏΡΠΎΡΠ΅, ΡΠ΅ΠΌ ΠΎΠΏΡΠ΅Π΄Π΅Π»ΡΡΡ ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»ΡΡΠΊΡΡ ΠΌΠΎΠ΄Π΅Π»Ρ, ΠΈ ΠΎΠ½ΠΈ ΠΎΡΠΎΠ±Π΅Π½Π½ΠΎ ΡΠ΄ΠΎΠ±Π½Ρ, ΠΊΠΎΠ³Π΄Π° ΡΠ°Π·Π΄Π΅Π»Π΅Π½ΠΈΠ΅ ΠΌΠΎΠ΄Π΅Π»ΠΈ ΠΈ ΠΏΡΠ΅Π΄ΡΡΠ°Π²Π»Π΅Π½ΠΈΡ Π½Π°ΠΌ Π½Π΅ Π΄Π°Π΅Ρ ΠΏΡΠ΅ΠΈΠΌΡΡΠ΅ΡΡΠ²Π°. ΠΡ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π»ΠΈ ΡΡΠΎΡ ΠΏΠΎΠ΄Ρ ΠΎΠ΄ Π² Π³Π»Π°Π²Π΅ 4, ΠΊΠΎΠ³Π΄Π° ΡΠΎΠ·Π΄Π°Π²Π°Π»ΠΈ ΠΏΠΎΠ΄ΠΊΠ»Π°ΡΡΡ QTableWidget ΠΈ QTableWidgetItem Π΄Π»Ρ ΡΠ΅Π°Π»ΠΈΠ·Π°ΡΠΈΠΈ ΡΡΠ½ΠΊΡΠΈΠΎΠ½Π°Π»ΡΠ½ΠΎΡΡΠΈ ΡΠ»Π΅ΠΊΡΡΠΎΠ½Π½ΠΎΠΉ ΡΠ°Π±Π»ΠΈΡΡ.
Π Π΄Π°Π½Π½ΠΎΠΌ ΡΠ°Π·Π΄Π΅Π»Π΅ ΠΌΡ ΠΏΠΎΠΊΠ°ΠΆΠ΅ΠΌ, ΠΊΠ°ΠΊ ΠΌΠΎΠΆΠ½ΠΎ ΠΏΡΠΈΠΌΠ΅Π½ΡΡΡ ΡΠ΄ΠΎΠ±Π½ΡΠ΅ ΠΊΠ»Π°ΡΡΡ ΠΎΡΠΎΠ±ΡΠ°ΠΆΠ΅Π½ΠΈΡ ΡΠ»Π΅ΠΌΠ΅Π½ΡΠΎΠ² Π΄Π»Ρ Π²ΡΠ²ΠΎΠ΄Π° Π½Π° ΡΠΊΡΠ°Π½ ΡΠ»Π΅ΠΌΠ΅Π½ΡΠΎΠ². Π ΠΏΠ΅ΡΠ²ΠΎΠΌ ΠΏΡΠΈΠΌΠ΅ΡΠ΅ ΠΏΡΠΈΠ²ΠΎΠ΄ΠΈΡΡΡ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΠΌΡΠΉ ΡΠΎΠ»ΡΠΊΠΎ Π΄Π»Ρ ΡΡΠ΅Π½ΠΈΡ Π²ΠΈΠ΄ΠΆΠ΅Ρ QListWidget, Π²ΠΎ Π²ΡΠΎΡΠΎΠΌ ΠΏΡΠΈΠΌΠ΅ΡΠ΅ β ΡΠ΅Π΄Π°ΠΊΡΠΈΡΡΠ΅ΠΌΡΠΉ QTableWidget ΠΈ Π² ΡΡΠ΅ΡΡΠ΅ΠΌ ΠΏΡΠΈΠΌΠ΅ΡΠ΅ β ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΠΌΡΠΉ ΡΠΎΠ»ΡΠΊΠΎ Π΄Π»Ρ ΡΡΠ΅Π½ΠΈΡ QTreeWidget.
ΠΡ Π½Π°ΡΠΈΠ½Π°Π΅ΠΌ Ρ ΠΏΡΠΎΡΡΠΎΠ³ΠΎ Π΄ΠΈΠ°Π»ΠΎΠ³ΠΎΠ²ΠΎΠ³ΠΎ ΠΎΠΊΠ½Π°, ΠΊΠΎΡΠΎΡΠΎΠ΅ ΠΏΠΎΠ·Π²ΠΎΠ»ΡΠ΅Ρ ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»Ρ Π²ΡΠ±ΡΠ°ΡΡ ΠΈΠ· ΡΠΏΠΈΡΠΊΠ° ΡΠΈΠΌΠ²ΠΎΠ», ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΠΌΡΠΉ Π² Π±Π»ΠΎΠΊ-ΡΡ Π΅ΠΌΠ°Ρ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌ. ΠΠ°ΠΆΠ΄ΡΠΉ ΡΠ»Π΅ΠΌΠ΅Π½Ρ ΡΠΎΡΡΠΎΠΈΡ ΠΈΠ· ΠΏΠΈΠΊΡΠΎΠ³ΡΠ°ΠΌΠΌΡ, ΡΠ΅ΠΊΡΡΠ° ΠΈ ΡΠ½ΠΈΠΊΠ°Π»ΡΠ½ΠΎΠ³ΠΎ ΠΈΠ΄Π΅Π½ΡΠΈΡΠΈΠΊΠ°ΡΠΎΡΠ°.
Π‘Π½Π°ΡΠ°Π»Π° ΠΏΠΎΠΊΠ°ΠΆΠ΅ΠΌ ΡΡΠ°Π³ΠΌΠ΅Π½Ρ Π·Π°Π³ΠΎΠ»ΠΎΠ²ΠΎΡΠ½ΠΎΠ³ΠΎ ΡΠ°ΠΉΠ»Π° Π΄ΠΈΠ°Π»ΠΎΠ³ΠΎΠ²ΠΎΠ³ΠΎ ΠΎΠΊΠ½Π°:
01 class FlowChartSymbolPicker : public QDialog {
02 Q_OBJECT
03 public:
04 FlowChartSymbolPicker(const QMap<int, QString> &symbolMap,
05 QWidget *parent = 0);
06 int selectedId() const { return id; }
07 void done(int result);
08 β¦
09 }
Π ΠΈΡ. 10.3. ΠΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ ΠΡΠ±ΠΎΡ ΡΠΈΠΌΠ²ΠΎΠ»Π° Π±Π»ΠΎΠΊβΡΡ Π΅ΠΌΡ (Flowchart Symbol Picker).
ΠΡΠΈ ΡΠΎΠ·Π΄Π°Π½ΠΈΠΈ Π΄ΠΈΠ°Π»ΠΎΠ³ΠΎΠ²ΠΎΠ³ΠΎ ΠΎΠΊΠ½Π° ΠΌΡ Π΄ΠΎΠ»ΠΆΠ½Ρ ΠΏΠ΅ΡΠ΅Π΄Π°ΡΡ Π΅Π³ΠΎ ΠΊΠΎΠ½ΡΡΡΡΠΊΡΠΎΡΡ Π°ΡΡΠΎΡΠΈΠ°ΡΠΈΠ²Π½ΡΠΉ ΠΌΠ°ΡΡΠΈΠ² QMap<int, QString>, ΠΈ ΠΏΠΎΡΠ»Π΅ Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΡ ΠΊΠΎΠ½ΡΡΡΡΠΊΡΠΎΡΠ° ΠΌΡ ΠΌΠΎΠΆΠ΅ΠΌ ΠΏΠΎΠ»ΡΡΠΈΡΡ ΠΈΠ΄Π΅Π½ΡΠΈΡΠΈΠΊΠ°ΡΠΎΡ Π²ΡΠ±ΡΠ°Π½Π½ΠΎΠ³ΠΎ ΡΠ»Π΅ΠΌΠ΅Π½ΡΠ° (ΠΈΠ»ΠΈ β1, Π΅ΡΠ»ΠΈ ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»Ρ Π½ΠΈΡΠ΅Π³ΠΎ Π½Π΅ Π²ΡΠ±ΡΠ°Π»), Π²ΡΠ·ΡΠ²Π°Ρ selectedId().
01 FlowChartSymbolPicker::FlowChartSymbolPicker(
02 const QMap<int, QString> &symbolMap, QWidget *parent)
03 : QDialog(parent)
04 {
05 id = -1;
06 listWidget = new QListWidget;
07 listWidget->setIconSize(QSize(60, 60));
08 QMapIterator<int, QString> i(symbolMap);
09 while (i.hasNext()) {
10 i.next();
11 QListWidgetItem *item = new QListWidgetItem(i.value(),
12 listWidget);
13 item->setIcon(iconForSymbol(i.value()));
14 item->setData(Qt::UserRole, i.key());
15 β¦
16 }
17 }
ΠΡ ΠΈΠ½ΠΈΡΠΈΠ°Π»ΠΈΠ·ΠΈΡΡΠ΅ΠΌ id (ΠΈΠ΄Π΅Π½ΡΠΈΡΠΈΠΊΠ°ΡΠΎΡ ΠΏΠΎΡΠ»Π΅Π΄Π½Π΅Π³ΠΎ Π²ΡΠ±ΡΠ°Π½Π½ΠΎΠ³ΠΎ ΡΠ»Π΅ΠΌΠ΅Π½ΡΠ°) Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ΠΌ β1. ΠΠ°ΡΠ΅ΠΌ ΠΌΡ ΠΊΠΎΠ½ΡΡΡΡΠΈΡΡΠ΅ΠΌ QListWidget β ΡΠ΄ΠΎΠ±Π½ΡΠΉ Π²ΠΈΠ΄ΠΆΠ΅Ρ ΠΎΡΠΎΠ±ΡΠ°ΠΆΠ΅Π½ΠΈΡ ΡΠ»Π΅ΠΌΠ΅Π½ΡΠΎΠ². ΠΡ ΠΏΡΠΎΡ ΠΎΠ΄ΠΈΠΌ Π² ΡΠΈΠΊΠ»Π΅ ΠΏΠΎ Π²ΡΠ΅ΠΌ ΡΠ»Π΅ΠΌΠ΅Π½ΡΠ°ΠΌ Π°ΡΡΠΎΡΠΈΠ°ΡΠΈΠ²Π½ΠΎΠ³ΠΎ ΠΌΠ°ΡΡΠΈΠ²Π° ΡΠΈΠΌΠ²ΠΎΠ»ΠΎΠ² Π±Π»ΠΎΠΊβΡΡ Π΅ΠΌΡ symbolMap ΠΈ Π΄Π»Ρ ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ ΡΠΎΠ·Π΄Π°Π΅ΠΌ ΠΎΠ±ΡΠ΅ΠΊΡ QListWidgetItem. ΠΠΎΠ½ΡΡΡΡΠΊΡΠΎΡ QListWidgetItem ΠΏΡΠΈΠ½ΠΈΠΌΠ°Π΅Ρ Π²ΡΠ²ΠΎΠ΄ΠΈΠΌΡΡ Π½Π° ΡΠΊΡΠ°Π½ ΡΡΡΠΎΠΊΡ QString ΠΈ ΡΠΎΠ΄ΠΈΡΠ΅Π»ΡΡΠΊΠΈΠΉ Π²ΠΈΠ΄ΠΆΠ΅Ρ QListWidget.
ΠΠ°ΡΠ΅ΠΌ Π·Π°Π΄Π°Π΅ΠΌ ΠΏΠΈΠΊΡΠΎΠ³ΡΠ°ΠΌΠΌΡ ΡΠ»Π΅ΠΌΠ΅Π½ΡΠ° ΠΈ Π²ΡΠ·ΡΠ²Π°Π΅ΠΌ setData() Π΄Π»Ρ ΡΠΎΡ ΡΠ°Π½Π΅Π½ΠΈΡ Π² QListWidgetItem ΠΈΠ΄Π΅Π½ΡΠΈΡΠΈΠΊΠ°ΡΠΎΡΠ° ΡΠ»Π΅ΠΌΠ΅Π½ΡΠ°. ΠΠ°ΠΊΡΡΡΠ°Ρ ΡΡΠ½ΠΊΡΠΈΡ iconForSymbol() Π²ΠΎΠ·Π²ΡΠ°ΡΠ°Π΅Ρ QIcon Π΄Π»Ρ Π·Π°Π΄Π°Π½Π½ΠΎΠ³ΠΎ ΠΈΠΌΠ΅Π½ΠΈ ΡΠΈΠΌΠ²ΠΎΠ»Π°.
QListWidgetItem ΠΌΠΎΠΆΠ΅Ρ Π²ΡΡΡΡΠΏΠ°ΡΡ Π² ΡΠ°Π·Π½ΡΡ ΡΠΎΠ»ΡΡ , ΠΊΠ°ΠΆΠ΄ΠΎΠΉ ΠΈΠ· ΠΊΠΎΡΠΎΡΡΡ ΡΠΎΠΎΡΠ²Π΅ΡΡΡΠ²ΡΠ΅Ρ ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½Π½ΡΠΉ ΠΎΠ±ΡΠ΅ΠΊΡ QVariant. Π‘Π°ΠΌΡΠΌΠΈ ΡΠ°ΡΠΏΡΠΎΡΡΡΠ°Π½Π΅Π½Π½ΡΠΌΠΈ ΡΠΎΠ»ΡΠΌΠΈ ΡΠ²Π»ΡΡΡΡΡ Qt::DisplayRole, Qt::EditRole ΠΈ Qt::IconRole, ΠΈ Π΄Π»Ρ Π½ΠΈΡ ΠΏΡΠ΅Π΄ΡΡΠΌΠΎΡΡΠ΅Π½Ρ ΡΠ΄ΠΎΠ±Π½ΡΠ΅ ΡΡΠ½ΠΊΡΠΈΠΈ ΠΏΠΎ ΡΡΡΠ°Π½ΠΎΠ²ΠΊΠ΅ ΠΈ ΠΏΠΎΠ»ΡΡΠ΅Π½ΠΈΡ ΠΈΡ Π·Π½Π°ΡΠ΅Π½ΠΈΠΉ (setText(), setIcon()), Π½ΠΎ ΠΈΠΌΠ΅Π΅ΡΡΡ ΡΠ°ΠΊΠΆΠ΅ Π½Π΅ΡΠΊΠΎΠ»ΡΠΊΠΎ Π΄ΡΡΠ³ΠΈΡ ΡΠΎΠ»Π΅ΠΉ. ΠΡΠΎΠΌΠ΅ ΡΠΎΠ³ΠΎ, ΠΌΡ ΠΌΠΎΠΆΠ΅ΠΌ ΠΎΠΏΡΠ΅Π΄Π΅Π»ΠΈΡΡ ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»ΡΡΠΊΠΈΠ΅ ΡΠΎΠ»ΠΈ, Π·Π°Π΄Π°Π²Π°Ρ ΡΠΈΡΠ»ΠΎΠ²ΠΎΠ΅ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅, ΡΠ°Π²Π½ΠΎΠ΅ ΠΈΠ»ΠΈ Π±ΠΎΠ»ΡΡΠ΅Π΅, ΡΠ΅ΠΌ Qt::UserRole. Π Π½Π°ΡΠ΅ΠΌ ΠΏΡΠΈΠΌΠ΅ΡΠ΅ ΠΌΡ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΠΌ Qt::UserRole ΠΏΡΠΈ ΡΠΎΡ ΡΠ°Π½Π΅Π½ΠΈΠΈ ΠΈΠ΄Π΅Π½ΡΠΈΡΠΈΠΊΠ°ΡΠΎΡΠ° ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ ΡΠ»Π΅ΠΌΠ΅Π½ΡΠ°.
Π Π½Π΅ΠΏΠΎΠΊΠ°Π·Π°Π½Π½ΠΎΠΉ ΡΠ°ΡΡΠΈ ΠΊΠΎΠ½ΡΡΡΡΠΊΡΠΎΡΠ° ΡΠΎΠ·Π΄Π°ΡΡΡΡ ΠΊΠ½ΠΎΠΏΠΊΠΈ, Π²ΡΠΏΠΎΠ»Π½ΡΠ΅ΡΡΡ ΠΊΠΎΠΌΠΏΠΎΠ½ΠΎΠ²ΠΊΠ° Π²ΠΈΠ΄ΠΆΠ΅ΡΠΎΠ² ΠΈ Π·Π°Π΄Π°Π΅ΡΡΡ Π·Π°Π³ΠΎΠ»ΠΎΠ²ΠΎΠΊ ΠΎΠΊΠ½Π°.
01 void FlowChartSymbolPicker::done(int result)
02 {
03 id = -1;
04 if (result == QDialog::Accepted) {
05 QListWidgetItem *item = listWidget->currentItem();
06 if (item)
07 id = item->data(Qt::UserRole).toInt();
08 }
09 QDialog::done(result);
10 }
Π€ΡΠ½ΠΊΡΠΈΡ done() ΠΊΠ»Π°ΡΡΠ° QDialog ΠΏΠ΅ΡΠ΅ΠΎΠΏΡΠ΅Π΄Π΅Π»ΡΠ΅ΡΡΡ. ΠΠ½Π° Π²ΡΠ·ΡΠ²Π°Π΅ΡΡΡ ΠΏΡΠΈ Π½Π°ΠΆΠ°ΡΠΈΠΈ ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»Π΅ΠΌ ΠΊΠ½ΠΎΠΏΠΎΠΊ ΠΠ ΠΈΠ»ΠΈ Cancel. ΠΡΠ»ΠΈ ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»Ρ Π½Π°ΠΆΠΈΠΌΠ°Π΅Ρ ΠΊΠ½ΠΎΠΏΠΊΡ OK, ΠΌΡ ΠΏΠΎΠ»ΡΡΠ°Π΅ΠΌ Π΄ΠΎΡΡΡΠΏ ΠΊ ΡΠΎΠΎΡΠ²Π΅ΡΡΡΠ²ΡΡΡΠ΅ΠΌΡ ΡΠ»Π΅ΠΌΠ΅Π½ΡΡ ΠΈ ΠΈΠ·Π²Π»Π΅ΠΊΠ°Π΅ΠΌ ΠΈΠ΄Π΅Π½ΡΠΈΡΠΈΠΊΠ°ΡΠΎΡ, ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΡ ΡΡΠ½ΠΊΡΠΈΡ data(). ΠΡΠ»ΠΈ Π±Ρ Π½Π°Ρ ΠΈΠ½ΡΠ΅ΡΠ΅ΡΠΎΠ²Π°Π» ΡΠ΅ΠΊΡΡ ΡΠ»Π΅ΠΌΠ΅Π½ΡΠ°, ΠΌΡ ΠΌΠΎΠ³Π»ΠΈ Π±Ρ Π΅Π³ΠΎ ΠΏΠΎΠ»ΡΡΠΈΡΡ Ρ ΠΏΠΎΠΌΠΎΡΡΡ Π²ΡΠ·ΠΎΠ²Π° item->data(Qt::DisplayRole).toString() ΠΈΠ»ΠΈ Π±ΠΎΠ»Π΅Π΅ ΠΏΡΠΎΡΡΠΎΠ³ΠΎ Π²ΡΠ·ΠΎΠ²Π° item->text().
ΠΠΎ ΡΠΌΠΎΠ»ΡΠ°Π½ΠΈΡ QListWidget ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΡΡΡ ΡΠΎΠ»ΡΠΊΠΎ Π΄Π»Ρ ΡΡΠ΅Π½ΠΈΡ. ΠΡΠ»ΠΈ Π±Ρ ΠΌΡ Ρ ΠΎΡΠ΅Π»ΠΈ ΡΠ°Π·ΡΠ΅ΡΠΈΡΡ ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»Ρ ΡΠ΅Π΄Π°ΠΊΡΠΈΡΠΎΠ²Π°ΡΡ ΡΠ»Π΅ΠΌΠ΅Π½ΡΡ, ΠΌΡ ΠΌΠΎΠ³Π»ΠΈ Π±Ρ ΡΠΎΠΎΡΠ²Π΅ΡΡΡΠ²ΡΡΡΠΈΠΌ ΠΎΠ±ΡΠ°Π·ΠΎΠΌ ΡΡΡΠ°Π½ΠΎΠ²ΠΈΡΡ ΠΏΠ΅ΡΠ΅ΠΊΠ»ΡΡΠ°ΡΠ΅Π»ΠΈ ΡΠ΅Π΄Π°ΠΊΡΠΈΡΠΎΠ²Π°Π½ΠΈΡ ΠΏΡΠ΅Π΄ΡΡΠ°Π²Π»Π΅Π½ΠΈΡ, ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΡ QAbstractItemView::setEditTriggers(), Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ QAbstractItemView::AnyKeyPressed ΠΎΠ·Π½Π°ΡΠ°Π΅Ρ, ΡΡΠΎ ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»Ρ ΠΌΠΎΠΆΠ΅Ρ ΠΈΠ½ΠΈΡΠΈΠΈΡΠΎΠ²Π°ΡΡ ΡΠ΅Π΄Π°ΠΊΡΠΈΡΠΎΠ²Π°Π½ΠΈΠ΅ ΡΠ»Π΅ΠΌΠ΅Π½ΡΠ°, ΠΏΡΠΎΡΡΠΎ Π½Π°ΡΠ°Π² Π²Π²ΠΎΠ΄ΠΈΡΡ ΡΠΈΠΌΠ²ΠΎΠ»Ρ Ρ ΠΊΠ»Π°Π²ΠΈΠ°ΡΡΡΡ. ΠΠΎΠΆΠ½ΠΎ Π±ΡΠ»ΠΎ Π±Ρ ΠΏΠΎΡΡΡΠΏΠΈΡΡ ΠΏΠΎ-Π΄ΡΡΠ³ΠΎΠΌΡ ΠΈ ΠΏΡΠ΅Π΄ΡΡΠΌΠΎΡΡΠ΅ΡΡ ΠΊΠ½ΠΎΠΏΠΊΡ ΡΠ΅Π΄Π°ΠΊΡΠΈΡΠΎΠ²Π°Π½ΠΈΡ Edit (ΠΈ, Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ, ΠΊΠ½ΠΎΠΏΠΊΠΈ Π΄ΠΎΠ±Π°Π²Π»Π΅Π½ΠΈΡ ΠΈ ΡΠ΄Π°Π»Π΅Π½ΠΈΡ Add ΠΈ Delete) ΠΈ ΡΠ²ΡΠ·Π°ΡΡ ΠΈΡ ΡΠΎ ΡΠ»ΠΎΡΠ°ΠΌΠΈ, ΡΡΠΎΠ±Ρ ΠΌΠΎΠΆΠ½ΠΎ Π±ΡΠ»ΠΎ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠ½ΠΎ ΡΠΏΡΠ°Π²Π»ΡΡΡ ΠΎΠΏΠ΅ΡΠ°ΡΠΈΡΠΌΠΈ ΡΠ΅Π΄Π°ΠΊΡΠΈΡΠΎΠ²Π°Π½ΠΈΡ.
Π’Π΅ΠΏΠ΅ΡΡ, ΠΊΠΎΠ³Π΄Π° ΠΌΡ ΡΠ²ΠΈΠ΄Π΅Π»ΠΈ, ΠΊΠ°ΠΊ ΠΌΠΎΠΆΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ ΡΠ΄ΠΎΠ±Π½ΡΠΉ ΠΊΠ»Π°ΡΡ ΠΎΡΠΎΠ±ΡΠ°ΠΆΠ΅Π½ΠΈΡ ΡΠ»Π΅ΠΌΠ΅Π½ΡΠΎΠ² Π΄Π»Ρ ΠΏΡΠΎΡΠΌΠΎΡΡΠ° ΠΈ Π²ΡΠ±ΠΎΡΠ° Π΄Π°Π½Π½ΡΡ , ΠΌΡ ΡΠ°ΡΡΠΌΠΎΡΡΠΈΠΌ ΠΏΡΠΈΠΌΠ΅Ρ, Π² ΠΊΠΎΡΠΎΡΠΎΠΌ ΠΌΠΎΠΆΠ½ΠΎ ΡΠ΅Π΄Π°ΠΊΡΠΈΡΠΎΠ²Π°ΡΡ Π΄Π°Π½Π½ΡΠ΅. ΠΡ ΡΠ½ΠΎΠ²Π° ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΠΌ Π΄ΠΈΠ°Π»ΠΎΠ³ΠΎΠ²ΠΎΠ΅ ΠΎΠΊΠ½ΠΎ, ΠΏΡΠ΅Π΄ΡΡΠ°Π²Π»ΡΡΡΠ΅Π΅ Π½Π° ΡΡΠΎΡ ΡΠ°Π· Π½Π°Π±ΠΎΡ ΡΠΎΡΠ΅ΠΊ Ρ ΠΊΠΎΠΎΡΠ΄ΠΈΠ½Π°ΡΠ°ΠΌΠΈ (x, Ρ), ΠΊΠΎΡΠΎΡΡΠ΅ ΠΌΠΎΠΆΠ΅Ρ ΡΠ΅Π΄Π°ΠΊΡΠΈΡΠΎΠ²Π°ΡΡ ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»Ρ.
Π ΠΈΡ. 10.4. ΠΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ Π Π΅Π΄Π°ΠΊΡΠΎΡ ΠΊΠΎΠΎΡΠ΄ΠΈΠ½Π°Ρ.
ΠΠ°ΠΊ ΠΈ Π² ΠΏΡΠ΅Π΄ΡΠ΄ΡΡΠ΅ΠΌ ΠΏΡΠΈΠΌΠ΅ΡΠ΅, ΠΌΡ ΠΎΡΠ½ΠΎΠ²Π½ΠΎΠ΅ Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅ ΡΠ΄Π΅Π»ΠΈΠΌ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠ½ΠΎΠΌΡ ΠΊΠΎΠ΄Ρ, ΠΎΡΠ½ΠΎΡΡΡΠ΅ΠΌΡΡΡ ΠΊ ΠΏΡΠ΅Π΄ΡΡΠ°Π²Π»Π΅Π½ΠΈΡ ΡΠ»Π΅ΠΌΠ΅Π½ΡΠΎΠ², ΠΈ Π½Π°ΡΠ½Π΅ΠΌ Ρ ΠΊΠΎΠ½ΡΡΡΡΠΊΡΠΎΡΠ°.
01 CoordinateSetter::CoordinateSetter(QList<QPointF> *coords,
02 QWidget *parent)
03 : QDialog(parent)
04 {
05 coordinates = coords;
06 tableWidget = new QTableWidget(0, 2);
07 tableWidget->setHorizontalHeaderLabels(
08 QStringList() << tr("X") << tr("Y"));
09 for (int row = 0; row < coordinates->count(); ++row) {
10 QPointF point = coordinates->at(row);
11 addRow();
12 tableWidget->item(row, 0)->setText(
13 QString::number(point.x()));
14 tableWidget->item(row, 1)->setText(
15 QString::number(point.y()));
16 }
17 β¦
18 }
ΠΠΎΠ½ΡΡΡΡΠΊΡΠΎΡ QTableWidget ΠΏΡΠΈΠ½ΠΈΠΌΠ°Π΅Ρ Π½Π°ΡΠ°Π»ΡΠ½ΠΎΠ΅ ΡΠΈΡΠ»ΠΎ ΡΡΡΠΎΠΊ ΠΈ ΡΡΠΎΠ»Π±ΡΠΎΠ² ΡΠ°Π±Π»ΠΈΡΡ, Π²ΡΠ²ΠΎΠ΄ΠΈΠΌΠΎΠΉ Π½Π° ΡΠΊΡΠ°Π½. ΠΠ°ΠΆΠ΄ΡΠΉ ΡΠ»Π΅ΠΌΠ΅Π½Ρ Π² QTableWidget ΠΏΡΠ΅Π΄ΡΡΠ°Π²Π»Π΅Π½ ΠΎΠ±ΡΠ΅ΠΊΡΠΎΠΌ QTableWidgetltem, Π²ΠΊΠ»ΡΡΠ°Ρ ΡΠ»Π΅ΠΌΠ΅Π½ΡΡ Π·Π°Π³ΠΎΠ»ΠΎΠ²ΠΊΠΎΠ² ΡΡΡΠΎΠΊ ΠΈ ΡΡΠΎΠ»Π±ΡΠΎΠ². Π€ΡΠ½ΠΊΡΠΈΡ setHorizontalHeaderLabels() Π·Π°Π΄Π°Π΅Ρ Π·Π°Π³ΠΎΠ»ΠΎΠ²ΠΊΠΈ Π²ΡΠ΅ΠΌ ΡΡΠΎΠ»Π±ΡΠ°ΠΌ, ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΡ ΡΠΎΠΎΡΠ²Π΅ΡΡΡΠ²ΡΡΡΠΈΠΉ ΡΠ΅ΠΊΡΡ ΠΈΠ· ΠΏΠ΅ΡΠ΅Π΄Π°Π½Π½ΠΎΠ³ΠΎ ΡΠΏΠΈΡΠΊΠ° ΡΡΡΠΎΠΊ. ΠΠΎ ΡΠΌΠΎΠ»ΡΠ°Π½ΠΈΡ QTableWidget ΠΎΠ±Π΅ΡΠΏΠ΅ΡΠΈΠ²Π°Π΅Ρ Π·Π°Π³ΠΎΠ»ΠΎΠ²ΠΊΠΈ ΡΡΡΠΎΠΊ ΡΠΈΡΠ»ΠΎΠ²ΡΠΌΠΈ ΠΌΠ΅ΡΠΊΠ°ΠΌΠΈ, Π½Π°ΡΠΈΠ½Π°Ρ Ρ 1; ΠΈΠΌΠ΅Π½Π½ΠΎ ΡΡΠΎ Π½Π°ΠΌ ΠΈ Π½ΡΠΆΠ½ΠΎ, ΠΏΠΎΡΡΠΎΠΌΡ Π½Π°ΠΌ Π½Π΅ ΠΏΡΠΈΡ ΠΎΠ΄ΠΈΡΡΡ Π·Π°Π΄Π°Π²Π°ΡΡ Π²ΡΡΡΠ½ΡΡ Π·Π°Π³ΠΎΠ»ΠΎΠ²ΠΊΠΈ ΡΡΡΠΎΠΊ.