Tag Archives : QT

Qt C++: Threaded Communication with Artema Hybrid on Linux

Communicating with an Artema Hybrid CC Payment device is actually deceptively simple. I’ve written an application what uses a webkit widget exclusively for the UI display, and so I hook into the Javascript to provide some extra functionality to the app, in this case, reading and writing to/from the Artema Hybrid device. The documentation that I received was in German exclusively, so this took a bit of work to get going, but once you have it down it’s very easy. The device is connected via it’s POS connection Serial->RJ45 connection to a Serial->USB (FTDI chipset) converter that gets plugged into a usb port. You use the standard open, read, write and close functions. The Artema Hybrid constantly communicates with your system, so you’ll need to create a QThread to run in the background reading from the device once every second. The Artema Hybrid will send you an ENQ (0×05) and you need to respond with either an ACK (0×06) or an STX (0×02). With the way that I have it set up, the c++ code does the absolute minimum required which is it reads from the device and emits a dataRead() signal which is connected in Javascript. If I read ENQ, then I emit dataRead(“ENQ”). and in the Javascript function that is connected to the dataRead() signal, I see if the string passed up == ENQ. In the javascript, I have an array of data to write to the device, if that array is empty, I just write back to the Device ACK, otherwise, I […]

Qt C++ Screen Capture using BitBlt 2

So I got to thinking I wanted to be able to take abitrary screen captures based on some startx/starty -> endx/endy input. I found various sites showing how to do this, but most of them were pretty confusing. I thought I would post the final working code here. void RSystem::snap(int startx, int starty,int endx,int endy) { HDC hdcScreen,hdcMemDC = NULL; HBITMAP hbmScreen = NULL; BITMAP bmpScreen; HWND hDesktopWnd = NULL; hDesktopWnd = GetDesktopWindow(); hdcScreen = GetDC(hDesktopWnd); hdcMemDC = CreateCompatibleDC(hdcScreen); if (!hdcScreen) { qDebug()

Qt C++ application framework evangelism

I am normally not much of an evangelist, but after working with Qt C++ on a few different apps, (my first experience was back when it was still trolltech and I was running KDE on Mandrake Linux, ahh the good ol days.) and all I can say is: This is C++? Qt is the C++ framework of the future, and those who haven’t adopted it should, now, as soon as possible. A little case study will suffice. I have been working on a project for a few months now and a few days ago it came up that there needed to be plugin architecture integrated into the software so that third party vendors could easily add functionality to the program. Sounds fun huh? The answer was simple, Qt already has a signals and slots mechanism, asking third party vendors to use Qt isn’t unreasonable, its a dead easy framework to use, and no, it’s not that bloated. Here were the steps: Create a standard message definition that can be used to communicate steps and program state Create a general purpose relay QObject (I called it Telegraph) with a send and receive. It sends, whatever it receives. Pass the relay object to the library allowing them to connect to the send/receive methods on the object The entire plugin architecture was up and running in less than an hour, and tested, it hasn’t had an issue yet, though I am sure something might need some finaigling before it ships. The great thing about it is, plugins can […]