forked from github_mirror/framelesshelper
widget: add support for changing title font
Not needed for Qt Quick, because you can easily to change it: ```qml StandardTitleBar { titleLabel { font { family: "Arial" pointSize: 10 italic: true } } } ``` Signed-off-by: Yuhang Zhao <2546789017@qq.com>
This commit is contained in:
parent
f052a087de
commit
5018d9ea82
|
@ -25,7 +25,7 @@
|
||||||
cmake_minimum_required(VERSION 3.20)
|
cmake_minimum_required(VERSION 3.20)
|
||||||
|
|
||||||
project(FramelessHelper
|
project(FramelessHelper
|
||||||
VERSION 2.2.1.0
|
VERSION 2.3.0.0
|
||||||
DESCRIPTION "Cross-platform window customization framework for Qt Widgets and Qt Quick."
|
DESCRIPTION "Cross-platform window customization framework for Qt Widgets and Qt Quick."
|
||||||
HOMEPAGE_URL "https://github.com/wangwenx190/framelesshelper/"
|
HOMEPAGE_URL "https://github.com/wangwenx190/framelesshelper/"
|
||||||
LANGUAGES CXX
|
LANGUAGES CXX
|
||||||
|
|
|
@ -41,8 +41,13 @@
|
||||||
# endif // ((QT_VERSION >= QT_VERSION_CHECK(5, 14, 0)) && !REGISTRYKEY_FORCE_QSETTINGS)
|
# endif // ((QT_VERSION >= QT_VERSION_CHECK(5, 14, 0)) && !REGISTRYKEY_FORCE_QSETTINGS)
|
||||||
#endif // REGISTRYKEY_IMPL
|
#endif // REGISTRYKEY_IMPL
|
||||||
|
|
||||||
|
#ifndef REGISTRYKEY_QWINREGISTRYKEY
|
||||||
# define REGISTRYKEY_QWINREGISTRYKEY ((REGISTRYKEY_IMPL) == 1)
|
# define REGISTRYKEY_QWINREGISTRYKEY ((REGISTRYKEY_IMPL) == 1)
|
||||||
|
#endif // REGISTRYKEY_QWINREGISTRYKEY
|
||||||
|
|
||||||
|
#ifndef REGISTRYKEY_QSETTINGS
|
||||||
# define REGISTRYKEY_QSETTINGS ((REGISTRYKEY_IMPL) == 2)
|
# define REGISTRYKEY_QSETTINGS ((REGISTRYKEY_IMPL) == 2)
|
||||||
|
#endif // REGISTRYKEY_QSETTINGS
|
||||||
|
|
||||||
QT_BEGIN_NAMESPACE
|
QT_BEGIN_NAMESPACE
|
||||||
class QWinRegistryKey;
|
class QWinRegistryKey;
|
||||||
|
|
|
@ -28,6 +28,7 @@
|
||||||
#include "standardtitlebar.h"
|
#include "standardtitlebar.h"
|
||||||
#include <QtCore/qobject.h>
|
#include <QtCore/qobject.h>
|
||||||
#include <QtCore/qpointer.h>
|
#include <QtCore/qpointer.h>
|
||||||
|
#include <optional>
|
||||||
|
|
||||||
QT_BEGIN_NAMESPACE
|
QT_BEGIN_NAMESPACE
|
||||||
class QPaintEvent;
|
class QPaintEvent;
|
||||||
|
@ -73,6 +74,9 @@ public:
|
||||||
Q_NODISCARD bool windowIconVisible() const;
|
Q_NODISCARD bool windowIconVisible() const;
|
||||||
void setWindowIconVisible(const bool value);
|
void setWindowIconVisible(const bool value);
|
||||||
|
|
||||||
|
Q_NODISCARD QFont titleFont() const;
|
||||||
|
void setTitleFont(const QFont &value);
|
||||||
|
|
||||||
public Q_SLOTS:
|
public Q_SLOTS:
|
||||||
void updateMaximizeButton();
|
void updateMaximizeButton();
|
||||||
void updateTitleBarColor();
|
void updateTitleBarColor();
|
||||||
|
@ -98,6 +102,7 @@ private:
|
||||||
bool m_titleLabelVisible = true;
|
bool m_titleLabelVisible = true;
|
||||||
QSize m_windowIconSize = {};
|
QSize m_windowIconSize = {};
|
||||||
bool m_windowIconVisible = false;
|
bool m_windowIconVisible = false;
|
||||||
|
std::optional<QFont> m_titleFont = std::nullopt;
|
||||||
};
|
};
|
||||||
|
|
||||||
FRAMELESSHELPER_END_NAMESPACE
|
FRAMELESSHELPER_END_NAMESPACE
|
||||||
|
|
|
@ -51,6 +51,7 @@ class FRAMELESSHELPER_WIDGETS_API StandardTitleBar : public QWidget
|
||||||
Q_PROPERTY(bool titleLabelVisible READ titleLabelVisible WRITE setTitleLabelVisible NOTIFY titleLabelVisibleChanged FINAL)
|
Q_PROPERTY(bool titleLabelVisible READ titleLabelVisible WRITE setTitleLabelVisible NOTIFY titleLabelVisibleChanged FINAL)
|
||||||
Q_PROPERTY(QSize windowIconSize READ windowIconSize WRITE setWindowIconSize NOTIFY windowIconSizeChanged FINAL)
|
Q_PROPERTY(QSize windowIconSize READ windowIconSize WRITE setWindowIconSize NOTIFY windowIconSizeChanged FINAL)
|
||||||
Q_PROPERTY(bool windowIconVisible READ windowIconVisible WRITE setWindowIconVisible NOTIFY windowIconVisibleChanged FINAL)
|
Q_PROPERTY(bool windowIconVisible READ windowIconVisible WRITE setWindowIconVisible NOTIFY windowIconVisibleChanged FINAL)
|
||||||
|
Q_PROPERTY(QFont titleFont READ titleFont WRITE setTitleFont NOTIFY titleFontChanged FINAL)
|
||||||
|
|
||||||
public:
|
public:
|
||||||
explicit StandardTitleBar(QWidget *parent = nullptr);
|
explicit StandardTitleBar(QWidget *parent = nullptr);
|
||||||
|
@ -80,6 +81,9 @@ public:
|
||||||
Q_NODISCARD bool windowIconVisible() const;
|
Q_NODISCARD bool windowIconVisible() const;
|
||||||
void setWindowIconVisible(const bool value);
|
void setWindowIconVisible(const bool value);
|
||||||
|
|
||||||
|
Q_NODISCARD QFont titleFont() const;
|
||||||
|
void setTitleFont(const QFont &value);
|
||||||
|
|
||||||
protected:
|
protected:
|
||||||
void paintEvent(QPaintEvent *event) override;
|
void paintEvent(QPaintEvent *event) override;
|
||||||
|
|
||||||
|
@ -90,6 +94,7 @@ Q_SIGNALS:
|
||||||
void titleLabelVisibleChanged();
|
void titleLabelVisibleChanged();
|
||||||
void windowIconSizeChanged();
|
void windowIconSizeChanged();
|
||||||
void windowIconVisibleChanged();
|
void windowIconVisibleChanged();
|
||||||
|
void titleFontChanged();
|
||||||
|
|
||||||
private:
|
private:
|
||||||
QScopedPointer<StandardTitleBarPrivate> d_ptr;
|
QScopedPointer<StandardTitleBarPrivate> d_ptr;
|
||||||
|
|
|
@ -34,10 +34,10 @@
|
||||||
#pragma once
|
#pragma once
|
||||||
|
|
||||||
[[maybe_unused]] static constexpr const int FRAMELESSHELPER_VERSION_MAJOR = 2;
|
[[maybe_unused]] static constexpr const int FRAMELESSHELPER_VERSION_MAJOR = 2;
|
||||||
[[maybe_unused]] static constexpr const int FRAMELESSHELPER_VERSION_MINOR = 2;
|
[[maybe_unused]] static constexpr const int FRAMELESSHELPER_VERSION_MINOR = 3;
|
||||||
[[maybe_unused]] static constexpr const int FRAMELESSHELPER_VERSION_PATCH = 1;
|
[[maybe_unused]] static constexpr const int FRAMELESSHELPER_VERSION_PATCH = 0;
|
||||||
[[maybe_unused]] static constexpr const int FRAMELESSHELPER_VERSION_TWEAK = 0;
|
[[maybe_unused]] static constexpr const int FRAMELESSHELPER_VERSION_TWEAK = 0;
|
||||||
[[maybe_unused]] static constexpr const char FRAMELESSHELPER_VERSION_STR[] = "2.2.1.0\0";
|
[[maybe_unused]] static constexpr const char FRAMELESSHELPER_VERSION_STR[] = "2.3.0.0\0";
|
||||||
[[maybe_unused]] static constexpr const char FRAMELESSHELPER_COMMIT_STR[] = "UNKNOWN\0";
|
[[maybe_unused]] static constexpr const char FRAMELESSHELPER_COMMIT_STR[] = "UNKNOWN\0";
|
||||||
[[maybe_unused]] static constexpr const char FRAMELESSHELPER_COMPILE_DATETIME_STR[] = "UNKNOWN\0";
|
[[maybe_unused]] static constexpr const char FRAMELESSHELPER_COMPILE_DATETIME_STR[] = "UNKNOWN\0";
|
||||||
|
|
||||||
|
|
|
@ -154,13 +154,12 @@ void StandardTitleBarPrivate::paintTitleBar(QPaintEvent *event)
|
||||||
if (m_titleLabelVisible) {
|
if (m_titleLabelVisible) {
|
||||||
const QString text = m_window->windowTitle();
|
const QString text = m_window->windowTitle();
|
||||||
if (!text.isEmpty()) {
|
if (!text.isEmpty()) {
|
||||||
const QFont font = [q]() -> QFont {
|
painter.setPen(foregroundColor);
|
||||||
|
painter.setFont(m_titleFont.value_or([q]() -> QFont {
|
||||||
QFont f = q->font();
|
QFont f = q->font();
|
||||||
f.setPointSize(kDefaultTitleBarFontPointSize);
|
f.setPointSize(kDefaultTitleBarFontPointSize);
|
||||||
return f;
|
return f;
|
||||||
}();
|
}()));
|
||||||
painter.setPen(foregroundColor);
|
|
||||||
painter.setFont(font);
|
|
||||||
const QRect rect = [this, q, titleLabelLeftOffset]() -> QRect {
|
const QRect rect = [this, q, titleLabelLeftOffset]() -> QRect {
|
||||||
const int w = q->width();
|
const int w = q->width();
|
||||||
int leftMargin = 0;
|
int leftMargin = 0;
|
||||||
|
@ -235,6 +234,22 @@ void StandardTitleBarPrivate::setWindowIconVisible(const bool value)
|
||||||
Q_EMIT q->windowIconVisibleChanged();
|
Q_EMIT q->windowIconVisibleChanged();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
QFont StandardTitleBarPrivate::titleFont() const
|
||||||
|
{
|
||||||
|
return m_titleFont.value_or(QFont());
|
||||||
|
}
|
||||||
|
|
||||||
|
void StandardTitleBarPrivate::setTitleFont(const QFont &value)
|
||||||
|
{
|
||||||
|
if (titleFont() == value) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
m_titleFont = value;
|
||||||
|
Q_Q(StandardTitleBar);
|
||||||
|
q->update();
|
||||||
|
Q_EMIT q->titleFontChanged();
|
||||||
|
}
|
||||||
|
|
||||||
void StandardTitleBarPrivate::updateMaximizeButton()
|
void StandardTitleBarPrivate::updateMaximizeButton()
|
||||||
{
|
{
|
||||||
const bool max = m_window->isMaximized();
|
const bool max = m_window->isMaximized();
|
||||||
|
@ -478,6 +493,18 @@ void StandardTitleBar::setWindowIconVisible(const bool value)
|
||||||
d->setWindowIconVisible(value);
|
d->setWindowIconVisible(value);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
QFont StandardTitleBar::titleFont() const
|
||||||
|
{
|
||||||
|
Q_D(const StandardTitleBar);
|
||||||
|
return d->titleFont();
|
||||||
|
}
|
||||||
|
|
||||||
|
void StandardTitleBar::setTitleFont(const QFont &value)
|
||||||
|
{
|
||||||
|
Q_D(StandardTitleBar);
|
||||||
|
d->setTitleFont(value);
|
||||||
|
}
|
||||||
|
|
||||||
void StandardTitleBar::paintEvent(QPaintEvent *event)
|
void StandardTitleBar::paintEvent(QPaintEvent *event)
|
||||||
{
|
{
|
||||||
Q_D(StandardTitleBar);
|
Q_D(StandardTitleBar);
|
||||||
|
|
Loading…
Reference in New Issue