Washington – One of the selling points of Windows Phone is a powerful social media integration and the ability to download photos from Facebook directly into the photo apps already available on Windows Phone. Microsoft implemented this functionality in Windows 8. But, it seems the company led by Steve Ballmer that will remove some of the functionality in Windows 8.1.
Although the photo in Windows 8.1 application has been improvised with editing functions, the application has been releasing its integration with Facebook and Flickr as well as supporting delete pictures / photos on the network.
Microsoft spokesman said the software manufacturer introduces Facebook and Flickr integration in Windows 8 because when it was only a few similar apps available. “But now there are many applications available and offers the feature to view photos on other services,” he said.
Separation Windows 8.1 integration with Facebook and Flickr in fact reap disappointment. You see, Facebook has recently committed to build specialized applications Windows 8.

NEW YORK (TheStreet) — Facebook’s (FB_) second-quarter earnings focused on mobile revenue. Shares were soaring in premarket trading Thursday as Wall Street raised price targets and upgraded shares.

 The Menlo Park, Calif.-based social networker earned 19 cents a share on $1.813 billion in revenue for the quarter, as mobile advertising revenue accounted for 41% of advertising revenue this quarter. Total advertising revenue was $1.6 billion, 88% of total revenue, and up 61% year over year.

Analysts surveyed by Thomson Reuters were expecting Facebook to earn 14 cents a share on $1.62 billion in revenue for the quarter.

The company ended the quarter with 1.15 billion monthly active users (MAUs), up 21% year over year. There was a 51% annual increase in mobile MAUs, which drove the strength in mobile revenue. Daily active users (DAUs) were 699 million, up 27% annually.

Following the earnings, many analysts were bullish, with several upgrading shares and raising price targets. Here’s what some analysts on Wall Street had to say:

JPMorgan analyst Doug Anmuth (Overweight, $44 PT)

“Facebook delivered its strongest quarter yet as a public company–results that we think could be thesis-changing for many–and we would continue to buy Facebook shares even after the ~17% move up in the after-market. Our revenue and nonGAAP EPS estimates increase 12% and 38% for 2013, and 22% and 46% for 2014.”

Topeka Capital Markets analyst Victor Anthony (Buy, $40 PT)

“Facebook needed to, and delivered, a blowout quarter. What is clear from the results is advertisers have validated Facebook as an advertising platform. For full year 2013, our revenue and Adj. EPS increases to $7.196B and $0.71, resp, from $6.733B and $0.63. We still see more upside for the stock and recommend purchase. There are several well defined catalysts over the next two years that should lead to further share price appreciation, including: 1) monetizing Instagram, which, per CEO Zuckerberg, will generate “a lot of profits”, 2) launch of auto-play video ads, 3) monetizing Graph Search, 4) a bigger push into e-commerce, and 5) the potential for S&P 500 inclusion. Further, only 1mm or 6% of FB’s 18mm potential advertisers are buying ads, implying a huge runway for advertiser uptake exists.”

Sterne Agee analyst Arvind Bhatia (Buy, $37 PT)

“We are incrementally bullish on FB’s prospects following 2Q results and believe the stock should be a core holding in Internet portfolios. 2Q’s highlight was Mobile advertising (+76% q/q versus consensus +20%). Overall revenue (53% y/y) and EBITDA (+57% y/y) accelerated from 1Q’s 38%/35% revenue/EBITDA growth. Better than expected user engagement, strong monetization and good cost control helped FB outperform even the most bullish expectations on the Street. Reiterating Buy.”

Oppenheimer analyst Jason Helfstein (Outperform, $36 PT)

“Following materially better than expected 2Q results, we are increasing our estimates and price target, and are reiterating our Outperform rating. 2Q upside was driven by higher advertiser demand for newsfeed, both on volume and price, and since mobile Newsfeed pricing is similar to desktop and advertisers are largely indifferent between mobile and desktop, revenues are tracking the consumer shift to smartphones. We believe this dynamic is an important differentiator vs. other ad-supported internet companies, that are being hurt by the mobile mix shift. As such, we are increasing ’13E and ’14E revenue by 3% and 5%, and non-GAAP EPS by 7% and 9%, respectively. Raising target to $36 from $32.”

