2013-01-05 3 views
1

기본적으로 사용하지 않도록 설정 한 푸시 버튼이 있습니다. 나는 어떤 텍스트가 텍스트 박스에 입력 될 때마다 버튼이 활성화되기를 원한다. 나는이 노력하고 있어요 :QPushButton setEnabled (true) 슬롯이 작동하지 않습니다.

connect(ui->textEdit,SIGNAL(textChanged()),ui->pushButton,SLOT(setEnabled(true))); 

을하지만 오류 다음 제공합니다

Object::connect: No such slot QPushButton::setEnabled(true) 
Object::connect: (sender name: 'textEdit') 
Object::connect: (receiver name: 'pushButton') 

Qt는 공식 문서가이 http://doc.qt.digia.com/qt/qwidget.html#public-slots

문제가 어디는 QWidget 에서는, setEnabled() 슬롯을 상속 말한다을?

답변

3

코드는 잘못된 것입니다 :

  • void QPushButton::setEnabled(bool);

    는 Qt를 슬롯 없습니다.
  • static void QObject::connect(const QObject *, const char *, const QObject *, const char *); 메서드를 통해 연결된 신호와 슬롯은 동일한 서명을 가져야합니다. 여기에 "blablablaSlot(bool);"슬롯이있는 "blablablaSignal(void);"신호가 있습니다.
  • 슬롯을 연결하는 동안 인수를 전달하면 안됩니다.
  • void QLineEdit::textChanged(const QString &);과 달리 void QLineEdit::textChanged(void); 신호가 존재하지 않습니다.

그래서 코드는 다음과 같이하는 것이 좋습니다했다 :

#include <QLineEdit> 
#include <QObject> 
#include <QPushButton> 

class UIBuilder { 

    public: 

     UIBuilder() : textEdit(new QTextEdit()), pushButton (new QPushButton()) 
     { 
      // Do your stuff 
      QObject::connect(textEdit, SIGNAL(textChanged(const QString &)), 
          this, SLOT(enableSlot(const QString &))); 
     } 

     ~UIBuilder() 
     { 
      delete textEdit; 
      delete pushButton; 
     } 

    protected: 
     QLineEdit * textEdit; 
     QPushButton * pushButton; 

    public slots: 

     void enableSlot(const QString &) 
     { 
      pushButton->setEnabled(true); 
     } 
}; 

PS : 나는 당신이 텍스트에 대한 QLineEdit를 사용 같아요.

관련 문제