error: LNK2001: 无法解析的外部符号 “public: virtual struct QMetaObject const * __cdecl

news2024/11/25 19:16:50

Qt系列文章目录

文章目录

  • Qt系列文章目录
  • 前言
  • 一、QtCreator中qmake命令是什么?
  • 2.解决

前言

我在代码中加入了对应的信号和槽,但编译仍然报错:

#ifndef PROJECTWIN_H
#define PROJECTWIN_H



namespace Ui {
class ProjectWin;
}


ProjectWin类声明头文件
class ProjectWin : public QWidget
{
    Q_OBJECT
public:
    static ProjectWin* getInstance();
    ~ProjectWin();

    FileMonitorMgr *m_fileMgr;
    QString m_paraFolder;
private:
    QTreeWidget* m_picTree;
//    QTreeWidget* m_paraTree;
    QWidget* m_naviWgt;

private:
    void initWidget();
    void initPicTree();
    void readParaFile(QString filePath);
private:
   
    QTextEdit*  m_paraText;
   

    static ProjectWin* m_pInstance;
private:
    explicit ProjectWin(QWidget *parent = nullptr);
    static void destroyInstance();

public Q_SLOTS:
   
    void slotParaInfo(QString imageName);
};

#endif // PROJECTWIN_H

ProjectWin类实现
#include "ProjectWin.h"
#include "ui_ProjectWin.h"

#pragma execution_character_set("utf-8")


ProjectWin* ProjectWin::m_pInstance = nullptr;

ProjectWin* ProjectWin::getInstance()
{
    if(!m_pInstance)
    {
        m_pInstance = new ProjectWin();
        atexit(destroyInstance);
    }
    return m_pInstance;
}

void ProjectWin::destroyInstance()
{
    if(m_pInstance)
    {
        delete m_pInstance;
        m_pInstance = nullptr;
    }
}

ProjectWin::~ProjectWin()
{
    delete ui;
}

ProjectWin::ProjectWin(QWidget *parent) :
    QWidget(parent),
    ui(new Ui::ProjectWin)
{
    ui->setupUi(this);

 

    //图像参数
    m_tabWidgetPara = new QTabWidget();
    m_paraText = new QTextEdit();
    m_tabWidgetPara->addTab(m_paraText, u8"图像参数数据");
    m_tabWidgetPara->setStyleSheet("border: 0");
    m_paraText->setStyleSheet("border: 0");

//    m_tabWidgetPara->setTabText(0, u8"图像参数数据");

   
    // 设置窗口的主布局
   
    this->setLayout(mainLayout);
}

void ProjectWin::onItemClicked(QTreeWidgetItem *item, int column)
{
    QString imageName = item->text(0);
    emit sigShowImageBorder(imageName);
}

void ProjectWin::initWidget()
{

    //    m_picTree->header()->hide();//设置隐藏头
}


void ProjectWin::slotParaInfo(QString imageName)
{
    QString fullPath = m_paraFolder + "/";
    QDir directory(m_paraFolder);
    QStringList filters;
    filters << "*.txt";

    directory.setNameFilters(filters);
    directory.setFilter(QDir::Files | QDir::NoDotAndDotDot);

    QFileInfoList fileInfoList = directory.entryInfoList();
    for (const QFileInfo &fileInfo : fileInfoList) {
        //        qDebug() << "Found:" << fileInfo.absoluteFilePath();
        QString fullPath = fileInfo.absoluteFilePath();
        if(imageName == fileInfo.fileName())
        {
            fullPath += imageName;
            readParaFile(m_paraFolder);
        }
    }
}

GraphicsView类实现实现
#ifndef GRAPHICSVIEW_H
#define GRAPHICSVIEW_H

#include <QtWidgets>
#include <QGraphicsView>
#include "GraphicsScene.h"
#include "GraphicsItem.h"

//#include <QGraphicViewMouseEvent>

class GraphicsScene;

class GraphicsView : public QGraphicsView
{
    Q_OBJECT
public:
    GraphicsView(QWidget *parent = nullptr)
    {


    }

protected:
    void mousePressEvent(QMouseEvent *event) override
    {
        if (event->button() == Qt::LeftButton && event->modifiers() == Qt::ControlModifier) {
            m_isMousePressed = true;
            m_lastMousePos = event->pos();
            setCursor(Qt::ClosedHandCursor);
        } else {
            if (event->button() == Qt::LeftButton) {
                QGraphicsItem *item = itemAt(event->pos());
                if(item)
                {
                    GraphicsItem* selectedItem = dynamic_cast<GraphicsItem*>(item);
                    if(selectedItem)
                    {
                        QString imageName = selectedItem->getImageName();
                        emit imageNameSelected(imageName);
                    }
                }
                setDragMode(RubberBandDrag);
                pressPosition = event->pos();
                m_startScenePos = mapToScene(event->pos());
                m_rubberBandDragging = true;
                m_multipleItemsSelected = (scene()->selectedItems().size() > 1);
            }
            QGraphicsView::mousePressEvent(event);
        }
    }

private:
    
Q_SIGNALS:
    void imageNameSelected(QString imageName);
};

