Qt编程人员的xaml布局介绍
我习惯Qt和Qt Designer。
XAML的布局控件'grid'和'StackPanel'在某种程度上是相似的,但我仍然错过或没有发现Qt中一些最常见的设计属性。 由于我对XAML完全陌生,因此我想知道答案或更多可用的文档。
例如,我想要添加2个元素(让说按钮)水平或垂直与他们的默认高度和最小高度和最小宽度。 如果水平对齐,则应将其推向左侧,而右侧的剩余侧应自由。 这意味着如果窗口大小增加,按钮的大小不会增加。 在Qt中,这是通过一个网格结合一个间隔器来实现的(例如,请参阅本教程中的示例)。
我的第一个XAML远离我的期望。 RowDefinition
的定义是从教程中复制的。 但我不明白它的意思...
<Window x:Class="SpectrumViewer.MainWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
Title="Spectrum Viewer" Height="350" Width="525">
<Grid>
<Grid.RowDefinitions>
<RowDefinition Height="*" />
<RowDefinition Height="Auto" />
</Grid.RowDefinitions>
<StackPanel Orientation="Horizontal" Margin="8" VerticalAlignment="Top">
<Button MinWidth="75" MaxHeight="23" Margin="10" HorizontalAlignment="Left" Width="100" Name="buttonTest">test</Button>
<TextBox MinWidth="75" MaxHeight="23" Margin="10" HorizontalAlignment="Left" Width="150" Name="textBoxValue"/>
</StackPanel>
<StackPanel Orientation="Horizontal" Margin="8" >
<Button MinWidth="75" MaxHeight="23" Margin="10" HorizontalAlignment="Left" Width="100" Name="button1">button 1</Button>
<Button MinWidth="75" MaxHeight="23" Margin="10" HorizontalAlignment="Left" Width="100" Name="button2">button 2</Button>
</StackPanel>
</Grid>
</Window>
接下来的图片显示元素被推到左侧,但是两个叠在一起的面板不会被推到顶部。 如果我将它们设置为VerticalAlignment="Top"
它们重叠,这也是错误的。
如果我调整窗口的大小,可以看到元素没有调整大小,第二个StackPanel
与第一个StackPanel
重叠:
相反,元素应该调整到最小宽度,并且应该禁止进一步调整窗口大小。
当您将VerticalAlignment
设置为Top
时,两个堆叠面板的第一个问题是重叠的,因为您没有指定它们应该在哪个Grid.Row
中,所以默认情况下都是在Grid.Row = 0
。 指定行索引,它们不会重叠:
<StackPanel Grid.Row="0" Orientation="Horizontal" Margin="8" VerticalAlignment="Top">
....
</StackPanel>
<StackPanel Grid.Row="1" Orientation="Horizontal" Margin="8" VerticalAlignment="Top">
....
</StackPanel>
当达到按钮的最小尺寸时,窗口无法停止调整大小。 您可以设置Grid
的MinWidth
并要求窗口在此处停止:
<Window x:Class="SpectrumViewer.MainWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
Title="Spectrum Viewer" Height="350" Width="525"
MinWidth="{Binding RelativeSource={RelativeSource Self}, Path=Content.MinWidth}">
<Grid MinWidth="350">
.......
</Grid>
</Window>
或者设置Window
本身的MinWidth
:)