Привет, ЛОР.
Есть одна простая и понятная насквозь программа. А у нее есть фатальный недостаток - она не работает. А у меня совершенно нет идей, почему.
QLabel* diagramm(const QPainter::CompositionMode& mode)
{
QLabel* plbl = new QLabel;
plbl->setFixedSize(100, 100);
QRect rect(plbl->contentsRect());
QPainter painter;
int marks[5] = {15,72,73,72,170};//массив людей с оценками
int peopleCount = 0; //число людей
int *pmark = marks;
for(int i = 0; i< sizeof(marks)/sizeof(int); i++, pmark++) { peopleCount+=*pmark; }
double gradMultiplier = 360/peopleCount; //множитель для преобразования люди-> градусы
for(int i = 0; i< sizeof(marks)/sizeof(int); i++, pmark++) { *pmark = static_cast<int>(*pmark * gradMultiplier); }
QImage resultImage(rect.size(), QImage::Format_ARGB32_Premultiplied);//сюда будем рисовать
double grad = 0; //уже нарисованные градусы
//очищаем изображение
painter.begin(&resultImage);
painter.setCompositionMode(QPainter::CompositionMode_SourceOver);
painter.eraseRect(rect);
painter.drawImage(rect, resultImage);
painter.end();
//рисуем диаграмму
for(int mark = 0; mark< (sizeof(marks)/sizeof(int)); mark++){
painter.begin(&resultImage);
painter.setCompositionMode(QPainter::CompositionMode_Darken);
painter.setPen(QPen(QColor(mark*25, mark*25, mark*25), 1));
painter.setBrush(QBrush(QColor(mark*25, mark*25, mark*25)));
painter.drawPie(rect, grad, marks[mark]*16);
grad+=marks[mark]*16;
painter.setCompositionMode(mode);
painter.drawImage(rect, resultImage);
painter.end();
}
plbl->setPixmap(QPixmap::fromImage(resultImage));
return plbl;
}
int main(int argc, char** argv)
{
QApplication app(argc, argv);
QWidget wgt;
QGridLayout* pgrd = new QGridLayout;
pgrd->addWidget(diagramm(QPainter::CompositionMode_SourceOver), 0, 0);
pgrd->addWidget(new QLabel("<CENTER>Diagramm</CENTER>"), 1, 0);
wgt.setLayout(pgrd);
wgt.show();
return app.exec();
}
Программа должна строить диаграмму по кол-ву людей с определенными оценками. Пока все прописано прямо в коде, потом усложню, не суть. Собсно вроде все прозрачно и понятно, но не хочет рисовать диаграмму правильно, т.е. gradMultiplier как бы не учитывается и рисуется столько градусов, сколько человек(причем если peopleCount >360, вместо диаграммы получаем ничего).
Помогите пожалста, а то я даже придумать не могу ничего.