QPushButton setEnabled(true)插槽不起作用

时间:2013-01-05 14:56:03

标签: qt4

我有一个按钮,我默认设置为禁用。我希望每当在文本框中输入一些文本时,该按钮将被启用。我正在尝试这个:

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继承了setEnabled()槽 http://doc.qt.digia.com/qt/qwidget.html#public-slots

问题出在哪里?

1 个答案:

答案 0 :(得分: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 :我猜您使用QLineEdit作为文字。