QPainter
通过重载绘图事件paintEvent()
绘制图形。该事件会自动触发。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19
| void Widget::paintEvent(QPaintEvent *event) { QPainter painter(this);
QPen pen(QColor(255, 0, 0)); pen.setWidth(2); pen.setStyle(Qt::DotLine); painter.setPen(pen);
QBrush brush(Qt::green); brush.setStyle(Qt::Dense7Pattern); painter.setBrush(brush);
painter.drawLine(QPoint(0, 0), QPoint(100, 100)); painter.drawEllipse(QPoint(100, 100), 50, 50); painter.drawEllipse(QPoint(100, 100), 100, 50); painter.drawRect(QRect(20, 20, 50, 50)); painter.drawText(QRect(10, 200, 150, 50), "好好学习,天天向上"); painter.drawPixmap(0, 0, QPixmap(":/img.png")); }
|
QPainter的一些高级设置:
1 2 3 4 5 6 7 8 9 10 11
| QPainter painter(this); painter.drawEllipse(QPoint(100, 50), 50, 50); painter.setRenderHint(QPainter::Antialiasing); painter.drawEllipse(QPoint(200, 50), 50, 50);
painter.drawRect(QRect(20, 20, 50, 50)); painter.save(); painter.translate(100, 0); painter.drawRect(QRect(20, 20, 50, 50)); painter.restore(); painter.drawRect(QRect(0, 0, 50, 50));
|
手动调用绘图事件:
1 2 3 4 5 6 7 8 9 10 11 12
| connect(ui->pushButton, &QPushButton::clicked, [=]() { posX += 20; if (posX > this->width()) posX = 0; update(); });
-----
void Widget::paintEvent(QPaintEvent *event) { QPainter painter(this); painter.drawRect(QRect(posX, 0, 100, 100)); }
|
绘图设备
绘图设备是指继承于QPainterDevice类的子类。
Qt一共提供了四个这样的类,分别是QPixmap、QBitmap、QImage和 QPicture。
注:QWidget多重继承于QObject类和QPainterDevice类。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32
| QPixmap pix(300, 300);
QPainter painter(&pix);
pix.fill(Qt::white); painter.drawEllipse(QPoint(150, 150), 100, 100);
pix.save("pix.png");
-----
QImage img(300, 300, QImage::Format_RGB32); QPainter painter(&img); img.fill(Qt::white); painter.drawEllipse(QPoint(150, 150), 100, 100); img.save("pix.png");
-----
void Widget::paintEvent(QPaintEvent *event) { QImage img; img.load("C:\\Users\\zqh-wz\\Desktop\\LearningQT\\build-14_QtPainterDevice-Desktop_Qt_5_9_0_MinGW_32bit-Debug\\pix.png");
for (int i = 50; i < 100; i++) for (int j = 50; j < 100; j++) { QRgb value = qRgb(255, 0, 0); img.setPixel(QPoint(i, j), value); }
QPainter painter(this); painter.drawImage(0, 0, img); }
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18
| QPicture pic; QPainter painter;
painter.begin(&pic); painter.setPen(QPen(Qt::cyan)); painter.drawEllipse(QPoint(150, 150), 100, 100); painter.end();
pic.save("pic.zt");
---
void Widget::paintEvent(QPaintEvent *event) { QPainter painter(this); QPicture pic; pic.load("C:\\Users\\zqh-wz\\Desktop\\LearningQT\\build-14_QtPainterDevice-Desktop_Qt_5_9_0_MinGW_32bit-Debug\\pic.zt"); painter.drawPicture(0, 0, pic); }
|
QFile
文件操作。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25
| connect(ui->pushButton, &QPushButton::clicked, [=]() { QString filepath = QFileDialog::getOpenFileName(this, "打开文件", "C:\\Users\\zqh-wz\\Desktop"); ui->lineEdit->setText(filepath);
QTextCodec *codec = QTextCodec::codecForName("gbk");
QFile file(filepath); file.open(QIODevice::ReadOnly); QByteArray array = file.readAll(); ui->textEdit->setText(array); ui->textEdit->setText(codec->toUnicode(array)); file.close(); });
-----
QByteArray array; while (!file.atEnd()) array += file.readLine(); ui->textEdit->setText(array);
-----
file.open(QIODevice::Append); file.write("abc"); file.close();
|
QFileinfo
文件信息读取。
1 2 3 4
| QFileInfo fileinfo(filepath); qDebug() << "size: " << fileinfo.size() << " suffix: " << fileinfo.suffix() << " filename: " << fileinfo.fileName() << " filepath: " << fileinfo.filePath(); qDebug() << "create: " << fileinfo.created().toString("yyyy/MM/dd HH:mm:ss"); qDebug() << "lastmodified: " << fileinfo.lastModified().toString("yyyy-MM-dd HH:mm:ss");
|