小编dal*_*t97的帖子

如何使用QAndroidJniObject在Qt C++中使用原生的android webview

我想在我的qml应用程序中使用Android WebView.提供的默认WebView对象使用本机呈现,但缺少多个功能(例如,拦截网络请求并阻止它们的能力).我知道Qt允许您使用QAndroidJniObject调用本机Java API.是否可以使用它来创建本机Android WebView周围的Qt包装器?如果是,我该如何实现?

c++ java qt android webview

13
推荐指数
1
解决办法
736
查看次数

如何在 PySide2 中将 QByteArray 转换为 python 字符串

我有一个PySide2.QtCore.QByteArray对象叫做roleName我编码了一个 python 字符串:

propName = metaProp.name() // this is call of [const char *QMetaProperty::name() ](https://doc.qt.io/qt-5/qmetaproperty.html#name)
// encode the object
roleName = QByteArray(propName.encode())
print(roleName) // this gives b'myname'
// now I would like to get just "myname" without the "b" 
roleString = str(roleName)
print(roleString) // this gives the same output as above
Run Code Online (Sandbox Code Playgroud)

如何取回解码后的字符串?

python string python-3.x qbytearray pyside2

9
推荐指数
1
解决办法
4202
查看次数

Qt Creator未在Android 8.0(LG G6)上显示日志消息

所以我正在为Android编写一个应用程序,然后我尝试通过usb连接我的手机(Android 8.0)在调试模式下运行,应用程序在设备上启动正常并且工作正常,但在"应用程序输出"选项卡中没有日志消息.当我在桌面上运行应用程序(Ubuntu 18.04)时,日志消息就在那里.然后我试着在我的手机上运行Release上的应用程序,更令人沮丧的是,日志消息仍然不存在,我的应用程序表现得很奇怪,就是它无法发出网络请求(不是全部而是只有少数几个)而且它没有不从互联网加载数据(一切都在调试模式下运行良好).

这是我的"套件"配置:

我的

linux debugging qt android qt-creator

7
推荐指数
1
解决办法
261
查看次数

使用 QPainter 绘制带有渐变边缘的线条和曲线

QPainter 很容易使用,画一条线只需这样做:

QPainter painter(&image);
QPen pen;
pen.setWidth(5);
pen.setColor("black");
painter.setPen(pen);
painter.drawLine(QPointF(0,0), QPointF(200,250));
Run Code Online (Sandbox Code Playgroud)

现在这很好用,但我想创建一个“特殊”的笔,产生带有“平滑”边缘的线条。例如,假设我要绘制的线条的粗细为 10 像素,那么我希望线条的中间(中间我指的是粗细而不是长度)完全不透明,并且在线条的边缘应该变得半透明。我相信这可以得到,例如将下面的图片作为我的点,然后“拖动”并绘制线条,这样我就会获得我想要的效果。我知道 Qt 为您提供了QBrush渐变,但我不知道如何做到这一点。

图片

c++ graphics qt qpainter

7
推荐指数
1
解决办法
948
查看次数

qml中的嵌套列表:模型中的数据模型

我试图在QML接口中实现嵌套注释系统.我有一个C++模型(从QAbstractListModel继承),其中模型中的每个项都返回两个值:一个是QString,另一个是带有roleName"dataMap"的QVariantMap.这适用于QML ListView.现在每个QVariantMap都包含一个"data"项,它还包含一个QVariantList"children".现在,这基本上列出了具有相同结构的其他QVariantMaps.我实现这个的想法是在QML ListView中使用递归委托.以下是我的代码的最简单版本.

