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:我猜你使用 aQLineEdit作为文本。

于 2013-01-05T15:30:04.123 回答