Monthly Archives: November 2017

Boost Software Announces New Instructional Video for Fixing Windows Installer Problems

PC Health Boost is registry cleaning software that PC users can use to detect and repair serious computer problems such as screen freezes, slow boot time, and DLL errors. Problems that occur in the main files of the Windows operating system can prevent PC Health Boost from performing a complete service. Uncovering these problems and fixing them is not complicated, but not well-known among many PC users. Boost Software recognized this issue and created an instructional video to help users overcome these serious problems.

The new video explains how Windows installer errors can prevent PC Health Boost from performing a complete service. The video then goes through detailed steps of possible solutions to try to fix the errors. Since Windows installer issues can vary in origin, the video first offers basic solutions and then continues with those that require more steps to complete.

Customers who are unable to fix their Windows Installer errors with the proposed solutions or who encounter other difficulties are directed to contact Boost Software technical support via email or phone for additional assistance.

More information about the features and benefits of PC Health Boost is available on the Boost Software website located at http://www.boostsoftware.com

About Boost Software

Amit Mehta and Peter Dunbar are software engineers and affiliate gurus who founded Boost Software in 2012 to help people with PC performance problems. The company currently offers a suite of PC performance products that includes PC HealthBoost, DriverBoost Pro, and Startup Boost.

We are always looking for advertising and partnership opportunities and anyone wanting to meet with us, or inquire about writing a guest post for the blog may reach us using the contact link provided.

Getting to know Jack Dorsey, the Twitter Author

Is one of the requirements to be successful is a must have dropped out of college? For those who do not agree with that statement, Bill Gates, Steve Jobs, Mark Zuckerberg has proved the above statement is true.

Now, a New York University student born 19 November 1976, Jack Dorsey, co-joined to the above statement agrees with being one of the success with the brilliant work; Twitter.

Perhaps the name of the new Jack Dorsey first heard in your ears, or just this once you read it. In fact he was the one creating ‘toy’ in today’s internet era that could be very, very you gandrungi.

He is the creator of a social network with the concept of micro-blogging, Twitter. That the college years never removed from the campus where he learned about the computer.

Dorsey was born in St. Louis, Missouri, 37 years ago. And there precisely he grew up with curiosity about computers and communications were also great. Dorsey teen has started his desire to dive into programming since he was 15 years old.

And continued when he was in high school, Bishop DuBourg High School name. Where he pursue any science, and especially, computers and programming.

Dorsey teens start to find out and follow your passion when he was struck with a computer program that manages and coordinates a taxi passing by the system very well organized and quick.

How cars taxi, or car delivery can regularly meet and work quickly calls. Of interest arises where a similar program to create a more sophisticated, when he was only 15 years old.

Dorsey adults continue his studies at the Missouri University of Science and Technology. The study period was completed and continued to move to New York University who also never finish it. Or in another sense, Dorsey dropped out of university.

Because it takes time and concentration to build his company. Dorsey moved to Oakland, California, in 2000 and built a company engaged in the field of programming.

He sold the software on line pengkoordinir taxi he had ever made as a teenager in the web that he made himself. And the company continues to grow by selling software creation via the Internet.

Through his company is the way Dorsey met with people like Biz Stone and Evan Williams who later would become his partner in founding Twitter.

What’s in your mind when you want to create a Twitter Dorsey? Narrated by Biz Stone, Dorsey has wild ideas in his head. “Just imagine if we could share with our friends about what we are doing and what we feel now, imagine. Is not it great? “Said Dorsey.

Biz Stone, a former CEO of Odeo, and Evan Williams-one of the founders blogger, agrees that desire and build company called Obvious, who would soon be renamed Twitter.

Social networking on the initial launch is not so attractive to everyone, but it has now become one of the most social media enjoyed by most citizens of the world. Which may also be one of the ‘toy’ bored repellent for you.

Intel Releases Low-Powered Atom Chips for Servers

Now that Intel Corp. (INTC) has released new chips for the smartphone market, where it has been squeezed out by competitors like ARM Holdings PLC (ARMH) and Qualcomm Inc. (QCOM), it has elected to restart its initiatives in the server business as well. Intel has three-quarters of that market, by most estimates. Although the opportunities in the corporate server market are not as great as those among consumers, it needs to keep its hold on one of its major franchises.

As it struggles to keep server share, it announced:

