当前位置: 首页 > 知识库问答 >
问题:

正在尝试使用Redispp在类中设置全局Redis连接

谷梁浩思
2023-03-14

我是个彻头彻尾的傻瓜。我正在尝试设置一个Redis连接,并能够使用c方法将密钥设置到Redis中。c代码很长,所以我只包括相关部分:网页。H

#ifndef WEBPAGE_H
#define WEBPAGE_H

#include 
#include 
#include 
#include 

#include "cookiejar.h"
#include "redispp.h"

class Config;
class CustomPage;
class WebpageCallbacks;
class NetworkAccessManager;
class QWebInspector;

class WebPage : public QObject, public QWebFrame::PrintCallback
{
    Q_OBJECT
    Q_PROPERTY(QString title READ title)
    Q_PROPERTY(QString frameTitle READ frameTitle)
    Q_PROPERTY(QString content READ content WRITE setContent)
    Q_PROPERTY(QString frameContent READ frameContent WRITE setFrameContent)
    Q_PROPERTY(QString url READ url)
    Q_PROPERTY(QString frameUrl READ frameUrl)
    Q_PROPERTY(bool loading READ loading)
    Q_PROPERTY(int loadingProgress READ loadingProgress)
    Q_PROPERTY(bool canGoBack READ canGoBack)
    Q_PROPERTY(bool canGoForward READ canGoForward)
    Q_PROPERTY(QString plainText READ plainText)
    Q_PROPERTY(QString framePlainText READ framePlainText)
    Q_PROPERTY(QString libraryPath READ libraryPath WRITE setLibraryPath)
    Q_PROPERTY(QString offlineStoragePath READ offlineStoragePath)
    Q_PROPERTY(int offlineStorageQuota READ offlineStorageQuota)
    Q_PROPERTY(QVariantMap viewportSize READ viewportSize WRITE setViewportSize)
    Q_PROPERTY(QVariantMap paperSize READ paperSize WRITE setPaperSize)
    Q_PROPERTY(QVariantMap clipRect READ clipRect WRITE setClipRect)
    Q_PROPERTY(QVariantMap scrollPosition READ scrollPosition WRITE setScrollPosition)
    Q_PROPERTY(bool navigationLocked READ navigationLocked WRITE setNavigationLocked)
    Q_PROPERTY(QVariantMap customHeaders READ customHeaders WRITE setCustomHeaders)
    Q_PROPERTY(qreal zoomFactor READ zoomFactor WRITE setZoomFactor)
    Q_PROPERTY(QVariantList cookies READ cookies WRITE setCookies)
    Q_PROPERTY(QString windowName READ windowName)
    Q_PROPERTY(QObjectList pages READ pages)
    Q_PROPERTY(QStringList pagesWindowName READ pagesWindowName)
    Q_PROPERTY(bool ownsPages READ ownsPages WRITE setOwnsPages)
    Q_PROPERTY(QStringList framesName READ framesName)
    Q_PROPERTY(QString frameName READ frameName)
    Q_PROPERTY(int framesCount READ framesCount)
    Q_PROPERTY(QString focusedFrameName READ focusedFrameName)
    Q_PROPERTY(QObject* cookieJar READ cookieJar WRITE setCookieJarFromQObject)
    Q_PROPERTY(QStringList captureContent READ captureContent WRITE setCaptureContent)

public:
    WebPage(QObject* parent, const QUrl& baseUrl = QUrl());
    virtual ~WebPage();

    QWebFrame* mainFrame();

    QString content() const;
    QString frameContent() const;
    void setContent(const QString& content);
    void setFrameContent(const QString& content);

    QString title() const;
    QString frameTitle() const;

    QString url() const;
    QString frameUrl() const;

    bool loading() const;
    int loadingProgress() const;

    QString plainText() const;
    QString framePlainText() const;

    QString libraryPath() const;
    void setLibraryPath(const QString& dirPath);

    QString offlineStoragePath() const;

    int offlineStorageQuota() const;

    void setViewportSize(const QVariantMap& size);
    QVariantMap viewportSize() const;

    void setClipRect(const QVariantMap& size);
    QVariantMap clipRect() const;

    void setScrollPosition(const QVariantMap& size);
    QVariantMap scrollPosition() const;

