【Qt学习笔记】2.窗体Widget && 屏幕坐标 && 布局

一、窗体

在Qt中,把窗体(口)叫做Widget。

Widget可以是主窗体(口),也可以是依附在主窗体(口)上的各种控件,作为子窗体,这两种窗口,分别称作顶级窗口(top-level widget)和子窗口(sub widget)。

顶级窗口:一个标准的窗口,带边框、标题栏、若干按钮。(独立)

子窗口:在窗口里面的窗口,例如:按钮、文本框等控件。(不独立,随着父窗口移动)

注意:

1、每个子窗口都有一个父窗口

2、子窗口里面可能包含了若干子窗口,是一层一层的关系。

3、顶级窗口也有父窗口:就是桌面(Desktop Widget),桌面本身也是一个窗口

二、屏幕坐标

描述一个窗口,有两个性质:

1、位置:窗口左上角的坐标x ,y

2、大小:宽度width,高度height(单位:像素)

比如说,我的显示屏分辨率为(1600 * 900),那么左上角(top-left corner)的坐标是(0, 0),右下角(bottom-right corner)的坐标是(1599,899) 此外要注意,这里说的“左上角”“右下角”是窗口的有效区域。不包括上面的标题栏。

三、子窗口的相对坐标

一个子窗口在父窗口中的位置。

四、定义一个窗口

目标:实现一个窗口界面,向其中添加一个按钮控件。

方法:

1、派生QWidget

2、创建QButton对象,添加到父窗口

3、设置按钮的大小与位置

步骤:

1、写一个主窗口:这是一个继承自QWidget的类(可以手写,但在VS下,直接在解决方案管理器中右键,添加Qt类,更为便捷)

MyWin.h:

#pragma once

#include <QWidget>
#include <QPushButton>

class MyWin : public QWidget
{
	Q_OBJECT

public:
	MyWin(QWidget *parent); //构造函数,参数表示当前窗口的父窗口,若为NULL则表示主窗口
	~MyWin();
};

MyWin.cpp

#include "MyWin.h"

MyWin::MyWin(QWidget *parent)
	: QWidget(parent)
{
}

MyWin::~MyWin()
{
}

2、写一个按键

MyWin类完善如下:

#pragma once

#include <QWidget>
#include <QPushButton>

class MyWin : public QWidget
{
	Q_OBJECT

public:
	MyWin(QWidget *parent);
	~MyWin();
private:
	QPushButton* my_button;
};

MyWin.cpp

#include "MyWin.h"

MyWin::MyWin(QWidget *parent)
	: QWidget(parent)
{
	my_button = new QPushButton(this); //这个button窗口父窗口是this指向的对象,也就是它本身
	my_button->setText("change world");
	my_button->setGeometry(100, 100, 200, 50);
}

MyWin::~MyWin()  
{
	//这里delete了一下,但实际上子窗口控件由父窗口管理,因此不必显示delete
	if (my_button != NULL)
	{
		delete my_button;
	}
}

main.cpp

#include "Test2_3a_11_25.h"
#include <QtWidgets/QApplication>
#include "MyWin.h"

int main(int argc, char *argv[])
{
    QApplication a(argc, argv);
	MyWin BaseWindow(NULL);
	MyWin DerivedWindow(&BaseWindow);

	BaseWindow.show();
    return a.exec();
}

添加子控件时注意:

1、创建子对象时,必须指定父窗口(作为构造函数的参数)

2、析构函数:子窗口控件由父窗口管理,因此不必显示delete

五、更多的控件

QLineEdit:单行文本框

QPlainTextEdit:普通多行文本框

更新了更多的子窗口,现在的代码如下:

执行:

现在有几个很不雅观的问题:

1、布局太难

2、父窗口大小调整时,子窗口如何随着移动?

3、子窗口如何占满控件?

这些问题,接下来会解决。

尾巴:

我发现Qt内部的成员对象的命名采用的是大驼峰法,因此在定义自己的对象时,尽量换一种命名风格以避免跟库中的对象发生命名冲突

【Qt学习笔记】2.窗体Widget && 屏幕坐标 && 布局

时间: 2024-08-02 02:51:11

【Qt学习笔记】2.窗体Widget && 屏幕坐标 && 布局的相关文章

Qt学习笔记-Widget布局管理

Qt学习笔记4-Widget布局管理 以<C++ GUI Programming with Qt 4, Second Edition>为参考 实例:查找对话框 包含三个文件,finddialog.h,finddialog.cpp及main.cpp. //finddialog.h代码 #ifndef FINDDIALOG_H#define FINDDIALOG_H #include <QDialog> class QCheckBox;class QLabel;class QLineE

