![](/img/trans.png)
[英]How can I write the logic for a KDE Plasma Widget written in QML?
[英]How can I compile this window decoration for KDE?
我正在嘗試為我的 Manjaro 引導(An Arch 發行版)編譯 window 裝飾,但出現此錯誤:
/home/ldoney/material-decoration-bt/src/CloseButton.cc: In constructor ‘Material::CloseButton::CloseButton(Material::Decoration*, QObject*)’:
/home/ldoney/material-decoration-bt/src/CloseButton.cc:34:55: error: ‘T* QWeakPointer<T>::data() const [with T = KDecoration2::DecoratedClient]’ is deprecated: Use toStrongRef() instead, and data() on the returned QSharedPointer [-Werror=deprecated-declarations]
34 | auto *decoratedClient = decoration->client().data();
| ^
In file included from /usr/include/qt/QtCore/qsharedpointer.h:48,
from /usr/include/qt/QtCore/qpointer.h:43,
from /usr/include/qt/QtCore/QPointer:1,
from /usr/include/KDecoration2/kdecoration2/decorationbutton.h:27,
from /usr/include/KDecoration2/KDecoration2/DecorationButton:1,
from /home/ldoney/material-decoration-bt/src/CloseButton.h:21,
from /home/ldoney/material-decoration-bt/src/CloseButton.cc:19:
/usr/include/qt/QtCore/qsharedpointer_impl.h:565:8: note: declared here
565 | T *data() const noexcept { return internalData(); }
| ^~~~
/home/ldoney/material-decoration-bt/src/CloseButton.cc: In member function ‘QColor Material::CloseButton::backgroundColor() const’:
/home/ldoney/material-decoration-bt/src/CloseButton.cc:87:53: error: ‘T* QWeakPointer<T>::data() const [with T = KDecoration2::DecoratedClient]’ is deprecated: Use toStrongRef() instead, and data() on the returned QSharedPointer [-Werror=deprecated-declarations]
87 | auto *decoratedClient = deco->client().data();
| ^
In file included from /usr/include/qt/QtCore/qsharedpointer.h:48,
from /usr/include/qt/QtCore/qpointer.h:43,
from /usr/include/qt/QtCore/QPointer:1,
from /usr/include/KDecoration2/kdecoration2/decorationbutton.h:27,
from /usr/include/KDecoration2/KDecoration2/DecorationButton:1,
from /home/ldoney/material-decoration-bt/src/CloseButton.h:21,
from /home/ldoney/material-decoration-bt/src/CloseButton.cc:19:
/usr/include/qt/QtCore/qsharedpointer_impl.h:565:8: note: declared here
565 | T *data() const noexcept { return internalData(); }
| ^~~~
/home/ldoney/material-decoration-bt/src/CloseButton.cc:95:53: error: ‘T* QWeakPointer<T>::data() const [with T = KDecoration2::DecoratedClient]’ is deprecated: Use toStrongRef() instead, and data() on the returned QSharedPointer [-Werror=deprecated-declarations]
95 | auto *decoratedClient = deco->client().data();
| ^
In file included from /usr/include/qt/QtCore/qsharedpointer.h:48,
from /usr/include/qt/QtCore/qpointer.h:43,
from /usr/include/qt/QtCore/QPointer:1,
from /usr/include/KDecoration2/kdecoration2/decorationbutton.h:27,
from /usr/include/KDecoration2/KDecoration2/DecorationButton:1,
from /home/ldoney/material-decoration-bt/src/CloseButton.h:21,
from /home/ldoney/material-decoration-bt/src/CloseButton.cc:19:
/usr/include/qt/QtCore/qsharedpointer_impl.h:565:8: note: declared here
565 | T *data() const noexcept { return internalData(); }
| ^~~~
/home/ldoney/material-decoration-bt/src/MinimizeButton.cc: In constructor ‘Material::MinimizeButton::MinimizeButton(Material::Decoration*, QObject*)’:
/home/ldoney/material-decoration-bt/src/MinimizeButton.cc:37:55: error: ‘T* QWeakPointer<T>::data() const [with T = KDecoration2::DecoratedClient]’ is deprecated: Use toStrongRef() instead, and data() on the returned QSharedPointer [-Werror=deprecated-declarations]
37 | auto *decoratedClient = decoration->client().data();
| ^
In file included from /usr/include/qt/QtCore/qsharedpointer.h:48,
from /usr/include/qt/QtCore/qpointer.h:43,
from /usr/include/qt/QtCore/QPointer:1,
from /usr/include/KDecoration2/kdecoration2/decorationbutton.h:27,
from /usr/include/KDecoration2/KDecoration2/DecorationButton:1,
from /home/ldoney/material-decoration-bt/src/MinimizeButton.h:21,
from /home/ldoney/material-decoration-bt/src/MinimizeButton.cc:19:
/usr/include/qt/QtCore/qsharedpointer_impl.h:565:8: note: declared here
565 | T *data() const noexcept { return internalData(); }
| ^~~~
/home/ldoney/material-decoration-bt/src/MaximizeButton.cc: In constructor ‘Material::MaximizeButton::MaximizeButton(Material::Decoration*, QObject*)’:
/home/ldoney/material-decoration-bt/src/MaximizeButton.cc:37:55: error: ‘T* QWeakPointer<T>::data() const [with T = KDecoration2::DecoratedClient]’ is deprecated: Use toStrongRef() instead, and data() on the returned QSharedPointer [-Werror=deprecated-declarations]
37 | auto *decoratedClient = decoration->client().data();
| ^
In file included from /usr/include/qt/QtCore/qsharedpointer.h:48,
from /usr/include/qt/QtCore/qpointer.h:43,
from /usr/include/qt/QtCore/QPointer:1,
from /usr/include/KDecoration2/kdecoration2/decorationbutton.h:27,
from /usr/include/KDecoration2/KDecoration2/DecorationButton:1,
from /home/ldoney/material-decoration-bt/src/MaximizeButton.h:21,
from /home/ldoney/material-decoration-bt/src/MaximizeButton.cc:19:
/usr/include/qt/QtCore/qsharedpointer_impl.h:565:8: note: declared here
565 | T *data() const noexcept { return internalData(); }
| ^~~~
/home/ldoney/material-decoration-bt/src/Decoration.cc: In member function ‘virtual void Material::Decoration::paint(QPainter*, const QRect&)’:
/home/ldoney/material-decoration-bt/src/Decoration.cc:109:43: error: ‘T* QWeakPointer<T>::data() const [with T = KDecoration2::DecoratedClient]’ is deprecated: Use toStrongRef() instead, and data() on the returned QSharedPointer [-Werror=deprecated-declarations]
109 | auto *decoratedClient = client().data();
| ^
In file included from /usr/include/qt/QtCore/qsharedpointer.h:48,
from /usr/include/qt/QtCore/qpointer.h:43,
from /usr/include/qt/QtCore/QPointer:1,
from /usr/include/KDecoration2/kdecoration2/decoration.h:28,
from /usr/include/KDecoration2/KDecoration2/Decoration:1,
from /home/ldoney/material-decoration-bt/src/Decoration.h:21,
from /home/ldoney/material-decoration-bt/src/Decoration.cc:19:
/usr/include/qt/QtCore/qsharedpointer_impl.h:565:8: note: declared here
565 | T *data() const noexcept { return internalData(); }
| ^~~~
/home/ldoney/material-decoration-bt/src/Decoration.cc: In member function ‘virtual void Material::Decoration::init()’:
/home/ldoney/material-decoration-bt/src/Decoration.cc:122:43: error: ‘T* QWeakPointer<T>::data() const [with T = KDecoration2::DecoratedClient]’ is deprecated: Use toStrongRef() instead, and data() on the returned QSharedPointer [-Werror=deprecated-declarations]
122 | auto *decoratedClient = client().data();
| ^
In file included from /usr/include/qt/QtCore/qsharedpointer.h:48,
from /usr/include/qt/QtCore/qpointer.h:43,
from /usr/include/qt/QtCore/QPointer:1,
from /usr/include/KDecoration2/kdecoration2/decoration.h:28,
from /usr/include/KDecoration2/KDecoration2/Decoration:1,
from /home/ldoney/material-decoration-bt/src/Decoration.h:21,
from /home/ldoney/material-decoration-bt/src/Decoration.cc:19:
/usr/include/qt/QtCore/qsharedpointer_impl.h:565:8: note: declared here
565 | T *data() const noexcept { return internalData(); }
| ^~~~
/home/ldoney/material-decoration-bt/src/Decoration.cc: In member function ‘void Material::Decoration::updateTitleBar()’:
/home/ldoney/material-decoration-bt/src/Decoration.cc:202:43: error: ‘T* QWeakPointer<T>::data() const [with T = KDecoration2::DecoratedClient]’ is deprecated: Use toStrongRef() instead, and data() on the returned QSharedPointer [-Werror=deprecated-declarations]
202 | auto *decoratedClient = client().data();
| ^
In file included from /usr/include/qt/QtCore/qsharedpointer.h:48,
from /usr/include/qt/QtCore/qpointer.h:43,
from /usr/include/qt/QtCore/QPointer:1,
from /usr/include/KDecoration2/kdecoration2/decoration.h:28,
from /usr/include/KDecoration2/KDecoration2/Decoration:1,
from /home/ldoney/material-decoration-bt/src/Decoration.h:21,
from /home/ldoney/material-decoration-bt/src/Decoration.cc:19:
/usr/include/qt/QtCore/qsharedpointer_impl.h:565:8: note: declared here
565 | T *data() const noexcept { return internalData(); }
| ^~~~
/home/ldoney/material-decoration-bt/src/Decoration.cc: In member function ‘void Material::Decoration::paintFrameBackground(QPainter*, const QRect&) const’:
/home/ldoney/material-decoration-bt/src/Decoration.cc:297:49: error: ‘T* QWeakPointer<T>::data() const [with T = KDecoration2::DecoratedClient]’ is deprecated: Use toStrongRef() instead, and data() on the returned QSharedPointer [-Werror=deprecated-declarations]
297 | const auto *decoratedClient = client().data();
| ^
In file included from /usr/include/qt/QtCore/qsharedpointer.h:48,
from /usr/include/qt/QtCore/qpointer.h:43,
from /usr/include/qt/QtCore/QPointer:1,
from /usr/include/KDecoration2/kdecoration2/decoration.h:28,
from /usr/include/KDecoration2/KDecoration2/Decoration:1,
from /home/ldoney/material-decoration-bt/src/Decoration.h:21,
from /home/ldoney/material-decoration-bt/src/Decoration.cc:19:
/usr/include/qt/QtCore/qsharedpointer_impl.h:565:8: note: declared here
565 | T *data() const noexcept { return internalData(); }
| ^~~~
/home/ldoney/material-decoration-bt/src/Decoration.cc: In member function ‘QColor Material::Decoration::titleBarBackgroundColor() const’:
/home/ldoney/material-decoration-bt/src/Decoration.cc:317:49: error: ‘T* QWeakPointer<T>::data() const [with T = KDecoration2::DecoratedClient]’ is deprecated: Use toStrongRef() instead, and data() on the returned QSharedPointer [-Werror=deprecated-declarations]
317 | const auto *decoratedClient = client().data();
| ^
In file included from /usr/include/qt/QtCore/qsharedpointer.h:48,
from /usr/include/qt/QtCore/qpointer.h:43,
from /usr/include/qt/QtCore/QPointer:1,
from /usr/include/KDecoration2/kdecoration2/decoration.h:28,
from /usr/include/KDecoration2/KDecoration2/Decoration:1,
from /home/ldoney/material-decoration-bt/src/Decoration.h:21,
from /home/ldoney/material-decoration-bt/src/Decoration.cc:19:
/usr/include/qt/QtCore/qsharedpointer_impl.h:565:8: note: declared here
565 | T *data() const noexcept { return internalData(); }
| ^~~~
/home/ldoney/material-decoration-bt/src/Decoration.cc: In member function ‘QColor Material::Decoration::titleBarForegroundColor() const’:
/home/ldoney/material-decoration-bt/src/Decoration.cc:331:49: error: ‘T* QWeakPointer<T>::data() const [with T = KDecoration2::DecoratedClient]’ is deprecated: Use toStrongRef() instead, and data() on the returned QSharedPointer [-Werror=deprecated-declarations]
331 | const auto *decoratedClient = client().data();
| ^
In file included from /usr/include/qt/QtCore/qsharedpointer.h:48,
from /usr/include/qt/QtCore/qpointer.h:43,
from /usr/include/qt/QtCore/QPointer:1,
from /usr/include/KDecoration2/kdecoration2/decoration.h:28,
from /usr/include/KDecoration2/KDecoration2/Decoration:1,
from /home/ldoney/material-decoration-bt/src/Decoration.h:21,
from /home/ldoney/material-decoration-bt/src/Decoration.cc:19:
/usr/include/qt/QtCore/qsharedpointer_impl.h:565:8: note: declared here
565 | T *data() const noexcept { return internalData(); }
| ^~~~
/home/ldoney/material-decoration-bt/src/Decoration.cc: In member function ‘void Material::Decoration::paintTitleBarBackground(QPainter*, const QRect&) const’:
/home/ldoney/material-decoration-bt/src/Decoration.cc:342:49: error: ‘T* QWeakPointer<T>::data() const [with T = KDecoration2::DecoratedClient]’ is deprecated: Use toStrongRef() instead, and data() on the returned QSharedPointer [-Werror=deprecated-declarations]
342 | const auto *decoratedClient = client().data();
| ^
In file included from /usr/include/qt/QtCore/qsharedpointer.h:48,
from /usr/include/qt/QtCore/qpointer.h:43,
from /usr/include/qt/QtCore/QPointer:1,
from /usr/include/KDecoration2/kdecoration2/decoration.h:28,
from /usr/include/KDecoration2/KDecoration2/Decoration:1,
from /home/ldoney/material-decoration-bt/src/Decoration.h:21,
from /home/ldoney/material-decoration-bt/src/Decoration.cc:19:
/usr/include/qt/QtCore/qsharedpointer_impl.h:565:8: note: declared here
565 | T *data() const noexcept { return internalData(); }
| ^~~~
/home/ldoney/material-decoration-bt/src/Decoration.cc: In member function ‘void Material::Decoration::paintCaption(QPainter*, const QRect&) const’:
/home/ldoney/material-decoration-bt/src/Decoration.cc:355:49: error: ‘T* QWeakPointer<T>::data() const [with T = KDecoration2::DecoratedClient]’ is deprecated: Use toStrongRef() instead, and data() on the returned QSharedPointer [-Werror=deprecated-declarations]
355 | const auto *decoratedClient = client().data();
| ^
In file included from /usr/include/qt/QtCore/qsharedpointer.h:48,
from /usr/include/qt/QtCore/qpointer.h:43,
from /usr/include/qt/QtCore/QPointer:1,
from /usr/include/KDecoration2/kdecoration2/decoration.h:28,
from /usr/include/KDecoration2/KDecoration2/Decoration:1,
from /home/ldoney/material-decoration-bt/src/Decoration.h:21,
from /home/ldoney/material-decoration-bt/src/Decoration.cc:19:
/usr/include/qt/QtCore/qsharedpointer_impl.h:565:8: note: declared here
565 | T *data() const noexcept { return internalData(); }
| ^~~~
cc1plus: all warnings being treated as errors
cc1plus: all warnings being treated as errors
make[2]: *** [src/CMakeFiles/materialdecoration.dir/build.make:109: src/CMakeFiles/materialdecoration.dir/CloseButton.cc.o] Error 1
make[2]: *** Waiting for unfinished jobs....
make[2]: *** [src/CMakeFiles/materialdecoration.dir/build.make:148: src/CMakeFiles/materialdecoration.dir/MinimizeButton.cc.o] Error 1
cc1plus: all warnings being treated as errors
make[2]: *** [src/CMakeFiles/materialdecoration.dir/build.make:135: src/CMakeFiles/materialdecoration.dir/MaximizeButton.cc.o] Error 1
cc1plus: all warnings being treated as errors
make[2]: *** [src/CMakeFiles/materialdecoration.dir/build.make:122: src/CMakeFiles/materialdecoration.dir/Decoration.cc.o] Error 1
make[1]: *** [CMakeFiles/Makefile2:175: src/CMakeFiles/materialdecoration.dir/all] Error 2
make: *** [Makefile:161: all] Error 2
我相信這個問題與我擁有的 qt 版本有關,並且我安裝了這些軟件包: cmake extra-cmake-modules kdecoration qt5-declarative qt5-x11extras
我錯過了 package 嗎? 是否存在過時的 package 或 window 裝飾本身已過時? 和往常一樣,如果我遺漏了您需要幫助我的任何重要信息,請告訴我。 謝謝!
客戶端方法返回一個QWeakPointer
,它有一個data()
方法來訪問指針,但現在已棄用,解決方案是更改:
foo->client().data()
至
foo->client().toStrongRef().data()
我創建了一個應用該更改的項目的分支,以便您可以使用它:
git clone https://github.com/eyllanesc/material-decoration-bt.git
cd material-decoration-bt; bash setup.sh
或者將以下補丁應用於原始存儲庫:
From 00b3b491c754152ff96b9656fff998bacd7ec670 Mon Sep 17 00:00:00 2001
From: eyllanesc <e.yllanescucho@gmail.com>
Date: Wed, 3 Jun 2020 11:28:44 -0500
Subject: [PATCH] fix deprecated
---
src/CloseButton.cc | 6 +++---
src/Decoration.cc | 16 ++++++++--------
src/MaximizeButton.cc | 2 +-
src/MinimizeButton.cc | 2 +-
4 files changed, 13 insertions(+), 13 deletions(-)
diff --git a/src/CloseButton.cc b/src/CloseButton.cc
index f61d7f5..99148ed 100644
--- a/src/CloseButton.cc
+++ b/src/CloseButton.cc
@@ -31,7 +31,7 @@ namespace Material
CloseButton::CloseButton(Decoration *decoration, QObject *parent)
: DecorationButton(KDecoration2::DecorationButtonType::Close, decoration, parent)
{
- auto *decoratedClient = decoration->client().data();
+ auto *decoratedClient = decoration->client().toStrongRef().data();
connect(decoratedClient, &KDecoration2::DecoratedClient::closeableChanged,
this, &CloseButton::setVisible);
@@ -84,7 +84,7 @@ QColor CloseButton::backgroundColor() const
}
if (isPressed()) {
- auto *decoratedClient = deco->client().data();
+ auto *decoratedClient = deco->client().toStrongRef().data();
return decoratedClient->color(
KDecoration2::ColorGroup::Warning,
KDecoration2::ColorRole::Foreground
@@ -92,7 +92,7 @@ QColor CloseButton::backgroundColor() const
}
if (isHovered()) {
- auto *decoratedClient = deco->client().data();
+ auto *decoratedClient = deco->client().toStrongRef().data();
return decoratedClient->color(
KDecoration2::ColorGroup::Warning,
KDecoration2::ColorRole::Foreground
diff --git a/src/Decoration.cc b/src/Decoration.cc
index f388216..997f69f 100644
--- a/src/Decoration.cc
+++ b/src/Decoration.cc
@@ -106,7 +106,7 @@ Decoration::~Decoration()
void Decoration::paint(QPainter *painter, const QRect &repaintRegion)
{
- auto *decoratedClient = client().data();
+ auto *decoratedClient = client().toStrongRef().data();
if (!decoratedClient->isShaded()) {
paintFrameBackground(painter, repaintRegion);
@@ -119,7 +119,7 @@ void Decoration::paint(QPainter *painter, const QRect &repaintRegion)
void Decoration::init()
{
- auto *decoratedClient = client().data();
+ auto *decoratedClient = client().toStrongRef().data();
connect(decoratedClient, &KDecoration2::DecoratedClient::widthChanged,
this, &Decoration::updateTitleBar);
@@ -199,7 +199,7 @@ void Decoration::updateResizeBorders()
void Decoration::updateTitleBar()
{
- auto *decoratedClient = client().data();
+ auto *decoratedClient = client().toStrongRef().data();
setTitleBar(QRect(0, 0, decoratedClient->width(), titleBarHeight()));
}
@@ -294,7 +294,7 @@ void Decoration::paintFrameBackground(QPainter *painter, const QRect &repaintReg
{
Q_UNUSED(repaintRegion)
- const auto *decoratedClient = client().data();
+ const auto *decoratedClient = client().toStrongRef().data();
painter->save();
@@ -314,7 +314,7 @@ void Decoration::paintFrameBackground(QPainter *painter, const QRect &repaintReg
QColor Decoration::titleBarBackgroundColor() const
{
- const auto *decoratedClient = client().data();
+ const auto *decoratedClient = client().toStrongRef().data();
const auto group = decoratedClient->isActive()
? KDecoration2::ColorGroup::Active
: KDecoration2::ColorGroup::Inactive;
@@ -328,7 +328,7 @@ QColor Decoration::titleBarBackgroundColor() const
QColor Decoration::titleBarForegroundColor() const
{
- const auto *decoratedClient = client().data();
+ const auto *decoratedClient = client().toStrongRef().data();
const auto group = decoratedClient->isActive()
? KDecoration2::ColorGroup::Active
: KDecoration2::ColorGroup::Inactive;
@@ -339,7 +339,7 @@ void Decoration::paintTitleBarBackground(QPainter *painter, const QRect &repaint
{
Q_UNUSED(repaintRegion)
- const auto *decoratedClient = client().data();
+ const auto *decoratedClient = client().toStrongRef().data();
painter->save();
painter->setPen(Qt::NoPen);
@@ -352,7 +352,7 @@ void Decoration::paintCaption(QPainter *painter, const QRect &repaintRegion) con
{
Q_UNUSED(repaintRegion)
- const auto *decoratedClient = client().data();
+ const auto *decoratedClient = client().toStrongRef().data();
const int textWidth = settings()->fontMetrics().boundingRect(decoratedClient->caption()).width();
const QRect textRect((size().width() - textWidth) / 2, 0, textWidth, titleBarHeight());
diff --git a/src/MaximizeButton.cc b/src/MaximizeButton.cc
index ea608ce..495071c 100644
--- a/src/MaximizeButton.cc
+++ b/src/MaximizeButton.cc
@@ -34,7 +34,7 @@ namespace Material
MaximizeButton::MaximizeButton(Decoration *decoration, QObject *parent)
: DecorationButton(KDecoration2::DecorationButtonType::Maximize, decoration, parent)
{
- auto *decoratedClient = decoration->client().data();
+ auto *decoratedClient = decoration->client().toStrongRef().data();
connect(decoratedClient, &KDecoration2::DecoratedClient::maximizeableChanged,
this, &MaximizeButton::setVisible);
diff --git a/src/MinimizeButton.cc b/src/MinimizeButton.cc
index 03c1dd4..3760669 100644
--- a/src/MinimizeButton.cc
+++ b/src/MinimizeButton.cc
@@ -34,7 +34,7 @@ namespace Material
MinimizeButton::MinimizeButton(Decoration *decoration, QObject *parent)
: DecorationButton(KDecoration2::DecorationButtonType::Minimize, decoration, parent)
{
- auto *decoratedClient = decoration->client().data();
+ auto *decoratedClient = decoration->client().toStrongRef().data();
connect(decoratedClient, &KDecoration2::DecoratedClient::minimizeableChanged,
this, &MinimizeButton::setVisible);
--
2.27.0
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.