DAY13

面试遇到的新知识点

char str[10],只有10个字符的空间,但是只能存储9个字符,最后一个字符用来存储终止符'\0'

strlen只会计算'\n',不会计算'\0'

值传递:

cpp 复制代码
void test2(char * str)
{
    str = "hello\n";
}

int main()
{
    char * str;
    test2(str);
    cout << str;
    return 0;
}

引用传递

cpp 复制代码
void test3(char ** str)
{
    *str = "hello\n";
}

int main()
{
    char * str;
    test3(&str);
    cout << str;
    return 0;
}

只有传变量的地址对变量进行解引用才能够修改变量的值。

空类里面有什么?

默认成员函数

1.默认构造

2.拷贝构造

3.赋值运算符

4.移动构造

5.移动赋值

6.析构函数

关于最近的一些面试感受

明显感觉好多岗位都交叉着QT,别人问我QT我都答不上来,只能说一个信号槽和用QT封装了简单的网页。

感觉拿不出手,得好好钻研QT了,至少能吹的出来。

c++的排序算法,快排,堆排,后面还要继续更新一个归并排序,将这三个排序算法掌握基本是够用了;

池性组件,后面还要更新内存池,连接池之类的。

然后把基本的排序和池性组件理清楚,边开始学QT边写算法题。目前来看回溯算法算是入门了,但是动态规划,贪心算法和单调栈还是不清楚,争取把这些搞掉。今天开始学习QT,历时一个礼拜应该能小有成就吧。

QT

QT Creator的界面介绍

项目的结构

简单的QT程序

复制代码
MainWindow::MainWindow(QWidget *parent)
    : QMainWindow(parent)
    ,lab(new QLabel("hello",this))
    , ui(new Ui::MainWindow)
{
    ui->setupUi(this);
    // 设置标签的位置
    lab->setGeometry(100,100,200,200);
    // 设置标签的颜色
    lab->setStyleSheet("QLabel{background-color:green;color:red}");
    // 设置字体的大小
    lab->setFont(QFont("楷书",22));
}

信号槽机制

信号(signal)

信号的本质是事件,信号展现方式就是函数。当一个事件发生之后,则发出一个信号(signal)。

槽(slot)

对信号响应的函数

槽与普通函数的区别:

槽函数可以与一个信号关联,当信号被发射的时候,关联的槽函数被自动执行处理

信号与槽关联是使用**QObject::connect()**函数进行实现

connect

sender:发出信号的对象

signal:sender对象的信号

receiver:信号接收者

method:receiver对象的槽函数,当检测到sender信号,receiver对象调用method方法

信号与槽的连接方式

一个信号可以与另一个信号相连

复制代码
// 信号一可以触发信号二的发送
connect(object1,SIGNAL(signal1),object2,SIGNAL(signal1));

同一个信号可以和多个槽相连

复制代码
connect(object1,SIGNAL(signal1),object2,SIGNAL(slot1));
connect(object1,SIGNAL(sIgnal1),object3,SIGNAL(slot2));

同一个槽可以响应多个信号

复制代码
connect(object1,SIGNAL(signal1),object2,SIGNAL(slot1));
connect(object3,SIGNAL(signal3),object2,SIGNAL(slot1));

常用连接方案

复制代码
connect(object1,SIGNAL(signal),object2,SLOT(slot));

实战

计算圆球体积

头文件

头文件(dialog.h)
cpp 复制代码
#ifndef DIALOG_H
#define DIALOG_H
​
#include <QDialog>
// 引入标签,命令按钮
#include<qlabel.h>
#include<qpushbutton.h>
#include<qlineedit.h>
​
class Dialog : public QDialog
{
    Q_OBJECT
​
public:
    Dialog(QWidget *parent = nullptr);
    ~Dialog();
private:
    QLabel *lab1, *lab2;
    QLineEdit *lEdit;
    QPushButton *pbt;
​
// 设置槽函数
public slots:
    void CalculateCircleV();
};
#endif // DIALOG_H
main.cpp
cpp 复制代码
#include "dialog.h"
#include <QApplication>
​
int main(int argc, char *argv[])
{
    QApplication a(argc, argv);
    Dialog w;
    // 设置标题
    w.setWindowTitle("计算圆球体积");
    w.show();
    return a.exec();
}
dialog.cpp
cpp 复制代码
#include "dialog.h"
#include<QGridLayout>
const static double PI=3.1415;
​
Dialog::Dialog(QWidget *parent)
    : QDialog(parent)
{
    // 标签一(提示输入)
    lab1 = new QLabel(this);
    lab1->setText("请输入圆球的半径:");
    // 标签二(显示结果)
    lab2 = new QLabel(this);
​
    // 创建一个编辑框空间(专门用于接收用户的输入圆球半径的值)
    lEdit = new QLineEdit(this);
​
    // 创建命令按钮
    pbt = new QPushButton(this);
    pbt->setText(tr("计算圆球体积"));
​
    // 表格布局
    QGridLayout *lay = new QGridLayout(this);
    // 第一行的第一列
    lay->addWidget(lab1,0,0);
    // 第一行的第二列
    lay->addWidget(lEdit,0,1);
    lay->addWidget(lab2,1,0);
    lay->addWidget(pbt,1,1);
​
    // 将编辑框信号与槽函数关联,只要文本发生改变就会调用槽函数
    // connect(lEdit, SIGNAL(textChanged(QString)),this,SLOT(CalculateCircleV()));
    // 将按钮信号与槽函数关联,只有点击按钮,才会调用槽函数
    connect(pbt, SIGNAL(clicked()),this,SLOT(CalculateCircleV()));
​
}
​
Dialog::~Dialog()
{
}
void Dialog::CalculateCircleV()
{
    bool isLoop;
    QString str;
    QString val = lEdit->text();
    int num = val.toInt(&isLoop);
    double result = 4.0/3.0*PI*num*num;
    lab2->setText(str.setNum(result));
}
相关推荐
槿花Hibiscus22 分钟前
C++基础:Pimpl设计模式的实现
c++·设计模式
黑不拉几的小白兔1 小时前
PTA部分题目C++重练
开发语言·c++·算法
写bug的小屁孩1 小时前
websocket身份验证
开发语言·网络·c++·qt·websocket·网络协议·qt6.3
chordful1 小时前
Leetcode热题100-32 最长有效括号
c++·算法·leetcode·动态规划
材料苦逼不会梦到计算机白富美2 小时前
线性DP 区间DP C++
开发语言·c++·动态规划
ahadee2 小时前
蓝桥杯每日真题 - 第12天
c++·vscode·算法·蓝桥杯
vortex52 小时前
解决 VSCode 中 C/C++ 编码乱码问题的两种方法
c语言·c++·vscode
对愁眠3 小时前
【鸣潮,原神PC端启动器】仿二次元手游PC端游戏启动器,以鸣潮为例。
qt·c/c++
清风fu杨柳4 小时前
centos7 arm版本编译qt5.6.3详细说明
开发语言·arm开发·qt
清风fu杨柳4 小时前
麒麟服务器工作站SP1 arm环境qt5.6.3源码编译
服务器·arm开发·qt