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

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

Страниц: 1 2 3 [4] 5 6   Вниз
  Печать  
Автор Тема: Проблема с переключением языка  (Прочитано 42136 раз)
Dendy
Гость
« Ответ #45 : Декабрь 24, 2009, 01:21 »

А где вы вызываете retranslateTextEdit()?
Записан
Den2009
Гость
« Ответ #46 : Декабрь 24, 2009, 09:04 »

в proga1.h
Код:
public slots:
    .................
    void retranslateTextEdit();
Записан
Den2009
Гость
« Ответ #47 : Декабрь 24, 2009, 13:20 »

мож оффтопик, но чтоб из-за одного вопроса тему не создавать:
как сделать, чтоб каждая следующая запись в файле начиналась с новой строки?
делал так:
Код:
file.write("This is log-file \n");
не работает.. следующая запись идет вслед за этой
Записан
Dendy
Гость
« Ответ #48 : Декабрь 24, 2009, 13:26 »

в proga1.h
Код:
public slots:
    .................
    void retranslateTextEdit();

Это вы её обьявили, а вызвать нужно в программе при реагировании на событие LanguageChanged.
Записан
Dendy
Гость
« Ответ #49 : Декабрь 24, 2009, 13:29 »

не работает.. следующая запись идет вслед за этой

Сейчас угадаю, проверяете Notepad'ом? Эта программа не работает с UNIX'овыми окончаниями файлов. Эдакий питекантроп в наше время, жалко не вымер. Смотрите любым другим просмотрщиком, например: http://notepad-plus.sourceforge.net/ru/site.htm
Записан
Den2009
Гость
« Ответ #50 : Декабрь 24, 2009, 13:43 »

угадали )) в нотепаде не работает, в тоталкоммандере по F3 тоже не работает... работает в AkelPad
а как можно сделать, чтоб везде работало?
и еще вопрос: как запихнуть в текст лога текущую дату?
делаю так:
Код:
QString sdate = QDateTime::currentDateTime().toString(Qt::SystemLocaleDate);
     file.write(sdate, "  This is log-file \n");
выводит такую ошибку:
Код:
C:/Pr1/main.cpp:37: error: no matching function for call to 'QFile::write(QString&, const char [21])'
Записан
Den2009
Гость
« Ответ #51 : Декабрь 24, 2009, 13:51 »

в proga1.h
Код:
public slots:
    .................
    void retranslateTextEdit();

Это вы её обьявили, а вызвать нужно в программе при реагировании на событие LanguageChanged.
я вызывал при нажатии на кнопку рассчитать:
Код:
connect(pushButton, SIGNAL(clicked()), this, SLOT(retranslateTextEdit()));
т.е. так:
Код:
bool MainWindow::event(QEvent* e)
{
    if (e->type() == QEvent::LanguageChange)
    {
        retranslateUi(this);
        retranslateTextEdit();
        return true;
    }
    return QMainWindow::event(e);
}
если так, то тоже не работает
Записан
Dendy
Гость
« Ответ #52 : Декабрь 24, 2009, 13:52 »

Используйте QTextStream. C Win-окончаниями файлов он тоже позволяет работать с помощью endl(), хотя это в наше время моветон.
Записан
Dendy
Гость
« Ответ #53 : Декабрь 24, 2009, 13:53 »

Код выложите, посмотрю почему не переводится.
Записан
Den2009
Гость
« Ответ #54 : Декабрь 24, 2009, 14:04 »

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:
    bool m_rus;
    bool event(QEvent* e);
    int iS, oS, oM, oH;
    QTranslator* translator;
    QFile* file;
    MainWindow(QMainWindow* p = 0) : QMainWindow(p)
    {
        translator = new QTranslator(this);
        file = new QFile(this);
        m_rus = true; // по умолчанию русский
        setupUi(this);
        connect(pushButton, SIGNAL(clicked()), this, SLOT(rasschet())); //подключаем кнопку рассчет
        connect(pushButton, SIGNAL(clicked()), this, SLOT(retranslateTextEdit()));
        connect(kn_about, SIGNAL(triggered()), this, SLOT(about())); // подключаем кнопку о программе
        connect(kn_help, SIGNAL(triggered()), this, SLOT(help())); //подключаем кнопку помощь
        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 help(); // создаем слот помощь
    void author(); // создаем слот об авторе
    void triggeredRussian();
    void triggeredEnglish();
    void retranslateTextEdit();
    void logFile();

};

