QT - 布局方式

这篇具有很好参考价值的文章主要介绍了QT - 布局方式。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

  • Qt里面的头文件和类名是一致的,知道头文件就知道类名,反之亦然

  • Qt头文件是没有.h的,基本都是以大写的Q开头

  • 后续的代码编写都在widget.hwidget.cpp

一. widget.h

#ifndef WIDGET_H
#define WIDGET_H
#include <QWidget>

/*QT系统自己使用的命名空间预定义宏。也就是说以更快捷的方式定义QT自己的命名空间。
关于命名空间可以参考C++的命名空间*/

QT_BEGIN_NAMESPACE
namespace Ui { class Widget; }
QT_END_NAMESPACE

class Widget : public QWidget
{
    Q_OBJECT

public:
    Widget(QWidget *parent = nullptr);
    ~Widget();

private:
    Ui::Widget *ui;    
    QLineEdit *le,*le1;           //声明行编辑框对象
    QPushButton *pb;              //声明按钮框对象

};
#endif // WIDGET_H
QT  - 布局方式

1.1代码 解析

namespace Ui 
{ 
    class Widget; 
} 

这是声明了一个名称为 Ui 的命名空间namespace,包含一个类 Widget

但是这个类 Widget 并不是本文件里定义的类 Widget,而是 ui_widget.h 文件里定义的类,用于描述界面组件的。

这个声明相当于一个外部类型声明(具体要看完 ui_widget.h 文件内的解释之后才能搞明白)。

Widget 类的定义

widget.h 文件的主体部分是一个继承于 QWidget 的类 Widget 的定义,也就是本实例的窗体类。

class Widget : public QWidget        //创建继承自QWidget的自定义图形化界面类  
{
    Q_OBJECT                         //信号与槽对应的元

public:
    Widget(QWidget *parent = nullptr);//构造函数的声明,参数四QWidget*类型的指针
    ~Widget();                        //析构函数。

private:                             
    Ui::Widget *ui;                   //ui界面的指针,可以通过该指针使用ui界面上的组
件  
};

在 Widget 类中使用了宏 Q_OBJECT,这是使用 Qt 的信号与槽(signal 和 slot)机制的类都必须加入的一个宏(信号与槽在后面详细介绍)。

在 public 部分定义了 Widget 类的构造函数和析构函数。

  • 在 private 部分又定义了一个指针。

Ui::Widget *ui;      //ui界面的指针,可以通过该指针使用ui界面上的组件  

这个指针是用前面声明的 namespace Ui 里的 Widget 类定义的,所以指针 ui 是指向可视化设计的界面,后面会看到要访问界面上的组件,都需要通过这个指针 ui。

二.widget.cpp

#include "widget.h"
#include <QVBoxLayout>       //布局管理器头文件
Widget::Widget(QWidget *parent)
: QWidget(parent)
{
pb = new QPushButton("OK",this);//建立新的按钮框le = new QLineEdit(this); 
//建立新的行编辑框lele1 = new QLineEdit(this); 
//建立行编辑框le1
//方法1:pb -> setGeometry(0,100,50,50);   
//设置物理方位  写法:告诉坐标 向下是y轴 向右是x轴  并说出宽和高的值
//方法2: 布局管理器
QVBoxLayout *vbox = new QVBoxLayout; //建立一个布局管理器 QVBoxLayout 垂直布局管理器
vbox->addWidget(le1);  //布局行编辑框le1
vbox->addWidget(le);  //布局行编辑框
vbox->addWidget(pb);  //布局按钮this ->setLayout(vbox); 
//设置布局管理器 把主界面交给布局管理器//将行编辑框和按钮连接起来  实现按钮按下行编辑框清空
//c++升级 添加了信号与槽机制 connect绑定自己的激发信号和对方对象的槽 实现效果:按下按钮 激发对方槽函数的执行
//  connect(pb, SIGNAL(clicked(bool)),le,SLOT(clear()));
//实现点一下刺激两个对象 将一个对象中的东西搬移到另一个对象中去  解决方法:去升级主程序 槽函数的设计
connect(pb,SIGNAL(clicked(bool)),this,SLOT(movestr()));  //当按钮按下 我希望把按钮的信号SIGNAL 连接到 this 软件的槽SLOT 调用movestr函数
}Widget::~Widget()
{}
#include "widget.h"
#include "ui_widget.h"
#include <QVBoxLayout>         //竖直布局
#include <QHBoxLayout>         //水平布局
#include <QGridLayout>         //网状布局
#include <QFormLayout>         //表格布局
Widget::Widget(QWidget *parent)
    : QWidget(parent)
{
    le = new QLineEdit(this);
    le1 = new QLineEdit(this);
    pb = new QPushButton("OK",this);
    QFormLayout *fbox = new QFormLayout;
    fbox->addRow("user1",le);
    fbox->addRow("user2",le1);
    fbox->addRow("zz",pb);
    this->setLayout(fbox);
 #if 0
    QVBoxLayout *vbox = new QVBoxLayout;
    vbox->addWidget(le);
    vbox->addWidget(le1);
    vbox->addWidget(pb);

    this->setLayout(vbox);
#endif

 #if 0
    QHBoxLayout *hbox = new QHBoxLayout;
    hbox->addWidget(le);
    hbox->addWidget(le1);
    hbox->addWidget(pb);
    this->setLayout(hbox);
#endif
#if 0
   QGridLayout *gbox = new QGridLayout;
   gbox->addWidget(le,0,0);
   gbox->addWidget(le1,1,1);
   gbox->addWidget(pb,2,0);
   this->setLayout(gbox);
#endif
}
Widget::~Widget()
{
    delete ui;
}

