Вот что лично у меня получилось в итоге:
C++ (Qt)
class myDial : public QDial
{
Q_OBJECT
public:
explicit myDial(QWidget *parent = 0):
QDial(parent)
{ setInvertedControls(true);
setInvertedAppearance(true);
}
private:
QMouseEvent* invertMousePos (QMouseEvent *me)
{ QPoint pt(width()-me->pos().x(),height()-me->pos().y());
QMouseEvent *m=new QMouseEvent(me->type(),pt,me->button(),me->buttons(),me->modifiers());
return m;
}
void paintEvent(QPaintEvent *pe)
{ QStylePainter p(this);
p.rotate(180);
p.translate(-width(),-height());
QStyleOptionSlider option;
initStyleOption(&option);
p.drawComplexControl(QStyle::CC_Dial, option);
}
void mousePressEvent(QMouseEvent *me)
{ QMouseEvent *m=invertMousePos(me);
QDial::mousePressEvent(m);
delete m;
me->ignore();
}
void mouseReleaseEvent(QMouseEvent *me)
{ QMouseEvent *m=invertMousePos(me);
QDial::mouseReleaseEvent(m);
delete m;
me->ignore();
}
void mouseMoveEvent(QMouseEvent *me)
{ QMouseEvent *m=invertMousePos(me);
QDial::mouseMoveEvent(m);
delete m;
me->ignore();
}
};
#include "main.moc"
int main(int argc, char *argv[])
{
QApplication a(argc, argv);
myDial *dial=new myDial();
dial->show();
return a.exec();
}