Posted in Computer Technology, Internet Informations

Yahoo! Acquisition AdMovate, Develop Mobile Advertising Service

Internet giant head of Marissa Mayer, Yahoo!, recently rumored to re-acquire a startup working in the areas of mobile advertising, AdMovate. The umpteenth time that the acquisition by Yahoo! Yahoo! is regarded as an effort to improve service advertisements that are considered “lackluster” lately.

Yahoo! via his blog on Tumblr, has officially announced the purchase AdMovate engaged in the mobile advertising services. AdMovate parties themselves have confirmed this issue by stating that they were aimed at helping advertisers to reach consumers at the right time and place via private message certainly be provide by AdMovate.

Quoted from a news release The Next Web today (18/7), Yahoo! states that carried AdMovate personalization technology can improve the ability of Yahoo! in advertising through the mobile platform. In addition, after the acquisition of all employees AdMovate instantly brought to the Yahoo! offices are located in Silicon Valley, USA.

Marissa Mayer as CEO of Yahoo!, concerning this acquisition had expressed interest in re-focusing the Yahoo! mobile services that could be left behind. According to him, the future of Yahoo! ‘s business models will be on the mobile segment in which this segment continues to experience a significant increase, “Yahoo’s future is on the phone. So we put the products for mobile phones, “he said.

In a blog post on tumblr, Scott Burke who is SVP of Display Advertising and Advertising Technology Yahoo! said Yahoo! is now trying to focus on investments in the mobile segment, “Yahoo is currently investing more in the purchase program and advertising on mobile phones,” she called.

Description Scott was indeed not a hoax. Yahoo! is just a period of four months was reported to have acquired 10 startup that Summly, Astrid, Milewise, Loki Studios, Go Poll Go, PlayerScale, Rondee, Ghostbird Software, Tumblr, and most recently Qwiki, and it is almost entirely a startup working in the mobile field. With the acquisition AdMovate which is a provider of mobile advertising services, then shopping “wholesale” a la Yahoo! The Yahoo! could be an attempt to break through the mobile industry is growing rapidly these days.

Posted in Computer Technology, Hardware

IDF San Francisco 2013: Intel to unveil new product optimizations

Intel is set to host Intel Developer Forum (IDF) 2013 in San Francisco, the US from September 10-12 to further discuss its 2-in-1 device plans as well as its latest progress in Android smartphone and tablet development, according to sources from the upstream supply chain.

With new CEO Brian Krzanich and president Renee James coming on-board to adjust Intel’s business strategy, the sources believe the CPU giant is likely to unveil new optimizations for products as well as several interactive technologies such as voice recognition and gesture control at the forum.

Intel may also unveil product designs for its new quad-core SoC Bay Trail-T, which is set to be launched in December, at the forum and prepare related marketing projects.

Intel is expected to showcase smartphones developed with Lenovo, ZTE, Acer and Asustek Computer and may even display its 22nm Merrifield-based smartphones, which are set to be released in the first half of 2014, the sources said.

Since wearable devices have become a focus of IT players, Intel may also announce plans for related developments.

Posted in Computer Technology, Hardware

Asus launches Windows 8-based Transformer Book TX300 at Rs 91,999

New Delhi: Asus announced the launch of the Transformer Book TX300 in India at Rs 91,999. The company claims it to be the world’s thinnest Window 8 tablet and detachable notebook.

The Asus Transformer Book is a 13.3-inch notebook with a detachable tablet which has a Full HD IPS touch panel and a 178 degree viewing angle. It comes with an Intel Core i5 processor. The Asus Transformer Book is available with Windows 8 Professional.

It can either be used as a Windows 8 multi-touch tablet or a notebook with keyboard and touchpad. It comes with two types of internal storage device. “As a tablet, the 128GB SSD means apps launch instantly for a slick and seamless Windows 8 experience, while ASUS WebStorage ensures easy access to secure cloud storage when travelling far and wide. Connect Asus Transformer Book to its notebook dock and it instantly becomes a fully functional notebook with up to a 500GB hard drive,” said the company.

In Notebook Mode, the Asus Transformer Book features a backlit keyboard with ambient light control that automatically adjusts its brightness to suit the surroundings. it has up to five hours of battery life in full notebook mode and up to eight hours in tablet mode. It has a front 720p HD and a rear 5-megapixel camera.

