#QT深坑# QUndoStack撤销和返回制作多语言的一个坑!!

QT中有自带的redo/undo类了,大致代码都是这样的:


QUndoStack  *m_undoStack;

QAction *pUndo = m_undoStack->createUndoAction(this,"&撤销");

QAction *pRedo = m_undoStack->createRedoAction (this,"&返回");


这两个函数创建好ACTION之后,添加到工具栏或菜单栏......


此时,setText或默认第二个参数传递的标题文字,但是在多语言的QM加载后,仍保存软件启动时的文字!


意思就是得必须重启软件,你读取最后一次的QM配制后,才能正常显示!!!

扫描二维码关注公众号,回复: 2788689 查看本文章


拿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就没有任何障碍了!



猜你喜欢

转载自blog.csdn.net/wangningyu/article/details/54131404