如何在QT

时间:2017-04-25 21:43:38

标签: c++ qt

我是QT的新用户。是否可以将一个字符或字符串转换为数组,其中0表示白色字段,1表示黑色字段?例如,当我将字符“a”保存为QString或任何字体表示时,我想得到以下数组:

int array[9][6] = {                //"a" char array
      {0, 0, 0, 0, 0, 0},         //- - - - - -
      {0, 1, 1, 1, 1, 0},         //- * * * * -
      {1, 0, 0, 0, 0, 1},         //* - - - - *
      {0, 0, 0, 0, 0, 1},         //- - - - - *
      {0, 1, 1, 1, 1, 1},         //- * * * * *
      {1, 0, 0, 0, 0, 1},         //* - - - - *
      {1, 0, 0, 0, 1, 1},         //* - - - * *
      {0, 1, 1, 1, 0, 1},         //- * * * - *
      {0, 0, 0, 0, 0, 0},         //- - - - - -
};

QT有没有办法达到这个目标?我希望我尽可能清楚地描述我的问题,有人可以帮我解决这个问题吗?

大小数组必须依赖于所选的字体大小,所以如果我选择30 pt字体,那么数组应该大于10磅字体。

非常感谢你。 最好的问候。

2 个答案:

答案 0 :(得分:2)

您可以在位图图像上绘制文本,这将为您提供包含文本的位图。对于所有意图和目的,这是一个像素阵列。

请注意,您还必须使用“位图字体”,常规字体不会真正发挥作用,因为大多数已经创建以利用抗锯齿,并且不会产生清晰可读的位图图像。

Qt还提供字体指标,可以让您清楚地了解大字或单个字符的大小。

答案 1 :(得分:1)

我在第一次阅读时误解了这个问题......好吧,这就是要求......

enter image description here

#include <QApplication>
#include <QPixmap>
#include <QLabel>
#include <QPainter>
#include <QDebug>
#include <QVector>
#include <QFontMetrics>

int main(int argc, char *argv[])
{
    QApplication a(argc, argv);

    QSize size;
//    QPixmap pixmap(100,100);
    QImage image(20,20, QImage::Format_Mono);// Change the width and height here as needed if your letters get too big
    image.fill(0);
    {
        QPainter painter(&image);
        //// alternative to fill method
        // painter.setBrush(Qt::black);
        // painter.drawRect(0,0,image.width(), image.height());
        painter.setPen(Qt::white);

        QFontMetrics fm(painter.font());
        size.setHeight(fm.height());
        size.setWidth(fm.width('a'));

        painter.drawText(0,fm.height(),"a");
    }
    QLabel label;
    label.setPixmap(QPixmap::fromImage(image).scaled(400,400, Qt::KeepAspectRatio));
    label.show();

    QVector <QVector <int> > array(size.height(), QVector < int> (size.width(), 0));

    for(int r = 0; r < size.height(); r++)
        for(int c = 0; c < size.width(); c++)
            array[r][c] = (image.pixelColor(c,r) == Qt::white ? 1 : 0);

//    qDebug() << size << array;
    foreach(QVector <int> row, array)
        qDebug() << row;

    return a.exec();
}

输出:

QVector(0, 0, 0, 0, 0, 0)
QVector(0, 0, 0, 0, 0, 0)
QVector(0, 0, 0, 0, 0, 0)
QVector(0, 0, 0, 0, 0, 0)
QVector(0, 0, 0, 0, 0, 0)
QVector(0, 0, 0, 0, 0, 0)
QVector(0, 0, 0, 0, 0, 0)
QVector(0, 1, 1, 1, 0, 0)
QVector(0, 0, 0, 0, 1, 0)
QVector(0, 1, 1, 1, 1, 0)
QVector(1, 0, 0, 0, 1, 0)
QVector(1, 0, 0, 0, 1, 0)
QVector(0, 1, 1, 1, 1, 0)