The Asus Transformer Book will be available in India across select Asus authorised retail outlets starting second week of July 2013.

Posted in Computer Technology, Software

Sap and Macromedia Advance Usability of Enterprise

SAP (NYSE: SAP) and Macromedia (NASDAQ: MACR) today announced they are extending SAP NetWeaver(tm) with the Macromedia Flex application framework to give organizations the ability to create rich interfaces for SAP solutions, including customer-facing SAP Enterprise Portal-based applications. As a result, employees and customers will have an enhanced experience of using SAP solutions, yielding higher employee productivity and greater satisfaction among customers. The announcement was made at SAPPHIRE ’05, SAP’s international customer conference being held in Copenhagen, Denmark, April 26 – 28, 2005.

The next release of SAP NetWeaver Visual Composer will include Flex technology and will be made available to all existing SAP NetWeaver customers. SAP NetWeaver Visual Composer with Flex technology gives programmers the ability to deliver applications that combine the interactivity and expressive power of desktop software with the reach of SAP’s enterprise solutions-all in a “zero footprint” client application.

“We are working closely with SAP to give enterprise knowledge workers the tools they need to be more productive and provide a great, effective experience for end users with rich Internet applications,” said Stephen Elop, CEO, Macromedia. “By capitalizing on Enterprise Services Architecture, which is enabled by SAP NetWeaver and supported by Macromedia Flex, customers and companies will have the ability to increase adoption and use of SAP solutions without additional training or cost.”

New Tools for Enterprise Developers

SAP NetWeaver Visual Composer is a highly productive, model-driven tool aimed at business analysts and developers for code-free creation of composite applications. By combining the robust SAP NetWeaver platform and SAP NetWeaver Visual Composer with Flex, the leading presentation-tier solution for enterprise rich Internet applications, users are able to visually design application logic and process flows, and then provide more effective, engaging end-user experiences. Through this partnership, SAP NetWeaver Visual Composer users can develop rich graphical interfaces that extend current investments in their SAP NetWeaver infrastructure by using Flex technology, and businesses can gain credible, clear, and comprehensive business insights through new analytics solutions. Additionally, Macromedia has certified SAP NetWeaver as a supported platform for Flex. With this support, enterprise developers, SIs, and ISVs can leverage the standards-based programming methodologies of Flex to build customizable, flexible applications on top of the SAP NetWeaver platform.

“SAP is working with Macromedia to bring enterprise data alive for the end user,” said Shai Agassi, president of the product and technology group and member of the executive board, SAP. “Macromedia Flex will help SAP NetWeaver customers extract maximum value from the platform by combining rich user interfaces with customized process flows and business analytics.”

“This is an important partnership for both SAP and Macromedia,” said Gary Hein, vice president and service director for application platform strategies, Burton Group. “This relationship will benefit SAP users with an improved, more intuitive, and responsive environment in which to operate in their day-to-day business. It is also an important milestone in the adoption of rich Internet application foundations, like the Macromedia Flex platform, as a key solution for enterprise applications.”

Posted in Computer Technology, Internet Informations

Four Techniques Local Businesses Should Use for Search Engine Optimization with WordPress

Hands down, a WordPress website is one of the best investments that can be made in a local company’s online lead generation efforts. Admittedly, it can also be one of the biggest investments. My Local Leads, a Maine based marketing firm, works on design and development as well as continued maintenance of affordable WordPress websites for local businesses across the US. There are undoubtedly some decisions that go into the initial planning and development stages that can greatly impact marketing effectiveness of the site. Then, there are things that require continued and near constant observation and work. These few techniques are important to helping make a WordPress website part of a successful local search marketing campaign.

Choosing the right domain name can be pivotal in helping increase a websites reach, especially in the early stages. It was popular to stuff a domain with keywords, but recent search engine algorithm updates have lessened the value of such a practice. Branding is important for the domain name. It needs to be simple enough for people to remember. If a keyword fits naturally, sure it can and should be added. If it ends up making it too weird, too long, or too hard to remember, it is most likely not worth it.

It is also important to remember to turn on WordPress’s built in SEO tools when putting up a site for a local business. There is a setting under privacy of a WordPress site that will automatically hide the site from search engines, and this certainly is not what anyone attempting to build a site for search engine optimization wants to have set. At the same time, the WordPress website should have the permalinks set to be friendly URLs, which will help with the site ranking.

