BreezeStyleSheets/README.md

234 lines
8.5 KiB
Markdown
Raw Normal View History

2016-10-16 19:29:38 +00:00
BreezeStyleSheets
=================
2021-07-16 20:18:21 +00:00
Configurable Breeze and BreezeDark-like stylesheets for Qt Applications.
2016-10-16 19:29:38 +00:00
This stylesheet aims to be similar across all platforms, and provide a nice UI for different DPIs (as determined by the default font size, or using the screen scale factor). This is currently under work for scaling to multiple different DPIs and font sizes.
# C++ Installation
2016-10-16 19:29:38 +00:00
Copy `breeze.qrc` and the `dark` and `light` folders into your project directory and add the qrc file to your project file.
2016-10-16 19:29:38 +00:00
For example:
2016-10-17 02:15:33 +00:00
```qmake
TARGET = app
SOURCES = main.cpp
2016-10-16 19:29:38 +00:00
RESOURCES = breeze.qrc
```
To load the stylesheet in C++, load the file using QFile and read the data. For example, to load BreezeDark, run:
```cpp
#include <QApplication>
#include <QFile>
#include <QTextStream>
int main(int argc, char *argv[])
{
QApplication app(argc, argv);
// set stylesheet
QFile file(":/dark/stylesheet.qss");
2016-10-16 19:29:38 +00:00
file.open(QFile::ReadOnly | QFile::Text);
QTextStream stream(&file);
app.setStyleSheet(stream.readAll());
2016-10-16 19:29:38 +00:00
// code goes here
return app.exec();
}
```
# PyQt5 Installation
To compile the stylesheet for use with PyQt5, compile with the following command `pyrcc5 breeze.qrc -o breeze_resources.py`, and import the stylesheets. Afterwards, to load the stylesheet in Python, load the file using QFile and read the data. For example, to load BreezeDark, run:
```python
from PyQt5 import QtWidgets
from PyQt5.QtCore import QFile, QTextStream
import breeze_resources
def main():
app = QtWidgets.QApplication(sys.argv)
# set stylesheet
file = QFile(":/dark/stylesheet.qss")
file.open(QFile.ReadOnly | QFile.Text)
stream = QTextStream(file)
app.setStyleSheet(stream.readAll())
# code goes here
app.exec_()
```
# Gallery
2016-10-16 19:54:52 +00:00
2016-10-17 01:56:01 +00:00
**Breeze/BreezeDark**
2016-10-16 20:30:37 +00:00
2016-10-17 01:56:01 +00:00
Example user interface using the Breeze and BreezeDark stylesheets side-by-side.
2016-10-16 20:30:37 +00:00
2016-10-17 01:56:01 +00:00
![BreezeDark](/assets/Breeze.gif)
2016-10-16 19:54:52 +00:00
For an extensive view of screenshots of the theme, see the [gallery](assets/gallery.md).
# Customization
It's easy to design your own themes using `configure.py`. First, add the styles you want into [theme](/theme/), then run configure with a list of styles you want to include.
**Theme**
Here is a sample theme, with the color descriptions annotated. Please note that although there are nearly 40 possibilities, for most applications, you should use less than 20, and ~10 different hues.
```jsonc
// NOTE: This is a custom JSON file, where lines leading
// with `//` are removed. No other comments are valid.
{
// Main foreground color.
"foreground": "#eff0f1",
// Lighter foreground color for selected items.
"foreground-light": "#ffffff",
// Main background color.
"background": "#31363b",
// Alternate background color for styles.
"background:alternate": "#31363b",
// Main color to highlight widgets, such as on hover events.
"highlight": "#3daee9",
// Color for selected widgets so hover events can change widget color.
"highlight:dark": "#2a79a3",
// Alternate highlight color for hovered widgets in QAbstractItemViews.
"highlight:alternate": "#369cd1",
// Main midtone color, such as for borders.
"midtone": "#76797c",
// Lighter color for midtones, such as for certain disabled widgets.
"midtone:light": "#b0b0b0",
// Darker midtone, such as for the background of QPushButton and QSlider.
"midtone:dark": "#626568",
// Lighter midtone for separator hover events.
"midtone:hover": "#8a8d8f",
// Color for checked widgets in QAbstractItemViews.
"view:checked": "#334e5e",
// Hover background color in QAbstractItemViews.
// This should be fairly transparent.
"view:hover": "rgba(61, 173, 232, 0.1)",
// Background for a horizontal QToolBar.
"toolbar:horizontal:background": "#31363b",
// Background for a vertical QToolBar.
"toolbar:vertical:background": "#31363b",
// Background color for the corner widget in a QAbstractItemView.
"view:corner": "#31363b",
// Border color between items in a QHeaderView.
"view:header:border": "#76797c",
// Background color for a QHeaderView.
"view:header": "#31363b",
// Border color Between items in a QAbstractItemView.
"view:border": "#31363b",
// Background for QAbstractItemViews.
"view:background": "#1d2023",
// Background for widgets with text input.
"text:background": "#1d2023",
// Background for the currently selected tab.
"tab:background:selected": "#31363b",
// Background for non-selected tabs.
"tab:background": "#2c3034",
// Color for the branch/arrow icons in a QTreeView.
"tree": "#afafaf",
// Color for the chunk of a QProgressBar, the active groove
// of a QSlider, and the border of a hovered QSlider handle.
"slider:foreground": "#3daee9",
// Background color for the handle of a QSlider.
"slider:handle:background": "#1d2023",
// Color for a checked/hovered QCheckBox or QRadioButton.
"checkbox:light": "#58d3ff",
// Color for a disabled or unchecked/unhovered QCheckBox or QRadioButton.
"checkbox:disabled": "#c8c9ca",
// Color for the handle of a scrollbar. Due to limitations of
// Qt stylesheets, any handle of a scrollbar must be treated
// like it's hovered.
"scrollbar:hover": "#3daee9",
// Background for a non-hovered scrollbar.
"scrollbar:background": "#1d2023",
// Background for a hovered scrollbar.
"scrollbar:background:hover": "#76797c",
// Default background for a QPushButton.
"button:background": "#31363b",
// Background for a pressed QPushButton.
"button:background:pressed": "#454a4f",
// Border for a non-hovered QPushButton.
"button:border": "#76797c",
// Background for a disabled QPushButton, or fallthrough
// for disabled QWidgets.
"button:disabled": "#454545",
// Color of a dock/tab close icon when hovered.
"close:hover": "#b37979",
// Color of a dock/tab close icon when pressed.
"close:pressed": "#b33e3e",
// Default background color for QDockWidget and title.
"dock:background": "#31363b",
// Color for the float icon for QDockWidgets.
"dock:float": "#a2a2a2"
}
```
Once you've saved your custom theme, you can then build the stylesheet, icons, and resource file with:
```bash
python configure.py --styles=dark,light,<custom> --resource custom.qrc
```
Then, you can use `custom.qrc`, along with the generated icons and stylesheets in each folder, in place of `breeze.qrc` for any style.
# Limitations
There are some limitations of using Qt stylesheets in general, which cannot be solved by stylesheets. To get more fine-grained style control, you should subclass `QCommonStyle`:
```c++
class ApplicationStyle: public QCommonStyle
{
...
}
```
An extensive reference can be found [here](https://doc.qt.io/qt-5/style-reference.html). A reference of QStyle, and the default styles Qt provides can be found [here](https://doc.qt.io/qt-5/qstyle.html).
The limitations of stylesheets include:
- Non-border item underlying, such as seen in Breeze. The box model will not affect the placement of the underline, not even with style on the element itself, the `::title` subcontrol, or any other attempts.
- Scaling icons with the theme size.
- QToolButton cannot control the icon size without also affecting the arrow size.
- Close and dock float icon sizes scale poorly with font size.
2021-07-15 05:10:14 +00:00
# Debugging
Have an issue with the styles? Here's a few suggestions, prior to filing a bug report:
- Modified the application font? Make sure you do **before** setting the application stylesheet.
- Modified the application style? Make sure you do **before** you creating a `QApplication instance`.
# License
MIT, see [license](/LICENSE.md).
# Contributing
2021-07-14 06:14:04 +00:00
To configure the assets and the stylesheets, run `configure.py`. To compile the assets and stylesheets for Python, run `pyrcc5 breeze.qrc -o breeze_resources.py`.
In order to test your changes, first run the tests using the appropriate widget in `test.py` (see the options for `stylesheet`, `widget`, `font-size`, and `font-family`), and then run the tests with the complete UI in `example.py`. If the widget you fixed the style for does not exist in `example.py`, please add it.
Unless you explicitly state otherwise, any contribution intentionally submitted for inclusion in BreezeStyleSheets by you shall be licensed under the MIT license without any additional terms or conditions.
# Acknowledgements
2016-10-16 19:29:38 +00:00
BreezeStyleSheets is a fork of [QDarkStyleSheet](https://github.com/ColinDuquesnoy/QDarkStyleSheet).
# Contact
2016-10-16 19:29:38 +00:00
2016-10-17 02:14:51 +00:00
Email: ahuszagh@gmail.com
2017-05-22 17:24:49 +00:00
Twitter: KardOnIce