Feeds

Cross platform development for Windows and Mac OS X

Killing two birds with one stone

Internet Security Threat Report 2014

Slotting It All Together

Having delved around under the hood, how do things look from the perspective of an application developer? Well firstly, the plumbing mentioned above is pretty much hidden from the developer. If you use Qt’s qmake build utility, moc is invoked behind the scenes, and automatically takes care of handling the moc output. This gets linked into the executable or #include’d with the class implementation file (depending on whether the original class declaration was in a header or .cpp file respectively).

To raise a signal, you just use the emit keyword, like this:

emit mySignal();

The pre-processor converts this into the appropriate call to MyClass::qt_metacall. Signals and slots can take one or more arguments, just like ‘regular’ C++ methods. However, a signal can only be connected to a slot with a compatible signature, thus ensuring a type-safe connection. E.g.:

myButton = new QPushButton(this);
connect (myButton, SIGNAL(clicked()), this, SLOT(buttonClicked()));

This creates a new push button and connects the clicked signal of the button (first two parameters) to the buttonClicked slot of the current class (second two parameters). Interestingly, a signal that provides – for example – three arguments can also be connected to a slot that expects only two, one or zero. As long as the arguments expected by the slot are type compatible with what’s provided by the signal, the connection can be made; extra arguments are simply ignored. As with the .NET multicast delegates, a single slot can be connected to multiple signals and you can likewise connect a single signal to multiple slots.

Figure 2: screenshot Qt Designer running.

Qt comes with a visual design tool called…ummm…Designer. This can be used to lay out a Qt form complete with your choice of user interface widgets. As you’d expect from a cross-platform programming tool, life isn’t quite as simple as with (say) Delphi or .NET because you need to use additional layout components (vertical layout, horizontal layout and grid layout) to put together your form in a way that will look good regardless of platform and also cope with changes in form size. This will hold no surprises for Java developers.

Once done, Designer can connect up the various widgets with the appropriate signals and slots. Figure 2 shows part of Designer running on my iMac. Notice the way in which the clicked signals emitted by the two pushbuttons (OK and Cancel) on the right are automatically connected to the dialog window’s accept and reject slots (Cunningly marked with electrical ‘Earth’ symbols to show the slot is on the form). Hitting Return in the ‘UserName’ edit box emits a returnPressed signal which is linked to the OK button’s click slot.

The lower window shows the Signal/Slot editor. (When you’re not in Signal/Slot edit mode, you don’t have the connections overlaying the design-time form). As you can see, this is laid out in (Sender-Signal)(Receiver-Slot) order, just like the QObject::connect call’s arguments.

Security for virtualized datacentres

More from The Register

next story
Microsoft to bake Skype into IE, without plugins
Redmond thinks the Object Real-Time Communications API for WebRTC is ready to roll
Microsoft promises Windows 10 will mean two-factor auth for all
Sneak peek at security features Redmond's baking into new OS
Mozilla: Spidermonkey ATE Apple's JavaScriptCore, THRASHED Google V8
Moz man claims the win on rivals' own benchmarks
FTDI yanks chip-bricking driver from Windows Update, vows to fight on
Next driver to battle fake chips with 'non-invasive' methods
PEAK APPLE: iOS 8 is least popular Cupertino mobile OS in all of HUMAN HISTORY
'Nerd release' finally staggers past 50 per cent adoption
DEATH by PowerPoint: Microsoft warns of 0-day attack hidden in slides
Might put out patch in update, might chuck it out sooner
Ubuntu 14.10 tries pulling a Steve Ballmer on cloudy offerings
Oi, Windows, centOS and openSUSE – behave, we're all friends here
Was ist das? Eine neue Suse Linux Enterprise? Ausgezeichnet!
Version 12 first major-number Suse release since 2009
prev story

Whitepapers

Why cloud backup?
Combining the latest advancements in disk-based backup with secure, integrated, cloud technologies offer organizations fast and assured recovery of their critical enterprise data.
A strategic approach to identity relationship management
ForgeRock commissioned Forrester to evaluate companies’ IAM practices and requirements when it comes to customer-facing scenarios versus employee-facing ones.
Reg Reader Research: SaaS based Email and Office Productivity Tools
Read this Reg reader report which provides advice and guidance for SMBs towards the use of SaaS based email and Office productivity tools.
Storage capacity and performance optimization at Mizuno USA
Mizuno USA turn to Tegile storage technology to solve both their SAN and backup issues.
The hidden costs of self-signed SSL certificates
Exploring the true TCO for self-signed SSL certificates, including a side-by-side comparison of a self-signed architecture versus working with a third-party SSL vendor.