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