2012-03-23 18 views
0

我的窗口中包含文本的QWebView。我希望將選定的單詞(或無關緊要的單詞)寫入其他位置,但不會調用signalChanged信號。我需要設置一些東西嗎?現在,我擁有的是一個等待被稱爲的插槽...我現在甚至不做任何事情,因爲信號從不發送當在QWebView中選擇文本時,不會調用selectionChanged C#

謝謝!

#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

我們可以HAZ codez? – jdi 2012-03-23 18:24:10

+0

我做了一個小練習,只是爲了展示我想做的事情......其他任何東西都沒有必要! – castors33 2012-03-23 19:59:18

+0

除非我讀錯了你的例子,它看起來非常類似我的蟒蛇和我的作品...不知道... – jdi 2012-03-23 20:02:13

回答

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 
+0

我不明白爲什麼...但是你的代碼工作...有點怪異......但至少它的工作原理!謝謝! – castors33 2012-03-30 14:02:06

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信號發射就好了,並調用指定的時隙,當我選擇文本在網頁上。不知道你會做錯什麼。提供一些代碼,並享受這個免費贈品。

+0

對不起,我正在修復 – castors33 2012-03-23 19:53:30

相關問題