添加到勒夫的回答,在C++中,它是相當不幸的是,一些執行細節泄漏到界面,但它仍然是首選出於性能原因讓編譯器做通過將參數作爲值進行復制。所以,釋義,最好的解決辦法是:
void abc::CopyData(QByteArray data)
{
...
data.remove(0, n);
...
ByteArrayData.append(data);
}
,你絕對不希望有按值傳遞這樣的論點只有一個地方是一個信號聲明 - 從未信號修改他們的數據。這是罰款插槽這樣做,雖然:
class MyClass : public QObject {
Q_OBJECT
...
public:
// pass by const reference in signals
Q_SIGNAL void dataSource(const QByteArray &); // The only correct signal form
// pass by const reference or value in slots, depending on use
Q_SLOT void dataSink1(const QByteArray &); // Valid
Q_SLOT void dataSink2(QByteArray); // Valid as well.
};
連接至任一插槽使用相同的代碼是否是的Qt4或QT5連接方式。因此,您不必擔心由於泄漏的實現細節會破壞您的代碼而導致此類接口更改。
// Qt4 - you should elide const and reference anyway
connect(src, SIGNAL(dataSource(QByteArray)), dst, SLOT(dataSink1(QByteArray));
connect(src, SIGNAL(dataSource(QByteArray)), dst, SLOT(dataSink2(QByteArray));
// Qt5
connect(src, &MyClass::dataSource, dst, &MyClass::dataSink1);
connect(src, &MyClass::dataSource, dst, &MyClass::dataSink2);
謝謝,但我得到了下面的錯誤,錯誤 :過客 '常量的QByteArray' 爲 '本' 的說法 '的QByteArray&的QByteArray ::刪除(INT,INT)' 丟棄預選賽[-fpermissive] – beparas
@beparas啊,是的,我錯過了'const'。我會更新。 –
謝謝,append()函數呢。 – beparas