QT笔记1__界面基类(QWidget、QMainWindow、QDialog)、窗口状态和几何布局

版权声明:本文为博主原创文章, 欢迎转载,转载请注明出处。 https://blog.csdn.net/baicaidiaozhui/article/details/86683463

一、 Qt窗口部件基类

当我们创建一个QTGUI应用程序时,有向导默认的基类有三个:QWidget、QMainWindow和QDialog;而这三个窗口体也是最常用的。
在这里插入图片描述

其中QMainWindow是带有菜单栏和工具栏的窗口类,QDialog类是对话框窗口的基类,而QMainWindow、QDialog和其他所有窗口部件全部继承自QWidget. Qwidget继承自QObject类和QpaintDvice类.
在这里插入图片描述

二、3个主要窗口基类介绍

  • 1、QWidget
    QWidet类是所有用户界面对象的基类,被称作基础窗口部件。窗口部件是用户界面的一个基本单元,它从窗口系统接收鼠标,键盘和其他消息,并在屏幕上绘制自己。一个窗口部件可以被他的父窗口或者是其他窗口挡住一部分。Qwidget继承自QObject类和QpaintDvice类,其中QObject类是所有支持Qt对象模型的对象的基类,QPaintDvice类是所有可以绘制的对象的基类;

  • 2、QMainWindow
    QMainWindow类提供一个带有菜单条,工具条和一个状态条的主应用程序窗口。主窗口通常提供一个大的中央窗口部件,以及周围菜单,工具条,和一个状态栏。QMainWindow窗口经常被继承,使得封装中央部件,菜单,工具条,状态栏等都变得很容易,当用户点击它的时候,相应的槽就会被调用。

  • 3、QDialog
    QDialog类是对话框窗口的基类,对话框窗口主要用于短期任务和用户进行短期通讯的顶级窗口,QDialog可以是模态对话框或者是非模态对话框。QDialog支持扩展并带有返回值,他们可以带有默认值

注意:

三、基础窗口部件QWidget

1. 窗口部件:窗口和子部件

  • 窗口部件: 简称部件,窗口、对话框、标签、按钮、文本输入框等都是部件。这些部件既可以接受用户输入、显示数据和信息并在屏幕上绘制自己,甚至可以作为容器放置其他部件
  • 窗口:没有嵌入到其他部件中的部件称为窗口(顶级部件)。
    顶级部件是有框架和标题栏的窗口(尽管使用了一定的窗口部件标记,创建顶级窗口部件时也可能没有这些装饰。)在Qt中,QMainWindow和不同的QDialog的子类是最普通的顶级窗口

  • 子部件:非窗口部件,称为子部件。

  • 注意: 窗口和控件都继承自QWidget,如果不为控件指定父对象,它就会被作为窗口处理,这时setWindowsTitle()和setWindowIcon()函数就会生效;


代码

#include <QApplication>  
#include <QWidget>
#include <QString>
#include <QLabel>
int main(int argc, char *argv[])
{
    QApplication a(argc, argv);
    //创建Qwidget部件,没有指定父窗口,即parant=0,因此mWidget为窗口,即顶级部件;
    QWidget *mWidget = new QWidget();
    mWidget->setWindowTitle(QString::fromLocal8Bit("我是mWidget窗口标题"));
    //创建Qlabel,并指定父窗口为mWidget,因此mLabelSon为子部件;
    QLabel *mLabelSon = new QLabel(mWidget);//
    mLabelSon->setText(QString::fromLocal8Bit("我是labelSon也是mWidget的子部件"));
    //
    //创建Qlabel部件,没有指定父窗口,即parant=0,因此mLabel为窗口,即顶级部件;
    //并且mLabel的setWindowTitle变为可用
    QLabel *mLabel = new QLabel();
    mLabel->setWindowTitle(QString::fromLocal8Bit("我是label窗口标题"));
    mLabel->setText(QString::fromLocal8Bit("我是label也是独立窗口"));
    mWidget->show();
    mLabel->show();
    int ret = a.exec();
    delete mWidget;
    delete mLabel;
    return ret;
}

结果:
在这里插入图片描述

  • 窗口类型
    Qwidget的构造函数有两个参数:QWidget* parant =0和QT::WindowFlages f=0。其中parant为父窗口指针,默认值为0;f是QT::WindowFlages类型,或者QT::WindowFlages和QT::WindowType的或组合;例如:
