我有一个按钮,我默认设置为禁用。我希望每当在文本框中输入一些文本时,该按钮将被启用。我正在尝试这个:
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
问题出在哪里?
答案 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
作为文字。