#endif // GRAPHICSVIEW_H


ImageManager类定义
#ifndef IMAGEMANAGER_H
#define IMAGEMANAGER_H

#include <QWidget>
#include <QVector>
#include <QImage>
#include <QVBoxLayout>
#include "GraphicsItem.h"
#include "GraphicsView.h"
#include "GraphicsScene.h"
#include "ProjectWin.h"

class ImageManager : public QWidget
{
    Q_OBJECT
public:
    explicit ImageManager(/*ProjectWin* projectWin,*/QWidget *parent = nullptr);

private:
    GraphicsScene* m_scene;
    GraphicsView*  m_view;
    GraphicsItem*  m_item;
    QVector<GraphicsItem*> m_items;
    QVBoxLayout*   m_layout;

    QString m_watchPath;

//    ProjectWin* m_projectWin;
public Q_SLOTS:
    void setImagePosition(QVector<QString> &filesVec, QString &path, int groupType);

Q_SIGNALS:

};

#endif // IMAGEMANAGER_H


#include "ImageManager.h"
#include "ProjectWin.h"
#include <QMetaObject>

ImageManager::ImageManager(/*ProjectWin* projectWin,*/QWidget* parent)
    : QWidget(parent)/*, m_projectWin(projectWin)*//*, m_scene(new GraphicsScene(this)), m_view(new GraphicsView()), m_layout(new QVBoxLayout(this))*/ {

    m_scene = new GraphicsScene(this);
	m_view = new GraphicsView;

    


    m_layout = new QVBoxLayout(this);
    m_layout->addWidget(m_view);
	setLayout(m_layout);

    int winWidth = 2048;  //1642
    int winHeight = 1050;   //692
//    setFixedSize(winWidth, winHeight);
    resize(winWidth, winHeight);

	
    connect(m_view, &GraphicsView::imageNameSelected, ProjectWin::getInstance(), &ProjectWin::slotParaInfo);

}

ImageManager.obj👎 error: LNK2001: 无法解析的外部符号 "public: virtual struct QMetaObject const * __cdecl GraphicsView::metaObject(void)const " (?metaObject@GraphicsView@@UEBAPEBUQMetaObject@@XZ)
ImageManager.obj👎 error: LNK2001: 无法解析的外部符号 “public: virtual void * __cdecl GraphicsView::qt_metacast(char const *)” (?qt_metacast@GraphicsView@@UEAAPEAXPEBD@Z)
ImageManager.obj👎 error: LNK2001: 无法解析的外部符号 “public: virtual int __cdecl GraphicsView::qt_metacall(enum QMetaObject::Call,int,void * *)” (?qt_metacall@GraphicsView@@UEAAHW4Call@QMetaObject@@HPEAPEAX@Z)
ImageManager.obj👎 error: LNK2019: 无法解析的外部符号 “public: void __cdecl GraphicsView::imageNameSelected(class QString)” (?imageNameSelected@GraphicsView@@QEAAXVQString@@@Z),函数 “public: __cdecl ImageManager::ImageManager(class QWidget *)” (??0ImageManager@@QEAA@PEAVQWidget@@@Z) 中引用了该符号
debug\ImageManageSys.exe👎 error: LNK1120: 5 个无法解析的外部命令

一、QtCreator中qmake命令是什么?

qmake是一个跨平台的项目文件生成工具,它由Qt开发并维护。它的主要任务是读取你的项目文件(通常是.pro文件),并生成相应的Makefile或其他构建系统的配置文件。这些生成的配置文件可以被make或其他构建工具用来编译和链接你的Qt应用程序或库。

主要的作用如下:

生成构建配置文件:qmake读取.pro项目文件,生成对应平台或编译系统的构建配置文件(如Makefile,或者其他如Visual Studio项目文件)。

处理Qt特有的构建任务:qmake能处理Qt的一些特有的构建任务,如处理Qt的资源文件(.qrc)、用户界面文件(.ui)和处理为了实现Qt元对象系统而需要的moc(元对象编译器)文件。