    void setPaperSize(const QVariantMap& size);
    QVariantMap paperSize() const;

    void setNavigationLocked(bool lock);
    bool navigationLocked();

    void setCustomHeaders(const QVariantMap& headers);
    QVariantMap customHeaders() const;
}

网页。cpp

# include "webpage.h"
# include "networkaccessmanager.h"
# include "utils.h"
# include "config.h"
# include "consts.h"
# include "callback.h"
# include "cookiejar.h"
# include "system.h"
# include "redispp.h"
# ifdef Q_OS_WIN32
# define STDOUT_FILENAME "/dev/stdout"
# define STDERR_FILENAME "/dev/stderr"


/**
 * @class CustomPage
 */
class CustomPage: public QWebPage {
    Q_OBJECT


void WebPage::connectRedis()
{
    this->redis = redispp::Connection conn("127.0.0.1", "6379", "password", false);
}

 void WebPage::redisSet(const QString& key,const QString& value)
{
this->redis.set(key, value);
}





int WebPage::offlineStorageQuota() const
{
    return m_customWebPage->settings()->offlineStorageDefaultQuota();
}

void WebPage::showInspector(const int port)
{
    m_customWebPage->settings()->setAttribute(QWebSettings::DeveloperExtrasEnabled, true);
    m_inspector = new QWebInspector;
    m_inspector->setPage(m_customWebPage);

    if (port == -1) {
        m_inspector->setVisible(true);
    } else {
        m_customWebPage->setProperty("_q_webInspectorServerPort", port);
    }
}

void WebPage::applySettings(const QVariantMap& def)
{
    QWebSettings* opt = m_customWebPage->settings();

    opt->setAttribute(QWebSettings::AutoLoadImages, def[PAGE_SETTINGS_LOAD_IMAGES].toBool());
    opt->setAttribute(QWebSettings::JavascriptEnabled, def[PAGE_SETTINGS_JS_ENABLED].toBool());
    opt->setAttribute(QWebSettings::XSSAuditingEnabled, def[PAGE_SETTINGS_XSS_AUDITING].toBool());
    opt->setAttribute(QWebSettings::LocalContentCanAccessRemoteUrls, def[PAGE_SETTINGS_LOCAL_ACCESS_REMOTE].toBool());
    opt->setAttribute(QWebSettings::WebSecurityEnabled, def[PAGE_SETTINGS_WEB_SECURITY_ENABLED].toBool());
    opt->setAttribute(QWebSettings::JavascriptCanOpenWindows, def[PAGE_SETTINGS_JS_CAN_OPEN_WINDOWS].toBool());
    opt->setAttribute(QWebSettings::JavascriptCanCloseWindows, def[PAGE_SETTINGS_JS_CAN_CLOSE_WINDOWS].toBool());

    if (def.contains(PAGE_SETTINGS_USER_AGENT)) {
        m_customWebPage->m_userAgent = def[PAGE_SETTINGS_USER_AGENT].toString();
    }

    if (def.contains(PAGE_SETTINGS_USERNAME)) {
        m_networkAccessManager->setUserName(def[PAGE_SETTINGS_USERNAME].toString());
    }

    if (def.contains(PAGE_SETTINGS_PASSWORD)) {
        m_networkAccessManager->setPassword(def[PAGE_SETTINGS_PASSWORD].toString());
    }

    if (def.contains(PAGE_SETTINGS_MAX_AUTH_ATTEMPTS)) {
        m_networkAccessManager->setMaxAuthAttempts(def[PAGE_SETTINGS_MAX_AUTH_ATTEMPTS].toInt());
    }

    if (def.contains(PAGE_SETTINGS_RESOURCE_TIMEOUT)) {
        m_networkAccessManager->setResourceTimeout(def[PAGE_SETTINGS_RESOURCE_TIMEOUT].toInt());
    }

}

QString WebPage::userAgent() const
{
    return m_customWebPage->m_userAgent;
}

void WebPage::setNavigationLocked(bool lock)
{
    m_navigationLocked = lock;
}

bool WebPage::navigationLocked()
{
    return m_navigationLocked;
}

void WebPage::setViewportSize(const QVariantMap& size)
{
    int w = size.value("width").toInt();
    int h = size.value("height").toInt();
    if (w > 0 && h > 0) {
        m_customWebPage->setViewportSize(QSize(w, h));
    }
}

QVariantMap WebPage::viewportSize() const
{
    QVariantMap result;
    QSize size = m_customWebPage->viewportSize();
    result["width"] = size.width();
    result["height"] = size.height();
    return result;
}



}