ListView{
    id: commentsList
    anchors.fill: parent
    model: commentsModel
    delegate: commentsDelegate
}
Component{
    id: commentsDelegate
    ColumnLayout{
        Rectangle{
            width: 600
            height: 200
            Text {
                id: bodyText
                text: dataMap.body
                anchors.centerIn: parent
                Component.onCompleted: console.debug(text)
            }
        }
        ListView{
            id: childList 

            property var childModel: dataMap.replies.data.children // QVariantList exposed to QML 

            x: 15
            interactive: false
            model: childModel
            anchors.fill: parent
            delegate: commentsDelegate
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

我模型的结构如下:

class ListModel : public QAbstractListModel
{
    Q_OBJECT
public:
   ListModel(){}
   explicit ListModel(QObject* parent =0);
   ~ListModel();


   QHash<int, QByteArray> roleNames() const;
   QVariant data(const …
Run Code Online (Sandbox Code Playgroud)

c++ qt listview models qml

5
推荐指数
1
解决办法
3218
查看次数

如何在WebView(QtQuick 2)中管理cookie和更改用户代理?

我正在使用Qt 5.7.在我的项目中,我使用的是Qml WebView(导入QtWebView 5.7).我想知道如何管理(添加,删除和修改)cookie以及如何更改WebView组件的用户代理.我查看了官方文档但找不到方法.

cookies qt user-agent webview qml

5
推荐指数
0
解决办法
454
查看次数

无法使用Reddit API使用Application Only OAuth检索访问令牌

所以我在以下链接https://github.com/reddit-archive/reddit/wiki/OAuth2上阅读了文档.我正在尝试为我的应用程序检索访问令牌,该令牌只需要Application Only OAuth,因为它不需要用户插入其凭据.我已按照上述页面上的说明操作,但我无法检索访问令牌,而且我总是得到:

"{\"message\": \"Unauthorized\", \"error\": 401}"
Run Code Online (Sandbox Code Playgroud)

这是我的代码:

#include "reddit.h"

#include <QtNetwork>
#include <QUuid>

const QString GRANT_URL  = "https://oauth.reddit.com/grants/installed_client";
const QString ACCESS_TOKEN_URL = "https://www.reddit.com/api/v1/access_token";
const QByteArray CLIENT_IDENTIFIER = "MYID";

Reddit::Reddit(QObject *parent) : QObject(parent)
{
    mDeviceID = "DO_NOT_TRACK_THIS_DEVICE";
    mAuthHeader = "Basic " + CLIENT_IDENTIFIER.toBase64();
}

void Reddit::getAccessToken()
{
    auto netManager = new QNetworkAccessManager(this);

    QUrl requestUrl = buildAccessTokenUrl();
    QNetworkRequest netRequest(requestUrl);
    netRequest.setHeader(QNetworkRequest::ContentTypeHeader, "application/x-www-form-urlencoded");
    netRequest.setRawHeader("Authorization", mAuthHeader);

    auto reply = netManager->post(netRequest, requestUrl.query(QUrl::FullyEncoded).toUtf8());
    connect(reply, &QNetworkReply::finished, this, &Reddit::accessTokenRequestFinished);
}

void Reddit::accessTokenRequestFinished()
{
    auto reply = …
Run Code Online (Sandbox Code Playgroud)

c++ rest qt reddit oauth-2.0

5
推荐指数
1
解决办法
339
查看次数

在浏览器环境中拦截HTML5 Web通知

我想拦截HTML5 Web通知。我已经阅读了以下答案,其中用户建议可以window.Notification用您自己的充当代理的对象覆盖该对象。我试图这样做,但是无法使其正常工作。以下是页面加载后我要注入的JavaScript代码:

function setNotificationCallback(callback) {

    const OldNotify = window.Notification;
    OldNotify.requestPermission();

    const newNotify = (title, opt) => {
        callback(title, opt);
        return new OldNotify(title, opt);
    };
    newNotify.requestPermission = OldNotify.requestPermission.bind(OldNotify);
    Object.defineProperty(newNotify, 'permission', {
        get: () => {
            return OldNotify.permission;
        }
    });

    window.Notification = newNotify;
}
function notifyCallback(title, opt) {
    console.log("title", title); // this never gets called
}

window.Notification.requestPermission(function (permission) {
    if (permission === "granted") {
        setNotificationCallback(notifyCallback);
    }
})
Run Code Online (Sandbox Code Playgroud)

html javascript browser web web-notifications

5
推荐指数
1
解决办法
287
查看次数

Qt on Android 运行时错误:获取资源编号为 0x00000000 的包时包标识符无效

将我的 Qt 版本从 5.13.1 更新到 5.14.2 后,我遇到了这个奇怪的错误,我不确定是什么原因造成的(我也将我的 gradle 版本从 4.1.0 更新到了 5.5.1)。该错误提供以下输出消息:

W ResourceType:获取资源编号为 0x00000000 的包时包标识符无效 E Qt:无法创建主要活动 E Qt:android.content.res.Resources$NotFoundException:字符串数组资源 ID #0x0 E Qt:在 android.content.res .Resources.getStringArray(Resources.java:525) E Qt:在 org.qtproject.qt5.android.bindings.QtLoader.startApp(QtLoader.java:423) E Qt:在 org.qtproject.qt5.android.bindings.QtActivityLoader .onCreate(QtActivityLoader.java:166) E Qt:在 org.qtproject.qt5.android.bindings.QtActivity.onCreateHook(QtActivity.java:266) E Qt:在 org.qtproject.qt5.android.bindings.QtActivity.onCreate (QtActivity.java:273)

我已经看到这之前已经讨论过,但是给出的解决方案与 Qt 无关并且需要修改 Java 代码(我认为这根本不是我的问题,因为我没有改变它)。

c++ java qt android

5
推荐指数
2
解决办法
776
查看次数

如何在 Windows 10 上获得模糊的半透明 QML 窗口(类似于 Fluent Design 指南)?

我想在 Windows 10 上的 QML 中获得一个半透明的模糊窗口,类似于 Fluent Design 指南(示例)。我知道你可以制作一个透明的窗口:

Window{
    visible: true
    color: "transparent"
}
Run Code Online (Sandbox Code Playgroud)

但这并没有达到我正在看的模糊效果。我也知道可以使用QtGraphicalEffectslike模糊窗口内的元素,FastBlur但我想模糊整个窗口本身。有没有办法实现这一目标?我也尝试过使用QtWinExtras模块并调用,QtWin::enableBlurBehindWindow但这也不起作用:

    QObject *root = engine.rootObjects()[0];
    QQuickWindow *window = qobject_cast<QQuickWindow *>(root);
    if (!window) {
        qFatal("Error: Your root item has to be a window.");
        return -1;
    }
    QtWin::enableBlurBehindWindow(window);
Run Code Online (Sandbox Code Playgroud)

c++ qt qml windows-10 fluent-design

4
推荐指数
1
解决办法
1633
查看次数

在c ++中通过指针初始化

所以,假设我有一堂课MyClass.现在我想使用另一个叫做的类Animals,我可能会做以下事情.

class MyClass
{
public:
    MyClass();
private:
    Animals animals;
};
Run Code Online (Sandbox Code Playgroud)

不过我也可以这样做:

class MyClass
{
public:
    MyClass();
private:
    Animals* animals;
};
Run Code Online (Sandbox Code Playgroud)

然后使用以下命令在构造函数中初始化类:

animals = new Animals();
Run Code Online (Sandbox Code Playgroud)

两种不同方法有什么区别,哪种更好,为什么?在我的使用中Animals应该只在里面使用MyClass.我的问题主要是关于性能内存,我的意思是通过指针初始化需要更多资源吗?

c++ pointers initialization class

2
推荐指数
1
解决办法
100
查看次数