Qt中的全局函數講解集合(全)

在頭文件<QtGlobal>中包含了Qt的全局函數,現在就這些全局函數一一詳解。

1.qAbs

原型:

template <typename T> T qAbs(const T &t)

一個用于計算絕對值的函數。它可以用于計算各種數值類型的絕對值,包括整數、浮點數等

示例如下:

#include <QtCore/QCoreApplication>
#include <QtCore/qmath.h>
#include <iostream>int main(int argc, char *argv[])
{QCoreApplication a(argc, argv);int num1 = -5;double num2 = -3.14;// 使用qAbs計算絕對值int absNum1 = qAbs(num1);double absNum2 = qAbs(num2);std::cout << "The absolute value of " << num1 << " is " << absNum1 << std::endl;std::cout << "The absolute value of " << num2 << " is " << absNum2 << std::endl;return a.exec();
}

2.qAsConst

原型:

template <typename T> typename std::add_const<T>::type &qAsConst(T &t)
template <typename T> void qAsConst(T&& t)

官方的解釋:

  • 這個函數實現了C++17標準中的std::as_const()函數的功能,將一個非常量的左值轉為常量的左值。
  • 增加qAsConst函數是為了Qt自己的非const 的容器能實現C++11標準的基于范圍的循環。
  • 該函數主要用于qt容器在隱式共享中不被detach。

? 最直觀的的作用就是將一個對象轉換為常量引用。在 C++ 里,如果你有一個非?const?對象,而你又希望在某些場景下把它當作?const?對象來使用(例如傳遞給一個只接受?const?引用的函數),qAsConst?就可以發揮作用。

????????從上文的描述,我們知道下面的代碼:

QString s = ...;
for (QChar ch : s) // detaches 's' (performs a deep-copy if 's' was shared)process(ch);

當s被修改時,將會導致s被detach,繼而再執行深拷貝,而下面的代碼s不會被detach,當然也就不會再執行深拷貝了

for (QChar ch : qAsConst(s)) // ok, no detach attemptprocess(ch);

當然,在這種情況下,你也許會說,像下面那樣將s聲明為const,也不會執被detach:

 const QString s = ...;for (QChar ch : s) // ok, no detach attempt on const objectsprocess(ch);

但是在編程時、在現實中,聲明為const往往不容易做到。對Qt自己實現的容器如:QVector、QMap、 QHash、QLinkedList、QList等,如果一定要用基于for(var : container)范圍的循環,則請用如下形式:

for(var : qAsConst(container))

3.qBound

原型:

template <typename T> const T &qBound(const T &min, const T &val, const T &max)

其功能是把一個值限定在指定的最小值和最大值范圍內。當該值小于最小值時,它會返回最小值;當該值大于最大值時,它會返回最大值;若該值處于最小值和最大值之間,則直接返回該值。

在實際開發中,qBound?函數常用于以下場景:

  • 限制數值范圍:當你要確保某個數值處于特定區間內時,可使用該函數。比如,調整音量、進度條等控件的值時,需要保證其在有效范圍內。
  • 避免越界訪問:在處理數組、列表等數據結構時,用?qBound?函數可防止索引越界。

示例如下:

#include <QCoreApplication>
#include <QVector>
#include <QDebug>int main(int argc, char *argv[])
{QCoreApplication a(argc, argv);QVector<int> numbers = {1, 2, 3, 4, 5};int index = 10;int validIndex = qBound(0, index, static_cast<int>(numbers.size() - 1));if (validIndex < numbers.size()) {qDebug() << "Value at index:" << numbers[validIndex];} else {qDebug() << "Index is out of bounds.";}return a.exec();
}

在這個例子中,index?的值為 10,超出了?numbers?向量的有效索引范圍。qBound?函數會將?index?限制在 0 到?numbers.size() - 1?之間,避免了越界訪問。

4.qConstOverload、qNonConstOverload

原型:

template <typename T> auto qConstOverload(T memberFunctionPointer);
template <typename T> auto qNonConstOverload(T memberFunctionPointer);

主要用于解決 C++ 中函數重載和信號槽連接時的類型推導問題,特別是在連接?const?和非?const?版本的重載函數時。

C/C++中重載函數取地址的方法_qt c++ 綁定重載信號-CSDN博客

如:

