Qt 学习笔记——MDI

一、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在右方
  • 2
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值