讓你的Qt桌面程式看上去更加native(四):stylesheet
臨近春節,更新也慢了許多。今天再來寫一篇,不知道會不會是春節前的最後一篇了。豆子先祝大家新春愉快!
我們知道,HTML 僅僅被定義為一種內容佈局的語言。也就是說,HTML 應該做的,是告訴瀏覽器,這個東西應該放在這裡,那個東西應該放在那裡。至於這些東西該怎麼顯示,例如,用紅色還是用藍色,這樣的顯示的定義應該交給 CSS 去做。所以,在新近版本的 HTML 中,font、color 這樣的標籤和屬性已經不被推薦使用了。同樣,在 Qt 中也有這麼一個樣式表,被稱為 style sheet——這其實和 CSS 如出一轍。不僅名字相似,就連語法之類也相當雷同。
style sheet 雖然很好用,但是,我們應該提出幾個需要注意的地方。style sheet 應該被小心使用,因為它會打破系統正常的 look and feel。還記得我們前面提到的那個同普通 Windows 程式格格不入的 safari 嗎?所以在使用 style sheet 時應該儘量選用系統調色盤,而不是自己定義一個另類的顏色。
關於 style sheet 語法更詳細的手冊,我們可以到這裡去檢視。當然,如果你安裝的是 mingw 版本的 Qt(Windows 平臺),這個文件已經在 Qt Help 裡面了。在這裡,我們不去詳細介紹具體的語法細節,而是專注於如何正確使用 style sheet。所以,如果你有的語法看不懂,請自行查閱文件瞭解。
自己定義 label 的顏色固然很簡單,請看以下程式碼:
- #include <QtGui>
- int main(int argc, char *argv[])
- {
- QApplication app(argc, argv);
- QLabel label;
- label.setText(“Hello, style sheet!”);
- label.setStyleSheet(QString(“color:red”));
- label.show();
- return app.exec();
- }
我們將 label 的顏色使用 style sheet 定義為紅色,執行起來如下圖所示:
這種預定義的顏色很簡單,然而,如果我想用個系統顏色呢?比如,我希望是系統高亮的顏色?難道還得自己去找高亮色的 RGB 值嗎?正確的做法是,使用系統調色盤,如下程式碼所示:
- label.setStyleSheet(QString(“color:palette(highlight)”));
這樣,我們直接從系統調色盤中得到高亮色,即便是不同的系統,也不需要修改任何程式碼。以下是在 Windows 7 上面的執行結果:
即使你必須使用自定義顏色,也不應該將顏色硬編碼。而是使用一種變通的方式,例如:
- QColor color(128, 200, 128);
- label.setStyleSheet(QString(“color:%1”).arg(color.name()));
這樣做的好處是,你可以很方便地讓使用者選擇顏色,存入配置檔案,並且在以後的啟動中從配置檔案中讀取 color 的值,而不需要修改程式碼。
使用 style sheet 可以做出很漂亮的顯示效果。由於使用 style sheet 要比 前面說的自定義 style 簡單得多,因此,我們還是建議多多使用這一技術。下面,我們製作一個蘋果風格的前進/後退按鈕。效果如下:
為了製作這一按鈕,我們需要以下四幅圖片:
按照從上向下的順序分別命名為 btn_left.png, btn_left_pressed.png, btn_right.png 和 btn_right_pressed.png。然後,我們用下面的程式碼:
- #include <QtGui>
- int main(int argc, char *argv[])
- {
- QApplication app(argc, argv);
- QWidget segmentedButton;
- QToolButton *backButton = new QToolButton(&segmentedButton);
- QToolButton *forwardButton = new QToolButton(&segmentedButton);
- segmentedButton.setLayout(new QHBoxLayout);
- segmentedButton.layout()->setSpacing(0);
- segmentedButton.layout()->setMargin(0);
- backButton->setStyleSheet(QString(“QToolButton{border-image:url(:/btn_left.png)}”
- “QToolButton:pressed{border-image:url(:/btn_left_pressed.png)}”));
- forwardButton->setStyleSheet(QString(“QToolButton{border-image:url(:/btn_right.png)}”
- “QToolButton:pressed{border-image:url(:/btn_right_pressed.png)}”));
- backButton->setFixedSize(28, 23);
- forwardButton->setFixedSize(28, 23);
- segmentedButton.layout()->addWidget(backButton);
- segmentedButton.layout()->addWidget(forwardButton);
- QWidget win;
- win.setLayout(new QHBoxLayout);
- win.layout()->setSpacing(0);
- win.layout()->setMargin(0);
- win.layout()->setAlignment(Qt::AlignLeft);
- win.layout()->addWidget(&segmentedButton);
- win.show();
- return app.exec();
- }
即可得到上圖所示的效果。注意,我們之所以把 segmentedButton 又放入一個新的 widget 裡面,是由於 Windows 平臺下的視窗有一個最小值。如果直接呼叫 segmenedButton.show(); ,由於這個最小值的緣故,兩個 button 並不會在一起。使用這一技術,我們很容易製作出很漂亮的介面。這一技術的關鍵就在於圖片素材的製作,將介面大部分工作交予美工。
本文轉自 FinderCheng 51CTO部落格,原文連結:
相關文章
- 讓你的Qt桌面程式看上去更加native(二):StyleQT
- 讓你的Qt桌面程式看上去更加native(三):自定義styleQT
- 讓你的Qt桌面程式看上去更加native(六):跨平臺技術QT
- 聖誕節到了!!你的桌面下雪了嗎?? - Qt趣味開發之讓你的桌面下雪QT
- DSL-讓你的 Ruby 程式碼更加優雅
- 如何讓你的JavaScript程式碼更加語義化JavaScript
- 如何讓你的Python程式碼更加pythonic ?Python
- 讓你的C++程式碼變的更加健壯C++
- 想讓你的程式碼變得更加優雅嗎?
- AS3.0的元素處理(四)–styleSheetS3
- 如何讓自己的程式碼更加安全?
- 讓你工作變得更加有趣
- 聊一聊Java8 Optional,讓你的程式碼更加優雅Java
- 使用防火牆讓你的 Linux 更加強大防火牆Linux
- 讓你的linux作業系統更加安全Linux作業系統
- android studio和 Eclipse中程式碼的註釋,讓你的程式碼更加AndroidEclipse
- Android Annotation-讓你的程式碼和設計更加優雅(一)Android
- 僅需五步,讓你的個人資料更加安全!
- 這些 JavaScript函式讓你的工作更加 So Easy!JavaScript函式
- 這個 app 讓你們的啪啪啪更加愉悅APP
- 職場真言——讓你變得更加“專業”薦
- 40 個讓你的網站更加友好的 jQuery 外掛網站jQuery
- Lombok - 使用註解讓你的JavaBean變得更加簡潔LombokJavaBean
- 你的 JS 程式碼本可以更加優雅JS
- Path Finder for Mac:讓你的Mac檔案管理更加高效便捷!Mac
- 讓你的Mac更加乾淨整潔——App Cleaner & Uninstaller ProMacAPP
- Win10讓你鍾愛的Lumia手機更加強大!Win10
- DeepL翻譯工具,讓你的跨語言交流更加順暢
- 5 個讓你的開發更加輕鬆的輔助函式函式
- async/await 是如何讓程式碼更加簡潔的?AI
- CodeRunner for Mac:讓程式設計更加簡單Mac程式設計
- Android Annotation-讓你的程式碼更加優雅(二)做一個Java詩人(JavaPoet)AndroidJava
- 『CDN』讓你的網站訪問起來更加柔順絲滑網站
- 推薦5款讓你的電腦更加有趣的小工具
- 全面吃透JAVA Stream流操作,讓程式碼更加的優雅Java
- 風變程式設計讓我的職場選擇更加自由程式設計
- 讓 Java 程式設計師更加高效的開發工具Java程式設計師
- [原創]淺談職場的軟實力學習,會讓你更加讓別人青睞