There are important add-ons that any WordPress website should have including sitemap and SEO tools. The meta titles and descriptions can be easily added with warnings and suggestions through using a tool like Yoast. The sitemap is a factor in overall page ranking and can be done automatically through a plugin whenever new pages or posts are added.

Another factor that business owners will want to keep an eye on with their WordPress site is the actual functionality. The site should load quickly, have no dead links, and have clean code. Ugly and broken code can harm the rankings as well as user experience. Slow sites or sites that go down frequently can also be detrimental to both customer experience and search engine rankings.

Posted in Computer Technology, Internet Informations

Google Maps Back Wins Feature Offline Cache

As we know, Google Maps has been updated a few days ago. Unfortunately the update is gained criticism because of ‘loss’ offline cache feature maps that lead the user must constantly connected to Google to use the service.
The criticism has received a response from Google. Not long ago, Google said it would issue a new update featuring the option to store the offline cache on the Maps application has been rolled out for Android. This option will be installed at the bottom of the search box located on the map and can be switched easily. In addition, Google also decided to add the “Where’s Latitude?” that will take users to information about the future of the location sharing service.
This update began rolling on this day and can be checked via the Play Store.

Posted in Computer Technology, Software

Folder Access Windows 8 on Linux

Two editions ago we have discussed how to access Ubuntu from Windows 8. The technique does not necessarily mean that you can access the folder dibagipakaikan Windows 8 on Linux. Well, that ye may be able to access the folders of Windows 8, you should try this tutorial.

Step 1:
Configuration Workgroup Computers in the same




1. Make the same Workgroup. Go to the Start screen, type “System”, click Settings, and then click the System icon on the left side. Click the “Change Settings” on computers using the Windows 8 operating system.





2. In the System Properties window go to the Computer Name tab and see the workgroup name there. Comparing with the existing workgroup name information in Linux. If the same, you can jump straight to step 4. If different, follow the first 3 steps.





3. Click the “Change” is in the Computer Name tab. After that, in the Computer Name Changes window, click the Workgroup menu in the box if the Member in the column below, the contents of the same name with a Linux workgroup. Press “OK” to save changes. When prompted, restart the PC in order to connect with the new workgroup.



Step 2:
Configuring Windows PC to be shared
T04-435-Windows8-gb20Bagipakaikan files as usual. Start Windows Explorer, and browse the folder name you want dibagipakaikan. Right-click the folder, select “Share with> Homegroup (view)” to provide read-only access or “Share with> Homegroup (view and edit)” to provide read and write access.


Step 3:

Access Folders from Linux
In this example we will use Ubuntu as an example. To access the folder via the Ubuntu dibagipakaikan, there are two ways that can be used. You can access the network via a network connection directly to the browser or Windows PC. This she steps details.

Option A: Access via the Network Browser




1. Click the Places menu> Network on your desktop.







2. When Network File Browser window appears, double-click the Windows Network icon on the list.






3. List of networks will appear next computer operating system Windows detected by Linux. Double-click the line with the name of the workgroup that you created in step 1.


4. Finally, double-click the name of your computer operating system Windows 8. Earlier dibagipakaikan folder will appear and can be accessed as usual.


Option B: Direct Connection to Windows




1. From the desktop, click the “Places> Connect to Server”.







2. Will munncul Connect to server window on the screen. You are asked to fill in a few questions about the membagipakaikan file server.






3. To get the right information, turn to your Windows PC. After that, right-click the folder that dibagipakaikan, click “Properties” and click the “Sharing” tab. Record the name of the folder sharing and its Network Path.





4. Now, turning back to Linux. Enter the following information in the Connect to Server window:
• Service type: Windows share;
• Server: WINDOWS-PC (filled with computer name);
• Share: / Users / name / Desktop (the path of the folder in bagipakaikan. Signs backslash (\) is replaced with a slash (/));
• Folder: shared (folder name dibagipakaikan).


5. Give a check mark in front of the option “Add Bookmark” and give the Bookmark name to any name that allows you to remember the name of the folder and file locations dibagipakaikan.



6. Click “Connect”. Window that contains folders dibagipakaikan in Windows 8 will appear automatically. At other times, you’ll be able to access the same folder quickly by simply clicking on the Places menu bookmarking it.

Posted in Computer Technology, Software

Boffin Advises Consumers On The Best Typing Tutor Software This Year, eReflect Announces

