Absturz in der paint routine
Verfasst: 20. August 2012 10:28
Hi,
ich habe eine paint routine für ein eigenes Widget die mir ständig mit "Invalid parameter passed to C runtime function." abstürzt. Die routine sieht so aus:
wobei convert so definiert ist:
sobald ich das if und die for-schleife auskommentiere, funktioniert es. Woran kann das liegen?
ich habe eine paint routine für ein eigenes Widget die mir ständig mit "Invalid parameter passed to C runtime function." abstürzt. Die routine sieht so aus:
Code: Alles auswählen
void CuteHexEditorWidget::PaintOffsets(QPainter &painter, bool eightByteOffsets, boost::uint64_t startOffset)
{
auto height = viewport()->height();
auto font = painter.fontMetrics();
int width = 4*font.averageCharWidth();
if (eightByteOffsets)
{
width += 4*font.averageCharWidth();
}
width += 2*OffsetStartInPixel();
painter.fillRect(0,0,width,height,GetOffsetBackgroundGolor());
unsigned int linesToPaint = LinesToPaint(height,LineHeight(),LinePitch());
for (unsigned int i=startOffset; i<startOffset+linesToPaint; ++i)
{
QPoint lineStart(OffsetStartInPixel(), LineHeight()+i*(LineHeight()+LinePitch()));
QString line = "Test";
if (eightByteOffsets)
{
for (auto k=15; k>=8; ++k)
{
line.append(convert(i>>k*4));
}
}
for (auto k=7; k>=0; ++k)
{
line.append(convert(i>>k*4));
}
painter.drawText(lineStart, line);
}
}
Code: Alles auswählen
char CuteHexEditorWidget::convert(boost::uint32_t value)
{
value = value & 0x0f;
switch (value)
{
case 0: return '0';
case 1: return '1';
case 2: return '2';
case 3: return '3';
case 4: return '4';
case 5: return '5';
case 6: return '6';
case 7: return '7';
case 8: return '8';
case 9: return '9';
case 10: return 'a';
case 11: return 'b';
case 12: return 'c';
case 13: return 'd';
case 14: return 'e';
case 15: return 'f';
}
return 'x';
}