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

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

Страниц: 1 ... 4 5 [6]   Вниз
  Печать  
Автор Тема: Проблема с переключением языка  (Прочитано 42112 раз)
Dendy
Гость
« Ответ #75 : Декабрь 26, 2009, 17:14 »

Вы для начала расскажите что уже сделали. Попадаете ли вы на точки останова в retranslateTextEdit() и в событие QEvent::LanguageChanged. Что происходит при переключении языка, при рассчёте?

Запакуйте ещё раз код, будет время - посмотрю.
Записан
Den2009
Гость
« Ответ #76 : Декабрь 27, 2009, 00:45 »

код:
http://file.qip.ru/file/113911072/746553e/Pr1.html

при запуске проги из креатора язык не переключается и перевод не загружается... если запустить не из креатора, то переводится все, кроме того, что описано в коде, а не создано в дизайнере
при нажатии на кнопку расчет появляется сообщение на английском, не зависимо от того, какой язык установлен в приложении
про точки останова:
КуТэ не собирает помощник отладчика:
Код:
collect2: ld returned 1 exit status
mingw32-make[1]: *** [debug\gdbmacros.dll] Error 1
mingw32-make[1]: Leaving directory `C:/Qt/4.6.0/qtc-debugging-helper'
mingw32-make: *** [debug-all] Error 2
при запуске отладчика, появляется "завершился поток 7 из группы 1552" цифры бывают и другие... и все, дальше ничего не происходит...
Записан
gmorgunov
Гость
« Ответ #77 : Декабрь 27, 2009, 10:47 »

Den2009. Вот рабочий код( Windows XP, Qt 4.6.0, MinGW 4.4):
proga1.h
Код:
#ifndef PROGA1_H
#define PROGA1_H
#include <QMainWindow>
#include <QTranslator>
#include <QFile>
#include <QObject>
#include "ui_proga1.h"

class MainWindow : public QMainWindow, Ui::MainWindow // <--------Наследуемся
{
    Q_OBJECT
public:
    int iS, oS, oM, oH;
    QTranslator* translator;
    QFile* file;
    MainWindow(QMainWindow* p = 0) : QMainWindow(p)
    {
        translator = new QTranslator(this);
        file = new QFile(this);
        setupUi(this);
        connect(pushButton, SIGNAL(clicked()), this, SLOT(rasschet())); //подключаем кнопку рассчет
        connect(kn_about, SIGNAL(triggered()), this, SLOT(about())); // подключаем кнопку о программе
//        connect(kn_help, SIGNAL(triggered()), this, SLOT(help())); //подключаем кнопку помощь
        connect(kn_help, SIGNAL(triggered()), this, SLOT(helpBrowser()));
        connect(kn_author, SIGNAL(triggered()), this, SLOT(author())); //подключаем кнопку об авторе
        connect(kn_rus, SIGNAL(triggered()), this, SLOT(triggeredRussian())); // выбираем русский
        connect(kn_eng, SIGNAL(triggered()), this, SLOT(triggeredEnglish())); // выбираем английский
        connect(kn_log, SIGNAL(triggered()), this, SLOT(logFile()));
    }
public slots:
    void rasschet(); // создаем слот рассчет
    void about(); // создаем слот о программе
    void author(); // создаем слот об авторе
    void triggeredRussian();
    void triggeredEnglish();
    void helpBrowser();
    void logFile();

};
#endif
proga1.cpp
Код:
#include <QtCore>
#include <QTextCodec>
#include <QtGui>
#include <QTranslator>
#include "proga1.h"
#include "proga1_about.h"
#include "proga1_author.h"
#include "proga1_helpbrowser.h"

void MainWindow::rasschet()
{
    int notH, notM;  //Объявление переменных
    const int SiH=3600, SiM=60;
    QString inSec, outHr, outMin, outSec;
    textEdit->clear();
    inSec = spinBox->text(); //Ввод
    iS = inSec.toInt();
    //Вычисление
    oH = (iS / SiH); //Количество часов
    notH = iS - (oH * SiH); //Убираем количество часов
    oM = (notH / SiM); //Количество минут
    notM = notH - (oM * SiM); //Убираем количество минут
    oS = notM; //Оставшееся число равно количеству секунд
    textEdit->setText(tr("The entered number of seconds %1 corresponds %2 hours, %3 minutes, %4 seconds").arg(iS).arg(oH).arg(oM).arg(oS));
}
void MainWindow::about()
{
    QTextCodec::setCodecForTr(QTextCodec::codecForName("Windows-1251"));
    this->setWindowModality(Qt::NonModal);
    MyAbout *myabout = new MyAbout;
    myabout->show();
}
void MainWindow::helpBrowser()
{
    this->setWindowModality(Qt::NonModal);
    HelpBrowser* helpbrowser = new HelpBrowser("doc", "./help/index.html");
    helpbrowser->setWindowTitle(tr("Help"));
    helpbrowser->resize(500, 400);
    helpbrowser->setMaximumSize(500, 400);
    helpbrowser->setMinimumSize(500, 400);
    helpbrowser->show();
}
void MainWindow::author()
{
    QTextCodec::setCodecForTr(QTextCodec::codecForName("Windows-1251"));
    this->setWindowModality(Qt::NonModal);
    MyAuthor *myauthor = new MyAuthor;
    myauthor->show();
}
void MainWindow::triggeredRussian()
{
    qApp->removeTranslator(translator);
    translator->load("eng.qm","C:\\Pr1");
    qApp->installTranslator(translator);
    retranslateUi(this);
    kn_rus->setChecked(true);
    kn_eng->setChecked(false);
}
void MainWindow::triggeredEnglish()
{
    QCoreApplication::removeTranslator(translator);
    retranslateUi(this);
    kn_eng->setChecked(true);
    kn_rus->setChecked(false);
}
void MainWindow::logFile()
{  
    file = new QFile("C:\\Pr1\\log.txt");
    file->open(QIODevice::ReadOnly | QIODevice::WriteOnly);
    QByteArray a = file->readAll();
    qDebug() << a;
    file->close();
}
ui_proga1.h
Код:
...
        kn_rus->setChecked(false);
        QFont font;
        font.setFamily(QString::fromUtf8("Segoe Script"));
        kn_rus->setFont(font);
        kn_rus->setSoftKeyRole(QAction::NoSoftKey);
        kn_eng = new QAction(MainWindow);
        kn_eng->setObjectName(QString::fromUtf8("kn_eng"));
        kn_eng->setCheckable(true);
        kn_eng->setChecked(true);
...




« Последнее редактирование: Декабрь 27, 2009, 16:51 от gmorgunov » Записан
Den2009
Гость
« Ответ #78 : Декабрь 27, 2009, 13:26 »

не работает... строки, описанные в proga1.cpp не переводятся
Win 7, QT 4.6.0, MinGW 4.4
Записан
gmorgunov
Гость
« Ответ #79 : Декабрь 27, 2009, 15:21 »

Позвольте не поверить... Улыбающийся . У меня прекрасно работает и на Windows XP, и на Linux - openSUSE11.1.
Еще раз проверьте:
- не должно быть макроса #define tr QObject::tr
- должен быть макрос Q_OBJECT
- везде должны быть полные пути к файлам, с экранир. обратным слешем:
  translator->load("eng.qm","C:\\Pr1");
Если действительно не работает, сносите эту Windows7, ставьте XP... Больше времени потеряете.
Записан
Den2009
Гость
« Ответ #80 : Декабрь 27, 2009, 22:32 »

пропустил #define tr QObject::tr
работает, спс большое
Записан
Страниц: 1 ... 4 5 [6]   Вверх
  Печать  
 
Перейти в:  


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