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

Публікації

Розрив з'єднання з віддаленою базою 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 + +) {/ / вичитуємо заголовки        ...

Qt та Excel. Печать

Так вийшло, що у Excel досить мізерні можливості друку. Він не вміє друкувати парні або непарні сторінки листа, або скажімо парні або непарні листи. Навіть Calc з LibreOffice володіє більшим функціоналом. Але це, як виявилося, поправно . Я не буду тут докладно описувати весь код , за допомогою якого можна друкувати як завгодно. Я лише дам посилання, на програму написану мною для друку файлів .x ls . Це opensource -проект, так що будь-хто може качати , використовувати, переробляти, видаляти його абсолютно вільно, дозволяю . Завантажити програму можна на SourceForge.net   http://sourceforge.net/projects/exprint/files/ Вихідні файли будуть особливо корисні тим , хто читає це не просто так , взяти їх можна там же . Там же лежать і вихідні файли написані мною на Delphi ще раніше, але вони не достатньо тестувалися і ймовірно містять помилки :) Якщо у кого виникнуть труднощі з використа...

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

Тема Qt та Excel виявилася досить актуальною, тому спробую розвинути питання про доступ до даних .xls файлу використовуючи ActiveQt. Оголошення змінних: QAxObject *excel; //Excel QAxObject *wbook; //Workbooks QAxObject *book; // Активная книга QAxObject *sheets; //Листы QAxObject *activeSheet;//Активный лист Запуск Excel: excel = new QAxObject("Excel.Application",this); excel->setProperty("Visible", 0); excel->setProperty("DisplayAterts",0); wbook = excel->querySubObject("Workbooks"); sheets = book->querySubObject("Sheets"); activeSheet = book->querySubObject("ActiveSheet"); Закриття Excel: wbook->dynamicCall(“Close()”); excel->dynamicCall(“Quit()”); delete excel; // так напевно Excel не буде висіти в процесах. Створення нової книги: wbook->dynamicCall(Add()); Відкриття існуючої книги: book = wbook->dynamicCall(“Open(const QString&)”, filename); Збереження: wbook-...