Shares of Facebook were soaring following earnings, tacking on 30.48% to $34.59 in premarket trading.

Amcom Software, Inc. today announced that Emory University is leading a large strategic effort to expand the use of its HIPAA-compliant smartphone texting app, Mobile Connect, Powered by Amcom™. The organization plans to have thousands of Emory staff in both the academic and hospital settings using the solution to facilitate their secure critical messaging. Emory wants to ensure that sensitive information such as identifiable patient data remains protected, that staff can easily locate the people they need to contact, and that messages requiring immediate attention are acknowledged and responded to quickly.

Emory uses Mobile Connect because it integrates easily with their Amcom hospital call center solutions, including their staff directory, on-call scheduling and emergency notification systems. “Currently we are focused on educating our staff about the benefits of Mobile Connect, including the security and ease of communicating,” said Jay Flanagan, Senior Manager, UTS Messaging at Emory University. “This is particularly important for those who send or receive critical communications, including physicians and nurses, administrators, IT staff, and Infection Control. The healthcare staff is our primary focus, but faculty and staff in the university sectors are also included.”

“When staff see how Mobile Connect simplifies their work and makes them more productive, they get excited,” said Jason Stanaland, Mobile Messaging Applications Engineer at Emory University. “Our early adopters enticed their coworkers to use it. They all recognize its many benefits and are helping to spread the word.”

“Mobile Connect is transforming how Emory’s staff is able to communicate, particularly in its fast-paced clinical setting,” said Colin Balmforth, President, Amcom Software. “It’s exciting to see customers like Emory making full use of their Amcom solutions to improve their communication workflows and patient care.”

About Emory’s Office of Information Technology
Emory University’s Office of Information Technology (OIT) is responsible for maintaining and coordinating centralized computing services on campus and supporting academic, administrative, research, and healthcare departments in the effective and efficient use of these technologies. The Office of Information Technology coordinates its efforts and initiatives with other central and local information technology units. Some of the larger systems and service provided by OIT include electronic medical records, voice and data services, enterprise-wide human resources, student administration, financial systems, high-performance computing, and academic course-management software.

About Amcom Software
Amcom Software, a subsidiary of USA Mobility, Inc. (USMO), connects people to each other and to the data they need. This helps organizations save lives with communications that are faster, more accurate, and more efficient. Thousands of organizations worldwide rely on Amcom solutions for critical smartphone communications, contact center optimization, emergency management, and clinical workflow improvement. The company’s products are used by leading organizations in healthcare, hospitality, education, business, and government.

Instagram skyrocketed in popularity as more and share photos via a mobile application. As a start-up which is very expensive purchased by Facebook apparently did not make Instagram lose ambition. Instagram sure will be bigger than Facebook.

Facebook now has 1.1 billion users worldwide making it the largest social networking Worldwide. But they have a problem with the new user to hook a young age began to look at other services. In terms of feeling confident that Instagram can grow large if it is capable of growth right now.

“By definition, if Instagram continues to grow in this position then yes, it would be even greater,” said Kevin Systrom in an interview with Fast Company. “Instagram will be the largest in the world.”

In contrast to the explicitly Kevin so confident, Instagram founder fellow replied diplomatically. “I do not know, but it’s a good question. Basically there is no limit to the number so maybe one day we will match?” Mike Krieger said.

Instagram is currently still far less than Facebook, but the number of users has exceeded Twitter. While the video recording feature that was recently launched is also more popular than Twitter’s Vine has attended first.

