Название: [РЕШЕНО] Изменение названия QAction в контекстном меню QTextEdit
Отправлено: gil9red от Июль 08, 2012, 21:08
Можно ли, QAction, появляющиеся в контексном меню текстовых редакторов (QTextEdit, QLineEdit), перевести например на русский язык, так чтобы ими можно было пользоваться? QMenu *menuTextEdit = textEdit.createStandardContextMenu();
// получаем указатели
QAction *actionUndo = menuTextEdit->actions().at(0); QAction *actionRedo = menuTextEdit->actions().at(1); QAction *actionCut = menuTextEdit->actions().at(3); QAction *actionCopy = menuTextEdit->actions().at(4); QAction *actionPaste = menuTextEdit->actions().at(5); QAction *actionSelectAll = menuTextEdit->actions().at(8);
// в событии контексного меню:
QMenu *menu = new QMenu();
menu->addAction(actionCut); menu->addAction(actionCopy); menu->addAction(actionPaste); menu->addSeparator(); menu->addAction(actionSelectAll);
// добавляю свои действия menu->addSeparator(); menu->addAction(actionSettings); menu->addSeparator(); menu->addAction(actionHide); menu->addAction(actionLock); menu->addAction(actionUnlock); menu->addAction(actionDelete); menu->exec(point); delete menu;
если хочется назвать действия подругому, то меняю setText нужного мне QAction, НО только, когда я добавляю вручную QAction в меню, почти все перестают работать (вставка (Paste) исключение) а если получить список QAction, и добавить именно список, то все QAction работают
Название: Re: Изменение названия QAction в контекстном меню QTextEdit
Отправлено: gil9red от Июль 09, 2012, 01:20
Похоже нет. Пришлось, выбрать альтернативный вариант: самому сделать эти QAction, благо у QTextEdit есть нужные слоты :) QAction *actionCut = new QAction(this); QAction *actionCopy = new QAction(this); QAction *actionPaste = new QAction(this);
actionCut->setShortcut(QKeySequence::Cut); actionCopy->setShortcut(QKeySequence::Copy); actionPaste->setShortcut(QKeySequence::Paste);
connect(actionCut, SIGNAL(triggered()), &textEdit, SLOT(cut())); connect(actionCopy, SIGNAL(triggered()), &textEdit, SLOT(copy())); connect(actionPaste, SIGNAL(triggered()), &textEdit, SLOT(paste()));
а чтобы action вели себя правильно, нужно добавить логику: в контекстном эвенте QMenu *menu = new QMenu();
QTextCursor textCursor = textEdit.textCursor();
actionCut->setEnabled(true); actionCopy->setEnabled(true); // если не выделенно ничего if(textCursor.selectionEnd() - textCursor.selectionStart() <= 0) { actionCut->setEnabled(false); actionCopy->setEnabled(false); }
actionCut->setVisible(true); actionPaste->setVisible(true);
// если в тектовом редакторе возможно только считывание if(textEdit.isReadOnly()) { actionCut->setVisible(false); actionPaste->setVisible(false); }
menu->addAction(actionCut); menu->addAction(actionCopy); menu->addAction(actionPaste);
menu->exec(event->globalPos()); delete menu;
Если у кого нибудь есть идеи, как сделать, то о чем я спрашивал, проще, прощу, пишите :)
Название: Re: Изменение названия QAction в контекстном меню QTextEdit
Отправлено: Bepec от Июль 09, 2012, 07:00
Ты хочешь язык в программе менять?
Если экшены статические(созданы там в дизайнере), тогда спокойно переводится в лингвисте.
Если динамические - придётся тебе писать пару функций.
PS смотри раздел интернализация.
Название: Re: Изменение названия QAction в контекстном меню QTextEdit
Отправлено: gil9red от Июль 09, 2012, 15:07
нет, не в дизайнере, мне почему то удобнее делать вручную=) я написал функцию: void setLanguage(QString language);
в ней содержатся все случаи называния объектов, которое видит пользователь=)
Название: Re: Изменение названия QAction в контекстном меню QTextEdit
Отправлено: Bepec от Июль 11, 2012, 10:14
Я бы сказал что это плохо. Очень дюже.
Надо использовать уже имеющиеся возможности Qt.
Читали про интернационализацию?
|