【Qt开发】No matching signal for on_toolButton_clicked() 解决方案

【Qt开发】No matching signal for on_toolButton_clicked() 解决方案

文章目录

No matching signal for xxx 解决方案

在使用Qt Creator进行ui设计和开发中

会遇见虽然编译不报错 也没有警告 但是运行后debug输出如下的问题

这是由于

连接了相关槽函数 但没有声明 更没有实例导致的

用ui设计的方式一般是自动进行连接 在moc_mainwindow.cpp中可以看到

而如果先前使用了一个按钮并建立了槽函数 后续又在ui中删掉了 则会出现该问题

如果出现了 建议建立一个相同的槽函数和ui里面的按钮出来 然后删掉槽函数定义、实例 重新编译 则自动会将moc_mainwindow.cpp进行更改

最后再删除ui中的按钮控件

附录:C语言到C++的入门知识点(主要适用于C语言精通到Qt的C++开发入门)

C语言与C++的不同

C语言是一门主要是面向工程的语言

C++则是面向对象

C语言中 某些功能实现起来较为繁琐

比如结构体定义:

一般写作:

c 复制代码
typedef struct stu_A
{
}A;

也可以写作:

c 复制代码
typedef struct 
{
}A;

但 大括号后面的名称是不可省去的

不过 C++的写法就比较简单

除了支持上述写法外

也支持直接声明

cpp 复制代码
typedef struct A
{
}

另外 C++是完全支持C语言库和语法的

不过C++里面的库也有些很方便的高级功能用法 只不过实现起来可能不如C的速度快

再者 C语言与C++的编译流程不一样

C语言没有函数重载 所以给编译器传参就是直接传函数名称

但是C++除了传函数名称外 还会穿函数的参数、类型等等 以实现函数重载

C++中写C语言代码

上文提到 C++可以完全兼容C的写法

但是编译流程也还是不一样

所以如果在编译层面进行C语言代码编译 则通常用以下方法:

cpp 复制代码
extern "C"
{
...
}

表面大括号内的内容用C的方法进行编译

另外 如果还是用C++的编译器 但要实现C语言函数 则需要用到C语言的库

在C语言中 我们一般用如下方法导入库

c 复制代码
#include <stdio.h>

此方法同样适用于C++ 但是C++可以更方便的写成去掉.h的方式

比如:

cpp 复制代码
#include <iostream>

在C++中 为了调用C语言的库 可以采用在原库名称前加一个"c"的方式导入

如:

cpp 复制代码
#include <cstdio>

这样就可以使用printf等函数了 甚至比C++的std方法更快

C语言到C++的知识点

Qt开发中需要了解的C++基础知识

namespace

C++面向对象的特性下诞生的一个名称

表示某个函数、变量在某个集合下 用作namespace

比如 <iostream>库中的关键字cin在std下 则写作std::cin

std就是namespace

::表示某空间下的某某

前面是空间名称 后面是变量、函数名称

using namespace可以告诉编译器以下都用xx名称空间

比如:

cpp 复制代码
using namespace std;
cout<<"a";

如果没有告诉编译器所使用的空间名称 则要写成:

cpp 复制代码
std::cout<<"a";

同样 可以自定义某一段代码属于哪个空间:

cpp 复制代码
namespace xx
{
...
}

输入输出

在C++中 用iostream作为输入输出流的库

cpp 复制代码
#include <iostream>

用cin和cout关键字进行输入和输出

如:

cpp 复制代码
using namespace std;
int a=0;
cin>>a; //输入到a

cout<<a;  //输出a

类比scanf和printf

同样 还有一个关键字endl表示换行

cout和cin的传参是不固定的

由编译器自行裁定

字符串类型

在C语言中 常用char *表示字符串

但是在C++中 可以直接用string类型

比如:

cpp 复制代码
char * s="456";
string str="123";

由于cout的特性 这两种字符串都可以直接打印

但如果使用C语言中printf的打印方式时 采用%s方式打印字符串 则不能传入string类型

class类

C++的核心就是class

同Python等支持面向对象的语言一样

可以理解成一个支持函数、继承、自动初始化、销毁的结构体

在class类中 有private私有、public公有变量

前者只能内部访问 后者可以外部调用使用

如:

cpp 复制代码
class A
{
public:
int a;
private:
int b;
}

a可以用A.a的方式方位 b则外部无法访问

构造函数和析构函数(解析函数)

构造函数可以理解成对类的初始化 反之析构函数则是退出时进行销毁前的函数

两者需要与类的名称相同 析构函数则在前面加一个~表示非

如:

cpp 复制代码
class A
{
public:
int a;
A();
~A();
private:
int b;
}

A::A()
{
...
}

A::~A()
{
...
}

构造函数可以定义传参 析构函数则不行

类的继承

如果有两个类A和B 想让A里面包含B 则可以写作继承的写法

继承后 A类的变量可以直接调用B下面的成员

如:

cpp 复制代码
class B
{
int b;
}
class A: public B
{
int a;
}

在定义A后 可以访问到B的成员b 当然 继承也可以私有

相关推荐
欢乐熊嵌入式编程31 分钟前
智能手表软件架构设计文档初稿
嵌入式硬件·物联网·开源软件·智能手表
DIY机器人工房4 小时前
[6-2] 定时器定时中断&定时器外部时钟 江协科技学习笔记(41个知识点)
笔记·stm32·单片机·学习·江协科技
dzzzs4 小时前
科技创业园共享会议室线上预约及智能密码锁系统搭建指南
物联网
忧虑的乌龟蛋5 小时前
嵌入式Linux I2C驱动开发详解
linux·驱动开发·嵌入式·iic·i2c·读数据·写数据
伐尘6 小时前
【Qt】编译 Qt 5.15.x For Windows 基础教程 Visual Studio 2019 MSVC142 x64
windows·qt·visual studio
吃面不喝汤667 小时前
破解 Qt QProcess 在 Release 模式下的“卡死”之谜
开发语言·qt
小智学长 | 嵌入式7 小时前
单片机-STM32部分:13-1、蜂鸣器
stm32·单片机·嵌入式硬件
#金毛8 小时前
六、STM32 HAL库回调机制详解:从设计原理到实战应用
stm32·单片机·嵌入式硬件
欢乐熊嵌入式编程9 小时前
智能手表 MCU 任务调度图
单片机·嵌入式硬件·智能手表
数澜悠客9 小时前
AI与IoT携手,精准农业未来已来
人工智能·物联网