【发布时间】:2021-04-27 23:02:51
【问题描述】:
在我的自定义派生类中,我尝试添加并发出信号 gotChange(QString change):
#ifndef NETTEXTEDITOR_H
#define NETTEXTEDITOR_H
#include <QTextEdit>
class NetTextEditor : public QTextEdit {
using QTextEdit::QTextEdit;
public:
void keyPressEvent(QKeyEvent *e) override;
signals:
void gotChange(QString change);
};
#endif // NETTEXTEDITOR_H
声明没问题,但是当我尝试发出它时,我得到下一个错误:
/home/mrsydar/Projects/Qt/DOCSHARE/nettexteditor.cpp:5:错误:
未在此范围内声明“gotChange”
../DOCSHARE/nettexteditor.cpp:在函数‘void doEmit(QString)’中:
../DOCSHARE/nettexteditor.cpp:5:10: 错误:'gotChange' 不是
在此范围内声明
5 |发出 gotChange(em);
| ^~~~~~~~~
我认为这是因为推导,但我对 Qt 很陌生,不知道任何替代方案或如何解决这个问题。
#include "nettexteditor.h"
#include <QKeyEvent>
void NetTextEditor::keyPressEvent(QKeyEvent *e) {
int key = e->key();
if((key >= 65 && key <= 90) || (key >= 48 && key <= 57)){
QString delta;
int position = this->textCursor().position();
delta = "c " + QString::number(position) + " " + (char) key;
emit gotChange(delta); //if i comment this emit out, everything compiles without errors
}
}
我做错了什么?
【问题讨论】:
-
在
using QTextEdit::QTextEdit;之前添加Q_OBJECT -
@eyllanesc 然后我得到另一个错误:未定义引用`vtable for NetTextEditor'
-
删除build文件夹并重新编译
-
@eyllanesc 谢谢。它正在工作:) 你可以发布一个答案,我会标记它
-
undefined reference to
vtable通常意味着您需要运行 qmake(为 qobject 派生类创建 moc_*.cpp 文件)
标签: c++ qt signals-slots derived-class