首页 文章

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

提问于
浏览
0

我是一个完整的c菜鸟 . 我正在尝试设置Redis连接,并能够使用c方法将密钥设置为redis . c代码很长所以我只包括相关部分: webpage.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;
}

webpage.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

注意** *我尝试使用Redispp命名空间,例如在示例中,但连接类将与其他类冲突 . https://github.com/brianwatling/redispp/blob/master/test/multi.cpp *

整个 webpage.cpp 文件位于pastebin中 . 该文件超过StackOverflow字符限制http://pastebin.com/fUhRwy0R
任何帮助,将不胜感激 .

1 回答

  • 0

    您的类被称为 CustomPage ,但由于某种原因,您正在实现 WebPage 中的函数 .

    将您的函数定义更改为:

    void connectRedis()
    

    和...

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

    此外,由于您似乎可能来自Java或C#,因此在C中执行操作的标准方法是将类定义与实现(分别为.h / .hpp和.cpp文件)分开,有关此内容的详细信息,请参阅here .

相关问题