Jakarta – NetApp introduced a new version of its flagship operating system storage, clustered Data ONTAP 8.2. Steven Law, NetApp Country Manager Indonesia, said the new software provides the ability for organizations and cloud services to offer new services and capacity with maximum application uptime quickly and cost-effectively.
Clustered Data ONTAP 8.2 is claimed to remove the limits of performance, availability, and efficiency of the traditional siled, and align storage infrastructure with business demands and ever-changing applications without interruption.
»Excellence is clustered Data ONTAP operating without interruption, scalability, and efficiency of storage that has been proven,” said Steven in Jakarta, Wednesday, July 17, 2013.
While changes in industry trends, has led NetApp become a multi-platform company. There are at least five trends that change the direction of NetApp, the flash technology, cloud computing, customers who want an easy-paced, mobile lifestyle, and large data storage needs.
»Change and development trend represents an opportunity for companies to grow and thrive. To seize that opportunity, NetApp needs to evolve into a multi-platform company that customers can prepare for the future, “said Steven.
As an initial step to deal with the changing trends NetApp, the NetApp over the past year to add two new business focus as a strategy, which is clustered Data ONTAP and E-Series Storage System.
If a series of Clustered Data ONTAP operating system, E-Series Storage is a range of flash storage array system maximize the value of the whole set of flash in computing, networking, and storage, thus providing flexibility in choosing the best approach for each work load.
NetApp recently launched EF540, which is the industry’s first flash array that combines extreme performance and consistent with the level of availability, reliability, high manageability and enterprise-class, as well as support services worldwide. Check out other techno news here.

Smartphones today are able to facilitate human needs must have a very high performance. So that mobile devices require a lot of power. So many smartphone manufacturers are promoting their products with a battery that can last a long time one of them is the iPhone.
IPhone devices manufactured by Apple is continuing to develop its technological capabilities. Recently they have patented the a new technology that can extend the device battery iPhone.
Reported by Apple Insider, the technology works by stalking or studying user behavior patterns smartphone during a certain period. Power consumption is adjusted based on the user’s habits in a way like turning off the hardware components, reducing the frequency, up to date email, and services that consume the data, close the software, thereby maximizing battery life.
If the regular iPhone user is traveling from 7 pm to 9 am, then sleep at 11, then the smartphone will notice the pattern with an automated way to cut power consumption at these times
Savings of Apple’s technology also involves a means of determining the location via GPS. Knowing the outcome smartphone anywhere casual users to charge the battery and when the battery is estimated to last up charging locations hereinafter, if not the austerity measures will be carried out.
Ironically, this technology utilizing the GPS service, which is one factor draining the battery on a modern smartphone. Patent application on the technology in question has been filed by Apple last year. Although it was not clear whether the will actually be implemented in the final product, may be the next generation iPhone will be able to study the behavior of the user to save the battery.

Beijing – Yahoo Inc. back shopping. A pioneering company alias startup from Beijing so the target. Is Zletic, a company that provides data analysis services purchased Yahoo social network on Thursday (July 18, 2013). However, the acquisition value is not known how many.
In its website pages, Zletic was pleased to acquire this. Founder Zletic is Hao Zheng, a former employee of Yahoo China. Hao Zletic founded only a year ago.
One of Yahoo spokesperson stated, with this acquisition, the eight employees Zletic will be brought to the office of research and development of Yahoo in Beijing.
This is Yahoo’s acquisition of the 19th under the control of Marissa Mayer. Yahoo under control Mayer likes shopping startup. Mayer wants Yahoo to focus on the realm of mobile and new generations still.
Some time ago Yahoo acquired wide startup Summly, Xobni and Tumblr. Tumblr purchased with cash worth U.S. $ 1.1 billion.

