QT中有自带的redo/undo类了,大致代码都是这样的:
QUndoStack *m_undoStack;
QAction *pUndo = m_undoStack->createUndoAction(this,"&撤销");
QAction *pRedo = m_undoStack->createRedoAction (this,"&返回");
这两个函数创建好ACTION之后,添加到工具栏或菜单栏......
此时,setText或默认第二个参数传递的标题文字,但是在多语言的QM加载后,仍保存软件启动时的文字!
意思就是得必须重启软件,你读取最后一次的QM配制后,才能正常显示!!!
拿QT安装目录的示例代码来测试,也是同样的问题!这是巨坑的问题!!!
解决办法:
1、后来想到了一个很搓的办法,每一次push都会调用resetUndoText来重新刷新文字!
在每一个m_undoStack->push(command)之后添加一个resetUndoText()函数来手动修改
这样的话能保证你的每次push之后,不会自动刷新成第一次启动的
void MainWindow::resetUndoText()
{
pUndo ->setText(tr("撤销"));
pRedo->setText(tr("返回"));
}
2、最后,还要在m_undoStack->create之后的手动关联槽
connect(pUndo, SIGNAL(triggered()), this, SLOT(resetUndoText()));
connect(pRedo, SIGNAL(triggered()), this, SLOT(resetUndoText()));
这样,当点击两个按钮的时候,再刷新一次文字,这样就保证多语言的QUndoStack QAction就没有任何障碍了!