struct Foo {void overloadedFunction(int, const QString &);void overloadedFunction(int, const QString &) const;};... qConstOverload<int, const QString &>(&Foo::overloadedFunction)... qNonConstOverload<int, const QString &>(&Foo::overloadedFunction)

示例如下:

#include <QCoreApplication>
#include <QObject>
#include <QDebug>class MyClass : public QObject
{Q_OBJECT
public:explicit MyClass(QObject *parent = nullptr) : QObject(parent) {}// 非 const 版本的重載函數void myFunction(int value) {qDebug() << "Non-const myFunction called with value:" << value;}// const 版本的重載函數void myFunction(int value) const {qDebug() << "Const myFunction called with value:" << value;}
};#include "main.moc"int main(int argc, char *argv[])
{QCoreApplication a(argc, argv);MyClass obj;const MyClass constObj;// 連接 const 版本的 myFunctionQObject::connect(&constObj, qConstOverload<int>(&MyClass::myFunction), [](int value) {qDebug() << "Slot called with value:" << value;});// 發送信號調用 const 版本的 myFunctionconstObj.myFunction(42);return a.exec();
}

5.qEnvironmentVariable

原型:

//該函數用于獲取指定名稱的環境變量的值。若環境變量存在,就返回其值;若不存在,則返回一個空字符串。
QString qEnvironmentVariable(const char *varName)//此函數同樣是獲取指定名稱的環境變量的值。要是環境變量不存在,就返回指定的默認值。
QString qEnvironmentVariable(const char *varName, const QString &defaultValue)//通過 ok 變量判斷轉換是否成功。若成功,輸出轉換后的整數值;若失敗,輸出錯誤信息。
int qEnvironmentVariableIntValue(const char *varName, bool *ok = nullptr)//該函數用于檢查指定名稱的環境變量是否被設置。若已設置,返回 true;反之,返回 false。
bool qEnvironmentVariableIsEmpty(const char *varName)//此函數用于檢查指定名稱的環境變量是否為空。若為空(即變量存在但值為空字符串)或者變量未設置,返回 true;否則返回 false。
bool qEnvironmentVariableIsSet(const char *varName)

qEnvironmentVariable?是 Qt 中用于訪問系統環境變量的一組函數。環境變量是操作系統中存儲的鍵值對,可用于存儲各種配置信息,像路徑、系統設置等。在 Qt 程序里,你可以借助這些函數獲取環境變量的值,以實現特定的配置或功能。

示例如下:

#include <QCoreApplication>
#include <QDebug>int main(int argc, char *argv[])
{QCoreApplication a(argc, argv);// 獲取 PATH 環境變量的值QByteArray pathValue = qEnvironmentVariable("PATH");if (!pathValue.isEmpty()) {qDebug() << "PATH environment variable:" << pathValue;} else {qDebug() << "PATH environment variable is not set.";}// 獲取一個可能不存在的環境變量,并提供默認值QByteArray customValue = qEnvironmentVariable("MY_CUSTOM_VARIABLE", "default_value");qDebug() << "MY_CUSTOM_VARIABLE:" << customValue;// 檢查環境變量是否設置bool isSet = qEnvironmentVariableIsSet("JAVA_HOME");qDebug() << "JAVA_HOME is set:" << isSet;// 檢查環境變量是否為空bool isEmpty = qEnvironmentVariableIsEmpty("TEMP");qDebug() << "TEMP is empty:" << isEmpty;return a.exec();
}

6.qExchange

原型:

template <typename T, typename U> T qExchange(T &obj, U &&newValue)

其功能和標準庫中的?std::exchange?類似,用于將一個對象的值替換為新值,并返回該對象的舊值。在 Qt 中使用?qExchange?可以簡化代碼邏輯,尤其在需要更新對象狀態并保留舊值的場景中非常有用。

C++14之std::exchange的使用和原理分析-CSDN博客

qExchange?常用于以下場景:

  • 狀態更新:在更新對象的狀態時,需要保留對象的舊狀態,以便后續使用。
  • 資源管理:在釋放或轉移資源時,需要返回舊資源的所有權。

示例如下:

#include <QCoreApplication>
#include <QDebug>int main(int argc, char *argv[])
{QCoreApplication a(argc, argv);int* oldPtr;int value1 = 10;int value2 = 20;int* ptr = &value1;// 使用 qExchange 更新 ptr 的值,并獲取舊值oldPtr = qExchange(ptr, &value2);qDebug() << "Old pointer value:" << *oldPtr;qDebug() << "New pointer value:" << *ptr;return a.exec();
}