//指定窗口为对话框类型;
QWidget* widget0=new QWidget(0,Qt::Dialog);
//指定窗口为欢迎窗口类型并处于最上层;
QWidget* widget1=new QWidget(0,Qt::SplashScreen|QT::WindowStayOnTopHint);
//
//窗口类型和功能的设置,采用函数setWindowFlags ( Qt::WindowFlags type )
//
Qt::Widget               //是一个窗口或部件,有父窗口就是部件,没有就是窗口
Qt::Window               //是一个窗口,有窗口边框和标题
Qt::Dialog               //是一个对话框窗口
Qt::Sheet                //是一个窗口或部件Macintosh表单
Qt::Drawer               //是一个窗口或部件Macintosh抽屉
Qt::Popup                //是一个弹出式顶层窗口
Qt::Tool                 //是一个工具窗口
Qt::ToolTip              //是一个提示窗口,没有标题栏和窗口边框
Qt::SplashScreen         //是一个欢迎窗口,是QSplashScreen构造函数的默认值
Qt::Desktop              //是一个桌面窗口或部件
Qt::SubWindow            //是一个子窗口
//为窗口添加一些功能
Qt::FramelessWindowHint           //直接隐藏
Qt::CustomizeWindowHint          //关闭默认窗口标题提示
Qt::WindowTitleHint              //为窗口修饰一个标题栏
Qt::WindowSystemMenuHint         //为窗口修饰一个窗口菜单系统
Qt::WindowMinimizeButtonHint     //为窗口添加最小化按钮
Qt::WindowMaximizeButtonHint     //为窗口添加最大化按钮
Qt::WindowMinMaxButtonsHint      //为窗口添加最大化和最小化按钮
Qt::WindowCloseButtonHint
Qt::WindowContextHelpButtonHint
Qt::FrameWindowHint:					//没有边框的窗口
Qt::MacWindowToolBarButtonHint
Qt::WindowFullscreenButtonHint
Qt::BypassGraphicsProxyWidget
Qt::WindowShadeButtonHint
Qt::WindowStaysOnTopHint					
Qt::WindowStaysOnBottomHint
Qt::WindowOkButtonHint
Qt::WindowCancelButtonHint
Qt::WindowTransparentForInput
  • 自定义标题栏:Qt::CustomizeWindowHint
    将Qt::CustomizeWindowHint与以下标志必须与这个标志一起使用才有效,否则窗口将有默认的标题栏
Qt::WindowTitleHint:显示窗口标题栏
Qt::WindowSystemMenuHint://显示系统菜单
Qt::WindowMinimizeButtonHint://显示最小化按钮
Qt::WindowMaximizeButtonHint://显示最大化按钮
Qt::WindowMinMaxButtonsHint://显示最小化按钮和最大化按钮
Qt::WindowCloseButtonHint://显示关闭按钮 
  • 设置窗口初始状态函数
//函数:
void QWidget::setWindowState ( Qt::WindowStates windowState )
//枚举:
WindowState {
       WindowNoState    = 0x00000000, //正常状态
       WindowMinimized  = 0x00000001,//窗口最小化
       WindowMaximized  = 0x00000002,//窗口最大化
       WindowFullScreen = 0x00000004,//窗口全屏
       WindowActive     = 0x00000008//窗口处于激活状态
   };
//设置窗口大小
void QWidget::setFixedSize ( int w, int h )

2.窗口几何布局

在这里插入图片描述
窗口的几何设置函数包含两类:
包含框架: x()、y()、frameGeometry()、pos()和move()等函数;
不包含框架:geometry()、width() 、 height() 、rect() 、size()等函数;

在这里插入图片描述

测试代码如下

#include <QApplication>  
#include <QWidget>
#include <QDebug>
int main(int argc, char *argv[])
{
	QApplication a(argc, argv);
	QWidget *mWidget = new QWidget();
	mWidget->resize(600, 400);			//设置窗口不包含框架部分的大小
	mWidget->move(100, 100);			//设置窗口位置
	mWidget->show();					//需要先显示窗口才能获得窗口几何尺寸;
	
	//获取不包含框架部分的窗口几何特性:
	int x = mWidget->x();
	int y = mWidget->y();
	QRect geoRect = mWidget->geometry();
	qDebug("x:%d", x);
	qDebug("y:%d", y);
	qDebug() << "geoRect:" << geoRect << endl;
	
	//获取包含框架部分的窗口几何特性:
	int fx = mWidget->geometry().x();
	int fy = mWidget->geometry().y();
	QRect fraRect = mWidget->frameGeometry();
	qDebug("fx:%d", fx);
	qDebug("fy:%d", fy);
	qDebug() << "fraRect:" << fraRect << endl;
	//
	delete mWidget;
	return a.exec();
}

输出结果:
在这里插入图片描述

3.其他设置:

//窗体标题
this->setWindowTitle(“Qt5.1 窗体应用”);
//窗体最大300300
this->setMaximumSize(300,300);
//窗体最小300
300
this->setMinimumSize(300,300);
//背景红色
this->setStyleSheet(“background:red”);
//窗体 ICO图片,如图不起别名,后缀直接写图片全名。
this->setWindowIcon(QIcon(":/new/prefix1/ico"));

四、参考资料:

1、《C++ Qt5 范例开发大全》
2、《Qt Creator快速入门》

猜你喜欢

转载自blog.csdn.net/baicaidiaozhui/article/details/86683463