Jakarta – Google has just updated the Google Maps application with new features. This feature comes reports of traffic accidents and the number of ways to access the various facilities.
Google Maps with accident information can be used on Android and iOS based devices. Overall, this application displays maps and their reliable navigation and traffic information.
Warning about the accident will appear on the map showing traffic flow and road construction. This information is also recommended that these options are not stuck in traffic around the accident site.
Last June, Google bought Waze, the creator of popular apps that inform traffic flow. But Google has not confirmed whether Waze’s data associated with this application or not.
The new application also allows users to find out if the place you want to target viable or not. Features »Explore” display greeting cards enjoy a meal and good night.
Through these features, users can be helped with a variety of information about the place in detail. There is also a rating system that allows users to find somewhere assessment.
Google Maps with navigation devices had previously been released for the Android and iOS platform. Product Manager for Google Maps, Nobuhiro Makida, said the superior feature of this application is the My Location, search, and referrals.
“Through My Location, users can know of its existence through the map, even if the device does not have GPS,” said Makida.
Next is a local search to find a business category. While referrals are the best route to a destination, even if the user is driving, walking, or taking public transportation.
Features can indicate the distance and direction of travel time to get to the destination. The Google Maps Navigation can be run via voice commands.

Software training firm Infinite Skills Inc. last week introduced its “Adobe Acrobat XI Security Tutorial,” a condensed course targeted specifically toward using Acrobat XI to create and exchange information-sensitive digital documents.

Advanced security features have long been a feature that sets Acrobat apart from other digital document applications. Acrobat XI has capabilities for password protection and certificate encryption, digital signatures, and many other advanced security features that make it a one-stop solution for document management.

Infinite Skills’ “Adobe Acrobat XI Security,” covers all these features in a quick, easy-to-understand guide that will allow users to begin creating and transferring secure documents in just a few short hours.

Adobe Acrobat XI Security Video Training – DVD

Course author Michael Hoffman is a career photographer, artist, and trainer, with Adobe certifications in Acrobat and Photoshop. After beginning his career creating technical illustrations and photographs for electronic equipment manufacturers, he has continued to combine technology, photography and education in a productive career.

This brief, highly focused course, covers password and certificate encryption, creating a digital ID, how to sign a .pdf file, how to certify a .pdf file, and using Adobe’s EchoSign feature.

Other chapters include working with actions and creating custom actions, using security features in print situations, problem correction, and compatibility issues, along with several other specialized security features including options for automating repetitive tasks.

“Acrobat XI Professional is far more than just a tool for viewing .pdf files,” Hoffman explains. “It is an incredibly complex program, and its security features are part of a complete package that provides a seamless automated collaborative solution for almost any document management need.”

Free demo videos and a full list of course contents can be found on the Adobe Acrobat XI Security Tutorial training page of the InfiniteSkills website:

http://www.infiniteskills.com/training/advanced-adobe-acrobat-xi-training.html

InfiniteSkills offers its Adobe Acrobat XI Security Tutorial either as a DVD or a direct download from the company website at a retail price of $24.95. All InfiniteSkills titles and formats are compatible with both Mac and Windows operating systems, and shipping is available around the globe. InfiniteSkills tutorials are supported by project files which correspond to examples in the videos.

About InfiniteSkills Inc.
A leader in the field of software training, InfiniteSkills strives to offer the highest quality training available at an affordable cost. InfiniteSkills tutorials are task-oriented instructional videos, teaching complex skills by providing hands-on examples, guiding users as they carry out critical objectives. InfiniteSkills offers a comprehensive range of software titles available as DVDs, digital downloads, and iPad editions, keeping with company aim of delivering professional training to customers anywhere they want to learn.

Introduction

Qt Quick’s QML language makes it easy to do many things, especially fancy animated user interfaces. However, some things either can’t be done or are not suitable for implementing in QML, such as:

  1. Getting access to functionality outside of the QML/JavaScript environment.
  2. Implementing performance critical functions where native code is desired for efficiency.
  3. Large and/or complex non-declarative code that would be tedious to implement in JavaScript.

As we’ll see, Qt makes it quite easy to expose C++ code to QML. In this blog post I will show an example of doing this with a small but functional application.

The example is written for Qt 5 and uses the Qt Quick Components so you will need at least Qt version 5.1.0 to run it.

Overview

