我想在我的qml应用程序中使用Android WebView.提供的默认WebView对象使用本机呈现,但缺少多个功能(例如,拦截网络请求并阻止它们的能力).我知道Qt允许您使用QAndroidJniObject调用本机Java API.是否可以使用它来创建本机Android WebView周围的Qt包装器?如果是,我该如何实现?
我有一个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)
如何取回解码后的字符串?
所以我正在为Android编写一个应用程序,然后我尝试通过usb连接我的手机(Android 8.0)在调试模式下运行,应用程序在设备上启动正常并且工作正常,但在"应用程序输出"选项卡中没有日志消息.当我在桌面上运行应用程序(Ubuntu 18.04)时,日志消息就在那里.然后我试着在我的手机上运行Release上的应用程序,更令人沮丧的是,日志消息仍然不存在,我的应用程序表现得很奇怪,就是它无法发出网络请求(不是全部而是只有少数几个)而且它没有不从互联网加载数据(一切都在调试模式下运行良好).
这是我的"套件"配置:
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渐变,但我不知道如何做到这一点。
我试图在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) 我正在使用Qt 5.7.在我的项目中,我使用的是Qml WebView(导入QtWebView 5.7).我想知道如何管理(添加,删除和修改)cookie以及如何更改WebView组件的用户代理.我查看了官方文档但找不到方法.
所以我在以下链接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) 我想拦截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) 将我的 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 代码(我认为这根本不是我的问题,因为我没有改变它)。
我想在 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) 所以,假设我有一堂课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.我的问题主要是关于性能和内存,我的意思是通过指针初始化需要更多资源吗?
qt ×8
c++ ×7
android ×3
qml ×3
java ×2
webview ×2
browser ×1
class ×1
cookies ×1
debugging ×1
graphics ×1
html ×1
javascript ×1
linux ×1
listview ×1
models ×1
oauth-2.0 ×1
pointers ×1
pyside2 ×1
python ×1
python-3.x ×1
qbytearray ×1
qpainter ×1
qt-creator ×1
reddit ×1
rest ×1
string ×1
user-agent ×1
web ×1
windows-10 ×1