qt - 如何在自定义组件中声明 EventHandler(插槽?)类型的属性并在其使用中为其分配函数
问题描述
对于答案中显示的自定义窗口,我创建了一个名为PathButton
import QtQuick 2.0
import QtQuick.Shapes 1.12
Item {
property alias pathData: svg.path
width: 24
height: 24
Shape {
ShapePath {
fillColor: "black"
PathSvg {
id: svg
path: pathData
}
}
}
}
并用它来minimize
,maximize
和close
这样的窗口:
RowLayout{
Layout.preferredWidth: 100
anchors.right: title.right
PathButton{
pathData: ViewModel.minimizeIcon
MouseArea{
anchors.fill: parent
onClicked: mainWindow.showMinimized()
}
}
PathButton{
pathData: ViewModel.maximizeIcon
MouseArea{
anchors.fill: parent
//this doesn't restore the window to its Normal state, showMaximized() is called always
onClicked: mainWindow.Maximized? mainWindow.showNormal() : mainWindow.showMaximized()
}
}
PathButton{
pathData: ViewModel.closeIcon
MouseArea{
anchors.fill: parent
onClicked: mainWindow.close()
}
}
}
在我所有的人中MouseArea
。我想要的是MouseArea
在我的自定义组件中拥有它并声明一个类型的属性eventhandler/signal/slot
并分配该处理程序,onClicked
如下所示:
import QtQuick 2.0
import QtQuick.Shapes 1.12
Item {
property alias pathData: svg.path
property alias handler: mouse.onClicked
width: 24
height: 24
Shape {
ShapePath {
fillColor: "black"
PathSvg {
id: svg
path: pathData
}
}
}
MouseArea{
id: mouse
anchors.fill: parent
onClicked: handler
}
}
在它的使用中,我想像这样分配相关功能:
PathButton{
pathData: ViewModel.minimizeIcon
handler: mainWindow.showMinimized()
}
编辑
这是我所拥有的PathButton.qml
:
import QtQuick 2.0
import QtQuick.Shapes 1.12
Item {
id: root
property alias pathData: svg.path
signal onClicked()
width: 24
height: 24
Shape {
ShapePath {
fillColor: "black"
PathSvg {
id: svg
path: pathData
}
}
}
MouseArea{
anchors.fill: parent
onClicked: root.onClicked()
}
}
在main.qml
我收到该错误时,当我遇到该错误时,在应用程序输出中我收到另一个错误:
解决方案
我认为您正在寻找的只是一个信号:
// PathButton.qml
Item {
id: root
signal clicked()
...
MouseArea {
onClicked: root.clicked()
}
}
然后你会像这样使用它:
PathButton {
onClicked: mainWindow.showMinimized()
}
推荐阅读
- rxjs - 无限滚动的可观察分页以保持最新
- excel - VBA从另一个表调用标签
- assembly - 希望将数组中的第一个值修改为程序集中的新最大值
- eigen - 使用 unaryExpr 在 Eigen 中模拟 std::transform-like API
- selenium - Selenium Edge - 如何清除缓存并关闭恢复页面弹出窗口
- mysql - 更新数据库:使用 mysql 的 asp.net core 错误
- python - 如何使用 boto3 和 rds-data 访问秘密管理器
- mysql - 无权限打开 MySQL 审计日志
- google-text-to-speech - 如何制作更小的 google-text-to-speech .net 应用程序?
- java - 在Java中没有arg(默认构造函数)的类中使用'this'关键字?