ãåãã®ããã«ãç©çåŠè
ã¯é·ãéããã¹ãŠã®çè«ãèŠã€ããããšããŠããŸããã äžè¬åã®åŸåã¯ãç©çåŠè
ã ãã§ãªããæ°åŠè
ãããã°ã©ããŒã«ãåºæã®ãã®ã§ãã åºç¯å²ã®çŸè±¡ã説æããã³äºæž¬ãããšã³ãã£ãã£ã®æ°ãå°ãªãããšã¯éåžžã«è²Žéã§ãã ããã°ã©ããŒã«ãšã£ãŠãçè«ã¯ããŸããŸãªAPIãšãã¬ãŒã ã¯ãŒã¯ã§ãã é«åºŠã«å°éåãããåé¡ã解決ãããã®ãããã°ãæ®éçãªçè«ã®åœ¹å²ã䞻匵ãããã®ããããŸãã åŸè
ã®äŸã¯ãäž»ã«GUIã®éçºãç®çãšãããŠãããŒãµã«ãã¬ãŒã ã¯ãŒã¯ã§ããQtã§ãã
次ã«ãQtã«ã€ããŠå¥œãã§ã¯ãªãããšãšãä»äºã®ããã«Qtãããã«æ®éçã§åŒ·åãã€äŸ¿å©ã«ããæ¹æ³ã説æããŸãã
ãã¢ãããªïŒHDã§èŠãã®ãè¯ãïŒïŒ
Qtã¯ãä»ã®å€ãã®GUIãã¬ãŒã ã¯ãŒã¯ãšåæ§ã«ãåçŽãªãã®ããè€éãªãã®ã«é²åããŠããŸãã æåã«åçŽãªãŠã£ãžã§ãããäœæãããæ¬¡ã«ããè€éã§è€éãªãŠã£ãžã§ãããäœæãããŸããã ã¢ãã«/ãã¥ãŒãã¬ãŒã ã¯ãŒã¯ã¯ãããŒãã«ãŸãã¯ããªãŒãã¥ãŒã§ããŒã¿ã衚瀺ããããã«ç»å ŽããŸããã ã°ã©ãã£ãã¯èŠçŽ ã®ã»ããã衚瀺ããã°ã©ãã£ãã¯ã¢ã€ãã ãã¬ãŒã ã¯ãŒã¯ãç»å ŽããŸããã ãããã®ãã¬ãŒã ã¯ãŒã¯ã«ã¯ãã¹ãŠç°ãªãAPIããããçžäºã«äºææ§ããããŸããã å®éã1ã€ã®å€§ããªçè«ã®æ çµã¿ã®äžã§ã3ã€ã®ç¬ç«ããã»ãŒã°ãã°ãã®çè«ããããŸãã æ°ããèŠèŠèŠçŽ ãéçºããå¿
èŠãããå Žåã3ã€ã®ãã¬ãŒã ã¯ãŒã¯ã®ã©ãã䜿çšããããéžæããé©åãªAPIãé©çšããå¿
èŠããããŸãã ãããã£ãŠãåå¥ã®ãŠã£ãžã§ãããšããŠäœ¿çšã§ããããŒãã«ã»ã«ã«åã蟌ãŸããã°ã©ãã£ãã¯ã·ãŒã³ã®ããŒãã§äœ¿çšã§ããèŠçŽ ãäœæããããšã¯ã§ããŸããã
Qtã¯ã¹ããŒã¬ã³ã®äžã§éçºãããŠããŸã-äžåºŠæžããŠãããã§å®è¡ããŸãã ããã¯æçµçãªã¢ããªã±ãŒã·ã§ã³ã®äœæã«ã¯åœãŠã¯ãŸããããããŸããããã©ã€ãã©ãªèªäœã®æ¡åŒµãšã«ã¹ã¿ãã€ãºã«ã¯åœãŠã¯ãŸããŸããã
Qtã©ã€ãã©ãªãçã«çµ±åãã匷åã«ãªãããã«ããŠã£ãžã§ãããã©ã®ããã«é
眮ãã¹ãããèããŠã¿ãŸãããã
ããŸããŸãªãŠã£ãžã§ããïŒãã§ãã¯ããã¯ã¹ãããŒãã«ãããªãŒãã°ã©ãã£ãã¯ã·ãŒã³ïŒãèŠãŠããããã®å
±éç¹ãèŠã€ããŠã¿ãŸãããã ãããã®æ
å ±ã¯ãã»ã«ïŒã¢ã€ãã ïŒã«ã°ã«ãŒãåãããŸãã ãã§ãã¯ããã¯ã¹ã¯1ã€ã®ã»ã«ã§æ§æãããããŒãã«ã¯ã»ã«ã®è¡ãšåã§æ§æãããã·ãŒã³ã®ã»ã«ã¯ããŒãã§ãã ãããã£ãŠããã¹ãŠã®ãŠã£ãžã§ããã«ã¯ã»ã«ã衚瀺ãããã¹ããŒã¹ã®æ°ãšäœçœ®ã®ã¿ãç°ãªãã¿ã€ãã®ãŠã£ãžã§ããã«åºæã§ãããšèšããŸãã ãŠã£ãžã§ãããã»ã«ã®
ã¹ããŒã¹ ïŒ
Space ïŒã衚瀺ãããšããŸãã åçŽãªãŠã£ãžã§ããã®å Žåãã»ã«ç©ºéã¯
SpaceItemã«ãšã£ãŠéèŠã§ãããåäžã®ã»ã«ã§æ§æãããŸãã ããŒãã«ã®å Žåãã»ã«ãè¡ãšåã«ç·šæããæ¹æ³ãèšè¿°ãã
SpaceGridãèããããšãã§ããŸãã ã°ã©ãã£ãã¯ã·ãŒã³ã«ã¯
SpaceSceneããããã»ã«ã奜ããªå Žæã«é
眮ã§ããŸãã
åºæ¬ã¯ã©ã¹ã«åºå¥ã§ãããã¹ãŠã®ã¹ããŒã¹ã®å
±éç¹ã¯äœã§ããïŒ
ãããŸã§ã®ãšããã2ã€ã®ããšãåºå¥ã§ããŸãã
- ã¹ããŒã¹ã®åèšãµã€ãºãè¿ããŸãïŒéåžžãããã¯ãã¹ãŠã®ã»ã«ã®å¢çããã¯ã¹ã§ãïŒ
- 座æšItemIDã§ã»ã«ã®äœçœ®ãè¿ããŸã
class Space { virtual QSize size() const = 0; virtual QRect itemRect(ItemID item) const = 0; };
ã»ã«èªäœã詳ããèŠãŠã¿ãŸãããã æç¢ºã«ããããã«ã次ã®è¡šãæ€èšããŸãã

