我的Windows中有一个包含文本的QWebView。我希望将所选单词(或无关紧要的单词)写在其他地方,但是从不调用信号selectionChanged。我之前需要设置一些东西吗?现在,我所有的都是一个等待被叫的插槽...我现在甚至都没做什么,因为信号永远不会发送
谢谢!
#include "mainwindow.h"
MainWindow::MainWindow(QWidget *parent) :
QMainWindow(parent)
{
this->setupUi();
connect(m_WebView, SIGNAL(selectionChanged()), this, SLOT(newSelection()));
}
MainWindow::~MainWindow()
{
}
void MainWindow::setupUi()
{
m_WebView = new QWebView();
m_LineEdit = new QLineEdit();
QVBoxLayout* lay = new QVBoxLayout();
lay->addWidget(m_LineEdit);
lay->addWidget(m_WebView);
QWidget* wid = new QWidget(this);
wid->setLayout(lay);
setCentralWidget(wid);
}
void MainWindow::newSelection()
{
m_LineEdit->setText(m_WebView->selectedText());
}
答案 0 :(得分:2)
我不确定为什么你给出的例子没有用。这是有效的(这是因为我连接到页面而不是视图)。如果我是你,我实际上会考虑向开发者提交错误报告。从docs来看,似乎应该这样做。
CPP:
#include "mainwindow.h"
#include <QWebView>
#include <QLineEdit>
#include <QVBoxLayout>
#include <QTimer>
MainWindow::MainWindow(QWidget *parent) :
QMainWindow(parent)
{
this->setupUi();
connect(m_WebView->page(), SIGNAL(selectionChanged()), this, SLOT(newSelection()));
}
MainWindow::~MainWindow()
{
}
void MainWindow::setupUi()
{
m_WebView = new QWebView();
m_WebView->load(QUrl("http://qt.nokia.com/"));
m_WebView->show();
m_LineEdit = new QLineEdit();
QVBoxLayout* lay = new QVBoxLayout();
lay->addWidget(m_LineEdit);
lay->addWidget(m_WebView);
QWidget* wid = new QWidget(this);
wid->setLayout(lay);
setCentralWidget(wid);
}
void MainWindow::newSelection()
{
m_LineEdit->setText(m_WebView->selectedText());
}
H:
#ifndef MAINWINDOW_H
#define MAINWINDOW_H
#include <QMainWindow>
namespace Ui {
class MainWindow;
}
class QWebView;
class QLineEdit;
class MainWindow : public QMainWindow
{
Q_OBJECT
public:
explicit MainWindow(QWidget *parent = 0);
~MainWindow();
void setupUi();
protected slots:
void newSelection();
private:
Ui::MainWindow *ui;
QWebView * m_WebView;
QLineEdit * m_LineEdit;
};
#endif // MAINWINDOW_H
答案 1 :(得分:1)
我不知道你的代码是什么样的,但这是一个完整的PyQt例子:
from PyQt4 import QtCore, QtGui, QtWebKit
class Dialog(QtGui.QDialog):
def __init__(self, parent=None):
super(Dialog, self).__init__()
self.resize(800,600)
self.web = QtWebKit.QWebView()
layout = QtGui.QVBoxLayout(self)
layout.addWidget(self.web)
self.web.setUrl(QtCore.QUrl("http://www.stackoverflow.com/"))
self.web.selectionChanged.connect(self.selectionChanged)
def selectionChanged(self):
print self.web.selectedText()
if __name__ == "__main__":
app = QtGui.QApplication([])
dialog = Dialog()
dialog.show()
dialog.raise_()
app.exec_()
当我在网页上选择文本时,selectionChanged
信号发出正常并调用指定的插槽。不确定你可能做错了什么。提供一些代码,享受这个免费赠品。