4: Beginning Qt Development in Visual C#.NET

Paint Data Matrix ECC200 in Visual C#.NET 4: Beginning Qt Development

CHAPTER 4: Beginning Qt Development
Encoding Data Matrix In C#
Using Barcode creation for .NET Control to generate, create Data Matrix ECC200 image in .NET framework applications.
www.OnBarcode.com
Data Matrix 2d Barcode Scanner In Visual C#.NET
Using Barcode decoder for Visual Studio .NET Control to read, scan read, scan image in .NET framework applications.
www.OnBarcode.com
Using the Network to Obtain Data
Data Matrix Creator In C#
Using Barcode creation for Visual Studio .NET Control to generate, create Data Matrix 2d barcode image in .NET framework applications.
www.OnBarcode.com
Draw Barcode In C#
Using Barcode creation for .NET Control to generate, create Barcode image in Visual Studio .NET applications.
www.OnBarcode.com
Listing 4 7 shows the fetch method, responsible for starting the thread to fetch the data.
Generating Matrix 2D Barcode In Visual C#.NET
Using Barcode encoder for Visual Studio .NET Control to generate, create 2D image in .NET applications.
www.OnBarcode.com
UPC-A Supplement 2 Creation In C#
Using Barcode encoder for VS .NET Control to generate, create Universal Product Code version A image in .NET applications.
www.OnBarcode.com
Listing 4 7. Starting the Qt thread for network access and data parsing void MainForm::fetch() { if (!mBgThread) mBgThread = new WorkerThread(this, *mEventModel); connect(mBgThread, SIGNAL(finished()), this, SLOT(handleRequestFinished())); connect(mBgThread, SIGNAL(error(const QString&)), this, SLOT(handleError(const QString&))); mBgThread->fetch( "http://earthquake.usgs.gov/earthquakes/catalogs/1day-M2.5.xml" ); }
EAN-13 Generator In Visual C#
Using Barcode creator for Visual Studio .NET Control to generate, create GTIN - 13 image in .NET framework applications.
www.OnBarcode.com
Making USS-93 In Visual C#.NET
Using Barcode generator for VS .NET Control to generate, create Code 93 Full ASCII image in .NET applications.
www.OnBarcode.com
This code is quite simple. In addition to creating an instance of our worker thread, the code connects its signals to slots in the main view so that the main view can respond to success or failure in the attempt to obtain data from the network. The thread itself is responsible for making the HTTP request and parsing the XML results. Construction of the thread (see Listing 4 8) initializes a hash with the XML tags we seek, and does the necessary connecting between signals and slots.
Encoding Data Matrix In Objective-C
Using Barcode generation for iPhone Control to generate, create Data Matrix image in iPhone applications.
www.OnBarcode.com
Painting Data Matrix ECC200 In VS .NET
Using Barcode drawer for Reporting Service Control to generate, create DataMatrix image in Reporting Service applications.
www.OnBarcode.com
Listing 4 8. Worker thread initialization WorkerThread::WorkerThread(QObject* owner, QuakeListModel& eventModel) : QThread(owner) , mCancelled(false) , mNetManager(0) , mReply(0) , mEventModel(eventModel) { // Initialize the hashtable of tags we seek mXmlTags.append("id"); mXmlTags.append("title"); mXmlTags.append("updated"); mXmlTags.append("summary"); mXmlTags.append("point"); mXmlTags.append("elev"); mXmlTags.append("link"); mNetManager = new QNetworkAccessManager(this); connect(mNetManager, SIGNAL(finished(QNetworkReply*)), this, SLOT(handleNetFinished(QNetworkReply*))); }
Draw UCC - 12 In Java
Using Barcode generator for Java Control to generate, create UCC - 12 image in Java applications.
www.OnBarcode.com
Encoding Barcode In Java
Using Barcode drawer for Android Control to generate, create Barcode image in Android applications.
www.OnBarcode.com
Performing the HTTP request, done in the fetch method with the URL you pass it, is very easy. Listing 4 9 shows how it s done.
Paint European Article Number 13 In Java
Using Barcode creation for BIRT reports Control to generate, create EAN-13 Supplement 5 image in BIRT reports applications.
www.OnBarcode.com
EAN 128 Creator In None
Using Barcode printer for Office Excel Control to generate, create UCC-128 image in Office Excel applications.
www.OnBarcode.com
CHAPTER 4: Beginning Qt Development
Barcode Recognizer In VB.NET
Using Barcode scanner for .NET framework Control to read, scan read, scan image in .NET applications.
www.OnBarcode.com
Recognize Code 128 Code Set C In Visual Basic .NET
Using Barcode recognizer for .NET framework Control to read, scan read, scan image in VS .NET applications.
www.OnBarcode.com
Listing 4 9. Making an HTTP request void WorkerThread::fetch(const QString& url) { QNetworkReply *reply = mNetManager->get(QNetworkRequest(QUrl(url))); if (!reply) { emit error(tr("Could not contact the server")); } }
Draw USS Code 39 In None
Using Barcode printer for Font Control to generate, create Code 39 image in Font applications.
www.OnBarcode.com
Generate QR Code JIS X 0510 In .NET Framework
Using Barcode encoder for ASP.NET Control to generate, create QR Code 2d barcode image in ASP.NET applications.
www.OnBarcode.com
It s worth noting that the QNetworkAccessManager s get method does not block; control returns to the main thread, and the manager performs the network request asynchronously. In fact, the real reason to encapsulate this part of the application in its own thread is the XML parsing, which can take a bit of time in a large document. When the network operation completes, the manager will emit the finished signal, which we handle in handleNetFinished (Listing 4 10).
Linear Barcode Printer In VB.NET
Using Barcode creator for .NET framework Control to generate, create 1D Barcode image in Visual Studio .NET applications.
www.OnBarcode.com
UPC A Creator In Objective-C
Using Barcode drawer for iPhone Control to generate, create GTIN - 12 image in iPhone applications.
www.OnBarcode.com
Listing 4 10. Handling the completion of the network transaction void WorkerThread::handleNetFinished(QNetworkReply* reply) { // Start parser by starting. if (reply->error() == QNetworkReply::NoError) { if (!this->isRunning()) { mReply = reply; start(); } } else { emit error(tr("A network error occurred")); qDebug() << QString("net error %1").arg(reply->error()); } }
Parsing the USGS Data Feed
The USGS data provides its data in well-formed XML. A specific seismic event might look like this:
<entry> <id>urn:earthquake-usgs-gov:ci:10756957</id> <title>M 3.8, Baja California, Mexico</title> <updated>2010-07-19T23:06:11Z</updated> <link rel="alternate" type="text/html" href="url"/> <link rel="related" type="application/cap+xml" href="url" /> <summary type="html"> <![CDATA html description of event ]]></summary> <georss:point>32.1465 -115.1627</georss:point> <georss:elev>-6300</georss:elev> <category label="Age" term="Past hour"/> </entry>
This is contained within a root-level <feed> block. (For brevity, we ve elided the actual URLs and HTML content describing the event.) The only catch in working with the data is that the <id> attribute uniquely identifies an event, but multiple <entry> items may
CHAPTER 4: Beginning Qt Development
have the same <id>. This can occur when the USGS provides updated information about a seismic event, such as after collecting more data and refining the estimate. Consequently, we must not only parse the XML <entry> items in the document, but also de-duplicate the data by ID, taking the most recent item when multiple items exist. Fortunately, there s an easy way to do this accumulate the <entry> items in a hash indexed by the <id> field s value. Listing 4 11 shows the parsing and de-duplication that begins when the thread actually runs.
Listing 4 11. Parsing and de-duplicating the XML results void WorkerThread::run() { QuakeEvent anEvent; QXmlStreamReader xml; QXmlStreamReader::TokenType type; QString fieldName; QString value; QString tag; QMap<QString, QuakeEvent> events; bool successful = false; bool gotValue = false; bool gotEntry = false; xml.setDevice(mReply); while(!xml.atEnd()) { // If we've been cancelled, stop processing. if (mCancelled) break; type = xml.readNext(); QString tag = xml.name().toString().toLower(); switch( type ) { case QXmlStreamReader::StartElement: { gotValue = false; if (tag == "entry") { gotEntry = true; } else if (mXmlTags.contains(tag)) { fieldName = tag; } else { fieldName = QString(); } } break; case QXmlStreamReader::Characters: // Save aside any text if ( gotEntry && !fieldName.isEmpty() && !gotValue) { value = xml.text().toString(); gotValue = true; } break; case QXmlStreamReader::EndElement: // Save aside this value if (gotValue && tag != "entry") {
Copyright © OnBarcode.com . All rights reserved.