Qt-QTextEdit在文本被编辑时改变窗口图标

在多文档编辑窗口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"));
}
}
}