本文整理汇总了C++中QVariant::toByteArray方法的典型用法代码示例。如果您正苦于以下问题:C++ QVariant::toByteArray方法的具体用法?C++ QVariant::toByteArray怎么用?C++ QVariant::toByteArray使用的例子?那么, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类QVariant
的用法示例。
在下文中一共展示了QVariant::toByteArray方法的15个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C++代码示例。
示例1: macValue
static QCFType<CFPropertyListRef> macValue(const QVariant &value)
{
CFPropertyListRef result = 0;
switch (value.type()) {
case QVariant::ByteArray:
{
QByteArray ba = value.toByteArray();
result = CFDataCreate(kCFAllocatorDefault, reinterpret_cast<const UInt8 *>(ba.data()),
CFIndex(ba.size()));
}
break;
// should be same as below (look for LIST)
case QVariant::List:
case QVariant::StringList:
case QVariant::Polygon:
result = macList(value.toList());
break;
case QVariant::Map:
{
/*
QMap<QString, QVariant> is potentially a multimap,
whereas CFDictionary is a single-valued map. To allow
for multiple values with the same key, we store
multiple values in a CFArray. To avoid ambiguities,
we also wrap lists in a CFArray singleton.
*/
QMap<QString, QVariant> map = value.toMap();
QMap<QString, QVariant>::const_iterator i = map.constBegin();
int maxUniqueKeys = map.size();
int numUniqueKeys = 0;
QVarLengthArray<QCFType<CFPropertyListRef> > cfkeys(maxUniqueKeys);
QVarLengthArray<QCFType<CFPropertyListRef> > cfvalues(maxUniqueKeys);
while (i != map.constEnd()) {
const QString &key = i.key();
QList<QVariant> values;
do {
values << i.value();
++i;
} while (i != map.constEnd() && i.key() == key);
bool singleton = (values.count() == 1);
if (singleton) {
switch (values.first().type()) {
// should be same as above (look for LIST)
case QVariant::List:
case QVariant::StringList:
case QVariant::Polygon:
singleton = false;
default:
;
}
}
cfkeys[numUniqueKeys] = QCFString::toCFStringRef(key);
cfvalues[numUniqueKeys] = singleton ? macValue(values.first()) : macList(values);
++numUniqueKeys;
}
result = CFDictionaryCreate(kCFAllocatorDefault,
reinterpret_cast<const void **>(cfkeys.data()),
reinterpret_cast<const void **>(cfvalues.data()),
CFIndex(numUniqueKeys),
&kCFTypeDictionaryKeyCallBacks,
&kCFTypeDictionaryValueCallBacks);
}
break;
case QVariant::DateTime:
{
/*
CFDate, unlike QDateTime, doesn't store timezone information.
*/
QDateTime dt = value.toDateTime();
if (dt.timeSpec() == Qt::LocalTime) {
QDateTime reference;
reference.setTime_t((uint)kCFAbsoluteTimeIntervalSince1970);
result = CFDateCreate(kCFAllocatorDefault, CFAbsoluteTime(reference.secsTo(dt)));
} else {
goto string_case;
}
}
break;
case QVariant::Bool:
result = value.toBool() ? kCFBooleanTrue : kCFBooleanFalse;
break;
case QVariant::Int:
case QVariant::UInt:
{
int n = value.toInt();
result = CFNumberCreate(kCFAllocatorDefault, kCFNumberIntType, &n);
}
break;
case QVariant::Double:
{
double n = value.toDouble();
result = CFNumberCreate(kCFAllocatorDefault, kCFNumberDoubleType, &n);
}
//.........这里部分代码省略.........
示例2: setValue
//.........这里部分代码省略.........
The default value preset is \c 0x0a.
\row
\li \l QModbusServer::RunIndicatorStatus
\li Sets the servers' run indicator status to \a newValue. This
data is used as addendum by the \l QModbusPdu::ReportServerId
function code. Valid values are \c 0x00 (OFF) and \c 0xff (ON).
The default value preset is \c 0xff (ON).
\row
\li \l QModbusServer::AdditionalData
\li Sets the server's additional data to \a newValue. This data is
used as addendum by the \l QModbusPdu::ReportServerId function
code. The maximum data size cannot exceed 249 bytes to match
response message size restrictions.
The default value preset is \c {Qt Modbus Server}.
\row
\li \l QModbusServer::UserOption
\li Sets the value of a user option to \a newValue.
\note For user options, it is up to the developer to decide
which types to use and ensure that components use the correct
types when accessing and setting values.
\endtable
*/
bool QModbusServer::setValue(int option, const QVariant &newValue)
{
#define CHECK_INT_OR_UINT(val) \
do { \
if ((val.type() != QVariant::Int) && (val.type() != QVariant::UInt)) \
return false; \
} while (0)
Q_D(QModbusServer);
switch (option) {
case DiagnosticRegister:
CHECK_INT_OR_UINT(newValue);
d->m_serverOptions.insert(option, newValue);
return true;
case ExceptionStatusOffset: {
CHECK_INT_OR_UINT(newValue);
const quint16 tmp = newValue.value<quint16>();
QModbusDataUnit coils(QModbusDataUnit::Coils, tmp, 8);
if (!data(&coils))
return false;
d->m_serverOptions.insert(option, tmp);
return true;
}
case DeviceBusy: {
CHECK_INT_OR_UINT(newValue);
const quint16 tmp = newValue.value<quint16>();
if ((tmp != 0x0000) && (tmp != 0xffff))
return false;
d->m_serverOptions.insert(option, tmp);
return true;
}
case AsciiInputDelimiter: {
CHECK_INT_OR_UINT(newValue);
bool ok = false;
if (newValue.toUInt(&ok) > 0xff || !ok)
return false;
d->m_serverOptions.insert(option, newValue);
return true;
}
case ListenOnlyMode: {
if (newValue.type() != QVariant::Bool)
return false;
d->m_serverOptions.insert(option, newValue);
return true;
}
case ServerIdentifier:
CHECK_INT_OR_UINT(newValue);
d->m_serverOptions.insert(option, newValue);
return true;
case RunIndicatorStatus: {
CHECK_INT_OR_UINT(newValue);
const quint8 tmp = newValue.value<quint8>();
if ((tmp != 0x00) && (tmp != 0xff))
return false;
d->m_serverOptions.insert(option, tmp);
return true;
}
case AdditionalData: {
if (newValue.type() != QVariant::ByteArray)
return false;
const QByteArray additionalData = newValue.toByteArray();
if (additionalData.size() > 249)
return false;
d->m_serverOptions.insert(option, additionalData);
return true;
}
default:
break;
};
if (option < UserOption)
return false;
d->m_serverOptions.insert(option, newValue);
return true;
#undef CHECK_INT_OR_UINT
}
示例3: QMainWindow
ExternalHelpWindow::ExternalHelpWindow(QWidget *parent)
: QMainWindow(parent)
{
QSettings *settings = Core::ICore::instance()->settings();
settings->beginGroup(Help::Constants::ID_MODE_HELP);
const QVariant geometry = settings->value(QLatin1String("geometry"));
if (geometry.isValid())
restoreGeometry(geometry.toByteArray());
else
resize(640, 480);
settings->endGroup();
QAction *action = new QAction(this);
action->setShortcut(QKeySequence(Qt::CTRL + Qt::SHIFT + Qt::Key_I));
connect(action, SIGNAL(triggered()), this, SIGNAL(activateIndex()));
addAction(action);
action = new QAction(this);
action->setShortcut(QKeySequence(Qt::CTRL + Qt::SHIFT + Qt::Key_C));
connect(action, SIGNAL(triggered()), this, SIGNAL(activateContents()));
addAction(action);
action = new QAction(this);
action->setShortcut(QKeySequence(Qt::CTRL + Qt::SHIFT + Qt::Key_Slash));
connect(action, SIGNAL(triggered()), this, SIGNAL(activateSearch()));
addAction(action);
action = new QAction(this);
action->setShortcut(QKeySequence(Qt::CTRL + Qt::SHIFT + Qt::Key_B));
connect(action, SIGNAL(triggered()), this, SIGNAL(activateBookmarks()));
addAction(action);
action = new QAction(this);
action->setShortcut(QKeySequence(Qt::CTRL + Qt::SHIFT + Qt::Key_O));
connect(action, SIGNAL(triggered()), this, SIGNAL(activateOpenPages()));
addAction(action);
CentralWidget *centralWidget = CentralWidget::instance();
action = new QAction(this);
action->setShortcut(QKeySequence(Qt::CTRL + Qt::Key_Plus));
connect(action, SIGNAL(triggered()), centralWidget, SLOT(zoomIn()));
addAction(action);
action = new QAction(this);
action->setShortcut(QKeySequence(Qt::CTRL + Qt::Key_Minus));
connect(action, SIGNAL(triggered()), centralWidget, SLOT(zoomOut()));
addAction(action);
action = new QAction(this);
action->setShortcut(QKeySequence(Qt::CTRL + Qt::Key_M));
connect(action, SIGNAL(triggered()), this, SIGNAL(addBookmark()));
addAction(action);
action = new QAction(this);
action->setShortcut(QKeySequence(Qt::CTRL + Qt::Key_C));
connect(action, SIGNAL(triggered()), centralWidget, SLOT(copy()));
addAction(action);
action = new QAction(this);
action->setShortcut(QKeySequence(Qt::CTRL + Qt::Key_P));
connect(action, SIGNAL(triggered()), centralWidget, SLOT(print()));
addAction(action);
action = new QAction(this);
action->setShortcut(QKeySequence::Back);
action->setEnabled(centralWidget->isBackwardAvailable());
connect(action, SIGNAL(triggered()), centralWidget, SLOT(backward()));
connect(centralWidget, SIGNAL(backwardAvailable(bool)), action,
SLOT(setEnabled(bool)));
action = new QAction(this);
action->setShortcut(QKeySequence::Forward);
action->setEnabled(centralWidget->isForwardAvailable());
connect(action, SIGNAL(triggered()), centralWidget, SLOT(forward()));
connect(centralWidget, SIGNAL(forwardAvailable(bool)), action,
SLOT(setEnabled(bool)));
QAction *reset = new QAction(this);
connect(reset, SIGNAL(triggered()), centralWidget, SLOT(resetZoom()));
addAction(reset);
QAction *ctrlTab = new QAction(this);
connect(ctrlTab, SIGNAL(triggered()), &OpenPagesManager::instance(),
SLOT(gotoPreviousPage()));
addAction(ctrlTab);
QAction *ctrlShiftTab = new QAction(this);
connect(ctrlShiftTab, SIGNAL(triggered()), &OpenPagesManager::instance(),
SLOT(gotoNextPage()));
addAction(ctrlShiftTab);
action = new QAction(QIcon(Core::Constants::ICON_TOGGLE_SIDEBAR),
tr("Show Sidebar"), this);
connect(action, SIGNAL(triggered()), this, SIGNAL(showHideSidebar()));
#ifdef Q_WS_MAC
reset->setShortcut(QKeySequence(Qt::ALT + Qt::Key_0));
//.........这里部分代码省略.........
示例4: scribus_getproperty
PyObject* scribus_getproperty(PyObject* /*self*/, PyObject* args, PyObject* kw)
{
PyObject* objArg = NULL;
char* propertyName = NULL;
char* kwargs[] = {const_cast<char*>("object"),
const_cast<char*>("property"),
NULL};
if (!PyArg_ParseTupleAndKeywords(args, kw, "Oes", kwargs,
&objArg, "ascii", &propertyName))
return NULL;
// Get the QObject* the object argument refers to
QObject* obj = getQObjectFromPyArg(objArg);
if (!obj)
return NULL;
objArg = NULL; // no need to decref, it's borrowed
// Get the QMetaProperty for the property, so we can check
// if it's a set/enum and do name/value translation.
const QMetaObject* objmeta = obj->metaObject();
int i = objmeta->indexOfProperty(propertyName);
if (i == -1)
{
PyErr_SetString(PyExc_ValueError,
QObject::tr("Property not found").toLocal8Bit().data());
return NULL;
}
QMetaProperty propmeta = objmeta->property(i);
if (!propmeta.isValid())
{
PyErr_SetString(PyExc_ValueError,
QObject::tr("Invalid property").toLocal8Bit().data());
return NULL;
}
// Get the property value as a variant type
QVariant prop = obj->property(propertyName);
// Convert the property to an instance of the closest matching Python type.
PyObject* resultobj = NULL;
// NUMERIC TYPES
if (prop.type() == QVariant::Int)
resultobj = PyLong_FromLong(prop.toInt());
else if (prop.type() == QVariant::Double)
resultobj = PyFloat_FromDouble(prop.toDouble());
// BOOLEAN
else if (prop.type() == QVariant::Bool)
resultobj = PyBool_FromLong(prop.toBool());
// STRING TYPES
else if (prop.type() == QVariant::ByteArray)
resultobj = PyString_FromString(prop.toByteArray().data());
else if (prop.type() == QVariant::String)
resultobj = PyString_FromString(prop.toString().toUtf8().data());
// HIGHER ORDER TYPES
else if (prop.type() == QVariant::Point)
{
// Return a QPoint as an (x,y) tuple.
QPoint pt = prop.toPoint();
return Py_BuildValue("(ii)", pt.x(), pt.y());
}
else if (prop.type() == QVariant::Rect)
{
// Return a QRect as an (x,y,width,height) tuple.
// FIXME: We should really construct and return an object that
// matches the API of QRect and has properties to keep
// left/top/right/bottom and x/y/width/height in sync.
QRect r = prop.toRect();
return Py_BuildValue("(iiii)", r.x(), r.y(), r.width(), r.height());
}
else if (prop.type() == QVariant::StringList)
{
QStringList tmp = prop.toStringList();
return convert_QStringList_to_PyListObject(tmp);
}
// UNHANDLED TYPE
else
{
PyErr_SetString(PyExc_TypeError, QObject::tr("Couldn't convert result type '%1'.").arg(prop.typeName()).toLocal8Bit().constData() );
return resultobj;
}
// Return the resulting Python object
if (resultobj == NULL)
{
// An exception was set while assigning to resultobj
assert(PyErr_Occurred());
return NULL;
}
else
return resultobj;
}
示例5: convertFromMime
QList<QByteArray> convertFromMime(const QString & /* mime */, QVariant data, QString /* flav */) {
QByteArray a = data.toByteArray();
QList<QByteArray> l;
l.append(a);
return l;
}
示例6: init
void App::init()
{
QSettings settings;
setWindowIcon(QIcon(":/qlcplus.png"));
m_tab = new QTabWidget(this);
m_tab->setTabPosition(QTabWidget::South);
setCentralWidget(m_tab);
QVariant var = settings.value(SETTINGS_GEOMETRY);
if (var.isValid() == true)
{
this->restoreGeometry(var.toByteArray());
}
else
{
/* Application geometry and window state */
QSize size = settings.value("/workspace/size").toSize();
if (size.isValid() == true)
resize(size);
else
{
if (QLCFile::isRaspberry())
{
QRect geometry = qApp->desktop()->availableGeometry();
int w = geometry.width();
int h = geometry.height();
if (m_overscan == true)
{
// if we're on a Raspberry Pi, introduce a 5% margin
w = (float)geometry.width() * 0.95;
h = (float)geometry.height() * 0.95;
}
setGeometry((geometry.width() - w) / 2, (geometry.height() - h) / 2,
w, h);
}
else
resize(800, 600);
}
QVariant state = settings.value("/workspace/state", Qt::WindowNoState);
if (state.isValid() == true)
setWindowState(Qt::WindowState(state.toInt()));
}
QVariant dir = settings.value(SETTINGS_WORKINGPATH);
if (dir.isValid() == true)
m_workingDirectory = QDir(dir.toString());
// The engine object
initDoc();
// Main view actions
initActions();
// Main tool bar
initToolBar();
m_dumpProperties = new DmxDumpFactoryProperties(KUniverseCount);
// Create primary views.
m_tab->setIconSize(QSize(24, 24));
QWidget* w = new FixtureManager(m_tab, m_doc);
m_tab->addTab(w, QIcon(":/fixture.png"), tr("Fixtures"));
w = new FunctionManager(m_tab, m_doc);
m_tab->addTab(w, QIcon(":/function.png"), tr("Functions"));
w = new ShowManager(m_tab, m_doc);
m_tab->addTab(w, QIcon(":/show.png"), tr("Shows"));
w = new VirtualConsole(m_tab, m_doc);
m_tab->addTab(w, QIcon(":/virtualconsole.png"), tr("Virtual Console"));
w = new SimpleDesk(m_tab, m_doc);
m_tab->addTab(w, QIcon(":/slidermatrix.png"), tr("Simple Desk"));
w = new InputOutputManager(m_tab, m_doc);
m_tab->addTab(w, QIcon(":/input_output.png"), tr("Inputs/Outputs"));
// Listen to blackout changes and toggle m_controlBlackoutAction
connect(m_doc->inputOutputMap(), SIGNAL(blackoutChanged(bool)), this, SLOT(slotBlackoutChanged(bool)));
// Enable/Disable panic button
connect(m_doc->masterTimer(), SIGNAL(functionListChanged()), this, SLOT(slotRunningFunctionsChanged()));
slotRunningFunctionsChanged();
// Start up in non-modified state
m_doc->resetModified();
QString ssDir;
#if defined(WIN32) || defined(Q_OS_WIN)
/* User's input profile directory on Windows */
LPTSTR home = (LPTSTR) malloc(256 * sizeof(TCHAR));
GetEnvironmentVariable(TEXT("UserProfile"), home, 256);
ssDir = QString("%1/%2").arg(QString::fromUtf16(reinterpret_cast<ushort*> (home)))
.arg(USERQLCPLUSDIR);
free(home);
#else
/* User's input profile directory on *NIX systems */
ssDir = QString("%1/%2").arg(getenv("HOME")).arg(USERQLCPLUSDIR);
#endif
QFile ssFile(ssDir + QDir::separator() + "qlcplusStyle.qss");
if (ssFile.exists() == true)
//.........这里部分代码省略.........
示例7: QDialog
AddFixture::AddFixture(QWidget* parent, const Doc* doc, const Fixture* fxi)
: QDialog(parent)
, m_doc(doc)
{
m_addressValue = 0;
m_universeValue = 0;
m_amountValue = 1;
m_gapValue = 0;
m_channelsValue = 1;
m_fixtureDef = NULL;
m_mode = NULL;
m_fxiCount = 0;
m_fixtureID = Fixture::invalidId();
m_invalidAddressFlag = false;
setupUi(this);
m_addrErrorLabel->hide();
QAction* action = new QAction(this);
action->setShortcut(QKeySequence(QKeySequence::Close));
connect(action, SIGNAL(triggered(bool)), this, SLOT(reject()));
addAction(action);
connect(m_tree, SIGNAL(itemSelectionChanged()),
this, SLOT(slotSelectionChanged()));
connect(m_tree, SIGNAL(itemDoubleClicked(QTreeWidgetItem*,int)),
this, SLOT(slotTreeDoubleClicked(QTreeWidgetItem*)));
connect(m_modeCombo, SIGNAL(activated(const QString&)),
this, SLOT(slotModeActivated(const QString&)));
connect(m_universeCombo, SIGNAL(activated(int)),
this, SLOT(slotUniverseActivated(int)));
connect(m_addressSpin, SIGNAL(valueChanged(int)),
this, SLOT(slotAddressChanged(int)));
connect(m_channelsSpin, SIGNAL(valueChanged(int)),
this, SLOT(slotChannelsChanged(int)));
connect(m_nameEdit, SIGNAL(textEdited(const QString&)),
this, SLOT(slotNameEdited(const QString&)));
connect(m_gapSpin, SIGNAL(valueChanged(int)),
this, SLOT(slotGapSpinChanged(int)));
connect(m_amountSpin, SIGNAL(valueChanged(int)),
this, SLOT(slotAmountSpinChanged(int)));
connect(m_searchEdit, SIGNAL(textChanged(QString)),
this, SLOT(slotSearchFilterChanged(QString)));
connect(m_diptoolButton, SIGNAL(clicked()),
this, SLOT(slotDiptoolButtonClicked()));
/* Fill fixture definition tree (and select a fixture def) */
if (fxi != NULL)
{
fillTree(fxi->fixtureDef()->manufacturer(), fxi->fixtureDef()->model());
m_fixtureID = fxi->id();
}
else
fillTree(KXMLFixtureGeneric, KXMLFixtureGeneric);
m_fixturesCount->setText(tr("Fixtures found: %1").arg(m_fxiCount));
/* Fill universe combo with available universes */
m_universeCombo->addItems(m_doc->inputOutputMap()->universeNames());
/* Simulate first selection and find the next free address */
slotSelectionChanged();
if (fxi != NULL)
{
// Universe
m_universeCombo->setCurrentIndex(fxi->universe());
slotUniverseActivated(fxi->universe());
m_addressSpin->setValue(fxi->address() + 1);
m_addressValue = fxi->address();
m_multipleGroup->setEnabled(false);
// Name
m_nameEdit->setText(fxi->name());
slotNameEdited(fxi->name());
m_nameEdit->setModified(true); // Prevent auto-naming
// Mode
int index = m_modeCombo->findText(fxi->fixtureMode()->name());
if (index != -1)
{
m_channelsSpin->setValue(fxi->channels());
m_modeCombo->setCurrentIndex(index);
slotModeActivated(m_modeCombo->itemText(index));
}
}
else
{
slotUniverseActivated(0);
findAddress();
m_channelsSpin->setValue(1);
}
QSettings settings;
QVariant var = settings.value(SETTINGS_GEOMETRY);
if (var.isValid() == true)
restoreGeometry(var.toByteArray());
//.........这里部分代码省略.........
示例8: qHash
uint qHash( const QVariant &variant )
{
if ( !variant.isValid() || variant.isNull() )
return std::numeric_limits<uint>::max();
switch ( variant.type() )
{
case QVariant::Int:
return qHash( variant.toInt() );
case QVariant::UInt:
return qHash( variant.toUInt() );
case QVariant::Bool:
return qHash( variant.toBool() );
case QVariant::Double:
return qHash( variant.toDouble() );
case QVariant::LongLong:
return qHash( variant.toLongLong() );
case QVariant::ULongLong:
return qHash( variant.toULongLong() );
case QVariant::String:
return qHash( variant.toString() );
case QVariant::Char:
return qHash( variant.toChar() );
case QVariant::List:
#if QT_VERSION >= 0x050600
return qHash( variant.toList() );
#else
{
QVariantList list = variant.toList();
if ( list.isEmpty() )
return -1;
else
return qHash( list.at( 0 ) );
}
#endif
case QVariant::StringList:
#if QT_VERSION >= 0x050600
return qHash( variant.toStringList() );
#else
{
QStringList list = variant.toStringList();
if ( list.isEmpty() )
return -1;
else
return qHash( list.at( 0 ) );
}
#endif
case QVariant::ByteArray:
return qHash( variant.toByteArray() );
case QVariant::Date:
return qHash( variant.toDate() );
case QVariant::Time:
return qHash( variant.toTime() );
case QVariant::DateTime:
return qHash( variant.toDateTime() );
case QVariant::Url:
case QVariant::Locale:
case QVariant::RegExp:
return qHash( variant.toString() );
default:
break;
}
return std::numeric_limits<uint>::max();
}
示例9: setOption
void QPpmHandler::setOption(ImageOption option, const QVariant &value)
{
if (option == SubType)
subType = value.toByteArray().toLower();
}
示例10: toXml
QDomElement MaiaObject::toXml(QVariant arg) {
//dummy document
QDomDocument doc;
//value element, we need this in each case
QDomElement tagValue = doc.createElement("value");
/* qDebug("type: %d (%s)", arg.type(), arg.typeName()); */
switch(arg.type()) {
case QVariant::String: {
QDomElement tagString = doc.createElement("string");
QDomText textString = doc.createTextNode(arg.toString());
tagValue.appendChild(tagString);
tagString.appendChild(textString);
return tagValue;
} case QVariant::Int: {
QDomElement tagInt = doc.createElement("int");
QDomText textInt = doc.createTextNode(QString::number(arg.toInt()));
tagValue.appendChild(tagInt);
tagInt.appendChild(textInt);
return tagValue;
} case QVariant::Double: {
QDomElement tagDouble = doc.createElement("double");
QDomText textDouble = doc.createTextNode(QString::number(arg.toDouble()));
tagValue.appendChild(tagDouble);
tagDouble.appendChild(textDouble);
return tagValue;
} case QVariant::Bool: {
QString textValue = arg.toBool() ? "1" : "0";
QDomElement tag = doc.createElement("boolean");
QDomText text = doc.createTextNode(textValue);
tagValue.appendChild(tag);
tag.appendChild(text);
return tagValue;
} case QVariant::ByteArray: {
QString textValue = arg.toByteArray().toBase64();
QDomElement tag = doc.createElement("base64");
QDomText text = doc.createTextNode(textValue);
tagValue.appendChild(tag);
tag.appendChild(text);
return tagValue;
} case QVariant::DateTime: {
QString textValue = arg.toDateTime().toString("yyyyMMddThh:mm:ss");
QDomElement tag = doc.createElement("datetime.iso8601");
QDomText text = doc.createTextNode(textValue);
tagValue.appendChild(tag);
tag.appendChild(text);
return tagValue;
} case QVariant::List: {
QDomElement tagArray = doc.createElement("array");
QDomElement tagData = doc.createElement("data");
tagArray.appendChild(tagData);
tagValue.appendChild(tagArray);
const QList<QVariant> args = arg.toList();
for(int i = 0; i < args.size(); ++i) {
tagData.appendChild(toXml(args.at(i)));
}
return tagValue;
} case QVariant::Map: {
QDomElement tagStruct = doc.createElement("struct");
QDomElement member;
QDomElement name;
tagValue.appendChild(tagStruct);
QMap<QString, QVariant> map = arg.toMap();
QMapIterator<QString, QVariant> i(map);
//.........这里部分代码省略.........
示例11: invokeRemote
/*!
Client side method call that directly accesses the object through the DBus interface.
All arguments and return types are processed and converted accordingly so that all functions
satisfy the QtDBus type system.
*/
QVariant ObjectEndPoint::invokeRemote(int metaIndex, const QVariantList& args, int returnType)
{
QMetaMethod method = service->metaObject()->method(metaIndex);
Q_ASSERT(d->endPointType == ObjectEndPoint::Client);
// Check is this is a signal relay
if (method.methodType() == QMetaMethod::Signal) {
// Convert custom arguments
QVariantList convertedList;
QList<QByteArray> params = method.parameterTypes();
for (int i = 0; i < params.size(); i++) {
const QByteArray& type = params[i];
int variantType = QVariant::nameToType(type);
if (variantType == QVariant::UserType) {
variantType = QMetaType::type(type);
QDBusVariant dbusVariant = qvariant_cast<QDBusVariant>(args[i]);
QVariant variant = dbusVariant.variant();
if (type == "QVariant") {
convertedList << variant;
} else {
QByteArray buffer = variant.toByteArray();
QDataStream stream(&buffer, QIODevice::ReadWrite);
QVariant *customType = new QVariant(variantType, (const void*)0);
QMetaType::load(stream, QMetaType::type("QVariant"), customType);
convertedList << *customType;
}
} else {
convertedList << args[i];
}
}
// Signal relay
const int numArgs = convertedList.size();
QVarLengthArray<void *, 32> a( numArgs+1 );
a[0] = 0;
const QList<QByteArray> pTypes = method.parameterTypes();
for ( int arg = 0; arg < numArgs; ++arg ) {
if (pTypes.at(arg) == "QVariant") {
a[arg+1] = (void *)&( convertedList[arg] );
} else {
a[arg+1] = (void *)( convertedList[arg].data() );
}
}
// Activate the service proxy signal call
QMetaObject::activate(service, metaIndex, a.data());
return QVariant();
}
// Method call so process arguments and convert if not a supported DBus type
QVariantList convertedList;
QList<QByteArray> params = method.parameterTypes();
for (int i = 0; i < params.size(); i++) {
QVariant converted = toDBusVariant(params[i], args[i]);
convertedList << converted;
}
bool validDBus = false;
QDBusMessage msg;
// Find the method name and try a direct DBus call
QString methodName(method.signature());
methodName.truncate(methodName.indexOf("("));
if (method.methodType() == QMetaMethod::Slot || method.methodType() == QMetaMethod::Method) {
// Slot or Invokable method
msg = iface->callWithArgumentList(QDBus::Block, methodName, convertedList);
if (msg.type() == QDBusMessage::ReplyMessage) {
validDBus = true;
}
}
// DBus call should only fail for methods with invalid type definitions
if (validDBus) {
if (returnType == QMetaType::Void) {
// Void method call
return QVariant();
}
else {
// Use DBus message return value
QVariantList retList = msg.arguments();
// Process return
const QByteArray& retType = QByteArray(method.typeName());
int variantType = QVariant::nameToType(retType);
if (variantType == QVariant::UserType) {
variantType = QMetaType::type(retType);
if (retType == "QVariant") {
// QVariant return from QDBusVariant wrapper
QDBusVariant dbusVariant = qvariant_cast<QDBusVariant>(retList[0]);
//.........这里部分代码省略.........
示例12: variantToTextValue
static QString variantToTextValue(const QVariant& value, const QString& typeNs, const QString& type)
{
switch (value.userType())
{
case QVariant::Char:
// fall-through
case QVariant::String:
return value.toString();
case QVariant::Url:
// xmlpatterns/data/qatomicvalue.cpp says to do this:
return value.toUrl().toString();
case QVariant::ByteArray:
{
const QByteArray data = value.toByteArray();
if (typeNs == KDSoapNamespaceManager::xmlSchema1999() || typeNs == KDSoapNamespaceManager::xmlSchema2001()) {
if (type == QLatin1String("hexBinary")) {
const QByteArray hb = data.toHex();
return QString::fromLatin1(hb.constData(), hb.size());
}
}
// default to base64Binary, like variantToXMLType() does.
const QByteArray b64 = value.toByteArray().toBase64();
return QString::fromLatin1(b64.constData(), b64.size());
}
case QVariant::Int:
// fall-through
case QVariant::LongLong:
// fall-through
case QVariant::UInt:
return QString::number(value.toLongLong());
case QVariant::ULongLong:
return QString::number(value.toULongLong());
case QVariant::Bool:
case QMetaType::Float:
case QVariant::Double:
return value.toString();
case QVariant::Time:
{
const QTime time = value.toTime();
if (time.msec()) {
// include milli-seconds
return time.toString(QLatin1String("hh:mm:ss.zzz"));
} else {
return time.toString(Qt::ISODate);
}
}
case QVariant::Date:
return value.toDate().toString(Qt::ISODate);
case QVariant::DateTime: // http://www.w3.org/TR/xmlschema-2/#dateTime
return KDDateTime(value.toDateTime()).toDateString();
case QVariant::Invalid:
qDebug() << "ERROR: Got invalid QVariant in a KDSoapValue";
return QString();
default:
if (value.canConvert<KDDateTime>()) {
return value.value<KDDateTime>().toDateString();
}
if (value.userType() == qMetaTypeId<float>())
return QString::number(value.value<float>());
qDebug() << QString::fromLatin1("QVariants of type %1 are not supported in "
"KDSoap, see the documentation").arg(QLatin1String(value.typeName()));
return value.toString();
}
}
示例13:
QString App::convertToUtf8String(const QVariant &pushContent)
{
return QString::fromUtf8(pushContent.toByteArray().data());
}
示例14: appendVariantInternal
//.........这里部分代码省略.........
#ifdef __OPTIMIZE__
case DBUS_TYPE_BYTE:
case DBUS_TYPE_INT16:
case DBUS_TYPE_UINT16:
case DBUS_TYPE_INT32:
case DBUS_TYPE_UINT32:
case DBUS_TYPE_INT64:
case DBUS_TYPE_UINT64:
case DBUS_TYPE_DOUBLE:
qIterAppend(&iterator, ba, *signature, arg.constData());
return true;
case DBUS_TYPE_BOOLEAN:
append( arg.toBool() );
return true;
#else
case DBUS_TYPE_BYTE:
append( qvariant_cast<uchar>(arg) );
return true;
case DBUS_TYPE_BOOLEAN:
append( arg.toBool() );
return true;
case DBUS_TYPE_INT16:
append( qvariant_cast<short>(arg) );
return true;
case DBUS_TYPE_UINT16:
append( qvariant_cast<ushort>(arg) );
return true;
case DBUS_TYPE_INT32:
append( static_cast<dbus_int32_t>(arg.toInt()) );
return true;
case DBUS_TYPE_UINT32:
append( static_cast<dbus_uint32_t>(arg.toUInt()) );
return true;
case DBUS_TYPE_INT64:
append( arg.toLongLong() );
return true;
case DBUS_TYPE_UINT64:
append( arg.toULongLong() );
return true;
case DBUS_TYPE_DOUBLE:
append( arg.toDouble() );
return true;
#endif
case DBUS_TYPE_STRING:
append( arg.toString() );
return true;
case DBUS_TYPE_OBJECT_PATH:
append( qvariant_cast<QDBusObjectPath>(arg) );
return true;
case DBUS_TYPE_SIGNATURE:
append( qvariant_cast<QDBusSignature>(arg) );
return true;
// compound types:
case DBUS_TYPE_VARIANT:
// nested QVariant
return append( qvariant_cast<QDBusVariant>(arg) );
case DBUS_TYPE_ARRAY:
// could be many things
// find out what kind of array it is
switch (arg.type()) {
case QVariant::StringList:
append( arg.toStringList() );
return true;
case QVariant::ByteArray:
append( arg.toByteArray() );
return true;
default:
; // fall through
}
// fall through
case DBUS_TYPE_STRUCT:
case DBUS_STRUCT_BEGIN_CHAR:
return appendRegisteredType( arg );
case DBUS_TYPE_DICT_ENTRY:
case DBUS_DICT_ENTRY_BEGIN_CHAR:
qFatal("QDBusMarshaller::appendVariantInternal got a DICT_ENTRY!");
return false;
case DBUS_TYPE_UNIX_FD:
if (capabilities & QDBusConnection::UnixFileDescriptorPassing || ba) {
append(qvariant_cast<QDBusUnixFileDescriptor>(arg));
return true;
}
// fall through
default:
qWarning("QDBusMarshaller::appendVariantInternal: Found unknown D-BUS type '%s'",
signature);
return false;
}
return true;
}
示例15: startsWith
bool RawData::startsWith(const QVariant &data)
{
return mByteArray.startsWith(data.toByteArray());
}