Покажи Публикации - goose
* Виж публикациите на потр. | Виж темите на потр. | Виж прикачените файлове на потр
Страници: [1]
1  Програмиране / Общ форум / Re: Qt4 win32-g++ къде по <цензурирано> бъркам .. -: Feb 20, 2009, 13:52
Де да беше ...
В момента съм на виста хоум, специално за тестове изсипах едно чисто XP, тествано и на лаптопа с легално XP и без съмнения за проблеми със шрифтовете ...
По принцип мразя да търся помощ за решение на проблемите ми и преди да стигна до това положение правя каквото е възможно, за да стигна соло до решението, с компове се занимавам сериозно от 1989-та (това просто за инфо, да не се лъжеш по пресния ми акаунт тук) и май за сефте ми се налага да ескалирам въпрос извън приятелския ми кръг... Въртял съм го с какви ли не идеи преди да постна въпросите тук ..

Поздрави,

п.с. В момента вдигам от нула нова щайга и ще изкомпилясам всичко ръчно от мингв-то нагоре, ще видя на чиста моя компилация какво ще излезе ... До тук ползвах байнъри пакетите на тролтеч и само компилирах драйвера на mysql-а ...
2  Програмиране / Общ форум / Re: Qt4 win32-g++ къде по <цензурирано> бъркам .. -: Feb 20, 2009, 12:36
Аз продължавам да дебъгвам ...
#if (MYSQL_VERSION_ID >= 40113 && MYSQL_VERSION_ID < 50000) || MYSQL_VERSION_ID >= 50007
    // force the communication to be utf8
    mysql_set_character_set(d->mysql, "utf8");
#endif
това е парче от open() на драйвера, при моята версия комуникацията винаги е юникод ...
Коректно се сетва, коректно се задавя и кодека ...

Проблема определено не е от сървъра, спретнах набързо едно пхп което го вади коректно ...
Интересното е, че току-що го тествах със sqlbrowser-а от демотата на Qt, ефекта е умопомрачително еднакъв ... Явно проблема е някъде в драйвера, сядам да копая по сериозно там ...
3  Програмиране / Общ форум / Re: Qt4 win32-g++ къде по <цензурирано> бъркам .. -: Feb 20, 2009, 11:48
qt 4.4.3, mysql 5.0.67
Default за сървъра навсякъде вече utf8
Компилацията: g++ -c -g -frtti -fexceptions -mthreads -Wall -DUNICODE -DQT_LARGEFILE_SUPPORT -
DQT_NO_CAST_TO_ASCII -DQT_NO_CAST_FROM_ASCII -DQT_DLL -DQT_PLUGIN -DQT_SQL_LIB -
DQT_CORE_LIB -DQT_THREAD_SUPPORT

Това set names utf8 се появи по трасето със сляпото налучкване, ефекта от него е никакъв, току-що тествах и без него ...

Нещо ме навежда на мисълта за проблеми с утф-а в комбо бокса, резултата от .toUtf8 в него подозрително прилича на опит да дисплейне utf-а в нещо друго ... (ЄЁаЁ«Ёж копи-пейст от бокса)

ето ги и резултатите от конверсиите:

чистия стринг:ЄЁаЁ«Ёж 
toLocal8Bit: ª¨à¨«¨æ 
toLatin1: ????«?? 
utf-a го има по горе ..
 
Но си признавам, че вече гадая, логичните ми идеи май се изчерпаха.
Поздрави,
4  Програмиране / Общ форум / Re: Qt4 win32-g++ къде по <цензурирано> бъркам .. -: Feb 20, 2009, 08:31
Почвам наред:
Отварянето на базата - стандартно до болка:

QSqlError err;
QSqlDatabase db = QSqlDatabase::addDatabase("QMYSQL", QString("XXX"));
db.setHostName(dbhost);
db.setUserName(dbuser);
db.setPassword(dbpass);
db.setDatabaseName(dbname);
if (!db.open())
{
   err = db.lastError();
   db = QSqlDatabase();
   QSqlDatabase::removeDatabase(QString("XXX"));
}
db.exec("set names utf8");

Пълненето на комбото става в коструктора на наследен от QComboBox клас:
db=QSqlDatabase::database("XXX");
this->setInsertPolicy(QComboBox::InsertAlphabetically);
QSqlQuery query (db);
query.exec("select cdname from cards");
if (query.isActive())
{
   this->addItem("");
   while (query.next())
   {
   
      QString string = query.value(0).toString();
      this->addItem(string);
      this->addItem(string.toLocal8Bit());
      this->addItem(string.toUtf8());
   }
}
this->setAutoCompletion(true);

