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

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

Страниц: 1 ... 5 6 [7] 8 9 ... 12   Вниз
  Печать  
Автор Тема: Помогите новичку (совсем новичку)  (Прочитано 85069 раз)
gmorgunov
Гость
« Ответ #90 : Декабрь 09, 2009, 15:53 »

Можно вот так:
proga1.h
Код:
...
        connect(kn_rus, SIGNAL(triggered()), this, SLOT(switchLanguage()));
        connect(kn_eng, SIGNAL(triggered()), this, SLOT(switchLanguage()));
...
proga1.cpp
Код:
...
void MainWindow::switchLanguage ()
{
    qDebug() << kn_rus->isChecked();
    qDebug() << kn_eng->isChecked();
    if (kn_rus->isChecked())
    {
        qDebug() << "Грузим русский перевод";
    }
    if (kn_eng->isChecked())
    {
        qDebug() << "Грузим английский перевод";
    }
...
Записан
Den2009
Гость
« Ответ #91 : Декабрь 09, 2009, 18:34 »

сделал так:
Код:
void MainWindow::swlang(int n)
{
    qDebug() << n; //<===========
    QTranslator translator;
    switch(n)
    {
        qDebug() << kn_rus->isChecked();
        qDebug() << kn_eng->isChecked();
        if (kn_rus->isChecked())
        {
            qDebug("rus.qm") << "Грузим русский перевод";
        }
        if (kn_eng->isChecked())
        {
            qDebug("eng.qm") << "Грузим английский перевод";
        }
/*
 case RUSSIAN:  //<===========
        translator.load("rus.qm",".");
        break;
    case ENGLISH:  //<===========
        translator.load("eng.qm",".");
        break;
    }
    app->installTranslator(&translator); */
}

все равно эти же ошибки... если раскомментировать - тоже самое
Записан
Den2009
Гость
« Ответ #92 : Декабрь 10, 2009, 00:28 »

оказывается, надо было сделать так:
proga1.h
Код:
void swlang(int n);

оставил стандартный код, взятый из книги:
Код:
void MainWindow::swlang(int n)
{
    QTranslator translator;
    switch(n)
    {
 case RUSSIAN:  //<===========
        translator.load("rus.qm",".");
        break;
    case ENGLISH:  //<===========
        translator.load("eng.qm",".");
        break;
    }
    app->installTranslator(&translator);
}

компилятор ругается так:
Код:
C:/Pr1/proga1.cpp:83: error: 'RUSSIAN' was not declared in this scope
C:/Pr1/proga1.cpp:86: error: 'ENGLISH' was not declared in this scope
C:/Pr1/proga1.cpp:90: error: 'app' was not declared in this scope
я понимаю, что он говорит, что не объявлены, но как их объявить?
Записан
Den2009
Гость
« Ответ #93 : Декабрь 10, 2009, 01:33 »

с этим разобрался...
следующий вопрос может быть совсем идиотский, но все же:
Код:
if (kn_rus -> isChecked())
    {
        n = 1;
        kn_eng -> notChecked();
    }
компилятор ругается, что нет такой команды notChecked(), много чего перерыл, но так и не нашел, какую написать, чтоб при нажатии другой кнопки с предыдущей снималась галочка... а то получаются обе отмеченные
Записан
gmorgunov
Гость
« Ответ #94 : Декабрь 10, 2009, 01:37 »

Просто вы не поняли мой пост. Сделайте вот так:
proga1.h
Код:
...
connect(kn_rus, SIGNAL(triggered()), this, SLOT(switchLanguage()));
connect(kn_eng, SIGNAL(triggered()), this, SLOT(switchLanguage()));
...
proga1.cpp
Код:
void MainWindow::switchLanguage ()
{
    QTranslator translator;

    qDebug() << kn_rus->isChecked();
    qDebug() << kn_eng->isChecked();
    
    if (kn_rus->isChecked())
    {
        qDebug() << "Грузим русский перевод";
        translator.load("rus.qm",".");
    }
    if (kn_eng->isChecked())
    {
        qDebug() << "Грузим английский перевод";
        translator.load("eng.qm",".");
    }

    qApp->installTranslator(&translator);
}
RUSSIAN, ENGLISH - это скорее всего макросы, определенные где-то у Шлее:
#define RUSSIAN 1
#define ENGLISH 2
а вместо app->installTraslator(&translator); надо qApp->installTranslator(&translator);
« Последнее редактирование: Декабрь 10, 2009, 01:51 от gmorgunov » Записан
Den2009
Гость
« Ответ #95 : Декабрь 10, 2009, 09:24 »

это все понятно, но у вас не используется переменная, а у Шлее используется - n
а она будет нужна, например для того, чтобы писать в лог на русском или на аглийском, только эту переменную надо объявить не в в void ...(int n) а глобально, и тогда можно будет писать так:
if n = 1 // русский язык
 {
   ....
   пишем в лог по русски
 }
if n = 2 // английский язык
 {
   ....
   пишем в лог по английски
 }
или я что-то не так понимаю?
Записан
gmorgunov
Гость
« Ответ #96 : Декабрь 10, 2009, 11:42 »

Вы все правильно понимаете. Итак вы хотите использовать переменную n передаваемую в слот
для вывода лога на том или ином языке?  Можно сделать через глобальную, как я и  делал в примере без использования файлов переводов. ( extern char LANG[] - для совместимости с QByteArray). Но можно сделать лучше. Просто заведите себе приватную булеву переменную
bool m_rus в классе. В конструкторе m_rus = true, А когда переключаетесь на англ. m_rus =false.
И далее можете ее использовать при формировании лога на рус/англ.   
Записан
Den2009
Гость
« Ответ #97 : Декабрь 10, 2009, 18:21 »

хорошая идея... счас попробую реализовать...
Записан
Den2009
Гость
« Ответ #98 : Декабрь 10, 2009, 21:37 »

в общем, че-то не то...
сделал так:
proga1.h
Код:
#ifndef PROGA1_H
#define PROGA1_H
#include <QMainWindow>
#include <QObject>
#include "ui_proga1.h"

class MainWindow : public QMainWindow, Ui::MainWindow // <--------Наследуемся
{
    Q_OBJECT
public:
    bool m_rus; // объявил глобальную переменную
    MainWindow(QMainWindow* p = 0) : QMainWindow(p)
    {
        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_author, SIGNAL(triggered()), this, SLOT(author())); //подключаем кнопку об авторе
        connect(kn_rus, SIGNAL(triggered()), this, SLOT(switchlang()));
        connect(kn_eng, SIGNAL(triggered()), this, SLOT(switchlang()));
       // connect(kn_log, SIGNAL(triggered()), this, SLOT(logFile()));
    }
public slots:
    void rasschet(); // создаем слот рассчет
    void about(); // создаем слот о программе
    void help(); // создаем слот помощь
    void author(); // создаем слот об авторе
    void swlang(); // создаем слот смены языка
    void switchlang();
  //  void logFile();

};

#endif
proga1.cpp
Код:
............
void MainWindow::switchlang()
{
    if (kn_rus -> isChecked())
    {
        m_rus = true;
        kn_eng -> setCheckable(true);
        kn_eng -> setChecked(false);
    }
    if (kn_eng -> isChecked())
    {
        m_rus = false;
        kn_rus -> setCheckable(true);
        kn_rus -> setChecked(false);
    }
}

void MainWindow::swlang()
{
    QTranslator translator;
    {
/*
              switch(m_rus)
    case 1:  //<===========
        translator.load("rus.qm",".");
        break;
    case 2:  //<===========
        translator.load("eng.qm",".");
        break;
*/

          if (m_rus = true) // на эту строчку компилятор выдает такое предупреждение: warning: suggest parentheses around assignment used as truth value
        {
            translator.load("rus.qm",".");
           // break;
        }
        if (m_rus = false) // на эту такое же warning: suggest parentheses around assignment used as truth value
        {
            translator.load("eng.qm",".");
           // break;
        }

    }
    qApp->installTranslator(&translator);
}

при переключении языка ничего не происходит, и если переключиться с русского на английский, то пока не снять галочку с русского, кликнув по нему мышкой, на английский не переключается, а с английского на русский нормально
смысл предупреждений вроде как в том, что оба раза используется значение true а вот почему - хз
« Последнее редактирование: Декабрь 10, 2009, 21:53 от Den2009 » Записан
Dendy
Гость
« Ответ #99 : Декабрь 11, 2009, 04:53 »

Вам бы забыть про компьютер и купить хорошую книжку по C++. И пока не дочитаете кодить не садиться.
Записан
gmorgunov
Гость
« Ответ #100 : Декабрь 11, 2009, 08:10 »

Выкиньте эти swLanguage(), switchLanguage() на ... Улыбающийся и сделайте по-простому:
proga1.h
Код:
...
public:
    bool m_rus;
        MainWindow(QMainWindow* p = 0) : QMainWindow(p)
    {
        m_rus = true; // по умолчанию русский
        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_author, SIGNAL(triggered()), this, SLOT(author())); //подключаем кнопку об авторе
        connect(kn_rus, SIGNAL(triggered()), this, SLOT(triggeredRussian())); // выбираем русский
        connect(kn_eng, SIGNAL(triggered()), this, SLOT(triggeredEnglish())); // выбираем английский
    }
