该文档显示我可以使用 QML_ELEMENT 宏通过在 qmake 的 .pro 文件中添加一些变量来从 C++ 创建 QML 类型。但我正在使用 cmake
我有一个带有 return 语句的宏,如下所示:
macro_rules! return_fail {
( $res:expr ) => {
match $res {
Ok(val) => val,
Err(e) => {
eprintln!(
"An error: on {}:{} {}; aborting current function.",
file!(),
line!(),
e
);
return;
}
}
};
}
fn bad(flag: bool) -> Result<(), String> {
if flag {
Ok(())
} else {
Err("u r idiot".to_string())
}
}
fn main() {
return_fail!(bad(true));
return_fail!(bad(false));
}
Run Code Online (Sandbox Code Playgroud)
当我在函数中间使用它时,这个宏工作正常,但是当我在函数末尾使用它时,我收到来自 Clippy 的警告:
warning: unneeded `return` statement
--> src/main.rs:12:17
|
12 | return;
| ^^^^^^^ help: …Run Code Online (Sandbox Code Playgroud) 我需要将指向结构的原始指针传递给 C++,然后仍然想使用该框。
我找到了into_raw函数,但它吃掉了这个盒子,我不能再在 Rust 中使用那个盒子了。有没有办法得到一个*const T?我可以const_cast在 C++ 方面侥幸逃脱。
这就是我想要做的:
let handle_ptr = Box::<Handle>::into_raw(handle);
std::thread::spawn(move || {
let rt = tokio::runtime::Builder::new_current_thread()
.build()
.unwrap();
rt.block_on( handle.run() );
});
return handle_ptr
Run Code Online (Sandbox Code Playgroud)
我知道这是不安全的,但我不知道任何其他方法可以允许在其他线程上运行的 C++ 代码调用 Rust 对象的线程安全方法。
我将使用 QTcpSocket 从服务器接收长度分隔的帧,格式如下:-
+----------+--------------------------------+
| len: u32 | frame payload |
+----------+--------------------------------+
Run Code Online (Sandbox Code Playgroud)
其中 u32 是以 Big-Endian 格式编码的 32 位无符号整数。根据配置,它也可以是小端字节序,但我会事先在客户端了解字节序。
如何将该char*数组的前 4 个字节转换QByteArray为 32 位 unsigned int ?
阅读框架后,我需要以相同的格式发送消息。因此,如果我有长度为 20 字节的消息,如何将 20 作为 32 位无符号 int 以大/小端格式写入 QByteArray 或 char* ?
我想在 qml TableView 中显示 QSqlQueryModel 但我不想为每个新查询创建单独的 QML 文件,因为我无法创建无限的 qml 文件,如这里给出的。另外,问题对我的动态列数不起作用(可能是版本差异,因为我使用的是 5.11)。我只想要这样的东西:-
QTableView *view = new QTableView;
view->setModel(model);
view->show();
Run Code Online (Sandbox Code Playgroud)
在 QML 中。
我是 qml 的新手。到目前为止,我可以按照第一个链接中的指导显示 QSqlQueryModel,但我的用户可以输入任何 SQL 查询。
我找不到任何允许我更新HashMap. 有get_key_value,但它返回一个不可变的引用而不是一个可变的引用。