Multiple Documents


注意多窗体和MDI 窗体是不一样的。

void MainWindow::newFile()
{
    MainWindow *mainWin = new MainWindow;
    mainWin->show();
}

看起来有点奇怪,我们没有保存new 出来的指针,但这不是问题,因为Qt 会跟踪所有的窗口。

QApplication::closeAllWindows() slot 会关闭所有应用程序窗口,除非它们其中一个拒绝close 事件。


MainWindow::MainWindow()
{
    ...
    setAttribute(Qt::WA_DeleteOnClose);
    ...
}


关闭窗口默认是隐藏,但是不会删除。可以通过设置属性Qt::WA_DeleteOnClose 使得关闭窗体时删除窗体。

多窗体存在的问题是:每一个窗体都拥有独立的"最近打开文件" 列表,还有独立的Option 设置。要解决这个问题很简单,将recentFiles 成员声明成static 既可。

foreach (QWidget *win, QApplication::topLevelWidgets()) {
    if (MainWindow *mainWin = qobject_cast<MainWindow *>(win))
        mainWin->updateRecentFileActions();
}

遍历窗体更新每一个窗体的"最近打开文件" 列表,这是必需做的。还有,一个窗体的Option 改变时(如选中Show Grid)其它窗体也要一起改变,这也需要遍历窗体。

另外,还要保证同一个文件不能被两个窗体同时打开。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值