Qt 学习(更新中)

Qt 的开发有两种模式,一种是纯代码写 ui,另一种是拖过拖拉拽的方式写 ui
本文更加偏向后者。
因此,在“设计模式”界面中的 每一块工作区是干嘛的,有必要先搞清楚。

一、Qt 基础知识

1、Qt 是什么?
答:Qt 是一个跨平台的 C++ 图形用户界面库。用于桌面、移动设备和嵌入式开发。

2、如何上手 Qt ?
答:(1)超详细 Qt 6.5 安装和使用教程丨小白专用丨零基础丨C++ QT开发环境丨IDE_哔哩哔哩
       (2)QT学习笔记1(创建第一个QT工程)- 优快云博客

3、Qt 中有哪些控件?哪些是常用的?常用控件有哪些属性?对控件的如何做布局管理
答:所有的控件:见“设计模式”下的“控件盒子”。
       常用的控件、及其属性:可参考:Qt 常用控件-优快云博客  

4、如何设置控件的外观
答:(1)依旧参考:Qt 常用控件-优快云博客
       (2)setStyleSheet 函数,可以参考:setStyleSheet 的用法-优快云博客
                包括:背景颜色和图片、文本颜色和字体、边框、阴影、圆角、鼠标悬停效果。
        (3)调色板 QPalette
                 包括:控件在不同状态下的颜色。例如正常状态、禁用状态等。
                        QPalette palette = ui->pushButton->palette();
                        palette.setColor(QPalette::Button, QColor(255, 0, 0));  // 设置按钮背景色为红色                         palette.setColor(QPalette::ButtonText, Qt::white);       // 设置按钮文本颜色为白色
                        ui->pushButton->setPalette(palette);
        (4)直接设置属性
                ui->pushButton->setIcon(QIcon(":/path/to/icon.png"));  // 设置按钮图标
                ui->pushButton->setText("按钮文本");                           // 设置按钮文本

5、如何查看控件有哪些信号
答:以 QLineEdit 控件为例,先选中控件,再鼠标右键,最后点击“转到槽”,即可查看

6、如何连接信号与槽?
答:(1)使用 connect() 函数:Qt 5 及以上推荐
        a、函数指针写法:connect(sender, &Sender::signal, receiver, &Receiver::slot);
                sender: 发出信号的指针对象。           signal(): 发出的信号函数。
                receiver: 接收信号的指针对象。         slot(): 用于处理信号的槽函数。

        b、Lambda 表达式写法:connect(sender, &Sender::signal, this, [=](){
                // 处理信号的代码,相当于 槽函数的实现部分        });

        (2)直接从信号,转到槽
        结合第四点,选择信号后,将会自动跳转并在 widget.cpp 中生成“空的槽函数”。

7、如何实现槽函数

答:槽函数里面,具体写什么东西?取决于你的项目中想要实现什么功能。

widget.h 文件中,添加项目中用到的:宏定义、头文件
 widget.h 中的 public: 中,添加:事件方法
 widget.h 中的 private slots: 中,添加:自定义的槽函数(非自动生成的)
 widget.h 中的 private: 中,添加:指针、变量

widget.cpp 中的构造函数中,做一些初始化操作:初始化变量、初始化操作
        ui(new Ui::Widget){        ui->setupUi(this);        // 在这里添加        }

widget.cpp 中,编写自动生成的、自定义的槽函数、以及事件方法的实现逻辑。

比如我想要:点击取消按钮后,关闭窗口,那你可以这么写:
        void Widget::on_cancelButton_clicked(){
            this->close();
        }

8、在槽函数中,正确使用 ui 指针和 this 指针

ui :操作界面上的控件(如按钮、标签、文本框等)时,使用 ui 指针。
作用:
(1)访问和操作界面上的控件:ui->controlName
(2)设置控件属性:ui->controlName->setProperty("propertyName", value)
(3)连接控件的信号和槽:
             connect(ui->controlName, &ControlType::signalName, this, &MyWidget::slotName);

this:操作窗口自身属性(如标题、大小、位置等)或调用窗口自身方法时,使用 this 指针。
作用:
(1)访问当前对象的成员变量:this->variableName
(2)调用当前对象的成员函数:this->functionName()
(3)在构造函数中初始化成员变量:this->variableName = value
(4)作为函数参数传递当前对象:someFunction(this)

二、做个计算器?

1、先用拖拉拽的方式,建好 ui 界面。注意:要对控件重命名。

2、对每个按键,实现槽函数(注意添加 头文件变量

(1)清除键,内容:
        currentInput.clear();        // 清空字符串内容(currentInput 的定义见下图)
        ui->lineEdit->clear();       // 清空显示框 
        

(2)数字键,以数字“1”为例:
        QString digit = ui->one->text();        // 获取按钮对象的内容,存入digit
        if (clearOnNextInput) {                 // 判断是否清空,默认不清空
              ui->lineEdit->clear();              // 那就先把显示框中的第一个数,清空
              clearOnNextInput = false;     // 不请空(clearOnNextInput 的定义见上图)
        }
        // 更新当前输入
        ui->lineEdit->setText(currentInput);        // 其它数字键,同理

        当然,我们也可以尝试另一种做法:
        多个数字按钮共享逻辑,统一为一个槽函数,再将所有的数字按钮使用 connect() 语句连接。

(3)加法键,内容:
        QString displayValue = ui->lineEdit->text();        // 获取显示屏上的数值
        // 将显示屏的数值转为double型,并保存到operand1中(operand 的定义见上图)
        operand1 = displayValue.toDouble();
        currentOperator = "+";         // 将当前操作符设置为"+"(currentOperator 的定义见上图)
        clearOnNextInput = true;    // 指示下一次输入时,需要清空输入框

(4)等于键,内容:
        QString displayValue = ui->lineEdit->text();        // 获取显示屏上的数值
        // 将显示屏上的数值转换为double类型,并保存到operand2中
        double operand2 = displayValue.toDouble();
        double result = 0;        ​​​​​​​// 初始化计算结果
        if (currentOperator == "+") {        // 如果当前操作符是"+"
                result = operand1 + operand2;    // 执行加法运算,其它运算同理
        }
        ...
        ui->lineEdit->setText(QString::number(result));   // 将计算结果转为字符串,并显示

至此,一个简易的计算器已经编写完成。其中还有部分知识暂未提到,将在后文继续介绍。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值