一、MDI的创建及添加子窗口
1、代码创建一个新的MDI
mdi = new QMdiArea; // 新建MDI
mdi->setBackground(QBrush(Qt::black)); //设置MDI的背景颜色,默认是灰色
this->setCentralWidget(mdi); //设置主窗口为MDI空界面
2、添加已经创建好的子窗口到MDI(MDI Area控件直接拖进去)
ui->mdiArea->addSubWindow(dlg)->resize(200,200);//ui界面拖入mdi控件命名为mdiArea,添加子窗口dlg到mdi,并设置其大小
dlg->show();
3、设置子窗口样式(以图标和背景颜色为例)***【需要使用QMdiSubWindow】***
(1)单个子窗口
QWidget *win = new QWidget();
win->setMinimumSize(100,100);
win->setWindowTitle("Sub Window");
win->setWindowIcon(QIcon("://*.ico")); // 不生效
QMdiSubWindow *subWin = mdi->addSubWindow(win);
subWin->setWindowIcon(QIcon("://*.ico")); // 生效
(2)多个子窗口
QList<QMdiSubWindow *> subList = mdi->subWindowList();
for (int i = 0; i < subList.size(); ++i) {
QMdiSubWindow *sub = subList[i];
if (nullptr != sub) {
sub->setWindowIcon(QIcon("://*.ico")); // 图标设置
//背景颜色设置
QPalette palette(sub->palette());
palette.setColor(QPalette::Background, Qt::black);
sub->setPalette(palette);
}
}
二、QMdiArea类的相关函数
QMdiSubWindow *addSubWindow(QWidget *widget, Qt::WindowFlags flags = Qt::WindowFlags()); //在MDI区域中添加SubWindow子窗口。
void removeSubWindow(QWidget *widget); //删除MDI区域中SubWindow子窗口
void setBackground(const QBrush &background); //设置MDI区域的背景,默认为灰色
void setActivationOrder(WindowOrder order); //设置激活顺序,默认以创建先后激活,槽函数中有调用
void setOption(AreaOption option, bool on = true); //现只有一个选项,即创建子窗口,窗口不充满这个区域,默认是充满的
void setViewMode(ViewMode mode); //设置视口模式,默认area中很多小窗口,也可以是有tabBar形式的,设置tab的函数,都需要先开启这个
void setDocumentMode(bool enabled); //设置文档模式
void setTabsClosable(bool closable); //默认为否。设置为true时,tab上会出现一个关闭的小按钮
void setTabsMovable(bool movable);//设置是否可移动,默认为false,可以移动时,可拖动tab在tabBar上移动
void setTabShape(QTabWidget::TabShape shape); //设置tab的形状,默认长方形,也可以是梯形
void setTabPosition(QTabWidget::TabPosition position); //设置tabBar的方位,有东南西北四方位
void activateNextSubWindow(); //act下一个子窗口
void activatePreviousSubWindow(); //act上一个子窗口
void closeActiveSubWindow(); //关闭active的子窗口
void closeAllSubWindows(); //关闭所有子窗口
void cascadeSubWindows(); //MDI区域内的所有子窗口重叠排列
void tileSubWindows(); //将所有子窗口在MDI区域内排列整齐
void setActiveSubWindow(QMdiSubWindow *window); //设置active窗口为window
void subWindowActivated(QMdiSubWindow *window); //signals信号,为切换激活的子窗口时发出的信号
enum QMdiArea::WindowOrder :
QMdiArea::CreationOrder 0 //按创建时的先后顺序
QMdiArea::StackingOrder 1 //堆叠顺序
QMdiArea::ActivationHistoryOrder 2 //按激活历史前后顺序
enum QMdiArea::ViewMode :
QMdiArea::SubWindowView 0 // 以小窗口形式显示(默认)
QMdiArea::TabbedView 1 //不仅可小窗口,而且形成tabBar
enum QTabWidget::TabShape :
QTabWidget::Rounded 0 //tab形状为方形,默认
QTabWidget::Triangular 1 //tab形状为梯形
enum QTabWidget::TabPosition :
QTabWidget::North 0 //tab在上方显示
QTabWidget::South 1 //tab在下方
QTabWidget::West 2 //tab在左方
QTabWidget::East 3 //tab在右方