To expose a C++ type having properties, methods, signals, and/or slots to the QML environment, the basic steps are:

  1. Define a new class derived from QObject.
  2. Put the Q_OBJECT macro in the class declaration to support signals and slots and other services of the Qt meta-object system.
  3. Declare any properties using the Q_PROPERTY macro.
  4. Call qmlRegisterType() in your C++ main program to register the type with the Qt Quick engine.

For all the details I refer you to the Qt documentation section Exposing Attributes of C++ Types to QML and the Writing QML Extensions with C++ tutorial.

Ssh Key Generator

For our code example, we want a small application that will generate ssh public/private key pairs using a GUI. It will present the user with controls for the appropriate options and then run the program ssh-keygen to generate the key pair.

I implemented the user interface using the new Qt Quick Controls since it was intended as a desktop application with a desktop look and feel. I initially developed the UX entirely by running the qmlscene program directly on the QML source.

The UI prompts the user for the key type, the file name of the private key to generate and an optional pass phrase, which needs to be confirmed.

The C++ Class

Now that have the UI, we will want to implement the back end functionality. You can’t invoke an external program directly from QML so we have to write it in C++ (which is the whole point of this example application).

First, we define a class that encapsulates the key generation functionality. It will be exposed as a new class KeyGenerator in QML. This is done in the header file KeyGenerator.h below.

#ifndef KEYGENERATOR_H
#define KEYGENERATOR_H

#include <QObject>
#include <QString>
#include <QStringList>

// Simple QML object to generate SSH key pairs by calling ssh-keygen.

class KeyGenerator : public QObject
{
    Q_OBJECT
    Q_PROPERTY(QString type READ type WRITE setType NOTIFY typeChanged)
    Q_PROPERTY(QStringList types READ types NOTIFY typesChanged)
    Q_PROPERTY(QString filename READ filename WRITE setFilename NOTIFY filenameChanged)
    Q_PROPERTY(QString passphrase READ filename WRITE setPassphrase NOTIFY passphraseChanged)

public:
    KeyGenerator();
    ~KeyGenerator();

    QString type();
    void setType(const QString &t);

    QStringList types();

    QString filename();
    void setFilename(const QString &f);

    QString passphrase();
    void setPassphrase(const QString &p);

public slots:
    void generateKey();

signals:
    void typeChanged();
    void typesChanged();
    void filenameChanged();
    void passphraseChanged();
    void keyGenerated(bool success);

private:
    QString _type;
    QString _filename;
    QString _passphrase;
    QStringList _types;
};
#endif

Next, we need to derive our class from QObject. We declare any properties that we want and the associated methods. Notify methods become signals. In our case, we want to have properties for the selected key type, the list of all valid ssh key types, file name and pass phrase. I arbitrarily made the key type a string. It could have been an enumerated type but it would have made the example more complicated.

Incidentally, a new feature of the Q_PROPERTY macro in Qt 5.1.0 is the MEMBER argument. It allows specifying a class member variable that will be bound to a property without the need to implement the setter or getter functions. That feature was not used here.

We declare methods for the setters and getters and for signals. We also declare one slot called generateKey(). These will all be available to QML. If we wanted to export a regular method to QML, we could mark it with Q_INVOCABLE. In this case I decided to make generateKey() a slot since it might be useful in the future but it could have just as easily been an invocable method.

Finally, we declare any private member variables we will need.

C++ Implementation

Now let’s look at the implementation in KeyGenerator.cpp. Here is the source code:

#include <QFile>
#include <QProcess>
#include "KeyGenerator.h"

KeyGenerator::KeyGenerator()
    : _type("rsa"), _types{"dsa", "ecdsa", "rsa", "rsa1"}
{
}

KeyGenerator::~KeyGenerator()
{
}

QString KeyGenerator::type()
{
    return _type;
}

void KeyGenerator::setType(const QString &t)
{
    // Check for valid type.
    if (!_types.contains(t))
        return;

    if (t != _type) {
        _type = t;
        emit typeChanged();
    }
}

