我正在尝试为我正在计划的某个工具窗口创建一种通用的QML组件。
有没有办法根据所包含的delete m
from messages m join
(select m.*,
(@rn := if(@u = userid, @rn + 1,
if(@u := userid, 1, 1)
)
) as seqnum
from (select m.*
from messages m
order by userid, id desc
) m cross join
(select @u := -1, @rn := 0) params
) mm
on m.id = mm.id
where seqnum > 30;
的大小来实际设置所述窗口的大小? ListView
的大小部分取决于其委托呈现的模型数据。这是一个代码示例,它将从外部的某个地方实例化:
ListView
所以基本上我试图访问例如import QtQuick 2.2
import QtQuick.Window 2.2
import QtQuick.Controls 2.3
import QtQuick.Layouts 1.3
Window{
id:window
title: "WindowTitle"
modality: "ApplicationModal"
flags: "Dialog"
ListView {
id: list
model: model_inst
delegate: RowLayout{
id: list_entry
Text {
text: "Model-based variable length text: " + text
}
ComboBox {
model: listrole
}
Switch {
text: qsTr("Switch")
}
}
}
}
作为窗口宽度的源list_entry.width
不起作用,因为委托可能会在初始QML实例化后使用?
不确定是否有办法或者我不可避免地试图构建某种参考循环。谢谢!
答案 0 :(得分:1)
我认为它不会起作用。我尝试解决问题的第一步是使用contentWidth
,但http://doc.qt.io/qt-5/qml-qtquick-listview.html#flickable-direction说:
默认情况下,垂直ListView将flickableDirection设置为Flickable.Vertical,水平ListView将其设置为Flickable.Horizontal。此外,垂直ListView仅计算(估计)contentHeight,而水平ListView仅计算contentWidth。另一个维度设置为-1。
因此,您必须自己设置contentWidth
,因为您使用了垂直ListView
。如果您尝试使用默认的contentWidth
:
width: list.contentWidth
窗口没有宽度。因此,最好的解决方案可能是设置足够大的宽度:
import QtQuick 2.2
import QtQuick.Window 2.2
import QtQuick.Controls 2.3
import QtQuick.Layouts 1.3
Window {
id: window
title: "WindowTitle"
modality: "ApplicationModal"
flags: "Dialog"
width: list.contentWidth
height: list.contentHeight
visible: true
ListView {
id: list
model: 10
contentWidth: 400
anchors.fill: parent
delegate: RowLayout {
Text {
text: "Model-based variable length text: " + index
}
ComboBox {
model: 10
}
Switch {
text: qsTr("Switch")
}
}
}
}
你不一定要猜它。你可以用例如例如,TextMetrics
计算您期望的最大文字宽度。虽然您仍然需要考虑RowLayout
中的其他控件。
如果你可以使用ListView
以外的其他类型,你可以考虑例如Repeater
中的ColumnLayout
,因为您可以使用其implicitWidth
和implicitHeight
属性:
import QtQuick 2.2
import QtQuick.Window 2.2
import QtQuick.Controls 2.3
import QtQuick.Layouts 1.3
Window {
id: window
title: "WindowTitle"
modality: "ApplicationModal"
flags: "Dialog"
width: columnLayout.implicitWidth
height: columnLayout.implicitHeight
visible: true
ColumnLayout {
id: columnLayout
anchors.fill: parent
Repeater {
id: repeater
model: 10
delegate: RowLayout {
Text {
text: "Model-based variable length text: " + index
}
ComboBox {
model: 10
}
Switch {
text: qsTr("Switch")
}
}
}
}
}