Add string conversion to QVariant
parent
acd4c0852a
commit
e468359100
|
@ -96,8 +96,12 @@ impl<'a> QVariant<'a> {
|
|||
self.type_ as u32
|
||||
}
|
||||
pub fn convert(&self) -> Variant {
|
||||
// TODO
|
||||
Variant::None
|
||||
match (self.type_) {
|
||||
10 => {
|
||||
Variant::String(String::new())
|
||||
}
|
||||
_ => Variant::None
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -16,8 +16,6 @@ function(rust_test NAME DIRECTORY)
|
|||
MAIN_DEPENDENCY "${NAME}.json"
|
||||
DEPENDS "${GENERATOR}"
|
||||
)
|
||||
# add_custom_target("${DIRECTORY}"
|
||||
# DEPENDS "${DIR}/src/inferface.rs")
|
||||
|
||||
add_custom_command(
|
||||
OUTPUT "${DIR}/${RUST_TARGET_DIR}/librust.a"
|
||||
|
@ -39,7 +37,8 @@ function(rust_test NAME DIRECTORY)
|
|||
"${DIR}/${RUST_TARGET_DIR}/librust.a"
|
||||
)
|
||||
set_property(TARGET ${NAME}
|
||||
APPEND PROPERTY AUTOGEN_TARGET_DEPENDS "${SRC}/${NAME}_rust.h")
|
||||
APPEND PROPERTY AUTOGEN_TARGET_DEPENDS "${SRC}/${NAME}_rust.h"
|
||||
APPEND PROPERTY AUTOGEN_TARGET_DEPENDS "${SRC}/${NAME}_rust.cpp")
|
||||
|
||||
add_test("build_${NAME}"
|
||||
"${CMAKE_COMMAND}" --build ${CMAKE_BINARY_DIR} --target "${NAME}")
|
||||
|
|
|
@ -96,8 +96,16 @@ impl<'a> QVariant<'a> {
|
|||
self.type_ as u32
|
||||
}
|
||||
pub fn convert(&self) -> Variant {
|
||||
// TODO
|
||||
Variant::None
|
||||
match self.type_ {
|
||||
10 => {
|
||||
let data = unsafe {
|
||||
let d = self.data as *const uint16_t;
|
||||
slice::from_raw_parts(d, self.len as usize)
|
||||
};
|
||||
Variant::String(String::from_utf16_lossy(data))
|
||||
}
|
||||
_ => Variant::None
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -1,6 +1,7 @@
|
|||
#include "test_object_rust.h"
|
||||
#include "test_object_types_rust.h"
|
||||
#include <QTest>
|
||||
#include <QSignalSpy>
|
||||
#include <QDebug>
|
||||
|
||||
class TestRustObject : public QObject
|
||||
{
|
||||
|
@ -26,15 +27,17 @@ void TestRustObject::testStringSetter()
|
|||
{
|
||||
// GIVEN
|
||||
Person person;
|
||||
const QVariant userName(QString("Konqi"));
|
||||
QSignalSpy spy(&person, &Person::userNameChanged);
|
||||
|
||||
// WHEN
|
||||
person.setUserName("Konqi");
|
||||
person.setUserName(userName);
|
||||
|
||||
// THEN
|
||||
QVERIFY(spy.isValid());
|
||||
QCOMPARE(spy.count(), 1);
|
||||
QCOMPARE(person.userName(), QString("Konqi"));
|
||||
QCOMPARE(person.userName().type(), userName.type());
|
||||
QCOMPARE(person.userName(), userName);
|
||||
}
|
||||
|
||||
QTEST_MAIN(TestRustObject)
|
||||
|
|
|
@ -10,7 +10,7 @@
|
|||
"type": "Object",
|
||||
"properties": [{
|
||||
"name": "userName",
|
||||
"type": "QString",
|
||||
"type": "QVariant",
|
||||
"write": true
|
||||
}]
|
||||
}]
|
||||
|
|
|
@ -110,8 +110,8 @@ void set_qvariant(QVariant* v, qvariant_t* val) {
|
|||
extern "C" {
|
||||
PersonInterface* person_new(Person*, void (*)(Person*));
|
||||
void person_free(PersonInterface*);
|
||||
void person_user_name_get(PersonInterface*, QString*, qstring_set);
|
||||
void person_user_name_set(void*, qstring_t);
|
||||
void person_user_name_get(PersonInterface*, QVariant*, qvariant_set);
|
||||
void person_user_name_set(void*, qvariant_t);
|
||||
};
|
||||
Person::Person(QObject *parent):
|
||||
QObject(parent),
|
||||
|
@ -121,12 +121,12 @@ Person::Person(QObject *parent):
|
|||
Person::~Person() {
|
||||
person_free(d);
|
||||
}
|
||||
QString Person::userName() const
|
||||
QVariant Person::userName() const
|
||||
{
|
||||
QString v;
|
||||
person_user_name_get(d, &v, set_qstring);
|
||||
QVariant v;
|
||||
person_user_name_get(d, &v, set_qvariant);
|
||||
return v;
|
||||
}
|
||||
void Person::setUserName(const QString& v) {
|
||||
person_user_name_set(d, v);
|
||||
void Person::setUserName(const QVariant& v) {
|
||||
variant(v, d, person_user_name_set);
|
||||
}
|
||||
|
|
|
@ -11,15 +11,15 @@ class Person : public QObject
|
|||
{
|
||||
Q_OBJECT
|
||||
PersonInterface * const d;
|
||||
Q_PROPERTY(QString userName READ userName WRITE setUserName NOTIFY userNameChanged FINAL)
|
||||
Q_PROPERTY(QVariant userName READ userName WRITE setUserName NOTIFY userNameChanged FINAL)
|
||||
public:
|
||||
explicit Person(QObject *parent = nullptr);
|
||||
~Person();
|
||||
QString userName() const;
|
||||
void setUserName(const QString& v);
|
||||
QVariant userName() const;
|
||||
void setUserName(const QVariant& v);
|
||||
signals:
|
||||
void userNameChanged();
|
||||
private:
|
||||
QString m_userName;
|
||||
QVariant m_userName;
|
||||
};
|
||||
#endif // TEST_OBJECT_TYPES_RUST_H
|
||||
|
|
Loading…
Reference in New Issue