Qt wiki will be updated on October 12th 2023 starting at 11:30 AM (EEST) and the maintenance will last around 2-3 hours. During the maintenance the site will be unavailable.

Squish/Clicking a QLabel Link

From Qt Wiki
< Squish
Revision as of 02:55, 25 November 2017 by AutoSpider (talk | contribs) (AutoSpider moved page Category:Tools::Squish::Clicking-link-in-label to Squish/Clicking a QLabel Link: Title name format)
Jump to navigation Jump to search


Clicking link in label

As is commonly known, you can put in hyper text links in a regular QLabel in Qt, by using simple HTML syntax. Then of course, you want to be able to click this link in your Squish tests. However, Squish does not have a clickLink() function, as it does for e.g. clickButton() or clickTab(), so what happens during recording is that you will get code similar to:

mouseClick(waitForObject(":MyQLabel"), 31, 14, 0, Qt.LeftButton)<code>

That is, hard coded coordinates for where the link is. So if the position of the link would change for whatever reason (different platform, new text added, different font) the test will break.

In Squish 4.1, a new function named installSignalHandler() was added. This lets your test script react to signals emitted from the application code. We can use this function combined with the fact that a signal is emitted from a QLabel whenever a link is hovered. This will let us implement a function for clicking arbitrary links in a label.

_lookingFor = None

_found = False

def handleLinkHovered(obj, link):

global _found
if link == _lookingFor:
_found = True

def findLink(objectName, link):

global _lookingFor
global _found
_lookingFor = link
_found = False

object = waitForObject(objectName)

installSignalHandler(object, "linkHovered(QString)", "handleLinkHovered")

width = object.width

height = object.height
y = 0
while y < height:
x = 0
while x < width:
sendEvent("QMouseEvent", object, QEvent.MouseMove, x, y, Qt.NoButton, 0)
if _found:
return (x,y)
x = 5
y= 10

return (–1,–1)

def clickLink(objectName, link):

(x, y) = findLink(objectName, link)
if x = -1 and y= 1:

mouseClick(objectName, x, y, 0, Qt.LeftButton)

Usage is simply:

clickLink(":MyQLabel", "some-action")