跨平台兼容性:qmake可以生成不同平台和不同编译系统的构建配置文件,这使得Qt能够跨平台使用。你可以在一个平台上编写.pro文件,然后在其他平台上使用qmake来生成对应的构建配置文件。

使用qmake的基本步骤通常是:

编写一个.pro文件,描述项目的源文件、头文件、资源文件、需要的Qt模块等信息。
在命令行中运行qmake命令,根据.pro文件生成构建配置文件(如Makefile)。
运行make(或其他编译工具,如nmake、jom等)来编译和链接程序。
在Qt Creator中,这些步骤通常会被自动执行。当你修改.pro文件或者需要重新生成构建配置文件时,可以在Qt Creator中手动运行qmake。

2.解决

在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/519500.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Google Bard使用初体验,与ChatGPT比较到底怎么样

文章目录 Google Bard 介绍如何使用Google bardbard和ChatGPT3.5的区别 本文讲述了Google bard的入门教程和使用技巧&#xff0c;并且与竞争对手ChatGPT进行了一个全方面的比较。这是 Google 不能输的战役&#xff0c;也是全面 AI 的时刻。 Google Bard 介绍 Google Bard已经于…

【数据结构】链表(C语言)

创作不易&#xff0c;本篇文章如果帮助到了你&#xff0c;还请点赞 关注支持一下♡>&#x16966;<)!! 主页专栏有更多知识&#xff0c;如有疑问欢迎大家指正讨论&#xff0c;共同进步&#xff01; &#x1f525;c语言系列专栏&#xff1a;c语言之路重点知识整合 &#x…

JUC之集合类

JUC包提供了一些并发安全的集合类&#xff0c;用于在多线程环境下进行共享数据的操作&#xff0c;以解决多线程间的竞争条件和线程安全问题。 CopyOnWriteArrayList 相当于线程安全的ArrayList public class ListTest {public static void main(String[] arge){List<Strin…

【项目-前后端交互-项目】表白墙【servlet实践】

【项目—前后端交互 案例】表白墙 代码示例: 服务器版表白墙1. 准备工作2. 约定前后端交互接口3. 实现服务器端代码创建 Message 类创建 MessageServlet 类 4. 调整前端页面代码5. 数据存入文件.6. 数据存入数据库1) 在 pom.xml 中引入 mysql 的依赖2) 创建数据库, 创建 messag…

ModuleNotFoundError: No module named ‘Multiscaledeformableattention‘

在实现DINO Detection方法时&#xff0c;我们可能会遇到以上问题。因为在DeformableAttention模块&#xff0c;为了加速&#xff0c;需要自己去编译这个模块。 如果你的环境变量中能够找到cuda路径&#xff0c;使用正确的torch版本和cuda版本的话&#xff0c;这个问题很容易解…

代码随想录算法训练营第三十九天 | 不同路径(挺简单的)

62.不同路径 文档讲解&#xff1a;代码随想录 (programmercarl.com) 视频讲解&#xff1a;动态规划中如何初始化很重要&#xff01;| LeetCode&#xff1a;62.不同路径_哔哩哔哩_bilibili 状态&#xff1a;能直接做出来。 思路 机器人从(1 , 1) 位置出发&#xff0c;到(m, n)终…

对抗训练方法:保卫人工智能的盾牌

❤️觉得内容不错的话&#xff0c;欢迎点赞收藏加关注&#x1f60a;&#x1f60a;&#x1f60a;&#xff0c;后续会继续输入更多优质内容❤️ &#x1f449;有问题欢迎大家加关注私戳或者评论&#xff08;包括但不限于NLP算法相关&#xff0c;linux学习相关&#xff0c;读研读博…

【纳什博弈、ADMM】基于纳什博弈和交替方向乘子法的多微网主体能源共享研究(Matlab代码实现)

&#x1f4a5;&#x1f4a5;&#x1f49e;&#x1f49e;欢迎来到本博客❤️❤️&#x1f4a5;&#x1f4a5; &#x1f3c6;博主优势&#xff1a;&#x1f31e;&#x1f31e;&#x1f31e;博客内容尽量做到思维缜密&#xff0c;逻辑清晰&#xff0c;为了方便读者。 ⛳️座右铭&a…

ch07-Pytorch的训练技巧

ch07-Pytorch的训练技巧 0.引言1.模型保存与加载1.1.序列化与反序列化1.2.PyTorch 中的模型保存与加载1.3.模型的断点续训练 2.模型 Finetune2.1.Transfer Learning & Model Finetune2.2.PyTorch中的Finetune 3.使用 GPU 训练模型3.1.CPU与GPU3.2.数据迁移至GPU3.3. 多 GPU…