7.qFloatDistance

原型:

quint32 qFloatDistance(float a, float b)
quint64 qFloatDistance(double a, double b)

????????返回a和b之間可表示的浮點數。
????????此函數提供了一種類似于 qFuzzyCompare() 的浮點數近似比較的替代方法。但是,它返回兩個數字之間的距離,這使調用者可以選擇接受的錯誤。誤差是相對的,例如1.0E-5和1.00001E-5之間的距離將為110,而1.0E36和1.00001-E36之間的距離為127。
????????如果浮點比較需要一定的精度,則此函數很有用。因此,如果a和b相等,它將返回0。對于32位浮點數,它將返回的最大值是4278190078。這是-FLT_MAX和+FLT_MAX之間的距離。
????????如果任何參數為Infinite或NaN,則函數不會給出有意義的結果。您可以通過調用qIsFinite()來檢查這一點。
????????返回值可以被視為“錯誤”,因此,如果你想比較兩個32位浮點數,而你所需要的只是一個近似的24位精度,你可以這樣使用這個函數:

if (qFloatDistance(a, b) < (1 << 7)) {   // The last 7 bits are not// significant// precise enough
}

8.qInstallMessageHandler

原型:

//格式化日志消息的函數
QString qFormatLogMessage(QtMsgType type, const QMessageLogContext &context, const QString &str);//安裝日志鉤子函數
void myMessageHandler(QtMsgType, const QMessageLogContext &, const QString &);
QtMessageHandler qInstallMessageHandler(QtMessageHandler handler);

