基本布局-QHBoxLayout类、QVBoxLayout类、QGridLayout类

基本布局-QHBoxLayout类、QVBoxLayout类、QGridLayout类(1)新建QtWidgetApplication,项目名UserInfo,基类QDialog,取消创建界面;(2)打开dialog.h头文件,在头文件中声明对话框中的各个控件,添加代码#ifndefDIALOG_H#defineDIALOG_H#include//添加头文件#include#include#inclu

大家好,又见面了,我是你们的朋友全栈君。

(1)新建Qt Widget Application,项目名UserInfo,基类QDialog,取消创建界面;
(2)打开dialog.h头文件,在头文件中声明对话框中的各个控件,添加代码

#ifndef DIALOG_H
#define DIALOG_H

#include <QDialog>
//添加头文件
#include <QLabel>
#include <QLineEdit>
#include <QComboBox>
#include <QTextEdit>
#include <QGridLayout>
class Dialog : public QDialog
{
    Q_OBJECT

public:
    Dialog(QWidget *parent = 0);
    ~Dialog();
private://添加代码如下
    //左侧
    QLabel *UserNameLabel;
    QLabel *NameLabel;
    QLabel *SexLabel;
    QLabel *DepartmentLabel;
    QLabel *AgeLabel;    
    QLabel *OtherLabel;
    QLineEdit *NameLineEdit;
    QLineEdit *UserNameLineEdit;
    QComboBox *SexComboBox;
    QTextEdit *DepartmentTextEdit;
    QLineEdit *AgeLineEdit;
    QGridLayout *LeftLayout;
    //右侧
    QLabel *HeadLabel;//右上角
    QLabel *HeadIconLabel;
    QPushButton *UpdateHeadBtn;
    QHBoxLayout *TopRightLayout;
    QLabel *IntroductionLabel;
    QTextEdit *IntroductionTextEdit;
    QVBoxLayout *RightLayout;
    //底部
    QPushButton *OkBtn;
    QPushButton *CancelBtn;
    QHBoxLayout *ButtomLayout;
};

#endif // DIALOG_H

(2)打开dialog.cpp文件,在类Dialog的构造函数中添加如下代码:

#include "dialog.h"
//添加头文件
#include <QLabel>
#include <QLineEdit>
#include <QComboBox>
#include <QPushButton>
#include <QFrame>
#include <QGridLayout>
#include <QPixmap>
#include <QHBoxLayout>
Dialog::Dialog(QWidget *parent)
    : QDialog(parent)
{
    setWindowTitle(tr("UserInfo"));
    /***********左侧*********/
    UserNameLabel=new QLabel(tr("用户名: "));
    UserNameLineEdit=new QLineEdit;
    NameLabel=new QLabel(tr("姓名:"));
    NameLineEdit=new QLineEdit;
    SexLabel=new QLabel(tr("性别:"));
    SexComboBox=new QComboBox;
    SexComboBox->addItem(tr("女"));
    SexComboBox->addItem(tr("男"));
    DepartmentLabel=new QLabel(tr("部门:"));
    DepartmentTextEdit=new QTextEdit;
    AgeLabel=new QLabel(tr("备注:"));
    AgeLineEdit=new QLineEdit;
    OtherLabel=new QLabel(tr("备注:"));
    OtherLabel->setFrameStyle(QFrame::Panel|QFrame::Sunken);
    //设置控件的风格,setFrameStyle()是QFrame的方法,参数以或|的方式设定控件的面板风格,由形状(QFrame::Shape)和阴影(QFrame::shadow)两项配合决定。其中形状包括六种,分别是NoFrame,Panel,Box,HLine,VLine,WinPanel;阴影包括三种,Plain,Raised,Sunken.
    LeftLayout=new QGridLayout();//左部布局,由于此布局管理器不是主布局管理器,所以不用指定父窗口
    //向布局中加入需要布局的控件
    LeftLayout->addWidget(UserNameLabel,0,0);//用户名
    LeftLayout->addWidget(UserNameLineEdit,0,1);
    LeftLayout->addWidget(NameLabel,1,0);//姓名
    LeftLayout->addWidget(NameLineEdit,1,1);
    LeftLayout->addWidget(SexLabel,2,0);//性别
    LeftLayout->addWidget(SexComboBox,2,1);
    LeftLayout->addWidget(DepartmentLabel,3,0);//部门
    LeftLayout->addWidget(DepartmentTextEdit,3,1);
    LeftLayout->addWidget(AgeLabel,4,0);//年龄
    LeftLayout->addWidget(AgeLineEdit,4,1);
    LeftLayout->addWidget(OtherLabel,5,0,1,2);//其他
    LeftLayout->setColumnStretch(0,1);
    LeftLayout->setColumnStretch(1,3);
    //设定两列分别占用空间的比例,本例设定为1:3,即使对话框大小改变了,两列之间的宽度比依然保存不变
    /**********右侧***********/
    HeadLabel =new QLabel(tr("头像:"));//右上角部分
    HeadIconLabel=new QLabel;
    QPixmap icon("312.pgn");
    HeadIconLabel->setPixmap(icon);
    HeadIconLabel->resize(icon.width(),icon.height());
    UpdateHeadBtn=new QPushButton(tr("更新"));
    //完成右上侧头像选择区的布局
    TopRightLayout=new QHBoxLayout();
    TopRightLayout->setSpacing(20);//设定各个控件之间的间距为20
    TopRightLayout->addWidget(HeadLabel);
    TopRightLayout->addWidget(HeadIconLabel);
    TopRightLayout->addWidget(UpdateHeadBtn);
    IntroductionLabel=new QLabel(tr("个人说明:"));//右下角部分
    IntroductionTextEdit=new QTextEdit;
    //完成右侧的布局
    RightLayout=new QVBoxLayout();
    RightLayout->setMargin(10);
    RightLayout->addLayout(TopRightLayout);
    RightLayout->addWidget(IntroductionLabel);
    RightLayout->addWidget(IntroductionTextEdit);
    /*******底部********/
    OkBtn=new QPushButton(tr("确定"));
    CancelBtn=new QPushButton(tr("取消"));
    //完成下方两个按钮的布局
    ButtomLayout=new QHBoxLayout();
    ButtomLayout->addStretch();
    //在按钮之前插入一个占位符,使两个按钮能够靠右对齐,并且在整个对话框的大小发生改变时,保证按钮的大小不发生改变。
    ButtomLayout->addWidget(OkBtn);
    ButtomLayout->addWidget(CancelBtn);
    /************/
    QGridLayout *mainLayout=new QGridLayout(this);
    //实现主布局,指定父窗口this,也可调用this->setLayout(mainLayout)实现
    mainLayout->setMargin(15);//设定对话框的边距为15
    mainLayout->setSpacing(10);
    mainLayout->addLayout(LeftLayout,0,0);
    mainLayout->addLayout(RightLayout,0,1);
    mainLayout->addLayout(ButtomLayout,1,0,1,2);
    mainLayout->setSizeConstraint(QLayout::SetFixedSize);
    //设置最优化显式,即使控件按其sizeHint()的大小显式,并且使用户无法改变对话框大小。
}