QStringList KeyGenerator::types()
{
    return _types;
}

QString KeyGenerator::filename()
{
    return _filename;
}

void KeyGenerator::setFilename(const QString &f)
{
    if (f != _filename) {
        _filename = f;
        emit filenameChanged();
    }
}

QString KeyGenerator::passphrase()
{
    return _passphrase;
}

void KeyGenerator::setPassphrase(const QString &p)
{
    if (p != _passphrase) {
        _passphrase = p;
        emit passphraseChanged();
    }
}

void KeyGenerator::generateKey()
{
    // Sanity check on arguments
    if (_type.isEmpty() or _filename.isEmpty() or
        (_passphrase.length() > 0 and _passphrase.length() < 5)) {
        emit keyGenerated(false);
        return;
    }

    // Remove key file if it already exists
    if (QFile::exists(_filename)) {
        QFile::remove(_filename);
    }

    // Execute ssh-keygen -t type -N passphrase -f keyfileq
    QProcess *proc = new QProcess;
    QString prog = "ssh-keygen";
    QStringList args{"-t", _type, "-N", _passphrase, "-f", _filename};
    proc->start(prog, args);
    proc->waitForFinished();
    emit keyGenerated(proc->exitCode() == 0);
    delete proc;
}

The constructor initializes some of the member variables. For fun, I used the new initializer list feature of C++11 to initialize the _types member variable which is of type QStringList. The destructor does nothing, at least for now, but is there for completeness and future expansion.

Getter functions like type() simply return the appropriate private member variable. Setters set the appropriate variables, taking care to check that the new value is different from the old one and if so, emitting the appropriate signal. As always, please note that signals are created by the Meta Object Compiler and do not need to be implemented, only emitted at the appropriate times.

The only non-trivial method is the slot generateKey(). It does some checking of arguments and then creates a QProcess to run the external ssh-keygen program. For simplicity and because it typically executes quickly, I do this synchronously and block on it to complete. When done, we emit a signal that has a boolean argument that indicates the key was generated and whether it succeeded or not.

QML Code

Now let’s look at the QML code in main.qml:

// SSH key generator UI

import QtQuick 2.1
import QtQuick.Controls 1.0
import QtQuick.Layouts 1.0
import QtQuick.Dialogs 1.0
import com.ics.demo 1.0

ApplicationWindow {
    title: qsTr("SSH Key Generator")

    statusBar: StatusBar {
    RowLayout {
        Label {
            id: status
            }
        }
    }

    width: 369
    height: 166

    ColumnLayout {
        x: 10
        y: 10

        // Key type
        RowLayout {
            Label {
                text: qsTr("Key type:")
            }
            ComboBox {
                id: combobox
                Layout.fillWidth: true
                model: keygen.types
                currentIndex: 2
            }
        }

        // Filename
        RowLayout {
            Label {
                text: qsTr("Filename:")
            }
            TextField {
                id: filename
                implicitWidth: 200
                onTextChanged: updateStatusBar()
            }
            Button {
                text: qsTr("&Browse...")
                onClicked: filedialog.visible = true
            }
        }

        // Passphrase
        RowLayout {
            Label {
                text: qsTr("Pass phrase:")
            }
            TextField {
                id: passphrase
                Layout.fillWidth: true
                echoMode: TextInput.Password
                onTextChanged: updateStatusBar()
            }

        }

        // Confirm Passphrase
        RowLayout {
            Label {
                text: qsTr("Confirm pass phrase:")
            }
            TextField {
                id: confirm
                Layout.fillWidth: true
                echoMode: TextInput.Password
                onTextChanged: updateStatusBar()
            }
        }

        // Buttons: Generate, Quit
        RowLayout {
            Button {
                id: generate
                text: qsTr("&Generate")
                onClicked: keygen.generateKey()
            }
            Button {
                text: qsTr("&Quit")
                onClicked: Qt.quit()
            }
        }

    }

    FileDialog {
        id: filedialog
        title: qsTr("Select a file")
        selectMultiple: false
        selectFolder: false
        nameFilters: 
        selectedNameFilter: "All files (*)"
        onAccepted: {
            filename.text = fileUrl.toString().replace("file://", "")
        }
    }

    KeyGenerator {
        id: keygen
        filename: filename.text
        passphrase: passphrase.text
        type: combobox.currentText
        onKeyGenerated: {
            if (success) {
                status.text = qsTr('<font color="green">Key generation succeeded.</font>')
            } else {
                status.text = qsTr('<font color="red">Key generation failed</font>')
            }
        }
    }

    function updateStatusBar() {
        if (passphrase.text != confirm.text) {
            status.text = qsTr('<font color="red">Pass phrase does not match.</font>')
            generate.enabled = false
        } else if (passphrase.text.length > 0 && passphrase.text.length < 5) {
            status.text = qsTr('<font color="red">Pass phrase too short.</font>')
            generate.enabled = false
        } else if (filename.text == "") {
            status.text = qsTr('<font color="red">Enter a filename.</font>')
            generate.enabled = false
        } else {
            status.text = ""
            generate.enabled = true
        }
    }

    Component.onCompleted: updateStatusBar()
}

