QT开发积累——qt中角度弧度的转化函数,三角函数的使用

在这里插入图片描述

引出

QT开发积累——qt中角度弧度的转化函数,三角函数的使用


qt中的角度弧度转化

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传


总结

QT开发积累——qt中角度弧度的转化函数,三角函数的使用

日积月累,开发集锦

方法参数加const和不加const的区别

在Qt和C++中,方法参数是否加const关键字主要影响该参数在方法内部的修改权限。下面是加const和不加const的区别:

不加const

  1. 可修改性:如果方法参数没有声明为const,那么在该方法内部,你可以修改这个参数的值。
  2. 适用场景:当你需要在方法内部修改传入的参数时,不应该使用const

const

  1. 不可修改性:如果方法参数声明为const,那么在该方法内部,你不能修改这个参数的值。任何尝试修改const参数的行为都会导致编译错误。
  2. 适用场景:当你希望确保方法不会修改传入的参数时,应该使用const。这有助于提高代码的可读性和可维护性,因为它清楚地表明了方法的意图。
  3. 性能优势:在某些情况下,编译器可能会对const参数进行优化,例如通过避免不必要的复制来提高性能。
  4. 安全性:使用const可以减少意外修改参数的风险,从而提高代码的健壮性。

示例

假设有一个Qt类MyClass,它有一个方法process,该方法接受一个字符串参数:

class MyClass : public QObject {
   
   
    Q_OBJECT

public:
    void process(QString& text) {
   
   
        // 可以修改text
        text.append(" (modified)");
    }

    void print(const QString& text) const {
   
   
        // 不能修改text
        // text.append(" (modified)"); // 这将导致编译错误
        qDebug() << text;
    }
};
  • process方法中,参数text没有声明为const,因此可以在方法内部修改它。
  • print方法中,参数text声明为const,因此不能在方法内部修改它。

总结来说,方法参数加const主要是为了确保该参数在方法内部不被修改,从而提供更好的代码清晰度和安全性。如果不加const,则意味着参数可以在方法内部被修改。根据方法的实际需求和设计意图,选择合适的const使用方式。

方法加static和不加static的区别

在Qt类中,方法(成员函数)是否声明为static主要影响该方法的访问方式和作用域。下面是static方法和非static方法之间的主要区别:

static方法(实例方法)

  1. 访问方式:非static方法必须通过类的实例(对象)来调用。这意味着你需要先创建一个类的对象,然后才能调用其方法。
  2. 访问成员变量:非static方法可以访问类的所有成员变量,包括privateprotected成员。
  3. 作用域:每个对象都有自己的一组非static成员变量的副本,因此非static方法操作的是调用它的对象的成员变量。
  4. 生命周期:非static方法的生命周期与对象的生命周期相关联。

static方法(类方法)

  1. 访问方式static方法可以直接通过类名来调用,无需创建类的实例。例如,ClassName::staticMethod()
  2. 访问成员变量static方法只能访问类的static成员变量。它不能直接访问非static成员变量,因为static方法不与任何特定的对象实例关联。
  3. 作用域static方法属于类本身,而不是类的任何特定实例。因此,它操作的是类的static成员变量,这些变量在所有实例之间共享。
  4. 生命周期static方法的生命周期与程序的生命周期相同,不依赖于对象的创建或销毁。

示例

假设有一个Qt类MyClass,它有一个非static方法nonStaticMethod()和一个static方法staticMethod()

class MyClass : public QObject {
   
   
    Q_OBJECT

public:
    MyClass() {
   
   }

    void nonStaticMethod() {
   
   
        // 可以访问非static成员变量
        // 必须通过对象调用
    }

    static void staticMethod() {
   
   
        // 只能访问static成员变量
        // 可以直接通过类名调用
    }

private:
    int nonStaticVar;
    static int staticVar;
};

int MyClass::staticVar = 0;
  • 调用nonStaticMethod()
MyClass obj;
obj.nonStaticMethod();

调用staticMethod()

  • MyClass::staticMethod();
    

总结来说,static方法和非static方法的主要区别在于它们如何与类的实例和成员变量交互,以及如何被调用。static方法更像是全局函数,但它们属于类,并且只能访问类的static成员。而非static方法则与类的实例紧密相关,可以访问所有类型的成员变量。

Qt遍历list提高效率

在Qt中遍历QList或其他容器时提高运算效率主要依赖于以下几点:

  1. 使用迭代器而非索引访问:对于QList和其他Qt容器类,使用迭代器进行遍历通常比使用索引访问元素更高效,特别是在非随机访问容器(如QList对于大型对象)中。这是因为迭代器直接引用容器中的元素,而不是通过索引重新计算位置。
QList<int>::iterator it;
for (it = list.begin(); it != list.end(); ++it) {
    // 使用 *it 访问元素
}

或者使用C++11的范围基于的for循环:

for (int &element : list) {
    // 使用 element
}

避免不必要的对象复制:如果你的QList包含的是自定义类型或大型对象,请确保在遍历时使用引用(或常量引用,如果你不需要修改它们),这样可以避免遍历过程中对象的不必要拷贝。

for (CustomType &item : list) {
   
   
    // 使用 item
}

如果不需要修改元素,使用常量引用:

for (const CustomType &item : list) {
   
   
    // 只读访问 item
}

考虑使用更合适的容器QList是一个非常通用的容器,但并不总是最高效的选择。如果你需要频繁地在序列中间插入或删除元素,可能会更倾向于使用QLinkedList。如果元素经常被访问(特别是随机访问),则QVector可能是更好的选择。选择最适合你需求的容器类型可以显著提高性能。

减少遍历次数:有时可以通过算法优化来减少对容器的遍历次数。例如,如果可能,尝试将多个操作合并到单个遍历中完成,而不是对同一个列表进行多次遍历。

使用Qt Concurrent进行并行处理:对于大型数据集和可以并行处理的任务,考虑使用Qt Concurrent模块中的函数,如QtConcurrent::map,它可以自动地将任务分配到多个线程中执行,从而利用多核处理器的优势。

#include <QtConcurrent>

void processItem(int &item) {
   
   
    // 对 item 进行处理
}

QList<int> list = ...;
QtConcurrent::map(list, processItem);

遵循这些指导原则可以帮助你在Qt应用程序中提高遍历QList(以及其他容器)的运算效率。然而,请记住,性能优化应该是基于实际需要和通过分析确定的瓶颈来进行的。在许多情况下,代码的清晰性和可维护性比微小的性能提升更为重要。

显示函数的调用

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

使用&与不使用&

在C++中,使用&与不使用&在for循环中会产生不同的行为:

  1. 使用 &: 当在范围for循环(range-based for loop)中使用引用符号&
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Arya's Blog

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值