Russian Qt Forum

Qt => Общие вопросы => Тема начата: Alikus от Октябрь 28, 2004, 17:24



Название: Проблема с переопределением типов
Отправлено: 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 от Октябрь 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 от Октябрь 28, 2004, 23:43
или так:
QString someString("ho");
const char * a = someString.latin1();


Название: Проблема с переопределением типов
Отправлено: Anonymous от Октябрь 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 от Октябрь 30, 2004, 14:07
Тьфу ты плин ... забыл залогиниться   :D

А вот на счет
Цитировать
См. QString::operator const char * () const
надо попробовать... Скажу по крайней мере в понедельник.  :wink:


Название: Re: Проблема с переопределением типов
Отправлено: rjaan от Ноябрь 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 от Ноябрь 03, 2004, 12:28
у тебя код в принципе неправильный.
Код:

const char *a;
a = z;

]константу[/b надо инициализировать при объявлении

Код:


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




Название: Проблема с переопределением типов
Отправлено: Alikus от Ноябрь 03, 2004, 13:24
НИфига подобного.... :lol: Хотя может это зависит от моей платформы.... 8) не знаю...

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

PS

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


Название: Проблема с переопределением типов
Отправлено: fazil6 от Ноябрь 03, 2004, 14:28
Код:
 А если если в LineEdit запихнуть русское словечко,

ради русского слова я и присваиваю то, что fromLocal8Bit( LineEdit->text(), -1) возвращает, а не   LineEdit->text()


Название: Проблема с переопределением типов
Отправлено: rjaan от Ноябрь 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, 2004, 23:26
А луче сего подключить "KOI8-R"и делов то  :P


Название: Проблема с переопределением типов
Отправлено: Фёдор от Июнь 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 от Июнь 26, 2006, 00:19
А че просто написать нельзя?
Код:
QString str=teleLineEdit->text(); 
placeLineEdit->setText(str);


Название: Проблема с переопределением типов
Отправлено: Фёдор от Июнь 26, 2006, 15:04
Мне казалось я пробовал это.
Но щас написал и всё получилось. Спасибо тебе!:)


Название: Уже вне сабжа но все же :)
Отправлено: Alikus от Июнь 26, 2006, 22:28
Цитата: "Фёдор"
Мне казалось я пробовал это.
Но щас написал и всё получилось. Спасибо тебе!:)

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

#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()  :D