【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 当然 继承也可以私有

相关推荐
Wallace Zhang2 小时前
STM32 - Embedded IDE - GCC - 显著减少固件的体积
stm32·单片机·嵌入式硬件
谱写秋天3 小时前
Qt 5.5 的安装与配置(使用 VSCode编辑)
开发语言·vscode·qt
fengfuyao98513 小时前
STM32如何定位HardFault错误,一种实用方法
stm32·单片机·嵌入式硬件
爱学习的颖颖13 小时前
EXTI外部中断的执行逻辑|以对射式红外传感器计次为例
单片机·嵌入式硬件·exti中断
AI精钢15 小时前
H20芯片与中国的科技自立:一场隐形的博弈
人工智能·科技·stm32·单片机·物联网
etcix17 小时前
implement copy file content to clipboard on Windows
windows·stm32·单片机
谱写秋天18 小时前
在STM32F103上进行FreeRTOS移植和配置(STM32CubeIDE)
c语言·stm32·单片机·freertos
前端市界18 小时前
前端视角: PyQt6+Vue3 跨界开发实战
前端·qt·pyqt
globbo21 小时前
【嵌入式STM32】I2C总结
单片机·嵌入式硬件
shengyicanmou21 小时前
深度解码格行无缝切网引擎:40%延迟降低背后的多网智能切换架构
人工智能·物联网·智能硬件