????????當你想要自定義日志輸出的格式,比如添加時間戳、日志級別標識、文件和行號等額外信息時,就可以使用?qFormatLogMessage?函數。????????

    示例如下:

    #include <QCoreApplication>
    #include <QDebug>
    #include <QDateTime>
    #include <QMessageLogContext>// 自定義日志消息格式化函數
    QByteArray customFormatLogMessage(QtMsgType type, const QMessageLogContext &context, const QString &message)
    {QString level;switch (type) {case QtDebugMsg:level = "DEBUG";break;case QtInfoMsg:level = "INFO";break;case QtWarningMsg:level = "WARNING";break;case QtCriticalMsg:level = "CRITICAL";break;case QtFatalMsg:level = "FATAL";break;default:level = "UNKNOWN";}QString timestamp = QDateTime::currentDateTime().toString("yyyy-MM-dd hh:mm:ss");QString formattedMessage = QString("[%1] [%2] [%3:%4 %5] %6").arg(timestamp).arg(level).arg(context.file ? context.file : "").arg(context.line).arg(context.function ? context.function : "").arg(message);return formattedMessage.toUtf8();
    }int main(int argc, char *argv[])
    {QCoreApplication a(argc, argv);// 設置自定義的日志消息處理函數qInstallMessageHandler([](QtMsgType type, const QMessageLogContext &context, const QString &message) {QByteArray formattedMessage = customFormatLogMessage(type, context, message);fprintf(stderr, "%s\n", formattedMessage.constData());});// 輸出不同級別的日志消息qDebug() << "This is a debug message";qInfo() << "This is an info message";qWarning() << "This is a warning message";qCritical() << "This is a critical message";return a.exec();
    }

    1)自定義格式化函數 customFormatLogMessage:
    ????????根據日志消息的類型 type 確定日志級別字符串 level。
    ????????獲取當前的時間戳 timestamp。
    ????????利用 QString::arg 方法將時間戳、日志級別、文件路徑、行號、函數名和日志消息內容組合成一個格式化的字符串 formattedMessage。
    ????????將格式化后的字符串轉換為 QByteArray 類型并返回。
    2)設置自定義日志消息處理函數:
    ????????使用 qInstallMessageHandler 函數設置一個自定義的日志消息處理函數,在該函數中調用customFormatLogMessage 對日志消息進行格式化,并將格式化后的消息輸出到標準錯誤流。
    3)輸出不同級別的日志消息:
    ????????使用 qDebug、qInfo、qWarning、qCritical 等宏輸出不同級別的日志消息,這些消息會經過自定義的格式化處理后輸出。

    通過這種方式,你可以根據自己的需求靈活定制日志輸出的格式。

    9.qSetMessagePattern

    原型:

    //設置日志格式的函數
    void qSetMessagePattern(const QString &pattern);

    qSetMessagePattern?是一個全局設置,會影響整個應用程序的消息輸出格式。

    常用占位符

    • %{appname}:應用程序的名稱。
    • %{category}:消息的類別。
    • %{file}:輸出消息的源文件名稱。
    • %{function}:輸出消息的函數名稱。
    • %{line}:輸出消息的源文件中的行號。
    • %{message}:實際的消息內容。
    • %{pid}:進程 ID。
    • %{threadid}:線程 ID。
    • %{type}:“debug”、”warning”、”critical”或”fatal”。
    • %{time process}:從進程啟動開始的時間。
    • %{time boot}:從系統啟動開始的時間。
    • %{time [format]}:當前時間,[format]?是一個可選的時間格式字符串,遵循?QDateTime::toString?的格式規則。
    • %{type}:消息的類型(如?debugwarningcriticalfatal)。
    • %{backtrace [depth=N] [separator=”…”]}:?很多平臺不支持,暫略…

    還可以使用條件類型,%{if-debug}, %{if-info} %{if-warning}, %{if-critical}?或?%{if-fatal}后面跟著一個%{endif}。如果類型匹配,%{if-*}?和?%{endif}之間的內容會被打印。

    最后,如果類別不是默認的一個,%{if-category} ... %{endif}之間的內容將被打印。

    示例如下:

    int main(int argc, char **argv)
    {QApplication app(argc, argv);// 改變缺省消息處理程序的輸出qSetMessagePattern("Message:%{message} File:%{file} Line:%{line} Function:%{function} DateTime:%{time [yyyy-MM-dd hh:mm:ss ddd]}");// 打印信息qDebug("This is a debug message.");qInfo("This is a info message.");qWarning("This is a warning message.");qCritical("This is a critical message.");qFatal("This is a fatal message.");...return app.exec();
    }

    輸出如下:

    Message:This is a debug message. File:..\MessagePattern\main.cpp Line:138 Function:main DateTime:[2025-04-28 15:21:40 周一]
    Message:This is a info message. File:..\MessagePattern\main.cpp Line:139 Function:main DateTime:[2025-04-28 15:21:40 周一]
    Message:This is a warning message. File:..\MessagePattern\main.cpp Line:140 Function:main DateTime:[2025-04-28 15:21:40 周一]
    Message:This is a critical message. File:..\MessagePattern\main.cpp Line:141 Function:main DateTime:[2025-04-28 15:21:40 周一]
    Message:This is a fatal message. File:..\MessagePattern\main.cpp Line:142 Function:main DateTime:[2025-04-28 15:21:40 周一]

    如果?QT_MESSAGE_PATTERN 環境變量被設置:

    選擇:項目 -> 構建環境,添加環境變量:

    QT_MESSAGE_PATTERN = [%{type}] %{appname} (%{file}:%{line}) - %{message}
    int main(int argc, char **argv)
    {QApplication app(argc, argv);// 改變缺省消息處理程序的輸出qSetMessagePattern("Message:%{message} File:%{file} Line:%{line} Function:%{function} DateTime:%{time [yyyy-MM-dd hh:mm:ss ddd]}");// 打印信息qDebug("This is a debug message.");qInfo("This is a info message.");qWarning("This is a warning message.");qCritical("This is a critical message.");qFatal("This is a fatal message.");...return app.exec();
    }

    輸出如下:

    [debug] MessagePattern (..\MessagePattern\main.cpp:138) - This is a debug message.
    [info] MessagePattern (..\MessagePattern\main.cpp:139) - This is a info message.
    [warning] MessagePattern (..\MessagePattern\main.cpp:140) - This is a warning message.
    [critical] MessagePattern (..\MessagePattern\main.cpp:141) - This is a critical message.
    [fatal] MessagePattern (..\MessagePattern\main.cpp:142) - This is a fatal message.

    如上所述,這時即使我們使用了qSetMessagePattern也無濟于事,因為,環境變量優先。

    10.qFpClassify?

    原型:

    int qFpClassify(double val);

    qFpClassify?是 Qt 提供的一個用于對浮點數進行分類的函數。在處理浮點數時,有時需要判斷一個浮點數是正常數、零、無窮大、NaN(非數字)等不同類型,qFpClassify?就可以幫助你完成這樣的分類工作。

    該函數返回一個整數,代表浮點數的分類類型,常見的返回值及其含義如下:

    • FP_NAN:表示?value?是一個非數字(NaN)。
    • FP_INFINITE:表示?value?是無窮大(正無窮或負無窮)。
    • FP_ZERO:表示?value?是零(正零或負零)。
    • FP_SUBNORMAL:表示?value?是一個非正規數(比最小的正規數還要小)。
    • FP_NORMAL:表示?value?是一個正常的浮點數。

    示例如下:

    #include <QCoreApplication>
    #include <QDebug>
    #include <cmath>int main(int argc, char *argv[])
    {QCoreApplication a(argc, argv);double normalNumber = 3.14;double zero = 0.0;double infinity = std::numeric_limits<double>::infinity();double nan = std::numeric_limits<double>::quiet_NaN();qDebug() << "Classification of normal number:" << qFpClassify(normalNumber);qDebug() << "Classification of zero:" << qFpClassify(zero);qDebug() << "Classification of infinity:" << qFpClassify(infinity);qDebug() << "Classification of NaN:" << qFpClassify(nan);return a.exec();
    }

    注意事項

    • 要使用?std::numeric_limits?來獲取無窮大和非數字的值,需要包含?<cmath>?頭文件。
    • 該函數對于雙精度浮點數進行分類,如果你需要處理單精度浮點數,可以考慮使用?qFpClassify(float value)?版本的函數。

    11.qFuzzyCompare

    原型:

    bool qFuzzyCompare(double p1, double p2);
    bool qFuzzyCompare(float p1, float p2);
    

    浮點數比較大小,重載了float和double版本。

    qFuzzyCompare?函數的比較原理是通過判斷兩個浮點數的差值是否小于一個很小的閾值(DBL_EPSILON?或?FLT_EPSILON)乘以兩個數絕對值的較大值。具體來說,對于?double?類型,比較的公式為:

    |p1 - p2| <= qMax(qAbs(p1), qAbs(p2)) * DBL_EPSILON;

    對于?float?類型,比較的公式為:

    |p1 - p2| <= qMax(qAbs(p1), qAbs(p2)) * FLT_EPSILON;

    其中,DBL_EPSILON?是?double?類型的最小精度,FLT_EPSILON?是?float?類型的最小精度。

    示例代碼:

    #include <QCoreApplication>
    #include <QDebug>int main(int argc, char *argv[])
    {QCoreApplication a(argc, argv);double num1 = 0.1 + 0.2;double num2 = 0.3;if (qFuzzyCompare(num1, num2)) {qDebug() << "num1 and num2 are approximately equal.";} else {qDebug() << "num1 and num2 are not approximately equal.";}return a.exec();
    }

    12.qInf、qIsFinite、qIsInf、qIsNaN

    原型:

    //返回浮點數正無窮大浮點數的函數
    double qInf();
    float qInf();//判斷浮點數是否是一個有窮的數字
    bool qIsFinite(double d);
    bool qIsFinite(float f);//判斷浮點數是否無窮大
    bool qIsInf(double d);
    bool qIsInf(float f);//判斷浮點數是否是一個數字
    bool qIsNaN(double d);
    bool qIsNaN(float d);

    13.qMax、qMin

    原型:

    //獲取最大值
    template <typename T> const T &qMax(const T &a, const T &b);
    //獲取最小值
    template <typename T> const T &qMin(const T &a, const T &b);

    14.qRound64、qRound

    原型:

    qint64 qRound64(double d);
    qint64 qRound64(float d);
    int    qRound(double d);
    int    qRound(float d);
    

    返回d最接近的四舍五入后的整數結果。

    示例如下:

     //Adouble valueA = 42949672960.3;double valueB = 42949672960.7;qint64 roundedValueA = qRound64(valueA);// roundedValueA = 42949672960qint64 roundedValueB = qRound64(valueB);// roundedValueB = 42949672961//Bfloat valueA = 42949672960.3;float valueB = 42949672960.7;qint64 roundedValueA = qRound64(valueA);// roundedValueA = 42949672960qint64 roundedValueB = qRound64(valueB);// roundedValueB = 42949672961

    15.qVersion

    原型:

    const char *qVersion();

    返回字符串的版本號。

    16.q_check_ptr

    原型:

    template <typename T> T *q_check_ptr(T *p);

    用于檢查指針是否為?nullptr。當傳入的指針為?nullptr?時,它會觸發斷言(assertion),從而幫助開發者在調試階段快速定位空指針相關的問題。

    示例如下:

    #include <QCoreApplication>
    #include <QDebug>void processPointer(int* ptr) {// 使用 q_check_ptr 檢查指針是否為空q_check_ptr(ptr);// 如果指針不為空,繼續處理if (ptr) {*ptr = 10;qDebug() << "Value of pointer: " << *ptr;}
    }int main(int argc, char *argv[])
    {QCoreApplication a(argc, argv);int value = 5;int* validPtr = &value;int* nullPtr = nullptr;// 測試有效指針processPointer(validPtr);// 測試空指針,在調試版本中會觸發斷言processPointer(nullPtr);return a.exec();
    }

    17.qCeil、qFloor

    原型:

    //向上取整,結果總是大于或等于原數
    double qCeil(double value);
    float  qCeil(float value);//向下取整,結果總是小于或等于原數
    double qFloor(double value);
    float qFloor(float value);

    18.qgetenv、qputenv

    原型:

    //獲取環境變量的值
    QByteArray qgetenv(const char *varName);//設置環境變量的值
    bool qputenv(const char *varName, const QByteArray &value);

    示例如下:

    #include <QCoreApplication>
    #include <QDebug>
    #include <QByteArray>int main(int argc, char *argv[])
    {QCoreApplication a(argc, argv);// 獲取 PATH 環境變量的值QByteArray pathValue = qgetenv("PATH");if (!pathValue.isEmpty()) {qDebug() << "The value of PATH environment variable is:" << pathValue;} else {qDebug() << "The PATH environment variable is not set.";}// 獲取一個不存在的環境變量的值QByteArray nonExistentValue = qgetenv("NON_EXISTENT_VARIABLE");if (!nonExistentValue.isEmpty()) {qDebug() << "The value of NON_EXISTENT_VARIABLE is:" << nonExistentValue;} else {qDebug() << "The NON_EXISTENT_VARIABLE environment variable is not set.";}return a.exec();
    }

    19.qtTrId

    原型:

    QString qtTrId(const char *id, int n = -1);

    ????????在 Qt 應用程序里進行國際化操作時,通常會使用?tr()?函數來標記需要翻譯的文本。不過,當處理大量文本或者需要動態管理翻譯內容時,使用?qtTrId?搭配翻譯標識符會更加靈活方便。翻譯標識符是一個字符串,它唯一地標識了一段需要翻譯的文本,開發者可以借助這個標識符來獲取對應的翻譯結果。

    使用步驟

    1)定義翻譯標識符:在代碼中定義翻譯標識符,通常會在?.h?文件或者?.cpp?文件里進行。例如:

    // 定義翻譯標識符
    #define TRANSLATION_ID_HELLO "hello_message"

    2)標記翻譯文本:在?.ts?文件(Qt 的翻譯源文件)里,使用翻譯標識符來標記需要翻譯的文本。例如:

    <context><name>MainWindow</name><message><location filename="mainwindow.cpp" line="10"/><source>hello_message</source><translation>你好!</translation></message>
    </context>

    3)使用?qtTrId?獲取翻譯文本:在代碼中使用?qtTrId?函數,通過翻譯標識符來獲取對應的翻譯文本。例如:

    #include <QApplication>
    #include <QLabel>
    #include <QVBoxLayout>
    #include <QWidget>// 定義翻譯標識符
    #define TRANSLATION_ID_HELLO "hello_message"int main(int argc, char *argv[])
    {QApplication a(argc, argv);// 創建一個標簽,使用 qtTrId 獲取翻譯文本QLabel *label = new QLabel(qtTrId(TRANSLATION_ID_HELLO));QVBoxLayout *layout = new QVBoxLayout;layout->addWidget(label);QWidget window;window.setLayout(layout);window.show();return a.exec();
    }

    本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
    如若轉載,請注明出處:http://www.pswp.cn/pingmian/78574.shtml
    繁體地址,請注明出處:http://hk.pswp.cn/pingmian/78574.shtml
    英文地址,請注明出處:http://en.pswp.cn/pingmian/78574.shtml

    如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

    相關文章

    AI與IT協同的典型案例

    簡介 本篇代碼示例展示了IT從業者如何與AI協同工作&#xff0c;發揮各自優勢。這些案例均來自2025年的最新企業實踐&#xff0c;涵蓋了不同IT崗位的應用場景。 一、GitHub Copilot生成代碼框架 開發工程師AI協作示例&#xff1a;利用GitHub Copilot生成代碼框架&#xff0c;…

    三網通電玩城平臺系統結構與源碼工程詳解(二):Node.js 服務端核心邏輯實現

    本篇文章將聚焦服務端游戲邏輯實現&#xff0c;以 Node.js Socket.io 作為主要通信與邏輯處理框架&#xff0c;展開用戶登錄驗證、房間分配、子游戲調度與事件廣播機制的剖析&#xff0c;并附上多個核心代碼段。 一、服務端文件結構概覽 /server/├── index.js …

    【prompt是什么?有哪些技巧?】

    Prompt&#xff08;提示詞&#xff09;是什么&#xff1f; Prompt 是用戶輸入給AI模型&#xff08;如ChatGPT、GPT-4等&#xff09;的指令或問題&#xff0c;用于引導模型生成符合預期的回答。它的質量直接影響AI的輸出效果。 Prompt 的核心技巧 1. 明確目標&#xff08;Clar…

    堆和二叉樹--數據結構初階(3)(C/C++)

    文章目錄 前言理論部分堆的模擬實現:(這里舉的大根堆)堆的創建二叉樹的遍歷二叉樹的一些其他功能實現 作業部分 前言 這期的話講解的是堆和二叉樹的理論部分和習題部分 理論部分 二叉樹的幾個性質:1.對于任意一個二叉樹&#xff0c;度為0的節點比度為2的節點多一個 2.對于完全…

    Dockerfile講解與示例匯總

    容器化技術已經成為應用開發和部署的標準方式,而Docker作為其中的佼佼者,以其輕量、高效、可移植的特性,深受開發者和運維人員的喜愛。本文將從實用角度出發,分享各類常用服務的Docker部署腳本與最佳實踐,希望能幫助各位在容器化之路上少走彎路。 無論你是剛接觸Docker的…

    在QGraphicsView中精確地以鼠標為錨縮放圖片

    在pyqt中以鼠標所在位置為錨點縮放圖片-CSDN博客中的第一個示例中&#xff0c;通過簡單設置&#xff1a; self.setTransformationAnchor(QGraphicsView.AnchorUnderMouse) 使得QGraphicsView具有了以鼠標為錨進行縮放的功能。但是&#xff0c;其內部應當是利用了滾動條的移動來…

    制造工廠如何借助電子看板實現高效生產管控

    在當今高度競爭的制造業環境中&#xff0c;許多企業正面臨著嚴峻的管理和生產挑戰。首先&#xff0c;管理流程落后&#xff0c;大量工作仍依賴"人治"方式&#xff0c;高層管理者理論知識薄弱且不愿聽取專業意見。其次&#xff0c;生產過程控制能力不足&#xff0c;導…

    在 C# .NET 中駕馭 JSON:使用 Newtonsoft.Json 進行解析與 POST 請求實戰

    JSON (JavaScript Object Notation) 已經成為現代 Web 應用和服務之間數據交換的通用語言。無論你是開發后端 API、與第三方服務集成&#xff0c;還是處理配置文件&#xff0c;都繞不開 JSON 的解析與生成。在 C# .NET 世界里&#xff0c;處理 JSON 有多種選擇&#xff0c;其中…

    Debian10系統安裝,磁盤分區和擴容

    1、說明 過程記錄信息有些不全&#xff0c;僅作為參考。如有其它疑問&#xff0c;歡迎留言。 2、ISO下載 地址&#xff1a;debian-10.13.0鏡像地址 3、開始安裝 3.1、選擇圖形界面 3.2、選擇中文語言 3.3、選擇中國區域 3.4、按照提示繼續 3.5、選擇一個網口 3.6、創建管…

    1.10軟考系統架構設計師:優秀架構設計師 - 練習題附答案及超詳細解析

    優秀架構設計師綜合知識單選題 每道題均附有答案解析&#xff1a; 題目1 衡量優秀系統架構設計師的核心標準不包括以下哪項&#xff1f; A. 技術全面性與底層系統原理理解 B. 能夠獨立完成模塊開發與調試 C. 與利益相關者的高效溝通與協調能力 D. 對業務需求和技術趨勢的戰略…

    MPI Code for Ghost Data Exchange in 3D Domain Decomposition with Multi-GPUs

    MPI Code for Ghost Data Exchange in 3D Domain Decomposition with Multi-GPUs Here’s a comprehensive MPI code that demonstrates ghost data exchange for a 3D domain decomposition across multiple GPUs. This implementation assumes you’re using CUDA-aware MPI…

    計算機考研精煉 計網

    第 19 章 計算機網絡體系結構 19.1 基本概念 19.1.1 計算機網絡概述 1.計算機網絡的定義、組成與功能 計算機網絡是一個將分散的、具有獨立功能的計算機系統&#xff0c;通過通信設備與線路連接起來&#xff0c;由功能完善的軟件實現資源共享和信息傳遞的系統。 …

    KUKA機器人自動備份設置

    在機器人的使用過程中&#xff0c;對機器人做備份不僅能方便查看機器人的項目配置與程序&#xff0c;還能防止機器人項目和程序丟失時進行及時的還原&#xff0c;因此對機器人做備份是很有必要的。 對于KUKA機器人來說&#xff0c;做備份可以通過U盤來操作。也可以在示教器上設…

    【wpf】 WPF中實現動態加載圖片瀏覽器(邊滾動邊加載)

    WPF中實現動態加載圖片瀏覽器&#xff08;邊滾動邊加載&#xff09; 在做圖片瀏覽器程序時&#xff0c;遇到圖片數量巨大的情況&#xff08;如幾百張、上千張&#xff09;&#xff0c;一次性加載所有圖片會導致界面卡頓甚至程序崩潰。 本文介紹一種 WPF Prism 實現動態分頁加…

    Kubernetes》》k8s》》Taint 污點、Toleration容忍度

    污點 》》 節點上 容忍度 》》 Pod上 在K8S中&#xff0c;如果Pod能容忍某個節點上的污點&#xff0c;那么Pod就可以調度到該節點。如果不能容忍&#xff0c;那就無法調度到該節點。 污點和容忍度的概念 》》污點等級——>node 》》容忍度 —>pod Equal——>一種是等…

    SEO長尾關鍵詞優化核心策略

    內容概要 在搜索引擎優化領域&#xff0c;長尾關鍵詞因其精準的流量捕獲能力與較低的競爭強度&#xff0c;已成為提升網站自然流量的核心突破口。本文圍繞長尾關鍵詞優化的全鏈路邏輯&#xff0c;系統拆解從需求洞察到落地執行的五大策略模塊&#xff0c;涵蓋用戶搜索意圖解析…

    AWS中國區ICP備案全攻略:流程、注意事項與最佳實踐

    導語 在中國大陸地區開展互聯網業務時,所有通過域名提供服務的網站和應用必須完成ICP備案(互聯網內容提供商備案)。對于選擇使用AWS中國區(北京/寧夏區域)資源的用戶,備案流程因云服務商的特殊運營模式而有所不同。本文將詳細解析AWS中國區備案的核心規則、操作步驟及避坑…

    計算機視覺——通過 OWL-ViT 實現開放詞匯對象檢測

    介紹 傳統的對象檢測模型大多是封閉詞匯類型&#xff0c;只能識別有限的固定類別。增加新的類別需要大量的注釋數據。然而&#xff0c;現實世界中的物體類別幾乎無窮無盡&#xff0c;這就需要能夠檢測未知類別的開放式詞匯類型。對比學習&#xff08;Contrastive Learning&…

    大語言模型的“模型量化”詳解 - 04:KTransformers MoE推理優化技術

    基本介紹 隨著大語言模型&#xff08;LLM&#xff09;的規模不斷擴大&#xff0c;模型的推理效率和計算資源的需求也在迅速增加。DeepSeek-V2作為當前熱門的LLM之一&#xff0c;通過創新的架構設計與優化策略&#xff0c;在資源受限環境下實現了高效推理。 本文將詳細介紹Dee…

    排序算法詳解筆記

    評價維度 運行效率就地性穩定性 自適應性&#xff1a;自適應排序能夠利用輸入數據已有的順序信息來減少計算量&#xff0c;達到更優的時間效率。自適應排序算法的最佳時間復雜度通常優于平均時間復雜度。 是否基于比較&#xff1a;基于比較的排序依賴比較運算符&#xff08;…