Перейти до основного вмісту

Публікації

QString в HEX и обратно

Спочатку з QString робимо QByteArray. Зауважимо, якщо у вас по тексту тільки латинські букви цілком підійде варіант з .toUtf8(). Якщо ж присутня і кирилиця - обов'язково використовуємо .toLocal8Bit(). QString strA = "Some text"; QByteArray bA = strA.toLocal8Bit().toHex(); Перетворення QByteArray в початковий текст має такий вигляд: QString strB = QString::fromLocal8Bit(QByteArray::fromHex(bA))); Цікаво, що якщо ми для зберігання записали отриманий Нех куди-небудь, наприклад, в файл або базу даних у вигляді текстового рядка, то для зворотного перетворення цей рядок потрібно додатково перетворити в QByteArray. QString strA2 = QString::fromUtf8(bA); QByteArray bB = strA2.toUtf8(); QString strB = QString::fromLocal8Bit(QByteArray::fromHex(bB)));
Останні дописи

Відправлення email з Qt

Правду кажучи, спочатку у мене нічого не вийшло. Документація в цей раз не допомогла. Форуми теж не дуже були корисні, однак на блозі одного розробника, я знайшов посилання на невеликий проект "SmtpClient-for-Qt". Судячи із записів і вики проект живий, що давало надію. Не знаю чи можна це назвати бібліотекою, але тим не менш, тут є проста інструкція і приклади. Ще один респект розробникам за простий і зрозумілі код. До всього іншого, бібліотека дозволяє відправляти повідомлення з прикріпленим файлом або в форматі html, що було метою. На жаль, ні в проекті, ні на блозі, через який я знайшов його не було згадки про, я вважаю, одну важливу річь. Я швидко зібрав додаток, зробив все як написано ... і нічого не вийшло. Вірніше не зовсім вийшло. В цьому місці потрібно зробити застереження, що я відправляю листи з gmail.com і приймаю також на іншу скриньку google. З інших поштових сервісів не пробував. Відправлення листа складається з кількох етапів: підключення до сервер

Qt Округлення до певного розряду

Округлення - тривіальна задача в математиці, але в Qt немає функції округлення до певного розряду. Проте в QtMath є такі функції як qFloor (qreal) і QCeil (qreal), в результаті яких int. А також можна використовуючи round (double), отримати double. Дуже швидко я знайшов ось цей ресурс звідки взяв вихідну формулу. Вона без сумніву працює, але дає результати, які не відповідаю моїм очікуванням: toRound(187.156, 2); //187.15 toRound(187.156, 1); //187.1 toRound(187.156, 0); //187 toRound(187.156, -1); //180 toRound(187.156, -2); //100 Після невеликої корекції самої функції, її підсумковий варіант виглядає так: double wcsv::toRound(double val, int r) {   double outpValue;   double tempVal;   tempVal=val*pow(10,r);   if (double(int(tempVal))+0.5==tempVal){     int(tempVal)%2 == 0       ? outpValue=double(qFloor(tempVal))/pow(10,r)       :outpValue=double(qCeil(tempVal))/pow(10,r);   } else {     double(int(tempVal))+0.5>tempVal       ? outpValue=double(qFloor(

QTabBar

Спадкування в Qt це практично безмежне поле можливостей. Щоб не копатися в ісходниках минулих проектів в пошуках "я це колись робив і тепер хочу це сюди", вирішив розмістити кілька записів тут. Перший - QTabBar. Легкий переділ для швидкого проекту, сподіваюся він мені ще стане в нагоді. #ifndef TABBAR_H #define TABBAR_H #include #include #include #include #include #include class TabBar : public QTabBar { public:     explicit TabBar(QWidget* parent=0) : QTabBar(parent){         setIconSize(QSize(24, 24));     } protected:     QSize tabSizeHint(int) const {     return QSize(200, 60); } void paintEvent(QPaintEvent *){     QStylePainter p(this);     for (int index = 0; index < count(); index++){        QStyleOptionTabV3 tab;        initStyleOption(&tab, index);        QIcon tempIcon = tab.icon;        QString tempText = tab.text;        tab.icon = QIcon();        tab.text = QString();        p.drawControl(QStyle::CE_TabBarTab, tab

Qt зависання процесу в Windows

Я лінуксоід, і вже натякав на це в інших постах. Але я роблю програми не тільки для використання в середовищі Linux, а й для Windows. Велика частина з того, що я робив первинно була написана саме в Linux, а вже потім перенесена в Windows. Тестуючи програми в обох системах, маю зазначити таку неприємну особливість Windows. При виконанні тривалого процесу, вікно програми зависає. Запускаючи той же самий процес в Linux, принаймні на Ubuntu, такого не трапляється. Наведу невеличкий приклад. Потрібно витягнути з файлу декілька рядків. Звичайно, читаючи 20 рядків користувач нічого не помітить. Але я стикався з завданнями, коли обробити потрібно 15 або навіть більше 40 тисяч рядків. І в такому процесі виникає тимчасове "зависання" вікна. Вікно на будь-які дії не відповідає, а іноді Windows просто показує, що програма зависла. Якщо прогресс не відображається, найчастіше, сторонній користувач в диспетчері задач просто "вбиває" процес. Насправді ж процес обробки даних триває

HTML в QTableWidgetItem

В програмі Journal, яка власне так і залишилась без хазяїна, одна з форм носить функції відображення успішності. Може це і не дуже раціонально, але для відображення табличної інформації мені більш подобається працювати з QTableWidget, ніж з моделями і QTableView. У таблиці мені потрібно було, щоб одна з колонок, відображала форматований текст. Але як відобразити форматований текст в QTableWidget якщо він не вміє відображати HTML. В цьому сенсі він досить тупий та все сприймає як текст і ось що виходить ... Може хтось знає як зробити текст форматованим без HTML? Треба буде опитувальник причепити. Отже я бачу два шляхи вирішення. Перший зробити свій віджет з потрібними делегатами. Другий - інший, його я і вибрав. Немає сумнівів, розумніше було б піти по першому шляху, але мені потрібна була тільки одна колонка і тільки HTML. Якби знадобився CheckBox або ComboBox, я не вибирав би. Потрібне я отримав ось так: QLabel * lable = new QLabel; lable-> setText ( "<b>Some te

Qt + Microsoft Excel 2003 XML

Останнім часом все більше часу приділяю розробці програм для машинної обробки прайс-листів. Прайси приходять в різних форматах xml, xls, txt, csv. І найчастіше результат готую в csv для завантаження його в інтернет магазин. Але не так давно з'явився клієнт, який побажав результат в xslx. У нього самопісний сайт і він хотів би деяке візуальне оформлення, наприклад, підсвітити кольором певні або проблемні позиції, в заданій умові. Але я працюю з Ubuntu і скажемо так, xlsx - тут не зовсім зручний формат. Честно зізнаюся, я зневірився адже засобами CSV такого не реалізувати. Фактично я вирішив перемогти цю проблему найпростішим шляхом і вже почав готувати "запасний" Windows, щоб там налагодити тандем Qt + Excel. І в цьому процесі я натрапив на формат Microsoft Excel 2003 XML. Пошук в Google дав небагато інформації, частково навіть не помилкової, але всеж таки перспективною. Перше, що я зробив - це створив файл в Calc. Невеличку таблицю 4х3, виділив деякі клітини кольором, д