El 11/06/18 a les 11:14, Luca Olivetti via Lazarus ha escrit:
Lazarus 1.8.4, FPC 3.0.4, x86_64-linux-qt5

In a spinedit, if I set maxvalue and minvalue to 0, the spinedit doesn't work with the qt5 widgetset.

I see that in qtswsspin.pp

    if (ACustomFloatSpinEdit.MaxValue > ACustomFloatSpinEdit.MinValue) then
     begin
       ASpinWidget.setMinimum(ACustomFloatSpinEdit.MinValue);
       ASpinWidget.setMaximum(ACustomFloatSpinEdit.MaxValue);
     end
     else
     begin
       ASpinWidget.setMinimum(-MaxDouble);
       ASpinWidget.setMaximum(MaxDouble);
     end;


I changed that to

    if (ACustomFloatSpinEdit.MaxValue > ACustomFloatSpinEdit.MinValue) then
    begin
      ASpinWidget.setMinimum(ACustomFloatSpinEdit.MinValue);
      ASpinWidget.setMaximum(ACustomFloatSpinEdit.MaxValue);
    end
    else
    begin
      if ASpinWidget is TQtFloatSpinBox then
      begin
        ASpinWidget.setMinimum(-MaxDouble);
        ASpinWidget.setMaximum(MaxDouble);
      end else
      begin
        ASpinWidget.setMinimum(-$7fffffffffffffff);
        ASpinWidget.setMaximum($7fffffffffffffff);
      end;
    end;



so at first sight it seems it should work, but the implementation of setMinimum and setMaximum is


procedure TQtSpinBox.setMinimum(const v: Double);
begin
   QSpinBox_setMinimum(QSpinBoxH(Widget), round(v));
end;

procedure TQtSpinBox.setMaximum(const v: Double);
begin
   QSpinBox_setMaximum(QSpinBoxH(Widget), round(v));
end;



and, while round(-MaxDouble) works, round(MaxDouble) silently fails (linux/x64, it gives an FPE exception under win32).

There's no such problem with gtk2 because the underlying widget is floating point based.


Bye


--
Luca Olivetti
Wetron Automation Technology http://www.wetron.es/
Tel. +34 93 5883004 (Ext.3010)  Fax +34 93 5883007
--
_______________________________________________
Lazarus mailing list
Lazarus@lists.lazarus-ide.org
https://lists.lazarus-ide.org/listinfo/lazarus

Reply via email to