1

デフォルトで無効に設定したプッシュボタンがあります。テキストボックスにテキストを入力するたびに、ボタンが有効になるようにしたいと思います。私はこれを試しています:

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の公式ドキュメントによると、QWidget http://doc.qt.digia.com/qt/qwidget.html#public-slotsからsetEnabled()スロットを継承しています。

問題はどこだ?

4

1 に答える 1

3

あなたのコードは間違っています:

  • void QPushButton::setEnabled(bool);Qt スロットではありません。
  • メソッドを介して接続されるシグナルとスロットはstatic void QObject::connect(const QObject *, const char *, const QObject *, const char *);、同じ署名を取得する必要があります。ここでは、" " スロットblablablaSignal(void);を持つ " " シグナルを取得しました。blablablaSlot(bool);
  • スロットの接続中に引数を渡してはなりません。
  • とは異なり、void QLineEdit::textChanged(void);信号は存在しませんvoid QLineEdit::textChanged(const QString &);

したがって、コードは次のようにする方がよいでしょう:

#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 : テキストに a を使用していると思いますQLineEdit

于 2013-01-05T15:30:04.123 に答える