2015-04-06 287 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);