
C ++ / Qtã§éçºããŠãã人ã®å€ãã¯ãQt Creatorã®ãããªç°å¢ã«ç²ŸéããŠããŸããQtCreatorã®äœæè ã¯ãæ©èœã ãã§ãªãèšèšã«ãåãçµã¿ãŸããã ããããç§ã¯æãé è²ãšãã©ãããªããããªãºã ã®æ奜è ãšããŠãããã«ãšã°ã©ããŒã·ã§ã³ããããŒã®æããèæ¯ãåžžã«å¥œãã§ã¯ãããŸããã§ããã
ããã¯ãªãŒãã³ãœãŒã¹ã®ããã«æããŸã-ãããåãããããå€æŽããŸãããCSS圢åŒã§ãŠã£ãžã§ããã®ã¿ã€ããèšè¿°ããããšãã§ããQt Style Sheetsã®ãããªãã®ãçºèŠãããŸã§ãçµéšäžè¶³ãšæ lazã¯ç§ãæ¢ããŸããã
äºåã«èŠåããŸãã次ã®å 容ã¯ããŸãæ±ããªããããããŸãããã ããã¯ã§ãã ãã¡ããã圌ã¯ã»ãã¥ãªãã£ããŒã«ãéããŠãã¹ã¯ãŒããçã¿ããã©ãã®ããã«ãŒã«éä¿¡ããŸãããã€ã³ã¿ãŒãã§ãŒã¹ã«ã¯ããŸããŸãªã¢ãŒãã£ãã¡ã¯ããååšããŸãã
ç°å¢ã®æºå
UPDïŒäžé©åãªããããé©çšãã代ããã«ã ãµã€ããŒããã®ã¢ããã€ã¹ã«åŸã£ãŠã-stylesheet = stylesheet.cssãã©ã¡ãŒã¿ãŒãæå®ããŠQtCreatorãå®è¡ããã ãã§ååãªã®ã§ãããã«åæç»ã«é²ã¿ãŸãã
ç¶ããŠ
ãŸããç°å¢ã®ãœãŒã¹ã³ãŒããååŸããŸãã å±éããã³ã³ã¹ãã©ã¯ã¿ãŒ
ã«è¿œå ããŸããããã¯ããããã
ã«ãããèå¥ããŒã¯ãä»ããŠãããããããã«èŠã€ããŠç Žæ£ã§ããŸãã
æ ãè ã¯ãææ°ã®å®å®ããŒãžã§ã³2.5.0ã®å€æŽããããã¡ã€ã«ãåãããšãã§ããŸã
ãããã
ãã¹ãŠãé 調ã«é²ãã å Žåã
./src/plugins/coreplugin/mainwindow.cpp:199
MainWindow::MainWindow()
./src/plugins/coreplugin/mainwindow.cpp:199
MainWindow::MainWindow()
ã«è¿œå ããŸããããã¯ããããã
./src/plugins/coreplugin/mainwindow.cpp:199
ã«ãããèå¥ããŒã¯ãä»ããŠãããããããã«èŠã€ã
//$$MARKER //HACK: Injecting css to change appearance // // Linux: /home/shed/.local/share/data/Nokia/QtCreator // Windows: C:\Document and Settings\user\Local Settings\Application Data QString csspath = QDesktopServices::storageLocation(QDesktopServices::DataLocation)+"/stylesheet.css"; QFile css(csspath); if (css.open(QIODevice::ReadOnly | QIODevice::Text)){ qDebug() << "NOTE: stylesheet loaded from" << csspath; QString style = QTextStream(&css).readAll(); qApp->setStyleSheet(style); } else { qDebug() << "NOTE: stylesheet not found in " << csspath; } //$$MARKEREND
æ ãè ã¯ãææ°ã®å®å®ããŒãžã§ã³2.5.0ã®å€æŽããããã¡ã€ã«ãåãããšãã§ããŸã
ãããã
qmake && make && ./bin/qtcreator
ãã¹ãŠãé 調ã«é²ãã å Žåã
NOTE: stylesheet not found in <--->/stylesheet.css
次ã«ããã®stylesheet.cssãäœæããæ€èšŒã®ããã«ããã«æžã蟌ã¿ãŸã
background: blue; color: red;
qtcreatorãåèµ·åããŸãïŒç¥çµãç¯çŽããããã«ãã¯ã³ã¯ãªãã¯ã§qtcreatorãéå§ããããã«ãšãã£ã¿ãŒãæ§æããå¿ èŠããããŸãïŒã