Intel revealed new details for the forthcoming Intel Atom processors C2000 product family aimed for low-energy, high-density microservers and storage (codenamed “Avoton”), and network devices (codenamed “Rangeley”). This second generation of Intel’s 64-bit SoCs is expected to become available later this year and will be based on the company’s 22nm process technology and the innovative Silvermont microarchitecture. It will feature up to eight cores with integrated Ethernet and support for up to 64GB of memory.

America’s Worst Companies to Work For

The new products are expected to deliver up to four times the energy efficiency and up to seven times more performance than the first generation Intel Atom processor-based server SoCs introduced in December last year. Intel has been sampling the new Intel Atom processor server product family to customers since April and has already more than doubled the number of system designs compared to the previous generation.

The market probably will not need to wait long to see if the initiative works. Chip companies are fond of release data sales on new products, if they are successful. By the firm’s next earnings call, Wall Street will know if the new Atom product and the servers it runs will replace older ones in which systems were less efficient.

Radeon HD 8970M Mobile Graphics Chip Fastest Claimed

Jakarta – Radeon HD8000 officially announced, but not for the desktop computer but notebook users. It was not just one variant, there are some models that are ready to fill the mainstream segment, performance, and enthusiast.

In the mainstream segment, AMD Radeon HD 8500M prepare and HD 8600M. Entrusted to fill class performance on the Radeon HD 8700M and HD 8800M. While the top-class enthusiast who inhabited occupied by the Radeon HD 8970M.

Interestingly, AMD Radeon HD 8970M claimed as the fastest mobile graphics chips today. The claim was based on the known specs diusungnya rely kecepetan clock 850 MHz (900 MHz when turbo mode is active), 1280 stream processors and RAM speed of 1.2 GHz.

This specification combinations touted able to achieve a score of 2304 GFLOPS performance on a single computational precision. While achievement in computing by 144 GFLOPS double precision.

While the first notebook product will apply, as quoted from MaximumPC, Wednesday (15/05/2013), is MSI GX70 which is present as a gaming notebook. To prove his supposedly MSI also bundled game Crysis 3 in the product.

Nokia Asha Series 4 Can Now WhatsApp

Nokia has released an update (update) for large-scale software Asha series phones. In this update, a series of feature phones that are able to enjoy the service WhatsApp chat application.

The series for the first time getting support WhatsApp application is Asha 305, Asha 306, dual-SIM variant of Asha 308, and Asha 310.

Thus, the Asha series is now able to use the application WhatsApp is Asha 201, 206, 300, 302, 303, 305, 306, 308, 309, 310, and 311.

In addition, this software firmware update also improves the ability of e-mail exchanges, YouTube launcher, and an increase in social experience.

Some features, such as quoted from GSM Arena, Wednesday (10/07/2013), it will be available specifically for a particular model. However, this update will be available for all the Asha phones are equipped with touch screen.

This update is available over the air (OTA). If you do not want to do the update by the way, the user can also do it through the computer using Nokia Suite application.

If you want to update by OTA, users simply go to the “Menu”, select “Settings”, “Phone”, and “Device Updates”. As a final step, select “downl.phone sw”.

Just for advice, sometimes quite large software update files. Therefore, use WiFi networks to reduce the cost of credit.

HTC Mini – the latest version of HTC Smartphone Has Officially Introduced in Indonesia

Some time ago, mobile phones HTC has officially launched in Indonesia. This smart phone can be considered quite innovative and brought some technology like the HTC BlinkFeed, Zoe HTC, HTC and HTC Sense BoomSound. Such features make this smart phone is different compared to other Android phones. To reach consumers who preyed HTC cheaper and smaller, HTC has launched the HTC Mini in Indonesia.

Arguably HTC Mini is a mini version and lighter than previous versions of HTC. This smart phone has embedded 1.4 GHz Qualcomm Snapdragon processor core 400 using two with Adreno 305 graphics. In addition, this phone is using the Android operating system V 4.2.2 Jelly Bean.

 

For full technical specifications from one HTC handset are as follows:

4.3 “720 x 1280 Super LCD2 capacitive touchscreen Corning Gorilla Glass 3
HTC Sense, HTC Blinkfeed, Boomsound HTC, HTC and HTC Zoe Ultrapixel
Qualcomm Snapdragon Processor 400 Dual Core 1.4 GHz
Adreno 305 GPU
1 GB of RAM
16 GB internal capacity
4-megapixel rear camera and 1.6 megapixel front camera
Micro USB 2.0 connectivity, DLNA, Bluetooth, and Wifi
Already equipped with Android Jelly Bean version (4.2.2)
As seen above, the hardware specs of HTC HTC Mini One to see cuts. However this phone still has good hardware specs and still be able to enjoy the features of HTC BlinkFeed, Zoe HTC, HTC and HTC Sense BoomSound innovative. To use the camera itself is still the 4-megapixel resolution with HTC Ultrapixel technology. From the look of the phone, similar to the HTC One and still made of aluminum but with a plastic periphery.

The phone is perfect for those who want to try and enjoy the features of HTC but with a cheaper price. For in Indonesia itself about the price and when it was officially sold there is still no clear information, the new HTC Mini HTC just introduced officially in Indonesia

WiFi Modem Router Linksys X3500 Officially Released

JAKARTA – Linksys announced the latest WiFi router modem from the line of X-Series, X3500. Comes with Dual-band support that work simultaneously, the device is claimed to be able to deliver speeds up to 450Mbps +300 Mbps internet.

“Dual-band functioned to reduce clashes WiFi signal, the modem can also be connected to a line, ASDL or cable / fiber optic” said Sales Manager Kevin Kurniawan Networking Linksys to Techno Okezone, Wednesday (07/17/2013).

Problem design, Linksys brings a modern look. WiFi modem router is also optimized by setting and managing quite easy. Users simply connect a variety of devices, smartphones, tablets, consoles, and SmartTV simply by pressing the WPS button on both devices would be connected and mobile apps Linksys.

“Technological developments prompted some devices that can connect to the internet. At home, many people want to create their own WiFi network to improve the comfort of surfing, “said Kevin.

“Linksys router can connect a variety of devices to help consumers more easily and provide a better solution to do video streaming,” he continued.

Meanwhile, the X3500 has several key features, namely Dual-band, can be connected to ADSL and cable, dock four Gigabit LAN, USB virtual storage to shared storage media or print documents wirelessly, DLNA support, parental control, and is compatible with IPv6.

“It can also be used as a mini server at home, just plug in an external hard drive on the modem, then all can access the storage media, either to access multimedia content and documents,” he said.

ASUS PQ321Q UltraHD Monitor Review: Living with a 31.5-inch 4K Desktop Display

Many consider me to be a 4K hater. The past few trade shows I’ve attended have been pushing it on consumers to replace their TVs, but I see less value in it. When it comes to a computer display, it is a different game. Unlike a 50” TV, we sit close to our monitors, even if they are 30” in size. We also have no worries about a lack of native content, since everything is rendered on the fly and native. There are no issues with the lack of HDMI 2.0, as DisplayPort 1.2 can drive a 3840×2160 screen at 60 Hz.

When it comes to 4K on the desktop, my main question is: how much difference will I see? ASUS is one of the first with a HiDPI display in the PQ321Q. While not truly 4K, it is a 3840×2160 LCD display that can accept an Ultra High Definition (UHD) signal over HDMI and DisplayPort. It also clocks in at a wallet-stretching $3,500 right now. The question is, are we seeing the future with displays here, or are we seeing a niche product?

What does 4K/UHD/HiDPI bring to the desktop? We’ve seen it for a few years now in smartphones and tablets, making their smaller screens more usable for reading and general work. My initial thought is more desktop space, as that is what it has meant before. With a 32” monitor and a pixel density this high, running it without any DPI scaling leads to a desktop where reading text is a huge pain. Instead I believe most users will opt for DPI scaling so elements are larger and easier to read. Now you have something similar to the Retina screen on the iPhone: No more desktop space compared to a 2560×1440 monitor, but one that is razor sharp and easier to look at.

To get to this pixel density, ASUS has relied upon a panel from Sharp that uses IGZO technology. IGZO (Indium gallium zinc oxide) is a material that replaces amorphous silicon for the active layer of an LCD screen. The main benefit is higher electron mobility that allows for faster reacting, smaller pixels. We have seen non-IGZO panels in smartphones with higher pixel densities, but we don’t have any other current desktop LCDs that offer a higher pixel density than this ASUS display. IGZO also allows for a wide viewing angle.

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.

Integrating C++ with QML

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.