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

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

Страниц: [1]   Вниз
  Печать  
Автор Тема: Проблема с переопределением типов  (Прочитано 11588 раз)
Alikus
Гость
« : Октябрь 28, 2004, 17:24 »

Помогите пожалуйста! Сегодня на работе потратил кучу времени и так не добился результата!

Вот пример кода:

Код:
QString z = LineEdit->text();
const char *a;
a = z;


Вопрос!  :?: Почему переменная а пустая?
Когда я делаю:
Код:
sprintf(st, "SELECT * FROM MYTABLE WHERE NAME ='%s'", a);


то в st ничего не изменяется. Или вообще последний апостров пропадает неизвестно куда...

И еще!  :?:  Как переопределить тип из QString  в const char* ? Я знаю что из const char* в QString можно, но вот как наоборот? Мне кажется именно в этом проблема, а может и нет...

PS
Ламерский вопрос, но так замучил подонок  :roll:
Записан
Sergeich
Гость
« Ответ #1 : Октябрь 28, 2004, 18:29 »

Проверил на 3 платформах : Linux ASP9, Windows XP Pro и Solaris8
везде работает
Код:

  QString s = "HELLO!!!";
  const char* a;
  a = s;
  qDebug( a );                


Цитировать

Как переопределить тип из QString в const char*

См. QString::operator const char * () const
Записан
lepsai
Гость
« Ответ #2 : Октябрь 28, 2004, 23:43 »

или так:
QString someString("ho");
const char * a = someString.latin1();
Записан
Anonymous
Гость
« Ответ #3 : Октябрь 30, 2004, 13:58 »

Цитата: "Sergeich"
Проверил на 3 платформах : Linux ASP9, Windows XP Pro и Solaris8
везде работает
Код:

  QString s = "HELLO!!!";
  const char* a;
  a = s;
  qDebug( a );                


Цитировать

Как переопределить тип из QString в const char*

См. QString::operator const char * () const


Когда делаешь
Код:
 s = "HELLO!!!";
то конечно все работает превосходно, а вот именно так как я указал не работает. Да и еще в LineEdit1 русское слово. Воть.

У меня появилось смутное чувство, что эта фигня зависит из-за моей платформы. Что это за платформа сказать я не могу, в силу того , что в этом заинтересовано наше Министерство обороны  :roll: [/b]
Записан
Alikus
Гость
« Ответ #4 : Октябрь 30, 2004, 14:07 »

Тьфу ты плин ... забыл залогиниться   Веселый

А вот на счет
Цитировать
См. QString::operator const char * () const
надо попробовать... Скажу по крайней мере в понедельник.  :wink:
Записан
rjaan
Гость
« Ответ #5 : Ноябрь 03, 2004, 10:44 »

Цитата: "Alikus"


Код:
QString z = LineEdit->text();
const char *a;
a = z;


Вопрос!  :?: Почему переменная а пустая?
Когда я делаю:
Код:
sprintf(st, "SELECT * FROM MYTABLE WHERE NAME ='%s'", a);


то в st ничего не изменяется. Или вообще последний апостров пропадает неизвестно куда...



Код верный, но когда приводишь тип QString к const char*, то необходимо QString -> const char*.

Код:
QString z = LineEdit->text();
const char *a;
a = (const char*)z;


Попробуй так, как в коде должно сработать
 
Код:
sprintf(st, "SELECT * FROM MYTABLE WHERE NAME =\'%s\'", a);
Записан
fazil6
Гость
« Ответ #6 : Ноябрь 03, 2004, 12:28 »

у тебя код в принципе неправильный.
Код:

const char *a;
a = z;

]константобъявлении

Код:


const char *a = QString::fromLocal8Bit( LineEdit->text(), -1);


Записан
Alikus
Гость
« Ответ #7 : Ноябрь 03, 2004, 13:24 »

НИфига подобного.... :lol: Хотя может это зависит от моей платформы.... Крутой не знаю...

Но в любом случае я уже разобрался... Все оказывается не так как я думал. И оказывается  :!: привидение типов тут совсем не причем. Это уже совсем другая тема. Всем большое спасибо!

PS