mac下安装cnpm淘宝镜像

在mac安装cnpm时&#xff0c;输入npm install -g cnpm -registryhttps://registry.npm.taobao.org 报错&#xff1a; npm ERR! code EACCES npm ERR! syscall mkdir npm ERR! path /usr/local/lib/node_modules/cnpm npm ERR! errno -13 npm ERR! Error: EACCES: permission de…

单细胞 | label transfer with Seurat4(未知细胞映射到注释好的细胞图谱)

场景&#xff1a;把新的细胞比对到已经注释过的细胞集合上&#xff0c;获取映射后的细胞标签&#xff0c;UMP坐标。 准备&#xff1a; 一个分析好的单细胞图谱数据集&#xff0c;作为reference数据集。一个新的单细胞counts矩阵&#xff0c;记为 query数据集。 主要分为两个步…

在浏览器从输入URL到页面加载完成都经历了什么/一个完整的URL解析过程详细介绍

一、简述在浏览器从输入URL到页面加载完成都经历了什么 浏览器地址栏输入url地址&#xff0c;首先要在客户端上进行url解析 浏览器会首先查看自身的缓存&#xff0c;如果浏览器缓存中有对应的解析记录&#xff0c;直接返回结果 如果浏览器没有缓存&#xff0c;电脑会查看本地操…

Selenium+Unittest自动化测试框架实战(框架源码都给你)

目录 前言 项目框架 首先管理时间 !/usr/bin/env python3 -- coding:utf-8 -- 配置文件 conf.py config.ini# 读取配置文件 记录操作日志 简单理解POM模型 管理页面元素 封装Selenium基类 创建页面对象 熟悉unittest测试框架 编写测试用例 执行用例 生成测试报…

qemu-ARM篇——ARM 栈帧(一)

ARM 栈帧 本系列均已 corter-A7(armv7-a) 为例 在 ARM 中&#xff0c;通常为满减栈&#xff08;Full Descending FD&#xff09;, 也就是说&#xff0c;堆栈指针指向堆栈内存中最后一个填充的位置&#xff0c;并且随着每个新数据项被压入堆栈而递减。 栈的本质 要理解栈的本…

前端CSS学习(三)

1、盒子模型 盒子的概念1、页面中的每一个标签&#xff0c;都可看做是一 个“盒子” &#xff0c;通过盒子的视角更方便的进行布局2、浏览器在渲染 (显示)网页时&#xff0c;会将网页中的元素看做是一个个的矩形区域&#xff0c;我们也形象的称之为盒子CSS中规定每个盒子分别由…

BESV博世蔚发布2023全新款折叠e-bike —— F3,在中国自行车展会上大放异彩

BESV博世蔚身为跨界智慧出行的专家&#xff0c;今年在国内最大规模的中国国际自行车展上发布了其最新的e-bike折叠车款---VOTANI F3。拥有纯正荷兰血统的VOTANI系列车款&#xff0c;在设计外观上沿袭了欧风的极简主义和时尚设计&#xff0c;并搭配上折叠系统更易于携带和收纳。…

AnyStock JS Crack,AnyStock JS功能

AnyStock JS Crack,AnyStock JS功能 添加了新的技术指标-除了已经支持的几十个指标外&#xff0c;股票图表现在还提供了三个新的开箱即用技术指标&#xff1a; Aroon振荡器-通过从Aroon Up中减去Aroon Down&#xff0c;可以很容易地测量趋势的强度。 加权移动平均线(WMA)-通过更…

D-遗迹探险

牛客小白月赛 72 D 题目链接 链接&#xff1a;https://ac.nowcoder.com/acm/contest/56825/D 来源&#xff1a;牛客网 示例1 输入 3 3 1 2 3 4 5 6 7 8 9 2 2 1 1 3 3 3 1 1 1 3 3 1输出 58 41题解&#xff1a; 如果先不考虑传送门&#xff0c;这题就是一道简单dp 设状态 …

【后端随笔】mysql操作语句记录

sql语句不区分大小写 show bases&#xff1b; --号注释 /**/多行注释 DDL定义 DML删改 DQL查询 DCL权限控制语言 1、DDL操作数据库 &#xff08;1&#xff09;查询 SHOW DATABASES; (2)创建 CREATE DATABASES;//创建数据库 CREATE DATABASES IF NOT EXISTS 数据库名称&#xff…