Ultimate Typing™ software developer eReflect announced today that the software review website Boffin has published extensive reviews on the best typing tutor software for 2013. As the eReflect representative noted in today’s statement, the company is proud to learn of the high rating given to its product, and appreciates the suggestions and comments provided by this and other reviewers and customers. eReflect states that its goal is to provide the best possible product to users, and relies on such feedback to continually refine and improve its software.

In this most recent review, the Boffin team of reviewers examined four typing improvement software products and concluded that Ultimate Typing™ is the top choice for the review team, as the software includes features and technologies the other products lacked.

The Boffin software review team evaluated all typing tutor software products in terms of efficiency, help and support for users, instruction quality, user friendliness, and several other parameters. While each of the other software products reviewed lacked strength in one or more of these categories, Ultimate Typing™ had all these features and more, making the team’s decision as to the best typing software an easy one. The website illustrates the pros and cons of each typing software product in great detail so that interested users can get an accurate idea on how each software works and how it can improve their typing skills.

According to the Boffin website, Ultimate Typing™ was a clear winner as the top 2013 typing tutor software in view of its cutting-edge tools, impressive integrated technologies and its scientifically informed design and overall interface. The review team also highlighted that the software offers a great variety of activities, games, and practice difficulty levels, making it an appealing choice for people of all ages, needs, and learning styles. The Boffin team of reviewers also emphasized that unlike other software, in addition to its extensive practice material Ultimate Typing™ also has the most user-friendly interface making navigation easy, thus allowing users to focus on what really matters, improving their typing speed and accuracy. In today’s statement, the representative from eReflect remarked that the development team is quite pleased with this aspect of the review, as the interface was one area of product development that the software company put a great deal of time into.

The Boffin review concluded by mentioning that all top software products listed on the website are frequently reevaluated in order for visitors to have up to date information on the most efficient software products on the market. It was also stated that the actual differences between the top three software products selected were often rather minute and that once new releases or versions are published, the current ratings are likely to change.

About Ultimate Typing™

Ultimate Typing™ software is designed specifically for the improvement of typing skills. Created by eReflect, a world leader in e-learning and self-development software, Ultimate Typing™ has been informed by the latest developments in the science of touch typing.

Since its creation in 2006 by Marc Slater, the company has already catered to over 112 countries all over the world, offering products with the latest cutting-edge technology, some of which are among the world’s most recognized and awarded in the industry.

Posted in Computer Technology, Software

Present Mozilla Firefox Beta 23

Jakarta (ANTARA News) – Following the release of Firefox 22 two days ago, Mozilla announced the Firefox Beta update, with version 23, on the desktop and Android.

As reported by TheNextWeb, Wednesday, Firefox Beta 23 is available for Windows, Mac, and Linux. The biggest addition is the function of sharing new Mozilla.

Firefox beta has a new Share button and the panel for the application programming interfaces (Application Program Interface / API) social. In other words, developers can let users share content with friends with one click (Facebook users, for instance, can use it to share content directly from Firefox).

In addition, Firefox Social API now open to all developers who are interested in integrating their services to the website or the Mozilla browser.

This feature was first comes back in Firefox 17 in November 2012, is integrated with Facebook in December 2012, and then expanded to support providers with Firefox 21 in May this year.

In short, social API lets you keep up with the latest social events without having to switch to a new tab. Mozilla developed the “activation of social services and providers that integrate directly into Firefox where users can search for content or websites in person”. So now any developer can participate.

Next up is a mixture of content blocker, prevents (HTTP) malicious content on the site is being read or modified by an attacker with blocking. Content mixture occurs when a web page containing a combination of content secure (HTTPS) and non-secure (HTTP) which is transmitted through a secure data channel to the browser.

Finally, developers can use the new network monitor. Monitor new tissue damage components of individual sites, highlighting how long it takes each of the sites to load.

Posted in Computer Technology, Programming

Integrating C++ with QML


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.


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.


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

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

class KeyGenerator : public QObject
    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)


    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();

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

    QString _type;
    QString _filename;
    QString _passphrase;
    QStringList _types;

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"

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


QString KeyGenerator::type()
    return _type;

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

    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);

    // Remove key file if it already exists
    if (QFile::exists(_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);
    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
        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()));


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

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

    QSurfaceFormat surfaceFormat = window->requestedFormat();

    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.