这是一个无法运行的简单示例。运行时错误是:
QObject::connect: No such slot Bridge::setText(const QString& text)
QObject::connect: No such slot QLabel::setText(const QString& text)
我有两个文件,main.cpp和Bridge.h。
的main.cpp
#include <QtWidgets>
#include "Bridge.h"
int main(int argc, char ** argv)
{
QApplication app (argc, argv);
QWidget widget;
QLineEdit * lineEdit = new QLineEdit;
QLabel * label = new QLabel;
QVBoxLayout * layout = new QVBoxLayout;
layout->addWidget(lineEdit);
layout->addWidget(label);
widget.setLayout(layout);
Bridge * bridge = new Bridge ("", &app);
QObject::connect(
lineEdit, SIGNAL(textChanged(const QString &)),
bridge, SLOT(setText(const QString & text))
);
QObject::connect(
bridge, SIGNAL(textChanged(const QString &)),
label, SLOT(setText(const QString & text))
);
widget.show();
return app.exec();
}
Bridge.h
#include <QString>
#include <QObject>
class Bridge : public QObject
{
Q_OBJECT
public:
Bridge(const QString & text, QObject * parent = 0) : QObject(parent), text(text) {}
const QString & getText() const;
int getLengthOfText() const;
public slots:
void setText(const QString & text) {
if (this->text == text) {
return;
}
this->text = text;
emit textChanged(text);
}
signals:
void textChanged(const QString &);
private:
QString text;
};
.pro文件
######################################################################
# Automatically generated by qmake (3.0) Sat May 17 20:28:07 2014
######################################################################
TEMPLATE = app
TARGET = qtbox
INCLUDEPATH += .
INCLUDEPATH += headers
QT += widgets
# Input
HEADERS += headers/Bridge.h
SOURCES += sources/main.cpp
######################################################################
# Build to custom directories
######################################################################
release: DESTDIR = build/release
debug: DESTDIR = build/debug
OBJECTS_DIR = $$DESTDIR/.obj
MOC_DIR = $$DESTDIR/.moc
RCC_DIR = $$DESTDIR/.qrc
UI_DIR = $$DESTDIR/.ui
我错过了一些明显的东西吗?我可以提出一些随机的事情:
QString&
vs QString &
答案 0 :(得分:3)
不,你没有。但这样做很常见,特别是如果你需要改变你的实现;您不必重新编译包含该头文件的所有文件。
不,两者都有效。
不,qmake文件似乎也有效。
更改您的连接调用不是变量,而只是类型:
connect(bridge, SIGNAL(textChanged(QString)), label, SLOT(setText(QString)));
编辑:此外,#include <QLabel>
最终手动运行qmake一次。