在QWebView C#中选择文本时不调用selectionChanged

时间:2012-03-23 16:35:12

标签: qt qwebview selectionchanged

我的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());
}

2 个答案:

答案 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信号发出正常并调用指定的插槽。不确定你可能做错了什么。提供一些代码,享受这个免费赠品。