在多文档编辑窗口QMdiArea(ui->mdiArea)
内怎么实现文档被编辑时改变窗口图标以提示文档被编辑
文档被编辑时
添加connect()
函数把文档编辑与相应处理槽联系起来
1 2 3 4 5 6
| void MainWindow::addEditor(textEditor *editor){ connect(editor,SIGNAL(textChanged()),this, SLOT(changeIcon())); QMdiSubWindow *subWindow = ui->mdiArea->addSubWindow(editor); subWindow->activateWindow(); subWindow->show(); }
|
设计文档被编辑处理槽
1 2 3 4
| // 在文本内容改变时设置当前活动窗口图标为感叹号图标 void MainWindow::changeIcon(){ ui->mdiArea->activeSubWindow()->setWindowIcon(QIcon(":/images/fm")); }
|
文档被保存时
当然有改变当然也有变回去的,当文档被保存后,
文档的状态改为未被编辑,此时文档的图标应该回到正常图标:/images/fl
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36
| // 保存文件 void MainWindow::Save(bool){ // 在新建文件保存时打开了一个对话框会改变当前活动窗口的地址,故先保存下来 QMdiSubWindow *activeSubWin = ui->mdiArea->activeSubWindow(); if(activeEditor()){ if(activeEditor()->save()){ // 保存文件后去掉文本已修改图标 activeSubWin->setWindowIcon(QIcon(":/images/fl")); }else{ QMessageBox::warning(this,tr("warning"), tr("write to %1 file failed") .arg(activeEditor()->getCurrentFile())); } } } // 保存所有文件 void MainWindow::SaveAll(bool){ QList<QMdiSubWindow *>windows = ui->mdiArea->subWindowList(); QMdiSubWindow *activeSubWin; // 遍历各个子窗口 for(int i=0; i<windows.size();++i){ textEditor *child = qobject_cast<textEditor *>(windows.at(i)->widget()); activeSubWin = ui->mdiArea->subWindowList().at(i); if(child->save()){ activeSubWin->setWindowIcon(QIcon(":/images/fl")); } } } // 另存为 void MainWindow::SaveAs(bool){ QMdiSubWindow *activeSubWin = ui->mdiArea->activeSubWindow(); if(activeEditor()){ if(activeEditor()->saveAS()){ activeSubWin->setWindowIcon(QIcon(":/images/fl")); } } }
|