public slots:
        void rasschet(); // создаем слот рассчет
        void about(); // создаем слот о программе
        void help(); // создаем слот помощь
        void author(); // создаем слот об авторе
        void triggeredRussian();
        void triggeredEnglish();
};
...
proga1.cpp
Код:
void MainWindow::triggeredRussian ()
{
    //QTranslator translator;
    qDebug() << "Грузим русский перевод" ;
    m_rus = true;
    kn_eng->setChecked(false);
    //translator.load("rus.qm","."); - У МЕНЯ НЕТ ПЕРЕВОДА, ПОЭТОМУ ЗАКОМЕНТИРОВАЛ
    //qApp->installTranslator(&translator);
}
void MainWindow::triggeredEnglish ()
{
    //QTranslator translator;
    qDebug() << "Грузим английский перевод" ;
    m_rus = false;
    kn_rus->setChecked(false);
    //translator.load("eng.qm",".");
    //qApp->installTranslator(&translator);
}
Проверил, все работает правильно.

Записан
Den2009
Гость
« Ответ #101 : Декабрь 11, 2009, 09:10 »

Вам бы забыть про компьютер и купить хорошую книжку по C++. И пока не дочитаете кодить не садиться.
я б с радостью, но некогда... скоро сессия, проги надо сдать... поэтому приходится читать, кодить и спрашивать тут  Подмигивающий

