QT的窗口们

文章详细介绍了Qt框架中窗口类的属性和标志,包括setAttribute用于改变窗口特性,如DeleteOnClose、AcceptDrops等,以及setWindowFlag用于设定窗口行为,如Window、Dialog、Tool等。还提到了窗口状态的设置和QWidget作为所有UI对象基类的角色。此外,文中对比了MainWindow和普通Widget的区别,如MainWindow包含工具栏。
摘要由CSDN通过智能技术生成

先放一张图,各窗口类的继承关系

窗口基本属性

所有窗口基本都是通过更改attribute或flag来实现不同的效果罢了
1 attribute

widget->setAttribute(Qt::WA_DeleteOnClose);//设置widget关闭时自动销毁
widget->setAttribute(Qt::WA_AcceptDrops);//接受拖放进来的窗口
widget->setAttribute(Qt::WA_Hover);//鼠标进出窗口时产生paint事件
widget->setAttribute(Qt::WA_Disabled);//窗体的键盘和鼠标事件都不会触发、不会响应,但其内的部件仍会响应,要全局禁用的话还要禁
//用其内的部件才行,相当于调用setDisabled(true)
widget->setAttribute(Qt::WA_DontShowOnScreen);//相当于hide()和setVisible(false)
widget->setAttribute(Qt::WA_InputMethodEnabled);//为true时可以输入中文日文等亚洲字符,若false则不能输入
widget->setAttribute(Qt::WA_QuitOnClose);//所有窗口默认都为true,意思是有多个窗口时,要等到最后一个为true的关闭后,程序才
//结束;一般就设置主窗口为true,子窗口为false,这样主窗口关闭时程序直接结束,所有子窗口都被关闭

2 flag

widget->setWindowFlag(...)//仅设置一个
widget->setWindowFlags(...)//接受多个参数版本

widget->setWindowFlag(Qt::Widget);//默认选项,若窗口有parent则作为内部组件,若无则作为独立窗口
widget->setWindowFlag(Qt::Window);//当窗口设置此选项,则无论是否有parent,都作为独立窗口,不会嵌入到parent中
widget->setWindowFlag(Qt::Dialog);//创建对话框
widget->setWindowFlag(Qt::Tool);//作为工具栏,即父窗口永远在最上面的一栏,若有parent则此窗口一直在最上方,若没有你应该考虑为
//该窗体设置Qt::WindowStaysOnTopHint属性(保持最上方),你也可以组合Qt::FramelessWindowHint(无边框)标志使用。
widget->setWindowFlag(Qt::SplashScreen);//无边框?
widget->setWindowFlag(Qt::FramelessWindowHint);//无边框

widget->setWindowFlag(Qt::CustomizeWindowHint);//若要自定义窗口外观,需先设置此flag
widget->setWindowFlag(Qt::WindowTitleHint);//窗口有标题栏
widget->setWindowFlag(Qt::WindowSystemMenuHint);//窗口有系统菜单
widget->setWindowFlag(Qt::WindowMinimizeButtonHint);//有最大/最小化/关闭按钮
widget->setWindowFlag(Qt::WindowStaysOnTopHint);//窗口总是最上/下层

3 state

widget->setWindowState(Qt::WindowNoState);//正常状态
widget->setWindowState(Qt::WindowMinimized);//最小/大化
widget->setWindowState(Qt::WindowFullScreen);//全屏
widget->setWindowState(Qt::WindowActive);//变为活跃窗口

QWidget

QWidget类是所有用户界面对象的基类。每个能显示在程序窗口中的组件都继承自它。

QWidget是用户界面的原子类。它接收鼠标、键盘和来自系统的其他事件,并在屏幕上将它们绘制出来。每个Widget都是矩形的,并且它们按Z轴顺序排列。一个窗口部件可以被它的父窗口部件或者它前面的窗口部件盖住一部分。

没有指定parent的Widget称为Window(即QWindow)。表示此widget(窗口)是一个独立的窗口,有自己的Frame(边框)和标题栏等(当然也可以通过window flags来取消这些项)。Qt中,QMainWindow和QDialog的多种多样的子类是最常见的Window类型。
若指定了parent,则widget就作为主窗口中的单个组件来使用。
如一个button,即可以作为独立窗口,也可以作为内部组件,但还是作为内部组件更合适。
在这里插入图片描述
widget的位置数据
在这里插入图片描述
基本使用

QWidget* w=new QWidget();//要注意new和栈上分配时的内存处理问题
w.show();//创建一个widget并显示

MainWindow

mainwindow自带三个工具栏,而widget只是空白窗口(也可以手动添加工具栏)
在这里插入图片描述
1 menuBar的各个选项在UI Designer中添加即可
2 在mainToolBar中添加

	ui->mainToolBar->addWidget(lab_FtSize);
    ui->mainToolBar->addWidget(sbox_FtSize);
    ui->mainToolBar->addWidget(lab_Font);
    ui->mainToolBar->addWidget(fbox_Font);
    //各种组件都可以添加到工具栏上(lable、spinx等),按照执行顺序添加,但在Designer中不能直接放进去(必须用代码)

3 在statusBar中添加

	ui->statusBar->addWidget(cur_File);
    ui->statusBar->addWidget(pro_Bar);//同工具栏
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值