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

Публікації

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, виділив деякі клітини кольором, д...

Розрив з'єднання з віддаленою базою MySQL

У мене є проект treeShop , який працює з базами даних електронних магазинів. У цьому проекті спочатку я вирішив використовувати постійне подлюченіе, і тільки потім, коли мені знадобилося зберігати інші дані я вирішив зробити модуль синхронізації. Як і багато web-майстрів, роботу програми я тестую на локальному веб сервері. Я прихильник Linux'а тому використовую збірку сервера XAMPP. Версія мого qt 5.2.1. Насправді версія не важлива, саме цю я взяв тому, що мені потрібен був webkit. Підключення до бази просте: QSqlDatabase db; db = QSqlDatabase :: addDatabase ( "QMYSQL"); db.setHostName ( "hostName"); db.setDatabaseName ( "databaseName"); db.setPort (3306); db.setUserName ( "userName"); db.setPassword ( "userPass"); db.open (); За великим рахунком цього достатньо, і в тестах прога працює стабільно. Але ж я націлений на віддалене підключення. Крім власне самих налаштувань для з'єднання і користувача з відповідними п...

4 роки

З останнього мого поста в цьому блозі пройшло більше чотирьох років. Зізнатися, коли я писав не думав, що читати його буде хтось ще. Проте, за цей час його відвідало близько 2000 чоловік. Це звичайно, не така вже й велика цифра, а в порівнянні напевно мізерна, але з урахуванням специфіки та загальної кількості повідомленнь ... до речі, жодного коментаря. Насправді, чхати я хотів на чужу думку про корисність написаного, мені це абсолютно не цікавить, але конструктивний feed back - це інша справа. За минулий час багато чого змінилося і зараз у мене з'явилася можливість пописати ще. У найближчих повідомленнях я розповім дещо про бази даних і інтернет. Моїм інструментом як і раніше є Qt.

Qt та Excel. Робота з ячейками.

Для доступу до всіх властивостей і вмісту ячійок у Excel використовуються два об'єкти Range і Cells. Між ними є тільки одна відмінність (крім назви) - перший об'єкт забезпечує доступ до області ячійок та його аргументом є строка. QAxObject *myRange; myRange = sheetAct->querySubObject("Range (QVariant)", "A1:D3"); myRange->dynamicCall("Select()"); / / виділяємо діапазон ячійок Cells забезпечує доступ тільки до однієї ячійки і аргументом є номер рядка і стовпця. Таким чином запис виду: QAxObject *myRange; myRange = sheetAct->querySubObject("Range(QVariant)", "A2"); і QAxObject *myCells; myCells = sheetAct->querySubObject("Cells (Int, Int)", 1, 2); є рівнозначною. Щоб визначити реальну адресу ячійки або діапазону ячійок можна скористатися властивістю Address, яке має наступні параметри: RowAbsolute, ColumnAbsolute, ReferenceStyle, External, RelativeTo. myRange = sheetAct->querySubObject(...

Qt та Excel. Робота з книгами та листами 2.

В продовження ось цієї статті ми будемо готувати. xls файл до друку. Процес підготовки документа до друку складається з таких етапів як визначення розміру паперу, полів, настройка колонтитулів і т.д. Задаємо області друку. activeSheet->querySubObject("PageSetup")->dynamicCall("PrintArea", "A1: D3"); // область друк А1: D3 Поля сторінки. Поля сторінки задаються в точках, 1 точка = 1/72 дюйма = 1/28 сантиметра. Для завдання полів використовується чотири властивості: TopMargin, RightMargin, BottomMargin, LeftMargin. activeSheet->querySubObject("PageSetup")->dynamicCall("TopMargin", 28); // верхнє поле дорівнює 1 см. Колонтитули. Величина колонтитулів задається властивостями: HeaderMargin, FooterMargin. activeSheet->querySubObject("PageSetup")->dynamicCall("HeaderMargin", 28); // розмір верхнього колонтитула дорівнює 1см. Тут є невеликий підступ, якщо значення верхнього поля менше вел...

Qt та Excel. QTableWidget туди і назад.

У цій статті мова піде про те, як прийняти дані з Excel в QTableWidget і відправити назад в Excel. Візьмемо книгу Excel у якої є 2 листа, на першому розташована невелика таблиця (її ми і буде читати в QTableWidget), а в другій лист порожній, сюди ми віддамо таблицю з QTableWidget.   Ось так, як на малюнку праворуч, виглядає цільова таблиця. На формі розташуємо QTableWidget. Заздалегідь знаючи, якого розміру таблиця, можна відразу виставити кількість стовпців, рядків, прописати назви стовпців, але ми не будемо цього робити. Почнемо з читання таблиці. QAxObject * list;      list = sheets-> querySubObject ("Item (int)", 1); / / оголошуємо лист, на якому таблиця      int colEx = 6; / / оголошуємо кількість стовпців      QStringList headers; / / сюди запишемо заголовки стовпців      for (int a = 1; a <= colEx; a + +) {/ / вичитуємо заголовки        ...