qml C++交互
QML中访问C++成员及函数.
很简单,只要C++类是继承QObject
, 然后使用Q_PROPERTY
与Q_INVOKABLE
来定义函数,就可以直接在QML中调用.Q_PROPERTY
与Q_INVOKABLE
的用法在网上很多,并且简单,这里不详细描述.
C++ 调用 QML函数
C++直接访问QML中变量及函数稍麻烦,我用其中最简单的方式 <信号与槽>
具体是在C++中发送信号, QML中槽函数进行接收. C++中发送信号与其他任何时候都一样,不在这里描述. QML中接收C++信号的方式如下
// 假如C++中有这样一个信号 void toQmlMsg(QString msg), jmain是注册到QML中的类
Connections
{
target:jmain //qml 连接 c++ 信号
onToQmlMsg:{
console.log(msg);
}
}
右键弹出菜单
Menu {
id: menu
MenuItem {
text: "菜单1"
}
MenuItem {
text: "菜单2"
}
MenuItem {
text: "菜单3"
}
}
...
Item{
id: xxx;
anchors.fill: parent;
acceptedButtons: Qt.LeftButton | Qt.RightButton;
onClicked: {
if (mouse.button == Qt.RightButton) {
var absMouseXY = mapToItem(root, mouseX, mouseY);
menu.x = absMouseXY.x
menu.y = absMouseXY.y
menu.open()
} else {
console.log("MouseArea LeftButton");
}
}
}
获取相对/绝对的鼠标位置
参见右键弹出菜单例子,关键词mapToItem
var absMouseXY = mapToItem(root, mouseX, mouseY);
sqlite 大量写入时性能差
这个问题应该是sqlite本身问题.需要使用事务来解决大量写入性能问题.QT本身带有此函数
void jdb::transaction()
{
db.transaction();
}
void jdb::commit()
{
db.commit();
}
MSVC乱码
在头文件中增加定义
#ifdef _MSC_VER
#pragma execution_character_set("utf-8")
#endif
正文完