Вопрос для fazil6 rjaan:  :?: А если если в LineEdit запихнуть русское словечко, то у вас все нормально?
Записан
fazil6
Гость
« Ответ #8 : Ноябрь 03, 2004, 14:28 »

Код:
 А если если в LineEdit запихнуть русское словечко,

ради русского слова я и присваиваю то, что fromLocal8Bit( LineEdit->text(), -1) возвращает, а не   LineEdit->text()
Записан
rjaan
Гость
« Ответ #9 : Ноябрь 04, 2004, 18:50 »

Цитировать

Вопрос для fazil6 rjaan:  :?: А если если в LineEdit запихнуть русское словечко, то у вас все нормально?



Код:


const QString notr ( const char* str )
{
  return  QString :: fromLocal8Bit ( str );
}



Функция notr -  Возвращает строку уникода, декодированную из первых len байт utf8.

Русский текст надо пропускать через  notr

На пример
Код:

QLabel*  label = new QLabel (  this ); // Есть конструктор  QLabel::QLabel ( const QString & text, ... )
                                                     // и поэтому лучше использовать его

label -> setText ( notr ("Привет Мир") );



То же самое и для QLineEdit
Записан
Alikus
Гость
« Ответ #10 : Ноябрь 10, 2004, 23:26 »

А луче сего подключить "KOI8-R"и делов то  Показает язык
Записан
Фёдор
Гость
« Ответ #11 : Июнь 25, 2006, 23:44 »

Сразу говорю я новичок в этом деле.
Вопрос про lineEdit. Необходимо из одного такого поля сдублировать слова в другое такое же поле. Я пишу в одном поле что-то по-русски, нажимаю на кнопку, а во втором поле у меня вместо русского Непонимающий?? стоят.
Код похож на то, что тут было упомянуто.
    const QString notr ( const char* stri )
{
  return  QString :: fromLocal8Bit (stri );
}
      ..................................................
    const char* str=teleLineEdit->text();
    placeLineEdit->setText(notr(str));

До этого писал просто
const *char string=teleLineEdit->text();
placeLineEdit->setText(string);

Менял locale на koi8-r на utf-8 не помогло. сижу под linuxMandrake 10.1 в qt3.

расскажите что здесь может быть не так. И помогите пожалуйста исправить.

добавлено спустя 8 минут:

 Пробовал в качестве другой нужды этот string записаь обычным fprintf в файл обычный текстовый, также получается Непонимающий??. Если вводить русские слова в поле lineEdit путём setText("привет Петя") получается белиберда в поле, но если потом сделать const *char string=teleLineEdit->text()  и записать этот стринг в файл то там получается привет Петя. Но дело в том что мне нужна динамическая работа, вводить текст в поле и записывать его из этого поля в текстовый файл. И чтобы и там и там это можно было прочитать по-русски.
Подскажите кто что сможет и по этому поводу.
Записан
Sergeich
Гость
« Ответ #12 : Июнь 26, 2006, 00:19 »

А че просто написать нельзя?
Код:
QString str=teleLineEdit->text(); 
placeLineEdit->setText(str);
Записан
Фёдор
Гость
« Ответ #13 : Июнь 26, 2006, 15:04 »

Мне казалось я пробовал это.
Но щас написал и всё получилось. Спасибо тебе!:)
Записан
Alikus
Гость
« Ответ #14 : Июнь 26, 2006, 22:28 »

Цитата: "Фёдор"
Мне казалось я пробовал это.
Но щас написал и всё получилось. Спасибо тебе!:)

Я вообще делаю так Улыбающийся Решил написать спустя год  Веселый
Код:

#include  <qtextcodec.h>
#define toU   QTextCodec::codecForName("KOI8-R")->toUnicode
#define fromU QTextCodec::codecForName("KOI8-R")->fromUnicode
...

   lineEdit->setText( toU("привет Петя"));

И вуаля Улыбающийся В ЛайнЕдите русские символы.
А при использованиии тескта в ЛайнЕдит нужно юзать так:

Код:
QString text = fromU(lineEdit->text());


ТЕхника провереная, но по хорошему надо вообщето использовать tr()  Веселый
Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


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