2015-04-06 285 views
1

我寫了這段代碼,但是當我在TextEdit裏面改變文本時什麼也沒有發生。我做錯了什麼 ?我一直在使用這個 - >更新()和小窗口>更新()函數的嘗試,但沒有奏效...QTextEdit中的textChange()

mainwindow.h:

#ifndef MAINWINDOW_H 
#define MAINWINDOW_H 

#include <QMainWindow> 
#include <QTextEdit> 
#include <QPushButton> 
#include <QWidget> 
#include <QVBoxLayout> 

class MainWindow : public QMainWindow 
{ 
    Q_OBJECT 

    QTextEdit *edit; 
    QPushButton *pb; 
    QWidget *widget; 
    QVBoxLayout *layout; 

    void changeCaption(); 

public: 
    MainWindow(QWidget *parent = 0); 
    ~MainWindow(); 
}; 

#endif // MAINWINDOW_H 

mainwindow.cpp:

#include "mainwindow.h" 

MainWindow::MainWindow(QWidget *parent) 
    : QMainWindow(parent) 
{ 
    edit = new QTextEdit; 
    pb = new QPushButton("HEHE"); 
    widget = new QWidget; 
    layout = new QVBoxLayout(widget); 
    layout->addWidget(edit); 
    layout->addWidget(pb); 
    this->setCentralWidget(widget); 

    connect(edit, SIGNAL(textChanged()), this, SLOT(chngeCaption)); 
} 

MainWindow::~MainWindow() 
{ 

} 

void MainWindow::changeCaption(){ 
    pb->setText("CHANGED"); 
} 
+1

你必須在'SIGNAL'宏參數中寫入信號的確切簽名('textChanged(const QString&)'),在'SLOT'中寫入錯字並寫入'chngeCaption'而不是'changeCaption' – Predelnik 2015-04-06 09:41:43

回答

2

首先,你應該定義changeCaption功能在.h文件中插槽:

private slots: 
    void changeCaption(); 

textChanged信號有一個QString參數。也是正確的插槽名稱的拼寫錯誤的連接語句:

connect(edit, SIGNAL(textChanged(QString)), this, SLOT(changeCaption())); 
+0

謝謝。它沒有QString參數。幫助還說,在textChange()中沒有參數... – 2015-04-06 10:56:17

3

這是更好地使用QT5語法,因爲它有助於在編譯時檢測到這樣的錯誤,並簡化代碼:

connect(edit, &QLineEdit::textChanged, this, &MainWindow::changeCaption);