编译错误


webpage.cpp:950:11: error: no member named 'redis' in 'WebPage'
    this->redis = redispp::Connection conn("127.0.0.1", "6379", "password", false);
    ~~~~  ^
webpage.cpp:950:39: error: expected '(' for function-style cast or type construction
    this->redis = redispp::Connection conn("127.0.0.1", "6379", "password", false);
                  ~~~~~~~~~~~~~~~~~~~ ^
webpage.cpp:955:7: error: no member named 'redis' in 'WebPage'
this->redis.set(key, value);
~~~~  ^

我使用的c Redis库是https://github.com/brianwatling/redispp

注意***我尝试使用Redisp命名空间,比如在这个例子中,但是连接类会与其他类冲突。https://github.com/brianwatling/redispp/blob/master/test/multi.cpp*

整个网页。cpp文件在粘贴箱中。该文件超出了StackOverflow字符限制http://pastebin.com/fUhRwy0R
任何帮助都将不胜感激。

共有1个答案

董阳平
2023-03-14

您的类被称为CustomPage,但出于某种原因,您正在网页中实现函数。

将函数定义更改为:

void connectRedis()

void redisSet(const QString & key, const QString & value)

此外,由于您可能来自Java或C#,在C中执行操作的标准方法是将类定义与实现分离(放入.h/.hpp和.cpp文件),请参阅此处以了解更多信息。

 类似资料:
  • 问题内容: 我可以在Redis中设置全局TTL吗?每次设置密钥时,都无需设置TTL。 我用谷歌搜索,但找不到任何线索。看来似乎无法完成? 谢谢。 问题答案: 不,Redis没有全局/默认TTL的概念,是的,您必须为每个键分别设置它。但是,根据您的要求和要执行的操作,可能还有其他方法可以实现您的目标。换句话说,您为什么需要它? 例如,如果您想将Redis用作缓存,而不必担心必须删除“旧”项目,则只需

  • 问题内容: 我试图在mysql中设置sql_mode,但会引发错误。 命令: 这不是设置多种模式的正确方法吗?设置会话和全局模式的优点是什么?哪有?我有不同的用户尝试使用不同的UNC值更新数据库,并插入od将会话模式设置为“ NO_BACKSLASH_ESCAPES”,尽管为此我可以使用一种通用的模式。这有意义吗? 请告诉我。 谢谢。 问题答案: 我解决了 正确的模式是:

  • 我有以下消息: 在typescript中,我试图根据一个类似于下面的typescript映射来设置protobuf消息的映射条目。 我尝试遍历地图对象中的条目并以这种方式设置地图条目。 我得到一个错误:“TypeError:b.toArray不是一个函数。”你知道我如何对每个typescript映射条目进行强制转换/序列化/打包,以便在protobuf中进行设置吗?我在几个地方找过运气不佳的例子。

  • 编辑找到的#2个解决方案;见下文。 我正在使用VirtualEnv在Flask中编写一个小应用程序。这已经不是我第一次这么做了,但是这次和过去两次我都试过了,我遇到了同样的问题。当我并尝试安装一个包--,例如,它一直在全局安装,而不是在VirtualEnv中。奇怪的是,它只有在我停用之后才会发生,而且这种情况在那一刻是不一致的。 也就是说,如果我一次全部安装,我似乎能够安装我需要的所有东西,甚至偶

  • 目标服务器正在使用自签名证书。是否有方法禁用认证检查?在另一个web服务器实例中,我们使用 在使用詹金斯时,是否可以有类似的选择?

  • 问题内容: 我正在尝试创建一个分页类,并使用该类外部的变量。 但这给了我致命错误“在非对象上调用成员函数query()”。 这是索引文件: 这是pagi.php文件: 是否可以在类内部使用该变量,而无需在类内部创建新变量? 问题答案: 解决此问题的正确方法是将数据库对象注入另一个类(依赖项注入): 解决该问题的另一种方法是将数据库类的实例注入使用它的方法中: 您选择哪种方法取决于情况。如果只有一个