[Qt] Trying to implement Trayicon for Qt

Felipe Monteiro de Carvalho felipemonteiro.carvalho at gmail.com
Tue Sep 4 12:29:51 CEST 2007


Hi,

I am trying to implement TTrayIcon for the Qt widgetset, but some
things just don't work, and I don't know why ...

You can test this by using the lazarus/components/example/wndtray.lpi
test project. The test project doesn't require installing the package
to be used (the package is visual, and rebuilding the ide is time
consuming, so I decided for this way).

Basically you assign a icon and a popup menu to the trayicon, and it
maps this to the widgetset. The qt implementation is on
wsqttrayicon.pas

On this same file, on this function, I get a crash, because
QPixmapIsNull according to the message. But debugging I see that
Pixmap isn't nil. The Icon is loaded from a icon.ico image file.

function TWidgetTrayIcon.CreateIcon: QIconH;
var
  Pixmap: QPixmapH;
begin
  if Self.Icon.Handle <> 0 then
  begin
    QPixmap_fromImage(Pixmap, TQtImage(Self.Icon.Handle).Handle);

    Result := QIcon_create(Pixmap); // Crash here
  end
  else
    Result := QIcon_create();
end;

I also get a crash when setting the popup menu:

  IconHandle := CreateIcon;

  SystemTrayIcon := TQtSystemTrayIcon.create(IconHandle);

  Text := UTF8Decode(Hint);
  SystemTrayIcon.setToolTip(Text);

  if Assigned(PopUpMenu) then
   if TQtMenu(PopUpMenu.Handle).Widget <> nil then
    SystemTrayIcon.setContextMenu(QMenuH(TQtMenu(PopUpMenu.Handle).Widget));
// Crash

The TTrayIcon example works on Windows and on Gtk, so I would say that
the LCL side is correct, and the icons and popup menus are assigned.

Sorry for such a generic report, but I have no idea what is going wrong ....

The SystemTrayIcon class is a simple mapping of the QSystemTrayIcon
methods, so it doesn't influence much here.

thanks,
-- 
Felipe Monteiro de Carvalho



More information about the Qt mailing list