Както се забелязва, накрая тръгнах и с рогата напред, вкарвам стринга с 3 различни енкодинга ... Разликата е само във вида на маймуните в интерфейса.

Самата база: mysql> show create database gym;
+----------+--------------------------------------------------------------+
| Database | Create Database                                              |
+----------+--------------------------------------------------------------+
|XXX        | CREATE DATABASE `XXX` /*!40100 DEFAULT CHARACTER SET utf8 */ |
+----------+--------------------------------------------------------------+
1 row in set (0.09 sec)

резултата от show create table cards;
| cards | CREATE TABLE `cards` (
  `cdid` int(11) NOT NULL auto_increment,
  `cdname` varchar(45) character set utf8 collate utf8_unicode_ci NOT NULL,
  `cdcardtype` int(11) default NULL,
  PRIMARY KEY  (`cdid`),
  UNIQUE KEY `idx_cdname` (`cdname`),
  KEY `fk_cards_cardtypes` (`cdcardtype`),
  CONSTRAINT `fk_cards_cardtypes` FOREIGN KEY (`cdcardtype`) REFERENCES `cardtyp
es` (`ctid`) ON DELETE NO ACTION ON UPDATE NO ACTION
) ENGINE=InnoDB AUTO_INCREMENT=4 DEFAULT CHARSET=utf8 |

mysql> show variables like '%character%';
+--------------------------+---------------------------------------------------------+
| Variable_name            | Value
     |
+--------------------------+---------------------------------------------------------+
| character_set_client     | cp1251
     |
| character_set_connection | cp1251
     |
| character_set_database   | utf8
     |
| character_set_filesystem | binary
     |
| character_set_results    | cp1251
     |
| character_set_server     | latin1
     |
| character_set_system     | utf8
     |
| character_sets_dir       | C:\Program Files\MySQL\MySQL Server 5.0\share\charsets\ |
+--------------------------+---------------------------------------------------------+

и последно:
mysql> select * from cards;
+------+----------+------------+
| cdid | cdname   | cdcardtype |
+------+----------+------------+
|    3 | кирилица |          1 |
+------+----------+------------+
1 row in set (0.00 sec)

insert-а по последното е направен от конзола на бсд с utf-8 локал, както се забелязва mysql-а безгрижно си работи с него и го прехвърля в каквото му трябва. Пробвах и с пачнат драйвер:
qsql_mysql.cpp:
static QTextCodec* codec(MYSQL* mysql)
{
#if MYSQL_VERSION_ID >= 40113
    mysql_set_character_set(mysql, "utf8");
    return QTextCodec::codecForName("utf8");
#endif
...
Резултат от пача - нулев :>

дъмп=а на show variables like '%character%' от сорса дава utf8 навсякъде, с изключение на character_set_server, там си е latin1 ... Това и при пачнатия, и при чистия драйвер ...

QLocale дава Bulgaria, Bulgarian за локала както на main window-а, така и на комбото ...

На теория трябва да работи ... е явно съчетавам теорията с практиката, нищо не бачка и идея си нямам от какво :>
Благодаря предварително.
5  Програмиране / Общ форум / Re: Qt4 win32-g++ къде по <цензурирано> бъркам .. -: Feb 19, 2009, 16:46
Locale е сетнато като хората навсякъде, проверено неколкократно преди да постна въпроса ...
с fromLocal8Bit нещата минаха, но това, от където стигнах до този проблем още не мога да го подкарам ...
Основния проблем - QComboBox се пълни от mysql база данни, кирилицата там си е наред - базата е utf8, всичко е вкарано коректно ...
Посмъртно не мога да го накарам обаче да я вкара в читав вид в комбо бокса. До тук тествани какви ли не игри с QTextCodec::setCodecForLocale и QTextCodec::setCodecForCStrings, единственото което се променя са вида на йероглифите ...
Включително вкарване на ръчно написана кирилица от там в базата - нито влиза читаво в базата, нито може да си я прочете обратно след това като хората ...
Почвам да се съмнявам в самия драйвер на mysql-а, почвам да копая натам по темата :<
6  Програмиране / Общ форум / Qt4 win32-g++ къде по <цензурирано> бъркам .. -: Feb 19, 2009, 00:07
не съм вярвал, че ще опра до такъв проблем с Qt, но ...
каквато и да е кирилица, вкарана директно в сорса, излиза в апп-а на гущери и маймуни, в момента в който мине през транслатор - всичко е наред ...
Енкодинга на сорса е 1251, под FreeBSD бачка напълно коректно, опън сорс под М$ с mingw - не ..
Вече съм къс от към всякакви идеи, ако и от тук не дойдат някакви ... ще се дебъгва цялото qt под windows явно ...
Благодаря предварително.
Поздрави,
Страници: [1]