#endif
proga1.cpp
Код:
#include <QtCore>
#include <QTextCodec>
#include <QtGui>
#include <QTranslator>
#include <QUiLoader>
#include "proga1.h"
#include "proga1_about.h"
#include "proga1_author.h"
#include "proga1_help.h"
#define tr QObject::tr

void MainWindow::rasschet()
{
    int notH, notM;  //Объявление переменных
    const int SiH=3600, SiM=60;
    QString inSec, outHr, outMin, outSec;
    textEdit->clear();
    inSec = spinBox->text(); //Ввод
    qDebug() << inSec;
    iS = inSec.toInt();
    qDebug() << iS;
    //Вычисление
    oH = (iS / SiH); //Количество часов
    notH = iS - (oH * SiH); //Убираем количество часов
    oM = (notH / SiM); //Количество минут
    notM = notH - (oM * SiM); //Убираем количество минут
    oS = notM; //Оставшееся число равно количеству секунд
}
void MainWindow::retranslateTextEdit()
{
    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::triggeredRussian()
{
    QCoreApplication::removeTranslator(translator);
    m_rus = true;
    qDebug() << m_rus;
    kn_eng->setChecked(false);
    translator->load("./main_eng.qm",".");
    qDebug() << translator->load("./main_eng.qm",".");
    qApp->installTranslator(translator);

}
void MainWindow::triggeredEnglish()
{
    QCoreApplication::removeTranslator(translator);
    m_rus = false;
    kn_rus->setChecked(false);
}

bool MainWindow::event(QEvent* e)
{
    if (e->type() == QEvent::LanguageChange)
    {
        retranslateUi(this);
        retranslateTextEdit();
        return true;
    }
    return QMainWindow::event(e);
}
Записан
Dendy
Гость
« Ответ #55 : Декабрь 24, 2009, 14:20 »

Не вижу чтобы в rasschet() в конце вызывался retranslateTextEdit().
Записан
Den2009
Гость
« Ответ #56 : Декабрь 24, 2009, 19:23 »

Код:
void MainWindow::rasschet()
{
    int notH, notM;  //Объявление переменных
    const int SiH=3600, SiM=60;
    QString inSec, outHr, outMin, outSec;
    textEdit->clear();
    inSec = spinBox->text(); //Ввод
    qDebug() << inSec;
    iS = inSec.toInt();
    qDebug() << iS;
    //Вычисление
    oH = (iS / SiH); //Количество часов
    notH = iS - (oH * SiH); //Убираем количество часов
    oM = (notH / SiM); //Количество минут
    notM = notH - (oM * SiM); //Убираем количество минут
    oS = notM; //Оставшееся число равно количеству секунд
    retranslateTextEdit();
}
все равно не работает ((
Записан
Den2009
Гость
« Ответ #57 : Декабрь 24, 2009, 19:42 »

немного оффтопика:
сделал через QTextStream
Код:
     QFile file("./log.txt");
     file.open(QIODevice::WriteOnly);
     if (file.open(QFile::WriteOnly | QFile::Truncate))
     {
         QTextStream out(&file);
         out << "This is log-file" << endl;
     }
в лог не пишется ничего
Записан
Dendy
Гость
« Ответ #58 : Декабрь 24, 2009, 20:25 »

Я уже забыл, что не работает?
Записан
Dendy
Гость
« Ответ #59 : Декабрь 24, 2009, 20:26 »

немного оффтопика:
сделал через QTextStream
Код:
     QFile file("./log.txt");
     file.open(QIODevice::WriteOnly);
     if (file.open(QFile::WriteOnly | QFile::Truncate))
     {
         QTextStream out(&file);
         out << "This is log-file" << endl;
     }
в лог не пишется ничего


Во-первых, вы открываете файл два раза. Во вторых - забыли флаг QIODevice::Text.
Записан
Страниц: 1 2 3 [4] 5 6   Вверх
  Печать  
 
Перейти в:  


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