Dialog::~Dialog()
{

}

这里写图片描述

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

发布者:全栈程序员-用户IM,转载请注明出处:https://javaforall.cn/151802.html原文链接:https://javaforall.cn

【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛

【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...

(0)
blank

相关推荐

  • 查看gcc的版本

    查看gcc的版本查看gcc版本 命令:debian:dpkg-lgccredhat:rpm-qa|grepgcc

  • Linux offsetof宏定义

    Linux offsetof宏定义#include&lt;stddef.h&gt;size_t offsetof(type, member) #define offsetof(TYPE, MEMBER)        \           ((size_t)&amp;((TYPE*)0)-&gt;MEMBER) Themacroreturntheoffsetofthe…

  • a卡eth挖矿教程_a卡挖eth用什么内核

    a卡eth挖矿教程_a卡挖eth用什么内核  对于ETH挖矿来说,A卡无疑是最合适的选择,性价比高。如果你只想挖ETH,那选择A卡无疑是最明智的。但是,在使用A卡挖矿的过程中,往往会出现很多难以解决的问题,影响挖矿的效率。其中很大一部分原因是由于A卡本身的特性导致的。很多人在使用A卡挖ETH的过程中会出现这样一种情况:开始一段时间还是正常的运行,但是运行一段时间后就开始报错,导致无法正常挖矿。这是由于A卡具有自动更新的特性。所以在使用A卡…

    2022年10月16日
  • java script的基础理解以及常规的使用注意事项「建议收藏」

    java script的基础理解以及常规的使用注意事项「建议收藏」js:javascriptjs一种具有函数优先的轻量级,解释型或即时编译型的高级编程语言。虽然它是作为开发Web页面的脚本语言而出名的,但是它也被用到了很多非浏览器环境中,JavaScript基于原型编程、多范式的动态脚本语言,并且支持面向对象、命令式和声明式(如函数式编程)风格。Netscape管理层希望它外观看起来像Java,因此取名为JavaScript。但实际上它的语法风格与Self及Scheme较为接近。在语句上还是有一些类似之处,但本质上还是很不一样的:js是基于对象的,边解释边执

  • vector insert用法 C++「建议收藏」

    vector insert用法 C++「建议收藏」#include#includeusingnamespacestd;intmain(){vectorv(3);v[0]=2;//v[0]是第0个元素v[1]=7;v[2]=9;v.insert(v.begin(),8);//在最前面插入新元素。v.insert(v.begin()+

  • 2020-java中级面试题

    2020-java中级面试题No. JD技术分类 问题 参考答案 判断标准 反馈 1 基础知识 HashMap和TreeMap区别 HashMap:①数组加链表方式存储key/value,②线程非安全,③允许null作为key和value,④key不可以重复,value允许重复,⑤不保证元素迭代顺序是按照插入时的顺序; TreeMap:①基于红黑树,②线程非安全,③不允许null作为key,④key不可以重复,value允许重复,⑤存入TreeMap的元素应当实现Compa..

    2022年10月12日

发表回复

您的电子邮箱地址不会被公开。

关注全栈程序员社区公众号