ã»ã«ã«ãæ§é ããããŸãã ããšãã°ããã§ãã¯ããã¯ã¹ã¯ããã§ãã¯ããŒã¯ãšããã¹ããä»ããããã¯ã¹ã§æ§æãããŸãã ããŒãã«å
ã®ã»ã«ã¯éåžžã«è€éã«ãªãå ŽåããããŸãïŒãããªã®äŸã®ããã«ãããã¹ããåçããªã³ã¯ãå«ãïŒã ããŒãã«ã®å ŽåãååãšããŠãåãåã®ã»ã«ã¯åãæ§é ãæã€ããšã«æ³šæããŠãã ããã ãããã£ãŠããã¹ãŠã®ã»ã«ã§ã¯ãªããã»ããå
šäœãèšè¿°ããæ¹ãç°¡åã§ãã ã»ã«ã®ã»ããïŒ
Range ïŒã¯ç°ãªãå ŽåããããŸããããšãã°ããã¹ãŠã®RangeAllã»ã«ãRangeColumnåã®ã»ã«ãRangeRowè¡ã®ã»ã«ãRangeOddRowè¡ã®ã»ã«ãªã©ã§ãã åºæ¬ã¯ã©ã¹
Rangeã«ã¯ã©ã®ã€ã³ã¿ãŒãã§ã€ã¹ãå²ãåœãŠãããšãã§ããŸããïŒ ã€ã³ã¿ãŒãã§ã€ã¹ã¯ã·ã³ãã«ã§ç°¡æœã§ã-質åã«çããããã«ã
ç¯å²å
ã®ä»»æã®ã»ã«ã§ãããã©ããïŒ
class Range { virtual bool hasItem(ItemID item) const = 0; };
ã»ã«ã®ãµãã»ãããæ±ºå®ãããããããã®ã»ã«ã«è¡šç€ºããæ
å ±ã®çš®é¡ãæå®ããå¿
èŠããããŸãã
Viewã¯ã©ã¹ã¯ãæå°ã§åå²ã§ããªãæ
å ±ã衚瀺ãã圹å²ãæãããŸãã ããšãã°ã
ViewCheckã¯ãã§ãã¯ããã¯ã¹ã¢ã€ã³ã³ã
ViewText-ããã¹ãè¡ãªã©ã衚瀺ã§ããŸãã
ãããŸã§ã®ãšãããåºæ¬
Viewã¯ã©ã¹ã¯ã»ã«ã«æ
å ±ãæç»ããããšããã§ããŸããã
class View { virtual void draw(QPainter* painter, ItemID item, QRect rect) const = 0; };
åé¡ã¯ãã»ã«ã®å·ŠåŽã«ã¢ã€ã³ã³ãæç»ããå¿
èŠãããããšã
ViewCheckãã©ã®ããã«èªèãããã§ãã¯ããã¯ã¹ã¢ã€ã³ã³ã®åŸã«ããã¹ããæç»ããå¿
èŠãããããšã
ViewTextãèªèãããã§ãã ãããè¡ãããã«ãå¥ã®ããã¯ãŒããã¯ã©ã¹
LayoutããããŸãã ãã®ã¯ã©ã¹ã¯ãã»ã«å
ã«
ãã¥ãŒãé
眮ã§ã
ãŸã ã ããšãã°ãLayoutLeftã¯
ãã¥ãŒãã»ã«ã®å·Šç«¯ã«é
眮ããLayoutRight-å³åŽãããã³LayoutClient-ã¯ã»ã«ã®ã¹ããŒã¹å
šäœãå æããŸãã åºæ¬çãªã€ã³ã¿ãŒãã§ã€ã¹ã¯æ¬¡ã®ãšããã§ãã
class Layout { virtual void doLayout(ItemID item, View view, QRect& itemRect, QRect& viewRect) const = 0; };
doLayout颿°ã¯ãitemRectããã³viewRectãã©ã¡ãŒã¿ãŒã倿ŽããŠããã¥ãŒãé
ç®ã»ã«å
ã«é
眮ãããããã«ããŸãã ããšãã°ãLayoutLeftã¯ãã»ã«ã«æ
å ±ã衚瀺ããããã«ãã¥ãŒã«å¿
èŠãªãµã€ãºãèŠæ±ããitemRectããå¿
èŠãªã¹ããŒã¹ããé£ãã€ã¶ãããŸãã ã芧ã®ãšããã
Viewã€ã³ã¿ãŒãã§ãŒã¹ã«ã¯ãã1ã€ã®æ©èœãå¿
èŠã§ã-ãµã€ãºïŒ
class View { virtual void draw(QPainter* painter, ItemID item, QRect rect) const = 0; virtual QSize size(ItemID item) const = 0; };
çµæãšããŠãç¹å®ã®ã¹ããŒã¹ã®ã»ã«ã«
äœã
ã©ã®ããã«è¡šç€ºãã
ãã説æããã«ã¯ãããªãã«ã®ãªããžã§ã¯ãã¿ãã«<RangeãViewãLayout>ããªã¹ãããå¿
èŠããããŸãã ãã®ãããªããªãã«
ItemSchemaãåŒã³åºããŸãã ã
Spaceã¯ã©ã¹å
šäœã¯æ¬¡ã®ããã«ãªããŸãã
class Space { virtual QSize size() const = 0; virtual QRect itemRect(ItemID item) const = 0; QVector<ItemSchema> schemas; };
ããã«è¯ãäŸããããŸãïŒçœ²åã¯å°ãæä»£é
ãã§ãããäž»ãªã¢ã€ãã¢ã¯çè§£ã§ãããšæããŸãïŒïŒ
Range ã
Viewãããã³
Layoutã¯ã©ã¹ã®ç°ãªãåå«ãäœæããããããããŸããŸãªæ¹æ³ã§çµåããããšã«ãããä»»æã®ã»ã«ã¹ããŒã¹ããããã£ãŠä»»æã®ãŠã£ãžã§ãããã«ã¹ã¿ãã€ãºããããã®è±å¯ãªå¯èœæ§ããããŸãã ããšãã°ãæã®åœ¢ã§è©äŸ¡ã衚瀺ãã
ViewRatingã¯ã©ã¹ãäœæããããšã§ãå¥ã®ãŠã£ãžã§ãããšããŠãããŒãã«ã»ã«ãããã³ã°ã©ãã£ãã¯ã·ãŒã³ã®èŠçŽ ã§äœ¿çšã§ããŸãã
ãã®ã¢ãŒããã¯ãã£ã¯ãããã°ã©ãã®ååã«åœ¹ç«ã¡ãŸãã 誰ããç¬èªã®çš®é¡ã®ã»ã«ç©ºéãèšè¿°ã§ããŸããããã«ãããç¹å¥ãªæ¹æ³ã§ã»ã«ãã¹ã¿ãã¯ãããŸãã 誰ããç¹å®ã®ããŒã¿ã衚瀺ãããã¥ãŒãäœæããŸãã ãããŠããããã®ããã°ã©ããŒã¯ãäºãã®ä»äºã掻çšã§ããŸãã ããã¯ãViewã¯ã©ã¹ã®å®è£
ã®å®å
šãªãªã¹ãã§ã¯ãªããäœæãšäœ¿çšãç°¡åã§ãïŒå®è£
ã¯ã»ãã®æ°è¡ã®ã³ãŒãã§ãïŒã
- ViewButton-ãã¿ã³ãæç»ããŸãã
- ViewCheck-ãã§ãã¯ããã¯ã¹ã¢ã€ã³ã³ãæç»ããŸãã
- ViewColor-ç¹å®ã®è²ã§é åãå¡ãã€ã¶ããŸãã
- ViewEnumText-éããããªã¹ãããããã¹ããæç»ããŸãã
- ViewImage ã ViewPixmap ã ViewStyleStandardPixmap-ç»åãæç»ããŸãã
- ViewLink-ããã¹ããªã³ã¯ãæç»ããŸãã
- ViewAlternateBackground-ã¹ã«ãŒã¹ããªãããæç»ããŸãã
- ViewProgressLabel ã ViewProgressBox-é²è¡ç¶æ³ããŒãŸãã¯ããŒã»ã³ããæç»ããŸã ã
- ViewRadio-ã©ãžãªãã¿ã³ã¢ã€ã³ã³ãæç»ããŸãã
- ViewRating-è©äŸ¡ã¢ã€ã³ã³ãæç»ããŸãã
- ViewSelection-éžæããã»ã«ãæç»ããŸãã
- ViewText-ããã¹ããæç»ããŸãã
- ViewTextFont-åŸç¶ã®ããã¹ãã®ãã©ã³ãã倿ŽããŸãã
- ViewVisible-å¥ã®ãã¥ãŒã衚瀺ãŸãã¯é衚瀺ã«ããŸãã
ç¶ããŸãããã ååãšããŠããŠã£ãžã§ããã¯ã»ã«ã¹ããŒã¹å
šäœã衚瀺ããã®ã§ã¯ãªãã衚瀺éšåã®ã¿ã衚瀺ããŸãã
Spaceã¯ã©ã¹ã¯ãã»ã«ã¹ããŒã¹ãèšè¿°ããã®ã«äŸ¿å©ã§ãããéãããå¯èŠé åã®ã»ã«ãã¬ã³ããªã³ã°ããã«ã¯é©ããŠããŸããã
CacheSpaceã®ãµããšãªã¢ã衚瀺ããç¹å¥ãªã¯ã©ã¹ãå®çŸ©ããŸãããïŒ
class CacheSpace { // reference to items space Space space; // visible area QRect window; // draw cached items void draw(QPainter* painter) const; // visit all cached items virtual void visit(Visitor visitor) = 0; };
CacheSpaceã®ç¹å®ã®åŸç¶ïŒ
CacheGrid ã
CacheSceneãªã©ïŒã¯ããã£ãã·ã¥ããã
CacheItemã»ã«ã®ã»ãããããŸããŸãªæ¹æ³ã§æ ŒçŽããŸãïŒãã ãããã®ã¿ã€ãã®ã¹ããŒã¹ã«æé©ã§ãïŒã ãããã£ãŠããã£ãã·ã¥ããããã¹ãŠã®ã»ã«ã蚪åããåºæ¬ã¯ã©ã¹ã®èšªå颿°ã匷調衚瀺ããŸãã ããã䜿çšãããšãdraw颿°ãç°¡åã«å®è£
ã§ããŸãããã£ãã·ã¥ããããã¹ãŠã®ã»ã«ã«ã¢ã¯ã»ã¹ãããããã®ã»ã«ã§draw颿°ãåŒã³åºãã ãã§ãã
ååã瀺ãããã«ã
CacheItemã¯ç¹å®ã®ã»ã«ã衚瀺ããããã«å¿
èŠãªãã¹ãŠã®æ
å ±ãä¿åããŸãã
class CacheItem { ItemID item; QRect itemRect; QVector<CacheView> views; void draw(QPainter* painter) const; };
ããã§ãdraw颿°ãéåžžã«åçŽã§ããã«ãŒãå
ã§ã
CacheViewã¯ã©ã¹ã§drawãåŒã³åºããŸããããã«ãããã»ã«å
ã®æå°ã§åå²ã§ããªãæ
å ±ãã¬ã³ããªã³ã°ãããŸãã
class CacheView { View view; QRect viewRect; void draw(QPainter* painter, ItemID item) const; };
ãããã£ãŠããŠã£ãžã§ããã«ã¯
CacheSpaceãå¿
èŠã§ãããããã䜿çšããŠã»ã«ç©ºéã®ã³ã³ãã³ããæç»ããå¿
èŠããããŸãã
class Widget { // space of items Space space; // cache of visible area of space CacheSpace cacheSpace; void paintEvent(QPaintEvent *event) override; void resizeEvent(QResizeEvent *event) override; };
resizeEventãã³ãã©ãŒã§ã¯ãcacheSpace.windowãªããžã§ã¯ãã®è¡šç€ºé åã倿ŽããpaintEventãã³ãã©ãŒã§ã¯ããã®ã³ã³ãã³ãcacheSpace.drawïŒïŒãæç»ããŸãã
ã芧ã®ãšããããªããžã§ã¯ãã®éå±€æ§é CacheSpace-> CacheItem-> CacheViewã䜿çšãããšããŠã£ãžã§ããã®èŠèŠçæ§é å
šäœã詳现ã«ãèŠããããšãã§ããŸãã
CacheSpaceã¬ãã«ããå¥ã®
CacheItemã»ã«ã®ã¬ãã«ãŸã§
äžãã£ãŠãããã«ã»ã«å
ã®åã
ã®
CacheViewsãäžŠã¹æ¿ããããšãã§ããŸãã
ãŠã£ãžã§ãããéå±€ãšããŠè¡šç€ºãããã®æ©èœCacheSpace-> CacheItem-> CacheViewã¯ããŠã£ãžã§ããã管çããã³å
çããããã®çŽ æŽãããæ©äŒãæäŸããŸãã
ããšãã°ãèªåãã¹ãã·ã¹ãã ããä»»æã®ãŠã£ãžã§ããã«ã¢ã¯ã»ã¹ããããã®åäžã®ã€ã³ã¿ãŒãã§ã€ã¹ãå®è£
ã§ããŸãã GUIèªåãã¹ãã·ã¹ãã ã¯éåžžããŠã£ãžã§ããå
ã®å¿
èŠãªé åãèŠæ±ããããŠã¹ã§ãã®é åã«äœçšããŠããŠãŒã¶ãŒã¢ã¯ã·ã§ã³ãã·ãã¥ã¬ãŒãããŸãã ãã®ãããªã·ã¹ãã ã«ã圱é¿ãåããå¯èœæ§ã®ããé åã®æã詳现ãªããããããæäŸã§ããŸãã
å¥ã®äŸã¯ããããªã®äŸã§ç€ºãããŠããã¢ãã¡ãŒã·ã§ã³ã§ãã ãŠã£ãžã§ããã®æ§æãèŠãã ãã§ãªãããã®ã³ã³ããŒãã³ãã«äœçšããããšãã§ããŸãã ããšãã°ãéå±€å
ã®ãªããžã§ã¯ãïŒCacheSpace-> CacheItem-> CacheViewïŒã®å Žæãæéçã«å€æŽããããåéæã§æç»ãããã§ããŸãã ãããã£ãŠããã¹ãŠã®ãŠã£ãžã§ããããã³ã»ã«ç©ºéã«é©çšã§ããã¢ãã¡ãŒã·ã§ã³ã®ã©ã€ãã©ãªå
šäœãåéã§ããŸãã
ãã®çµæããã®ã©ã€ãã©ãªãã«ã¹ã¿ãã€ãºã§ããæ¹åãããäžåºŠãªã¹ãããŸãã
- ã¹ããŒã¹ -ç¬èªã®ã¿ã€ãã®ã»ã«ã¹ããŒã¹ãäœæã§ããŸã
- CacheSpace-æ°ããã¿ã€ãã®è¡šç€ºã¹ããŒã¹ãäœæã§ããŸããããšãã°ãCacheSpaceCouruselãå®è£
ããŸã-ã«ã«ãŒã»ã«ã®åœ¢åŒã§ã»ã«ã®ãªã¹ãã衚瀺ããŸã
- ãã¥ãŒ -ã»ã«ã®æ°ããçš®é¡ã®èŠèŠåãäœæããŸã
- ã¢ãã¡ãŒã·ã§ã³ -æ°ããã¢ãã¡ãŒã·ã§ã³ãäœæãã
ãã®ã¡ã¢ã¯ãåã®2ã€ã
ãããš
ããã®ç¶ã
ã§ã ã
qt-itemsãããžã§ã¯ãã¯ããããã®ã¡ã¢ããã®ã¢ã€ãã¢ã®å®è£
ã§ãã
ãããªãéçºã®ããã®ã¢ã€ãã¢ãã¿ã¹ã¯ããŸã ãããããããŸãã®ã§ãé£çµ¡ãåãåããŸãããã