先放一张图,各窗口类的继承关系
窗口基本属性
所有窗口基本都是通过更改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);//同工具栏