2 gmorgunov. спс, работает...
Записан
Den2009
Гость
« Ответ #102 : Декабрь 11, 2009, 15:53 »

сделал заставку... хочу, чтобы, когда загрузка дойдет до 100%, заставка закрывалась только после нажатия клавиши, getchar() почему-то не работает - заставка закрывается сразу
Код:
 void loadModules(QSplashScreen* psplash)
 {
     QTime time;
     time.start();
     for (int i = 0; i < 100; )
     {
         if (time.elapsed() > 40)
         {
             time.start();
             ++i;
         }
         psplash->showMessage("Loading: " + QString::number(i) + "%", Qt::AlignHCenter | Qt::AlignBottom, Qt::black);
         getchar();
     }

 }
 int main (int argc, char **argv)
 {
     QApplication app(argc, argv);
     QSplashScreen splash(QPixmap("./image/zastavka.png"));
     splash.show();
     MainWindow w;
     loadModules (&splash) ;
     splash.finish (&w);
     w.show();
     return app.exec();
 }
Записан
mattic
Гость
« Ответ #103 : Декабрь 19, 2009, 15:32 »

Вам бы забыть про компьютер и купить хорошую книжку по C++. И пока не дочитаете кодить не садиться.
Коль такое дело посоветуйте книг. Что-то на этом сайте не нашёл темы с книгами по Qt4.
И ещё такой вопрос новичка. Qt4 имеет смысл учить после С++ или можно и без С++? Я сначала немного на Delphi, потом на учёбе разобрал ANSI C и вот сейчас сразу пытаюсь влететь в Qt4. не особо-то получается. Пока есть только 2 книжки одна бумажная Земскова и ещё чья-то электронная - их абсолютно не хватает. А постоянно возникающие вопросы типа: "почему не происходить обращение к символу в строке QString, если номер выражен переменной, как то myStr" стыдно спрашивать на форуме.
Записан
Dendy
Гость
« Ответ #104 : Декабрь 19, 2009, 16:01 »

Достаточно хорошей книжки по C++ и чтения документации самой Qt. Без знаний C++ вы никуда не уедите.
Записан
Страниц: 1 ... 5 6 [7] 8 9 ... 12   Вверх
  Печать  
 
Перейти в:  


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