Russian Qt Forum
Ноябрь 27, 2024, 16:03 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

Войти
 
  Начало   Форум  WIKI (Вики)FAQ Помощь Поиск Войти Регистрация  

Страниц: [1]   Вниз
  Печать  
Автор Тема: [РЕШЕНО] Изменение названия QAction в контекстном меню QTextEdit  (Прочитано 4953 раз)
gil9red
Administrator
Джедай : наставник для всех
*****
Offline Offline

Сообщений: 1805



Просмотр профиля WWW
« : Июль 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 работают
« Последнее редактирование: Ноябрь 11, 2012, 20:31 от gil9red » Записан

gil9red
Administrator
Джедай : наставник для всех
*****
Offline Offline

Сообщений: 1805



Просмотр профиля WWW
« Ответ #1 : Июль 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;

Если у кого нибудь есть идеи, как сделать, то о чем я спрашивал, проще, прощу, пишите Улыбающийся
Записан

Bepec
Гость
« Ответ #2 : Июль 09, 2012, 07:00 »

Ты хочешь язык в программе менять?

Если экшены статические(созданы там в дизайнере), тогда спокойно переводится в лингвисте.

Если динамические - придётся тебе писать пару функций.

PS смотри раздел интернализация.
Записан
gil9red
Administrator
Джедай : наставник для всех
*****
Offline Offline

Сообщений: 1805



Просмотр профиля WWW
« Ответ #3 : Июль 09, 2012, 15:07 »

нет, не в дизайнере, мне почему то удобнее делать вручную=)
я написал функцию:
Код:
void setLanguage(QString language);
в ней содержатся все случаи называния объектов, которое видит пользователь=)
Записан

Bepec
Гость
« Ответ #4 : Июль 11, 2012, 10:14 »

Я бы сказал что это плохо. Очень дюже.

Надо использовать уже имеющиеся возможности Qt.

Читали про интернационализацию?
Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


Страница сгенерирована за 0.097 секунд. Запросов: 23.