The preceding code is a little long, however, much of the work is laying out the GUI components. The code should be straightforward to follow.

Note that we import com.ics.demo version 1.0. We’ll see where this module name comes from shortly. This makes a new QML type KeyGeneratoravailable and so we declare one. We have access to it’s C++ properties as QML properties, can call it’s methods and act on signals like we do withonKeyGenerated.

A more complete program should probably do a little more error checking and report meaningful error messages if key generation fails (we could easily add a new method or property for this). The UI layout could also be improved to make it properly resizable.

Our main program is essentially a wrapper like qmlscene. All we need to do to register our type with the QML engine is to call:

    qmlRegisterType<KeyGenerator>("com.ics.demo", 1, 0, "KeyGenerator");

This makes the C++ type KeyGenerator available as the QML type KeyGenerator in the module com.ics.demo version 1.0 when it is imported.

Typically, to run QML code from an executable, in the main program you would create a QGuiApplication and a QQuickView. Currently, to use the Qt Quick Components there is some additional work needed if the top level element is an ApplicationWindow or Window. You can look at the source code to see how I implemented this. I basically stripped down the code from qmlscene to the minimum of what was needed for this example.

Here is the full listing for the main program, main.cpp:

#include <QApplication>
#include <QObject>
#include <QQmlComponent>
#include <QQmlEngine>
#include <QQuickWindow>
#include <QSurfaceFormat>
#include "KeyGenerator.h"

// Main wrapper program.
// Special handling is needed when using Qt Quick Controls for the top window.
// The code here is based on what qmlscene does.

int main(int argc, char ** argv)
{
    QApplication app(argc, argv);

    // Register our component type with QML.
    qmlRegisterType<KeyGenerator>("com.ics.demo", 1, 0, "KeyGenerator");

    int rc = 0;

    QQmlEngine engine;
    QQmlComponent *component = new QQmlComponent(&engine);

    QObject::connect(&engine, SIGNAL(quit()), QCoreApplication::instance(), SLOT(quit()));

    component->loadUrl(QUrl("main.qml"));

    if (!component->isReady() ) {
        qWarning("%s", qPrintable(component->errorString()));
        return -1;
    }

    QObject *topLevel = component->create();
    QQuickWindow *window = qobject_cast<QQuickWindow *>(topLevel);

    QSurfaceFormat surfaceFormat = window->requestedFormat();
    window->setFormat(surfaceFormat);
    window->show();

    rc = app.exec();

    delete component;
    return rc;
}

In case it is not obvious, when using a module written in C++ with QML you cannot use the qmlscene program to execute your QML code because the C++ code for the module will not be linked in. If you try to do this you will get an error message that the module is not installed.