Qt笔记——QString与隐式共享、MVC架构

目录

 

标准C++字符串类:

Qstring常用操作

‘+’操作

append和STL中vector一样的方法

arg()组合字符串

字符串转换

隐式共享

深拷贝与浅拷贝

官网手册描述

 举例

支持隐式共享的LIST

MVC架构

参考:


标准C++字符串类:

  1. C语言风格的以'\0'结尾的字符数组
  2. 字符串类string

Qt中当然可以使用以上两种,但是更常用的是功能更强大的QString

Qstring常用操作

  1. ‘+’操作

    QString str1="Qt";
    str1=str1+"is good";
  2. append
    和STL中vector一样的方法

  3. arg()组合字符串

    QString str;
    str=QString("%1 was born in %2.").arg("I").arg("1999");
    输出:I was born in 1999.

字符串转换

  • toInt()
  • toAscii()
  • toLatin1()
  • toUtf8()
  • toLocal8Bit()

隐式共享

深拷贝与浅拷贝

(1)深拷贝:即就是生成对象的一个完整的复制品;

(2)浅拷贝:只是一个引用复制(比如仅仅复制指向共享数据的指针)。

(3)隐式共享:也叫做回写复制(copy on write)

官网手册描述

很多Qt中的C++类运用了隐式数据共享机制去最大化资源有效利用和最小化复制克隆操作。隐式共享类当作为函数参数传递的时候,不仅安全而且效率很高,因为传递的时候只是传递的数据的指针,数据本身只当自己被修改的时候才会去复制。简称写时复制。

隐式共享可以降低对内存和CPU资源的使用,提高程序的运行效率。使用隐式共享能使得在函数中使用值传递更有效率,QString采用隐式共享技术,将深拷贝和浅拷贝很好地结合了起来 

 举例

    QString str1 = "ubuntu";
    //此时发生的是浅拷贝,两个qstring对象都指向同一数据结构
    QString str2 = str1;//str2 = "ubuntu"
    //对str2进行修改会导致一次深拷贝,但str1不会改变,因为str2指向的数据结构没有被共享
    str2[2] = "m";//str2 = "ubmntu",str1 = "ubuntu"
    str2[0] = "o";//str2 = "obmntu",str1 = "ubuntu"
    //此时str1指向的数据结构会在内存中释放掉
    str1 = str2;//str1 = "obmntu",

支持隐式共享的LIST

QBitArray
QBitmap
QBrush
QByteArray
QByteArrayList
QCache
QCollator
QCollatorSortKey
QCommandLineOption
QContiguousCache
QCursor
QDBusPendingCall
QDBusUnixFileDescriptor
QDateTime
QDebug
QDir
QDnsDomainNameRecord
QDnsHostAddressRecord
QDnsMailExchangeRecord
QDnsServiceRecordQDnsTextRecord
QFileInfo
QFont
QFontInfo
QFontMetrics
QFontMetricsF
QGlyphRun
QGradient
QHash
QHttpPart
QIcon
QImage
QKeySequence
QLinkedList
QList
QLocale
QMap
QMimeType
QMultiHash
QMultiMap
QNetworkAddressEntry
QNetworkCacheMetaData
QNetworkConfiguration
QNetworkCookie
QNetworkInterface
QNetworkProxy
QNetworkProxyQuery
QNetworkRequest
QOpenGLDebugMessage
QPainterPath
QPalette
QPen
QPersistentModelIndex
QPicture
QPixmap
QPolygon
QPolygonF
QProcessEnvironment
QQueue
QRawFont
QRegExp
QRegion
QRegularExpression
QRegularExpressionMatch
QRegularExpressionMatchIterator
QSet
QSslCertificate
QSslCertificateExtension
QSslCipher
QSslConfiguration
QSslError
QSslKey
QStack
QStaticText
QStorageInfo
QString
QStringList
QTextBlockFormat
QTextBoundaryFinder
QTextCharFormat
QTextCursor
QTextDocumentFragment
QTextFormat
QTextFrameFormat
QTextImageFormat
QTextListFormat
QTextTableCellFormat
QTextTableFormat
QUrl
QUrlQuery
QVariant
QVector

MVC架构

MVC全名是Model View Controller,是模型(model)-视图(view)-控制器(controller)的缩写,一种软件设计典范,用一种业务逻辑、数据、界面显示分离的方法组织代码,将业务逻辑聚集到一个部件里面,在改进和个性化定制界面及用户交互的同时,不需要重新编写业务逻辑。MVC被独特的发展起来用于映射传统的输入、处理和输出功能在一个逻辑的图形化用户界面的结构中。

MVC 是一种使用 MVC(Model View Controller 模型-视图-控制器)设计创建 Web 应用程序的模式: [1] 

  • Model(模型)表示应用程序核心(比如数据库记录列表)。

  • View(视图)显示数据(数据库记录)。

  • Controller(控制器)处理输入(写入数据库记录)。

MVC 模式同时提供了对 HTML、CSS 和 JavaScript 的完全控制。

Model(模型)是应用程序中用于处理应用程序数据逻辑的部分。
  通常模型对象负责在数据库中存取数据。

View(视图)是应用程序中处理数据显示的部分。
  通常视图是依据模型数据创建的。

Controller(控制器)是应用程序中处理用户交互的部分。
  通常控制器负责从视图读取数据,控制用户输入,并向模型发送数据。

MVC 分层有助于管理复杂的应用程序,因为您可以在一个时间内专门关注一个方面。例如,您可以在不依赖业务逻辑的情况下专注于视图设计。同时也让应用程序的测试更加容易。

MVC 分层同时也简化了分组开发。不同的开发人员可同时开发视图、控制器逻辑和业务逻辑。

参考:

https://doc.qt.io/qt-5/reference-overview.html

https://baike.baidu.com/item/MVC%E6%A1%86%E6%9E%B6/9241230?fr=aladdin

https://blog.csdn.net/u011450537/article/details/41674245

发布了228 篇原创文章 · 获赞 76 · 访问量 6万+

猜你喜欢

转载自blog.csdn.net/qq_41895747/article/details/103921981