QBuffer::open()
false (*)を返すようにすることはできません。QBuffer
したがって、シナリオで使用することはできません。
しかし、サブクラス化open()
して、常にfalseを返すように上書きするのはどうでしょうか。
class UnopenableDevice : public QBuffer {
public:
bool open(QIODevice::OpenMode m) { return false; }
};
(*)少なくともフラグWriteOnly
および/またはを使用しないReadOnly
。無効なフラグを渡すことが、falseを返す唯一の可能性です。Qt 4.8.0ソースの引用:
corelib / io / qbuffer.cpp:
332 bool QBuffer::open(OpenMode flags)
333 {
334 Q_D(QBuffer);
335
336 if ((flags & (Append | Truncate)) != 0)
337 flags |= WriteOnly;
338 if ((flags & (ReadOnly | WriteOnly)) == 0) {
339 qWarning("QBuffer::open: Buffer access not specified");
340 return false; // <----- only possibility to return false!
341 }
342
343 if ((flags & Truncate) == Truncate)
344 d->buf->resize(0);
345 d->ioIndex = (flags & Append) == Append ? d->buf->size() : 0;
346
347 return QIODevice::open(flags);
348 }
corelib / io / qiodevice.cpp:
540 bool QIODevice::open(OpenMode mode)
541 {
542 Q_D(QIODevice);
543 d->openMode = mode;
544 d->pos = (mode & Append) ? size() : qint64(0);
545 d->buffer.clear();
546 d->accessMode = QIODevicePrivate::Unset;
547 d->firstRead = true;
548 #if defined QIODEVICE_DEBUG
549 printf("%p QIODevice::open(0x%x)\n", this, quint32(mode));
550 #endif
551 return true;
552 }