Необходимо использовать браузер или аналогичные средства для аутентификации и принятия разрешений приложения. Если вы не хотите использовать браузер, тогда вы можете использовать QWebEngineView, и чтобы показать пример, я буду опираться на официальный пример Qt Reddit Example :
Так что измените его так, чтобы вы не делали не использовать QDesktopServices :: openUrl (), но QWebEngineView:
redditwrapper.h
// ...
private:
QOAuth2AuthorizationCodeFlow oauth2;
bool permanent = false;
QWebEngineView browser;
};
redditwrapper. cpp
// ...
RedditWrapper::RedditWrapper(QObject *parent) : QObject(parent)
{
auto replyHandler = new QOAuthHttpServerReplyHandler(1337, this);
oauth2.setReplyHandler(replyHandler);
oauth2.setAuthorizationUrl(QUrl("https://www.reddit.com/api/v1/authorize"));
oauth2.setAccessTokenUrl(QUrl("https://www.reddit.com/api/v1/access_token"));
oauth2.setScope("identity read");
connect(&oauth2, &QOAuth2AuthorizationCodeFlow::statusChanged, [=](
QAbstractOAuth::Status status) {
if (status == QAbstractOAuth::Status::Granted)
emit authenticated();
});
oauth2.setModifyParametersFunction([&](QAbstractOAuth::Stage stage, QVariantMap *parameters) {
if (stage == QAbstractOAuth::Stage::RequestingAuthorization && isPermanent())
parameters->insert("duration", "permanent");
});
connect(&oauth2, &QOAuth2AuthorizationCodeFlow::authorizeWithBrowser, [this](const QUrl & url){
browser.resize(640, 480);
browser.load(url);
browser.show();
});
connect(&browser, &QWebEngineView::urlChanged, [replyHandler, this](const QUrl & url){
if(url.adjusted(QUrl::RemoveQuery) == QUrl(replyHandler->callback())){
qDebug() << url;
browser.close();
}
});
}
// ...