自定义QT QWidget对象响应弹出菜单的解决方法

简介: 自定义QT QWidget对象响应弹出菜单的解决方法

说真话,以前都不是自定义控件上用,一直没问题,然后我自定义了一个绘图的Canvas,继承自QWidget,想添加右键鼠标弹出菜单,于是遇到两个坑爹的错误!为了节省大家时间,直接看错误就好!

无法跟信号槽方法链接

错误信息:

qobject::connect: no such slot xxxx

其中xxx表示方法名称!

原因是自定义的类没有添加 Q_OBJECT,如果有

看看是否添加了对应的方法,跟绑定声明:

connect(markBin, SIGNAL(triggered()), this, SLOT(on_action_marker()));

加上立刻好!才怪!

class MyImageCanvas : public QWidget {
    Q_OBJECT
public:
    explicit MyImageCanvas();
    void resetCanvas(QPixmap &bitmap, std::vector<cv::Rect> &boxes);
    void refreshView();
protected:
    void paintEvent(QPaintEvent *event) override;
    void mouseMoveEvent(QMouseEvent *event) override;
private slots:
    void on_action_marker();
private:
    int shift_x = 0;
    int shift_y = 0;
    float aspect_rate = 0.0;
    QPixmap bitmap;
    std::vector<cv::Rect> boxes;
    QString tooltips;
    int anchor_x = 0;
    int anchor_y = 0;
    bool showColor = false;
    QString colortips;
};

然后就编译,得到下面一堆错误:

error LNK2001: unresolved external symbol "public: virtual int

完整类似的如下:

Linking... 
error LNK2001: unresolved external symbol "public: virtual int __thiscall MyMainWindow::qt_metacall(enum QMetaObject::Call,int,void * *)" (?qt_metacall@MyMainWindow@@UAEHW4Call@QMetaObject@@HPAPAX@Z) 
error LNK2001: unresolved external symbol "public: virtual void * __thiscall MyMainWindow::qt_metacast(char const *)" (?qt_metacast@MyMainWindow@@UAEPAXPBD@Z) 
error LNK2001: unresolved external symbol "public: virtual struct QMetaObject const * __thiscall MyMainWindow::metaObject(void)const " (?metaObject@MyMainWindow@@UBEPBUQMetaObject@@XZ) 
debug/testqt.exe : fatal error LNK1120: 3 unresolved externals 
Error executing link.exe.

这段是我网上借用的,大致即时这些错误!告诉你只要一招就可以搞定!

QT Creator中【构建】->【清理所有项目】之后

注释Q_OBJECT,再编译,然后放开注释,

重新编译即可!程序运行如下:

相关文章
|
5月前
|
API
【Qt 学习笔记】QWidget的toolTip属性 | focusPolicy属性
【Qt 学习笔记】QWidget的toolTip属性 | focusPolicy属性
266 5
|
4月前
|
设计模式 前端开发 安全
Qt注册类对象单例与单类型区别
在进行开发时,应当根据具体的应用场景和需求来选择使用单例模式或是单类型。如果是全局服务或状态管理,可能需要单例模式;如果是为了使QML环境下的不同组件能够访问到同一个后端服务对象,则可能需要使用单类型。
53 2
|
5月前
Qt绘图之QWidget
Qt绘图之QWidget
98 1
|
5月前
|
前端开发 搜索推荐 API
【Qt 学习笔记】QWidget的styleSheet属性 | RGB | 在线调色板
【Qt 学习笔记】QWidget的styleSheet属性 | RGB | 在线调色板
276 5
|
5月前
|
算法 API 图形学
【Qt 学习笔记】QWidget的geometry属性及window frame的影响
【Qt 学习笔记】QWidget的geometry属性及window frame的影响
276 2
|
5月前
|
XML 开发框架 API
【Qt 学习笔记】QWidget的windowTitle属性 | windowIcon属性 | qrc文件机制
【Qt 学习笔记】QWidget的windowTitle属性 | windowIcon属性 | qrc文件机制
227 1
|
6月前
|
调度
【浅入浅出】Qt多线程机制解析:提升程序响应性与并发处理能力
在学习QT线程的时候我们首先要知道的是QT的主线程,也叫GUI线程,意如其名,也就是我们程序的最主要的一个线程,主要负责初始化界面并监听事件循环,并根据事件处理做出界面上的反馈。但是当我们只限于在一个主线程上书写逻辑时碰到了需要一直等待的事件该怎么办?它的加载必定会带着主界面的卡顿,这时候我们就要去使用多线程。
181 6
|
5月前
|
API
【Qt 学习笔记】QWidget的windowOpacity属性 | cursor属性 | font属性
【Qt 学习笔记】QWidget的windowOpacity属性 | cursor属性 | font属性
257 0
|
7月前
Qt6.5打包(QT windeployqt不是内部或外部命令、QT错误:缺少libgcc_s_seh-1.dll ,无法正常启动(0xc000007b) 问题解决方法)
Qt6.5打包(QT windeployqt不是内部或外部命令、QT错误:缺少libgcc_s_seh-1.dll ,无法正常启动(0xc000007b) 问题解决方法)
791 1
|
7月前
|
编译器 C++
(10)Qt对象模型
(10)Qt对象模型