selectionChanged не вызывается, когда текст выделен в QWebView C # - PullRequest
0 голосов
/ 23 марта 2012

У меня в окнах 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 ]

2 голосов
/ 24 марта 2012

Я не уверен, почему приведенный вами пример не сработал.Это работает (и это потому, что я подключен к странице, а не к просмотру).Я бы на самом деле подумал о том, чтобы подать отчет об ошибке разработчикам на вашем месте.Из документов кажется, что это ДОЛЖНО работать.

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

ч:

#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 голос
/ 23 марта 2012

Я понятия не имею, как выглядит ваш код, но вот полностью рабочий пример 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 излучается очень хорошо и вызывает указанный слот, когда я выбираю текст на веб-странице. Не уверен, что ты мог делать неправильно. Введите код и наслаждайтесь этой бесплатной.

...