江湖救急,关于Qt QWebView的linkClicked信号

nikshuang3 2009-08-10 02:19:01
RT, 我写了个方法来处理QWebView的linkClicked信号,也就是在QWebView中点击一个链接后,QWebView发送出linkClicked信号,QWebView的父类调用方法loadWidget来处理该信号,代码片段:

xxx.h:
.......
private slots:
void loadWidget(const QUrl &url);

private:
QWebView *webView;
......

xxx.cpp:
webView = new webView();
connect(webView, SIGNAL(linkClicked(const QUrl &url)), this, SLOT(loadWidget(const QUrl &url)));
......

代码编译和运行过程都没有错误提示,但程序的运行结果是,虽然的确是重新load新的连接,但却没有调用我编写的方法loadWidget,因为我在这个函数对页面进行了一些处理。
当我把loadWidget中的代码注释掉重新编译之后证实了没有运行loadWidget的猜测,在loadWidget注释掉的情况下,它依旧能load链接,它是不是调用父类的默认处理方法拉

请各位大侠帮忙看看这个问题,帮忙解决下,用其他方法也行,谢谢了。
...全文
731 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
songxizg 2009-12-07
  • 打赏
  • 举报
回复
113哀伤的发生地方
peng5522 2009-10-11
  • 打赏
  • 举报
回复
我试过,会调用啊。
  • 打赏
  • 举报
回复
楼主,你是想把一个控件的signal传到另一个目标控件没?

那应该是在这个控件emit一个signal,然后在目标控件connect这个signal跟你需要的slot啊。
goodname 2009-08-11
  • 打赏
  • 举报
回复
你写的跟我说的写法不一样,应该是
connect(webView->page(), SIGNAL
nikshuang3 2009-08-10
  • 打赏
  • 举报
回复
部分代码:
Browser.h:
#include <QMainWindow>

class QWebView;
class QString;
class QKeyEvent;
class XmlManager;
class QUrl;

class Browser : public QMainWindow
{
Q_OBJECT

public:
Browser(const QString &url);
~Browser();
void keyPressEvent(QKeyEvent *event);

signals:

public slots:
void loadWidget(const QUrl &url);
void quit();

private:
void closeBrowser();
void reloadDesktopPage();
void setupBrowser();

QWebView *webView;
QString *desktopPage;
XmlManager *xmlManager;
};


Browser.cpp:
#include <QtGui>
#include <QtWebKit>
#include <QtCore>
#include "libxml.h"
#include "browser.h"
#include <stdio.h>

Browser::Browser(const QString &page)
{
webView = new QWebView(this);
desktopPage = new QString(page);

setupBrowser();
}

void Browser::setupBrowser()
{
/* backgound of browser */
/*QPixmap pixmap("img/warty-final-ubuntu.png");
QPalette palette;
palette.setBrush(backgroundRole(), QBrush(pixmap));
setPalette(palette);
*/
/* Style of browser and QwebView's instance */
setWindowFlags(Qt::FramelessWindowHint);
setCentralWidget(webView);
setWindowState(windowState() ^ Qt::WindowFullScreen);

webView->page()->setLinkDelegationPolicy(QWebPage::DelegateAllLinks);
connect(webView, SIGNAL(linkClicked(const QUrl &)), this, SLOT(loadWidget(const QUrl &)));

/* load desktop */
webView->setWindowState(webView->windowState() ^ Qt::WindowFullScreen);
webView->setUrl(QUrl(desktopPage->toLocal8Bit().data()));
webView->show();
}

void Browser::loadWidget(const QUrl &url)
{
printf("loading widget\n");
}
nikshuang3 2009-08-10
  • 打赏
  • 举报
回复
不行阿,加过了也不行阿
goodname 2009-08-10
  • 打赏
  • 举报
回复
webView->page()->setLinkDelegationPolicy(QWebPage::DelegateAllLinks);
connect(webView->page(), SIGNAL(linkClicked(const QUrl &)), this, SLOT(loadWidget(const QUrl &)));

这样呢?
nikshuang3 2009-08-10
  • 打赏
  • 举报
回复
不好意思阿,我的程序就是这个,写上来的时候多写了
connect(webView, SIGNAL(linkClicked(const QUrl &)), this, SLOT(loadWidget(const QUrl &)));
goodname 2009-08-10
  • 打赏
  • 举报
回复
connect(webView, SIGNAL(linkClicked(const QUrl &)), this, SLOT(loadWidget(const QUrl &)));
nikshuang3 2009-08-10
  • 打赏
  • 举报
回复
我顶阿

24,854

社区成员

发帖
与我相关
我的任务
社区描述
C/C++ 工具平台和程序库
社区管理员
  • 工具平台和程序库社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