2.1代码 解析

Widget::Widget(QWidget *parent)
    : QWidget(parent)
  • 派生类不能在成员初始化列表中直接初始化基类的成员

初始化基类成员

构造函数是不可继承的。因此,派生类的构造函数必须通过调用基类的构造函数初始化基类成员,不能够在派生类初始化列表直接初始化基类的成员,“越级初始化”。派生类的构造函数的一般格式为:

派生类名(形参表):基类名1(形参表1),基类名2(形参表2)···

{···}

书籍,C++ Primer4中的15.4.2派生类构造函数有提到相关知识。文章来源地址https://www.toymoban.com/news/detail-420767.html

到了这里,关于QT - 布局方式的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • python调用父类方法的三种方式(super调用和父类名调用)

    父类名.方法名(self) super(子类名,self).父类方法名() super().父类方法名 注意:super()通过子类调用当前父类的方法,super默认会调用第一个父类的方法(适用于单继承的多层继承 如下代码: 如下代码: 上面代码运行结果: 针对这种情况,正确的做法是定义Person类自己的构造方法

    2024年02月06日
    浏览(48)
  • Java切面的实现方式

    Java  切面( Aspect )是指在软件开发中,将某些横跨多个组件的功能,如日志记录、性能监控、权限控制等,抽象出来形成一个独立的模块,称之为切面。切面可以被应用到多个模块中,提供相同的功能。 Java 中实现切面的技术有多种,下面分别介绍。 1.  基于继承的切面实

    2024年02月12日
    浏览(24)
  • Qt 打开文件列表选择文件,实现拖拽方式打开文件

    这里笔者选用的是 QMainWindow ,创建好工程后在 ui 界面设计中添加 QLineEdit 、 QPushBtton 至少这两个控件,如下图摆放。 在 mainwindow.h 中添加所要用到的所有头文件。 并声明一个槽函数用于打开文件浏览器。 initUi 函数,实现如下: showFiles 槽函数,实现如下: 完成如上函数,并

    2024年02月11日
    浏览(53)
  • Qt中的文件读写几种方式

    思路 做文件读写的软件时,首先应该有文件对话框供我们打开可选的特定文件,然后才是去读取数据,对应的参数分别是(父指针,标题,路径,文件类型筛选字符串) 直接使用QFile类读文件 使用QTextstream的 readLine()或者readAll()读文件,readAll()不适合大文件 使用QTextStream的oper

    2024年02月12日
    浏览(29)
  • qt随记:拖动文件方式打开应用程序

    结果 即从main入口进入

    2024年02月10日
    浏览(42)
  • Qt 播放音频文件的几种方式

    : Qt 、 QSound 、 QSoundEffect 、 QMediaPlayer 、 multimedia 这篇文章至少拖了有一两个月了,这不阳了,在家实在是难受的要死,无心处理工作的事情,那就写写博客吧,因为项目中需要用到播放音频的功能,CV了部分代码,这里就简单的扯扯我对 QSound 、 QSoundEffect 和 QMediaP

    2024年02月11日
    浏览(29)
  • qt初入门1:qt读文件的几种方式简单整理

    工作变动开始接触qt,涉及到qt读文件相关业务,简单整理一下qt读文件几种方式,后面发现有其他的再新增 测试demo的方式归纳汇总几种读qt文件的方法 : 1:获取文件源按钮,并打印获取到的相关文件名 2:使用qfile直接读文件,显示耗时时间 3:使用qdatastream读文件,显示耗

    2024年02月12日
    浏览(30)
  • Microsoft.Extensions.Logging.ILogger实现按类名写入不同的日志文件

    使用Microsoft.Extensions.Logging框架可以很方便地实现按类名写入不同的日志文件。你可以通过配置LoggerProvider来实现此功能。下面是一个示例代码,演示如何按类名将日志写入不同的日志文件: 使用时,你可以在Startup类的ConfigureServices方法中注册ILoggerProvider,并指定日志文件夹路

    2024年02月04日
    浏览(31)
  • 淘宝太细了:mysql 和 es 的5个一致性方案,你知道吗?

    在40岁老架构师 尼恩的 读者交流群 (50+)中,最近有小伙伴拿到了一线互联网企业如拼多多、极兔、有赞、希音的面试资格,遇到一几个很重要的面试题: 说5种mysql 和 elasticsearch 数据一致性方案 与之类似的、其他小伙伴遇到过的问题还有: Mysql 和 ES 数据一致性问题及方案?

    2024年02月13日
    浏览(27)
  • 【vue2+antvx6】节点大小不一致,点击按钮流程图自动布局

    需求: 1、点击优化布局的按钮,自动布局(从左到右),按钮变成撤销布局按钮 2、点击撤销布局的按钮,返回之前的布局 3、在点击优化布局的按钮后,如果移动了节点,则自动将撤销布局的按钮变成优化布局的按钮 第一步:安装插件 第二步:写方法  全部代码

    2024年04月28日
    浏览(22)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包