窗口,子窗口,窗口几何尺寸

#include "mainwindow.h"
#include <QApplication>
#include <QLabel>
#include <QWidget>
int main(int argc, char *argv[])
{
    
    
    QApplication a(argc, argv);
    MainWindow w;
//    w.show();
    //新建一个窗口 没有父对象
    QWidget *widgetParent = new QWidget();
  //QWidget *wiidgetParent = new QWidget(0,Qt::FramelessWindowHint); 
  //QWidget构造函数:QWidget::QWidget(QWidget * parent = 0, Qt::WindowFlags f = 0) 
    widgetParent->setWindowTitle(QObject::tr("我是widget窗口"));
    // labelChild指定了父窗口为widget,所以不是窗口
    QLabel *labelChild = new QLabel(widgetParent);
    labelChild->setText(QObject::tr("labelChild:我不是独立窗口,\n只是widget的子部件"));
 
    // 新建QLabel对象,没有父对象
    QLabel *labelParent = new QLabel();
    labelParent->setWindowTitle(QObject::tr("我是labelParent窗口"));
    //设置窗口的大小
    labelParent->resize(300,300);
    // 设置要显示的信息
    labelParent->setText(QObject::tr("labelParent:我是个窗口"));
 
 
    // 在屏幕上显示出来
    labelParent->show();
    widgetParent->resize(300,300);
    widgetParent->show();
 
 
    int ret = a.exec();
    delete widgetParent;//会自动删除labelChild;
    delete labelParent;
    return ret;
}

窗口部件(Widget)包括 QMainWindow,QWidget,QDialog还有按钮,表格,单选框等窗口部件,
一般我们把没有嵌入到其他部件中的部件称为窗口
窗口一般都有标题栏和边框

窗口就是没有父部件的部件,所以称为顶层部件,与其相对的是非窗口部件,又称为子部件

在这里插入图片描述
常用标志举例

Qt::FramelessWindowHint用来产生一个没有边框的窗口。

Qt::WindowStaysOnTopHint用来使该窗口停留在所有其它窗口上面。

Qt::Dialog用来生成对话窗口(就是带问号的窗口)

Qt::SplashScreen用来产生一个没有边框的窗口

窗口部件(Widget):简称部件,是搭建Qt界面的主要组成部分。窗口部件不但包含我们前面讲过的QMainWindow、QDialog、QWidget还包括我们常用的按钮、标签、表格、单选框等都是窗口部件。

窗口:我们把没有嵌入到其他部件中的部件称为窗口,窗口一般都有标题栏和边框。 窗口就是没有父部件的部件,所以称为顶层部件。

子部件:又称非窗口部件,在Qt中大部分部件被用作子部件,它们嵌入在别的窗口中,例如我们常说的按钮、标签、单选框等。

窗口类型
QWidget构造函数:QWidget::QWidget(QWidget * parent = 0, Qt::WindowFlags f = 0)

(1)前面的parent就是指父窗口部件,默认值为0,表明没有父窗口;

(2)f参数是Qt::WindowFlags枚举类型的,分为窗口类型(WindowType)和窗口标志(WindowFlags)。

(3)前者可以定义窗口的类型,比如我们这里f=0,表明使用了Qt::Widget一项,这是QWidget的默认类型,这种类型的部件如果有父窗口,那么它就是子部件,否则就是独立的窗口。

(4)后者包括了很多类型,

常用标志举例

Qt::FramelessWindowHint用来产生一个没有边框的窗口。

Qt::WindowStaysOnTopHint用来使该窗口停留在所有其它窗口上面。

Qt::Dialog用来生成对话窗口(就是带问号的窗口)

Qt::SplashScreen用来产生一个没有边框的窗口。

窗口的几何尺寸
对于一个窗口,往往要设置它的大小和运行时出现的位置,这就是窗口几何布局。在前面的例子中已经看到了, widgetParent默认的大小就是它所包含的子部件 labe2Child的大小,即使widgetParent设置了大小,还是以labe2Child为准。

而widgetParent和labe2Child出现时在窗口上的位置也是不确定的。对于窗口的大小和位置,根据是否包含边框和标题栏两种情况,要用不同的函数来获取。可以在帮助索引中查看Window and Dialog Widgets关键字,文档中显示了窗口的几何布局图,

这里的函数分为两类,一类是包含框架的,一类是不包含框架的:

包含框架:x()、y()、frameGeometry()、pos()和move()等函数;

不包含框架:geometry()、width()、height()、rect()和size()等函数。

可以添加以下代码得到:

qDebug()<<"widgetParent->x();"<<widgetParent->x();
qDebug()<<"widgetParent->y();"<<widgetParent->y();
qDebug()<<"widgetParent->pos();"<<widgetParent->pos();
qDebug()<<"widgetParent->frameGeometry();"<<widgetParent->frameGeometry();
qDebug()<<"widgetParent->geometry();"<<widgetParent->geometry();
qDebug()<<"widgetParent->width();"<<widgetParent->width();
qDebug()<<"widgetParent->height();"<<widgetParent->height();
qDebug()<<"widgetParent->size();"<<widgetParent->size();
qDebug()<<"widgetParent->rect();"<<widgetParent->rect();

//把主窗体几何位置给子窗体
 child->setGeometry(this->geometry());
 

猜你喜欢

转载自blog.csdn.net/weixin_44972129/article/details/109748349