how to run this qt script? (newbie question)

Posted by GB_J on Stack Overflow See other posts from Stack Overflow or by GB_J
Published on 2010-03-30T16:39:45Z Indexed on 2010/03/30 16:43 UTC
Read the original article Hit count: 370

Filed under:
|
|
|
|

I have a qt script(barchart.qs) that creates a graph for me. I don't know how i can incorporate(ie show the graph) in my qt mainwindow. Can some one please help me look at the code and what its outputs are? I tried engine.evaluate, but i do not know what is the QScriptValue i'm getting in return. Thanks sooo much.

This is the script:

BarChart.prototype = new QWidget; BarChart.prototype.suffix = "";

function BarChart(parent) {

QWidget.call(this, parent);

}

// find the maximum value and widest (pixel-wise) label and suffix

BarChart.prototype.showEvent = function(event) { var fm = new QFontMetrics(this); this.margin = 20; this.titleHeight = fm.height(); this.barHeight = 1.5 * fm.height(); this.barSpacing = 0.6 * fm.height(); this.maxValue = this.suffixWidth = this.labelWidth = 0; var count = 0;

for (d in this.data) {
    this.labelWidth = Math.max(this.labelWidth, fm.width(d));
    this.maxValue = Math.max(this.maxValue, this.data[d]);
    this.suffixWidth = Math.max(this.suffixWidth, fm.width(String(this.data[d]) + " " + this.suffix));
    count++;
}

this.startHue = 15;
this.hueDelta = 360 / count;
this.size = new QSize(640, this.titleHeight + 2 * this.margin + (this.barHeight + this.barSpacing) * count);

}

BarChart.prototype.paintEvent = function(event) {

var p = new QPainter;
p.begin(this);



// background and title
p.fillRect(this.rect, new QBrush(new QColor(255, 255, 255)));
p.drawText(0, 0, this.width, this.margin + this.titleHeight, Qt.AlignCenter, this.windowTitle, 0);


var ofs = this.labelWidth + this.margin;
var ww = this.width - this.suffixWidth - ofs - 2 * this.margin;
var hue = this.startHue;
var y = 0;
p.translate(this.margin, this.titleHeight + 1.5 * this.margin);

for (d in this.data) {

    // label on the left side
    p.setPen(new QColor(Qt.black));
    p.drawText(0, y, this.labelWidth, this.barHeight, Qt.AlignVCenter + Qt.AlignRight, d, 0);

    // the colored bar
    var gradient = new QLinearGradient(new QPoint(ofs, y), new QPoint(ofs, y + this.barHeight));
    gradient.setColorAt(0, QColor.fromHsv(hue, 255, 240));
    gradient.setColorAt(1, QColor.fromHsv(hue, 255, 92));
    p.setBrush(new QBrush(gradient));
    p.setPen(new QColor(96, 96, 96));
    var bw = this.data[d] * ww / this.maxValue;
    p.drawRect(ofs, y, bw,
    this.barHeight);

    // extra text at the end of the bar
    var text = new String(this.data[d] + " " + this.suffix);
    p.setPen(new QColor(Qt.black));
    p.drawText(ofs + bw + this.margin/2, y, this.suffixWidth, this.barHeight, Qt.AlignVCenter + Qt.AlignLeft, text, 0);

    // for the next bar
    y += (this.barHeight + this.barSpacing);
    hue += this.hueDelta;
    if (hue >= 360)

        hue -= 360;
}
p.end();

}

BarChart.prototype.wheelEvent = function(event) { this.startHue += event.delta() / 8 / 5; if (this.startHue >= 360) this.startHue -= 360;

if (this.startHue < 0)
    this.startHue += 360;
this.update();
event.ignore();

}

BarChart.prototype.mousePressEvent = function(event) { var fname = QFileDialog.getSaveFileName(this, "Save", ".", "*.png", 0, 0);

if (fname.length > 0) {
    var img = new QImage(this.size, QImage.Format_ARGB32_Premultiplied);
    this.render(img);
    img.save(new QFile(fname));
}

}

var chart = new BarChart; chart.windowTitle = "Monthly"; chart.suffix = "reports";

chart.data = { "September" : 45, "October" : 60, "November" : 56, "December" : 0 };

chart.show(); QCoreApplication.exec();

© Stack Overflow or respective owner

Related posts about qt

Related posts about scripting