qt学习笔记(五) QGraphicsPixmapItem与QGraphicsScene的编程实例 图标拖动渐变效果

应大家的要求,还是把完整的project文件贴出来,大家省点事:http://www.kuaipan.cn/file/id_48923272389086450.htm 先看看执行效果,我用的群创7寸屏,主机是mini2440,分辨率是800*480,程序写比較粗糙,但对刚開始学习的人还是有一点启示,大家一起进步. qt中提供了QGphicsView,QGraphicsScene,QGraphicsItem,QGraphicsPixmapItem是QGraphicsItem的子类 分辨创建它们的实

【Qt学习笔记】13.拖放技术:Drag & Drop

1.接受拖放 Drag & Drop 是一个界面操作,用于在两个窗口间传递数据. Drag Source: 拖放源窗口 Drag Target: 拖放目标窗口 拖放操作: 1.在源窗口:选中目标,按下鼠标,移动,拖至目标窗口(Drag) 2.在目标窗口:取消鼠标,到指定位置,松开鼠标(Drop) (按下ESC取消操作) MIME: MIME(Multipurpose Internet Mail Extensions)被传递的数据以MIME格式传送,它是多组type-data数据:(type0,

QT学习笔记—1

1.模态和非模态的区别:非模态可以同时操作两个窗口,模态的只能在顶层窗口关闭之后才能使用其他窗口 //同时显示出widget和dialog窗口,非模态     QDialog *dialog = new QDialog(this);     dialog->show(); //同时显示出widget和dialog窗口,模态     QDialog *dialog = new QDialog(this);     dialog->setModal(true);     dialog->sh

QT学习笔记(1)

采用QT创建一个GUI的应用程序时,都必须包含一个QApplication的对象,而对于非GUI的QT程序,可以使用不依赖QtGui库的QApplication QT的主要类: QLable                   标签类 QPushButton          按钮类 QVBoxLayout          竖布局管理器类 QHBoxLayout          横布局管理器类 QWidget                 窗口部件类 QGridLayout        

Duilib学习笔记《02》— 界面布局

1. 界面描述XML文件 Duilib主要是通过XML来进行界面的布局配置,程序通过读取并解析XML文件来创建对应的窗体.DuiLib的页面布局分为三类:窗体(Window).容器(Contain)和控件(Control).顾名思义窗体就是要创建的窗口,容器则相当于是窗体内的一个子窗体,可以在容器内添加容器或者控件,当然定义的位置也都是相对与容器内的左上顶点:控件就是一些常用的Button.Edit.Label等窗体上的基本元素. 容器经常使用的有VerticalLayout(垂直布局容器).H

【Qt学习笔记】1.初步接触

一.前言 Qt是一个跨平台的C++图形面向对象的框架,今天开始学习并记录学习过程,希望通过这段时间的努力学会Qt的使用. 同时我也希望在学习的过程中对C++的各种特性有能深刻的认识. 此外,我在Qt初步的学习过程中,所用的环境应该是 VS2015 IDE 二.安装 官网下载Qt安装包和 Qt for VS addin,分别安装,并配置. 三.Hello World 接下来用Qt框架来完成第一个程序 首先打开VS,创建一个Qt工程 熟悉的C++界面,但Qt是有可视化界面的,点击解决方案管理器中的.

QT学习笔记(14) 定时器类DTimer的使用

一. 在前面的学习笔记中,我们已经学习定时器事件http://www.cnblogs.com/blog-ccs/p/7445323.html 现在,我们学习QTimer定时器类,比较优劣. 二.示例代码 widget.h 1 #ifndef WIDGET_H 2 #define WIDGET_H 3 4 #include <QWidget> 5 #include <QTimer>//定时器对象 6 7 namespace Ui { 8 class Widget; 9 } 10 11

【Qt学习笔记】11.自定义控件 Customize the Widget

一.窗口绘制--基本方法 自定义窗口: Qt里允许自定义窗口控件,使之满足特殊的要求: 1.可以修改其显示,自行绘制 2.可以呈现动态效果 3.可以添加事件,支持鼠标和键盘操作 自定义的控件可以直接在Qt Designer 中使用,可以直接加到父窗口里. 步骤: 1.新建一个类,继承于QWidget和QFrame,最好是继承于QFrame2.重写以下函数 void CellMonitor::paintEvent( QPaintEvent* event ) 3.使用这个类 CircleWidget