Archive for 七月, 2014

QT使用单例模式获取主窗体Mainwindow指针

星期二, 七月 22nd, 2014 220 views

最近一直在用QT做项目,信号和槽机制甚是好用,但是前提需求是在connect时必须同时传入Object1和Object2的指针(见《QT 多线程(UI线程)间的signal/slot(信号与槽)通信》),这样一来,我们如果需要在其他类中绑定Mainwindow的槽函数,则必须在该类初始化时传入Mainwindow的指针,甚是麻烦。甚至有时是间隔了好几个类。
查询了网络上的一些方法,稍微可行一些的是使用parentWidget()方法,但是还是没有从根本上解决全局获取Mainwindow指针的问题。
既然是全局,我们的基本解决思路就是static化,实现起来其实也非常简单,使Mainwindow变成单例即可,代码如下:

首先是Mainwindow.h

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
#ifndef MAINWINDOW_H
#define MAINWINDOW_H
#include <qmainwindow>

namespace Ui {
class MainWindow;
}

class MainWindow : public QMainWindow
{
    Q_OBJECT
public:
    static MainWindow *GetInstance();//获取单例方法

private:
    explicit MainWindow(QWidget *parent = 0);
    ~MainWindow();
    Ui::MainWindow *ui;
    static MainWindow *m_pInstance;//单例指针

};

#endif // MAINWINDOW_H
</qmainwindow>

(更多…)

QT5读取及修改cookie简单样例

星期四, 七月 3rd, 2014 334 views

介于网上(中文网页)没有一篇完整的关于QT5读写cookie的简单案例,特有此篇。

①准备工作,定义cookie控制器
在开始获取cookie之前我们需要做一些准备工作,先在mainwindow下拖出一个webview,这里不上图了,以后会比较少上图,有些图华而不实,文字看得懂的自然都看得懂。
之后给这个webview定义一个networkAccessManager,#include什么的这些常识问题大家自己F1。

1
2
3
4
5
6
7
8
9
10
MainWindow::MainWindow(QWidget *parent) :
    QMainWindow(parent),
    ui(new Ui::MainWindow)
{
    ui->setupUi(this);
    _cookieJar = new MyCookieJar();
    //这里设置networkAccessManager
    ui->webView->page()->networkAccessManager()->setCookieJar( _cookieJar );

}

上文中的_cookieJar是我们自己定义的一个MyCookieJar类,继承了QT自带的QNetworkCookieJar。
这里我自己封装了一些方法也放出来吧:

MyCookieJar.h

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
#ifndef MYCOOKIEJAR_H
#define MYCOOKIEJAR_H
#include <qnetworkcookiejar>
#include <qnetworkcookie>
#include <qnetworkrequest>
class MyCookieJar : public QNetworkCookieJar
{
    Q_OBJECT
public:
    explicit MyCookieJar(QObject *parent = 0);

    QList<qnetworkcookie> getCookies();
    void setCookies(const QList</qnetworkcookie><qnetworkcookie>& cookieList);
    void addCookies(QString name,QString value);
    void changeCookie(QString name,QString value);
};
#endif // MYCOOKIEJAR_H
</qnetworkcookie></qnetworkrequest></qnetworkcookie></qnetworkcookiejar>

MyCookieJar.cpp

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
#include "mycookiejar.h"

MyCookieJar::MyCookieJar(QObject *parent) :
    QNetworkCookieJar(parent)
{
}


QList<qnetworkcookie> MyCookieJar::getCookies()

{
    return  this->allCookies();
}

void MyCookieJar::setCookies(const QList</qnetworkcookie><qnetworkcookie>& cookieList)
{
    if(this == NULL)
        return;
    this->setAllCookies(cookieList);
}

void MyCookieJar::addCookies(QString name,QString value)
{
    QNetworkCookie cookie(name.toUtf8(),value.toUtf8());
    this->insertCookie(cookie);
}

void MyCookieJar::changeCookie(QString name,QString value)
{
    QNetworkCookie cookie(name.toUtf8(),value.toUtf8());
    this->updateCookie(cookie);

}
</qnetworkcookie>

(更多…)