åœç¶ã®ããšãªãããsetStyleã¯ãã¹ãŠãéã§å¡ãã€ã¶ããŸããããçŸåšã®ããã¥ã¡ã³ãã®ã¯ã©ã¹ãšã¡ãœããã®ãªã¹ããšåºåããã«ã®ã¹ã€ãããšãã2ã€ã®åä¹±ãçŸããŸããã ãã®çç±ã¯2ã€ãããŸãããããã®èŠçŽ ã¯QWidgetã®åå«ã§ã¯ãªããvryatliã§ããããQtã¹ã¿ã€ã«ã·ã¹ãã ããã€ãã¹ããŠç¬èªã®ã¬ã³ããªã³ã°æ¹æ³ã䜿çšããŸãã
åæç»
ãåç¥ã®ããã«ãã¹ã¿ã€ã«ã·ãŒãã¯ãã©ãŒã ã®ã¬ã³ãŒãã®ã»ããã§ãã
<>[, <>, ...] { <>: <>; <>: <>; ... <>: <>; }
ãããŸã§ã«ãã®ãããªããšãæžããããšããªãå Žåã¯ã ãã¥ãŒããªã¢ã«ã®ããã€ãã®ã¬ãã¹ã³ã§ã以äžã§äœãèµ·ããããç解ã§ããŸãã Qtã¹ã¿ã€ã«ã·ãŒãã®ããã¥ã¡ã³ããšäŸãåŸã§èªãå¿ èŠããããŸãã
ã»ã¬ã¯ã¿ãŒ
ããŒã¢ã³åŠã§ã¯ãããŒã¢ã³ãåŒã³åºãã«ã¯ããã®ååãç¥ãå¿ èŠããããŸãããã®å Žåãã»ã¬ã¯ã¿ãŒãã³ã³ãã€ã«ããã«ã¯ãã¯ã©ã¹åãobjectNameããŸãã¯Q_PROPERTYïŒïŒããã³setPropertyïŒïŒã䜿çšããŠæå®ãããããããã£ã®å€ãç¥ãå¿ èŠããããŸãã
Qt ã¯ãã¹ãŠã®CSS2ã»ã¬ã¯ã¿ãŒããµããŒãããŸãã ããã¥ã¡ã³ãã«ãããšæã䟿å©ãªãã®ïŒ
ãŠãããŒãµã«ã»ã¬ã¯ã¿ãŒ | * | ãã¹ãŠã®ãŠã£ãžã§ããã«äžèŽããŸãã |
ã¿ã€ãã»ã¬ã¯ã¿ãŒ | QPushButton | QPushButtonã¯ã©ã¹ãšãã®ãµãã¯ã©ã¹ã®ã€ã³ã¹ã¿ã³ã¹ã«å¯Ÿå¿ããŸãã |
ããããã£ã»ã¬ã¯ã¿ãŒ | QPushButton [flat = "false"] | ãã©ããã§ã¯ãªãQPushButtonã¯ã©ã¹ã®ã€ã³ã¹ã¿ã³ã¹ã«å¯Ÿå¿ããŸãã ãã®ã»ã¬ã¯ã¿ã䜿çšããŠãQ_PROPERTYïŒïŒã䜿çšããŠæå®ãããQtããããã£ã確èªã§ããŸãã
=ã®ä»£ããã«ã=ã䜿çšããŠãQStringListåã®Qtããããã£ã«æå®ã®QStringæååãå«ãŸããŠãããã©ããã確èªããããšãã§ããŸãã |
ã¯ã©ã¹ã»ã¬ã¯ã¿ãŒ | .QPushButton | QPushButtonã¯ã©ã¹ã®ã€ã³ã¹ã¿ã³ã¹ã«å¯Ÿå¿ããŠããŸããããã®ãµãã¯ã©ã¹ã«ã¯å¯Ÿå¿ããŠããŸããã
åŒ* [classã= "QPushButton"]ãšåçã§ãã |
IDã»ã¬ã¯ã¿ãŒ | QPushButtonïŒokButton | objectNameãokButtonã§ããQPushButtonã¯ã©ã¹ã®ãã¹ãŠã®ã€ã³ã¹ã¿ã³ã¹ã«äžèŽããŸãã |
åå«ã»ã¬ã¯ã¿ãŒ | QDialog QPushButton | QDialogã¯ã©ã¹ã®åå«ïŒåãå«ãªã©ïŒã§ããQPushButtonã¯ã©ã¹ã®ãã¹ãŠã®ã€ã³ã¹ã¿ã³ã¹ã«äžèŽããŸãã |
åã»ã¬ã¯ã¿ãŒ | QDialog> QPushButton | QDialogã®çŽæ¥ã®åå«ã§ããQPushButtonã¯ã©ã¹ã®ãã¹ãŠã®ã€ã³ã¹ã¿ã³ã¹ã«äžèŽããŸãã |
ãããŸã§ã®ãšãããåã»ã¬ã¯ã¿ãŒã«ã®ã¿é¢å¿ããããããããã£ã䜿çšããæ¹ãããæè»ã§é©åã§ãããããã«ã¯ã³ãŒããžã®ä»å ¥ãå¿ èŠã§ãã
ããã§ã¯ããã¶ã€ããŒããã¬ã€ããŸãããã
æãåºãããŠãã ãããç§ãã¡ã¯ããã«ã«æãèæ¯ãäœãããã£ãã®ã§ãã ãããè¡ãã«ã¯ãã»ã¬ã¯ã¿ãŒãéžæããå¿ èŠããããŸãã ãããã®ããã«ã«ã¯éåžžäœã衚瀺ãããŸããïŒ ããããžã§ã¯ããããã¯ã©ã¹ã®æŠèŠãããã¿ã€ãéå±€ãããã¢ãŠãã©ã€ã³ãïŒå¥³ã®åããããã¢ãŠãã©ã€ã³ãïŒã®ããªãŒãããã¡ã€ã«ã·ã¹ãã ãããããã¥ã¡ã³ããéããããããã¯ããŒã¯ãã®ãªã¹ãããããã°ããã«ã®ããŒãã«ãªã©eã æšæºã®QListViewãQTreeViewãããã³QTableVeiwã®ååã¯QAbstractItemViewã§ãã
ãããã£ãŠãstylesheet.cssã«ä»¥äžãèšè¿°ããŸãã
QAbstractItemView { color: #EAEAEA; background: #232323; font-size: 9pt; }
ãŸãããŠã£ã³ããŠãµã€ãºãæå°ã«æžãããŠãããå€ãã®èŠçŽ ã衚瀺ãããããã«ããŸãã

ç§ãã¡ã¯æ¬²ãããã®ãæã«å ¥ããŸããããïŒæãããŠããªãã«ããããããïŒããã«ã¯å€èŠ³ã倱ããããŒã ãããŸããã§ããã 誰ãã
qApp->setStyle(new ManhattanStyle(baseName));
ïŒïŒã«æ²¿ã£ãŠç®ã
qApp->setStyle(new ManhattanStyle(baseName));
ãããããç®ç«ããªãè¡
qApp->setStyle(new ManhattanStyle(baseName));
ç¹ã«æ°žç¶çãªå ŽåãManhattanStyleãã¯ãªãã¯ãããšãQProxyStyleãç¶æ¿ããŠããããšã«æ°ä»ãå¯èœæ§ããããŸãã ããã«ã®æç»ãåå®çŸ©ããã®ã¯åœŒã§ãã ãããŠãã¹ã¿ã€ã«ãèšå®ãããšããã«èå°è£ã«åºãã®ã¯åœŒã§ãã
ãããã®è²ããããã¿ã³ã§ããããã®ããããªçŸããã®ä»äºãæåŸ ããŠãç§ã¯ããããªããšãããªãããšã«æ±ºããQAbstractItemViewã«å ããŠããã¹ãŠã®ãŠã£ãžã§ããã®ç¶ã§ããQMainWindowãèŠãŸããã
QAbstractItemView, QMainWindow { color: #EAEAEA; background: #232323; font-size: 9pt; }
以äžãéå§ããŸãã

ã»ãŒå¿ èŠãªãã®ã ã¿ããããããŒãã¹ã¯ããŒã«ããŒã®çœãç¹ãé ãããã«æ®ããŸãã
ãµãèŠçŽ ãšæ¡ä»¶
CCS2ãšåæ§ã«ãQtã¹ã¿ã€ã«ã·ãŒãã¯ãµãèŠçŽ ãšç¶æ ããµããŒãããŠããŸãã ãã©ãŒã å ã®ã¬ã³ãŒãã»ã¬ã¯ã¿ãŒïŒ
<>::<>:<>
ããšãã°ã
QScrollBar::left-arrow:horizontal
ã¯ãæ°Žå¹³ã¹ã¯ããŒã«ããŒã®ãã¹ãŠã®å·Šç¢å°ãéžæããŸãã
ãã¯ã€ãã¹ãããã§ã©ã®ããã«æ©èœããããèŠãŠã¿ãŸãããã
QTreeViewããã³QAbstractItemViewã®äœæ
éå§ããã«ã¯ãQAbstractItemViewã§éžæããé ç®ã®å€èŠ³ã次ã®ããã«æããã®ã«å€æŽããŸãã
QAbstractItemView::item:selected { color: #EAEAEA; background-color: #151515; }
æ¯èŒããïŒ

ããã§ã¯QTreeViewãæ±ããŸãããã
ãã®åè¡ã¯ã1ã€ã®ãµãèŠçŽ ::ã¢ã€ãã ãš1ã€ä»¥äžã®::ãã©ã³ãã§æ§æãããŸãã

::æšæºç¶æ ã«å ããŠãã©ã³ãã¯ããã«4ã€ããµããŒãããŸãïŒ
*é-ç®çã®ç¶æ ã®èŠçŽ
![]() | ![]() | ![]() | ![]() |
:open
| :adjoins-item
| :has-children
| :has-subling
|
èããŠãéå±ãªç¢å°ãå¿ããŠãã°ã«ãŒãåãããèŠçŽ ã®å察åŽã«å°ããªç°è²ã®ç¹ãäœãããšã«ããŸããã ãããã£ãŠãå¿ èŠãªã®ã¯
:closed:adjoins-item:has-children
ã§ãã 次ã®ãããªãã©ã¡ãŒã¿ãŒãååŸããŸãïŒ
QTreeView::branch:closed:adjoins-item:has-children { background: solid #777777; margin: 6px; height: 6px; width: 6px; border-radius: 3px; }

ç¢å°ã奜ããªããimageïŒãŸãã¯border-imageïŒã«æž¡ãããurlïŒãã¡ã€ã«åïŒã³ã³ã¹ãã©ã¯ããå¿ èŠã§ããããã¯ãããŒããã©ã€ããŸãã¯QtãªãœãŒã¹ã·ã¹ãã ã«ä¿åãããŠããç»åãèæ¯ãŸãã¯å¢çãšããŠèšå®ããŸãã
QScrollBarãå€æŽãã
Qtã¹ã¿ã€ã«ã·ãŒãã®ç®ã§ã¯ãæšæºã®ã¹ã¯ããŒã«ããŒã¯æ¬¡ã®ãµãèŠçŽ ã§æ§æãããŠããŸãã

ç®èãªããšã«ããã®3次å ã®çŽ æŽããããéãã°ã¬ãŒã°ã¬ãŒã®åž¯ã«å€ãããã¿ã³ãç¢å°ãšäžç·ã«éä¿¡ããŠã次ã®è¡ã§ãäžèŠãª2012ãè³ãæäžããŸãã
QScrollBar { border: none; background: #494949; height: 6px; width: 6px; margin: 0px; } QScrollBar::handle { background: #DBDBDB; min-width: 20px; min-height: 20px; } QScrollBar::add-line, QScrollBar::sub-line { background: none; border: none; } QScrollBar::add-page, QScrollBar::sub-page { background: none; }
ååŸãããã®ïŒ

QTabBarãå€æŽãã
èŠåŽããã«
- ãµãèŠçŽ ïŒ:: tearïŒã¿ãåºåãïŒããã³:: scrollerïŒã¹ã¯ããŒã«ãã¿ã³ïŒ
- è¿œå ã®ã¿ãã®ç¶æ ã®å šäœã®ââåæ£::ã®ã¿-1 ã:æåãïŒæåŸãïŒäžéãïŒå-éžæãïŒæ¬¡éžæãïŒéžæãååããæ確ãªç®çãæ確ã«ããŸãã
- ç䌌ç¶æ ïŒäžãå·Šãå³ãäžïŒããã«ã®åãã«ãã£ãŠç°ãªããŸãã
- ãªãŒããŒã©ãããäœæããããã«äœ¿çšã§ããè² ã®ãã£ãŒã«ã
ãã¡ã³ã¿ãžãŒã®å ŽæããããŸãã
èŠããŠããå¿ èŠãããã®ã¯ãQTabBarã¯QTabWidgetã«ããããããŠã£ãžã§ãããä»ããŠèæ¯ãå€æŽããããã«ãä»ããŠã¿ãã®ããããã£ãå€æŽããå¿ èŠããããŸãã ããããç§ãã¡ã¯æ°åããªã人ã ã§ãããQMainWindowãèæ¯ã®äžè©±ãããã®ã§ã现ãç®ç«ããªãã¿ããç·ã§ãŒãããŸãïŒ
QMainWindow, QAbstractItemView, QTreeView::branch, QTabBar::tab { ... QTabBar::tab:selected { font: bold; border-color: #9B9B9B; border-bottom-color: #C2C7CB; } QTabBar::tab:!selected { margin-top: 2px; }

QHeaderViewãå€æŽãã
ç¥ããªãã£ã人ã®ããã«ãQtã®ãããã®ããŒãã«ããããŒã¯ãã¹ãŠQHeaderViewã§ãã QTabBar ::ã¿ããšåãç¶æ ãæã€1ã€ã®ãµãèŠçŽ ::ã»ã¯ã·ã§ã³ããããŸãã
ä»åã¯ãäŒçµ±ããé¢ããŠã°ã©ããŒã·ã§ã³ãå¡ãã€ã¶ãããšã«ããŸããïŒã¯ããããã§å¯èœã§ãïŒã ãããè¡ãã«ã¯ãæ§é qlineargradientãqradialgradientãqconicalgradientã䜿çšããŸãã ã°ã©ããŒã·ã§ã³ã¯ãªããžã§ã¯ãå¢çã¢ãŒãã§æå®ãããŸãã ã°ã©ããŒã·ã§ã³ãã¬ã³ããªã³ã°ããããã®å·Šäžé ãïŒ0ã0ïŒã«ãããå³äžé ãïŒ1ã1ïŒã«ããé·æ¹åœ¢ãæ³åããŠãã ããã ãã®å Žåã®åŸé ãã©ã¡ãŒã¿ãŒã¯ã0ã1ã®å°æ°ãšããŠç€ºãããŸãããããã®å€ã¯ãå®è¡æã«é·æ¹åœ¢ã®å®éã®åº§æšã«å€æ¿ãããŸãã å¢çããã¯ã¹ã®å€åŽã«ããå€ãæå®ããããšãã§ããŸãïŒããšãã°ã-0.6ãŸãã¯1.8ïŒã
次ã®ãã¶ã€ã³ã䜿çšããŸããã
QHeaderView::section { background-color: qlineargradient(x1:0, y1:0, x2:0, y2:1, stop:0 #616161, stop: 0.5 #505050, stop: 0.6 #434343, stop:1 #656565); color: white; padding-left: 4px; border: 1px solid #6c6c6c; }

ãããç§ãã¡ãæ±ãããã®ã§ãã
é åºãªãœã±ããã説åŸãã
å°ããªåé¡ã1ã€ã ããããŸãã

ãã®åè£ã¯ãç§ãã¡ã®åªåã«å®å šã«ç¡é¢å¿ã§ãããããã«ãQWidgetã®greatç¥ç¶ãã»ã¬ã¯ã¿ãŒãšããŠç€ºããå Žåã§ãã圌ã¯ç¡é¢å¿ã®ãŸãŸã§ããã ããã«ãããããããç§ã¯ãŸã ããŸããŸãªã»ã¬ã¯ã¿ãŒãè©ŠããŸããã åããŠãQComboBoxãšQLabelã䜿çšããã»ã¬ã¯ã¿ãŒã§ããã貫éããããšãã§ããŸããã
QComboBox, QComboBox::drop-down { color: #EAEAEA; background: #232323; font-size: 9pt; border: none; padding: 1px 18px 1px 3px; min-width: 6em; } QLabel { border-style: solid; color: #EAEAEA; background: #232323; font-size: 9pt; }

é¡ã®çæã åå²ã®åšãã®å°ã容赊ãªãå¢çç·ã¹ã¿ã€ã«ã®ãã¬ãŒã ããããã£ãŠéãéºäŒãã©ãã§ãäžé©åã«æŒããŸããã
ããã§ãå¶ç¶ãåžžèã®äœäžãçŸããŸããã åã©ããã¡ããŠã£ã³ããŠã®äžéšã«ãããã¿ã³ãäžåã«äžŠãã§ããã®ã«ãäœããããªã«èãã®ã§ããããïŒ ãã¡ãããããã¯QToolBarã§ãïŒ
ç§éã¯è©Šã¿ãŸãïŒ
QToolBar { border-style: solid; border-style: outset; color: #EAEAEA; background: #333333; font-size: 9pt; }

ãã³ãŽïŒ æ·±å»ãªç æ°ã®çè·¡ã¯ãã¹ãŠæ¶ããåéè ã¯çŽ çŽã«äžè¬çãªèŠè§£ã«å ãããŸããã
ãŸãšã

stylesheet.css
TODOïŒ
è²ããšã³ã³ãŒãããã®ã§ã¯ãªãããã¬ããããååŸããæ¹ãæ£ç¢ºã§ãããã¬ããããã¯ããšãã£ã¿ã®ã«ã©ãŒã¹ããŒã ã«å¿ããŠå¡ãã€ã¶ãããšãã§ããŸãã ããã«ãããããã¹ãŠãæ£ããè¿œå ã®åœ¢åŒã§é 眮ããã¹ã¿ã€ã«ãéžæããŠç¬èªã®èšå®ããŒãžãè¿œå ããå Žåã«ãã£ãŠã¯ãšãã£ã¿ãŒãè¿œå ããããšãã§ããŸãã ãŸããæãæãŸããã®ã¯ãã¡ãããå¿«é©ã§ãããåããµã€ãããã«ã§äœéãæžããããšã§ãã ããã¹ããåé€ããCSSãã¡ã€ã«ãããã®ãã¶ã€ã³ã«ã¢ã¯ã»ã¹ããŸãããããã«ã¯ã³ãŒããžã®ããæ·±ãä»å ¥ãå¿ èŠã§ãããäžè¬ã«ããŸã£ããç°ãªãã¹ããŒãªãŒãå¿ èŠã§ãã