(QT)内外边距与布局

Posted Zhang丶&|!

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了(QT)内外边距与布局相关的知识,希望对你有一定的参考价值。

一、内外边距

1、概念:

margin:个控件的边框到另一个控件的边框的距离,属于容器外部距离;QMargins是一个包含四个整数值的对象,分别表示控件的左、上、右、下边框距离内部元素的距离。

padding:自身边框到自身内部另一个容器边框之间的距离,属于容器内距离

如:

QPushButtonmargin:50px;  //设置外边距为50px
background-color:#CDCDB4; //背景颜色
border-width:30px;        //描边
border-bottom-width:10px; //底部边框设置为10px
border-color:blue;
border-style:solid;
padding-top:50px;         //上方内边距为50px

二、布局

1、QHBoxLayout:水平布局

将控件按照水平方向排列,控件之间没有垂直间距。

主要参数:

spacing:间隔距离
stretch:拉伸因子(系数)
sizePolicy:大小策略
 

2、QVBoxLayout:垂直布局

将控件按照垂直方向排列,控件之间没有水平间距。

3、QGridLayout:网格布局

将控件按照行和列进行排列,每个控件占据一个格子。

三、分裂器

1、概念

分裂器是一种控件,用于将窗口分割成多个区域,每个区域可以放置不同的控件。分裂器控件通常用于需要分隔不同区域的界面,例如在文本编辑器中将文本区域和目录区域分隔开来。

2、属性

orientation:设置方向,可设置水平或垂直方向
opaqueResize:为false时,在拖动的时候会显示一条灰色的线条,在拖动到位并释放鼠标后再显示分割线条。默认为true, 实时更新子控件大小。
childrenCollapsible:为true时,用户可以将子部件的大小调整为0

四、隔离弹簧

1、概念

隔离弹簧(QSpacerItem)是Qt中的一种布局控件,它是一种空白控件,用于在布局中创建空白间隔,从而调整布局中其他控件的位置和大小。

2、属性

orientation:方向属性,可设置水平或垂直方向
sizeType:大小类型,可以设置好几种,如固定大小,可扩大的等
sizeHint:缺省大小,也就是默认大小
 


 

iOS,标题中自定义单元格的边距与行不同,自动布局?

【中文标题】iOS,标题中自定义单元格的边距与行不同,自动布局?【英文标题】:iOS, margin on custom cells different in header than row, with autolayout? 【发布时间】:2015-05-04 21:54:59 【问题描述】:

我有一个问题。我对表格行使用 nib 文件,对节标题使用相同的 nib。我还在自定义单元格上使用自动布局。

虽然我使用不同的文字和颜色等。

我的想法是,我可以对齐列等。

但是,部分标题似乎比单元格宽,尽管背景似乎是全宽。

我尝试了各种方法来设置宽度,认为它的设置方式不同,有边距。

这是我的代码....

- (UIView *)tableView:(UITableView *)tableView viewForHeaderInSection:
   (NSInteger)section 

    CGFloat w = [UIScreen mainScreen].bounds.size.width;
    HeaderSectionReportView *customHeaderView = [[HeaderSectionReportView alloc] 
         initWithFrame:CGRectMake(0.0, 0.0, w, 20.0) ....

    NSArray *nib = [[NSBundle mainBundle] loadNibNamed:@"ReportCell" 
         owner:self options:nil];
    ReportCell *customView  = (ReportCell *)[nib objectAtIndex:0];

    customView.descriptionValue.backgroundColor = [UIColor clearColor];
    //snip
    customView.frame = CGRectMake(0,0, w,customView.frame.size.height);
    [customHeaderView addSubview:customView];
    return customHeaderView;

//

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:
    (NSIndexPath *)indexPath 

    static NSString *CellIdentifier = @"ReportCell";
    ReportCell *cell = (ReportCell *) [tableView 
         dequeueReusableCellWithIdentifier:CellIdentifier];

    if (cell == nil) 
        NSArray *topLevelObjects = [[NSBundle mainBundle] 
            loadNibNamed:@"ReportCell" owner:nil options:nil];

        for (id currentObject in topLevelObjects) 
            if ([currentObject isKindOfClass:[UITableViewCell class]]) 
                cell = ((ReportCell *) currentObject);
                break;
            
        
    

    CGFloat w = [UIScreen mainScreen].bounds.size.width;
    cell.frame = CGRectMake(0,0, w,cell.frame.size.height);    
    cell.descriptionValue.text = desc;

这也是我的自动布局约束

【问题讨论】:

尝试设置约束,而不从底部的“pin”菜单中选中“constrain to margins”按钮。 @pandarencodemaster 谢谢你解决了它:) 很高兴听到这个消息!我不确定是否必须将其添加为答案? 【参考方案1】:

标题和单元格的宽度由tableView 处理。所以设置cell.frame 不会有任何区别。

因此,您对单元格的限制似乎有点偏离。它们都应该设置为 0 并且没有任何边距(禁用/取消勾选相对于边距)。

希望这能解决您的问题。如果您需要更多帮助,请告诉我

【讨论】:

以上是关于(QT)内外边距与布局的主要内容,如果未能解决你的问题,请参考以下文章

Qt布局设置边距

负边距与相对定位

强制删除 Qt 中的所有水平间距

Qt布局

qt ui界面控件布局设计

具有单独布局的嵌套 Qt 小部件