0

ウィンドウにテキストを含む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());
}
4

2 に答える 2

2

あなたが与えた例がうまくいかなかった理由はわかりません。これは機能します(ビューではなくページに接続しているためです)。私があなたなら、実際に開発者にバグレポートを提出することを検討したいと思います。ドキュメントから、これは機能する必要があるようです。

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
于 2012-03-23T22:39:21.710 に答える
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_()

Webページでテキストを選択すると、selectionChanged信号は正常に発信され、指定されたスロットを呼び出します。何が間違っているのかわからない。いくつかのコードを提供し、この景品をお楽しみください。

于 2012-03-23T19:18:08.953 に答える