我在我的IDE中使用QT。
目的是将QTextEdit文本内容移动到背景Pixmap中并保持透明度,使得只有文本在背景像素图上显示为重叠 - 即除了文本之外,背景中的任何内容都将通过甚至在QTextEdit框中。我的应用程序(未显示)是将QTextEdit内容“刻录”到背景像素图中以制作照片的横幅文本等。
我的尝试是在MainWindow小部件上使用抓取,因为它看起来最直接。下面的基本程序说明了我的工作如下: 奇怪的是,它在MainWindow的屏幕上显示的是我想要的。 截图是:
但foo.png中的实际内容是
通过这种或其他方式欣赏任何指示。
由于
肖恩
#include <QPainter>
#include "mainwindow.h"
#include "ui_mainwindow.h"
#include <QTextEdit>
QTextEdit *text;
MainWindow::MainWindow(QWidget *parent) :
QMainWindow(parent),
ui(new Ui::MainWindow)
{
ui->setupUi(this);
/*
* Setup a QTextEdit widget
*/
text = new QTextEdit(this);
text->viewport()->setAutoFillBackground(false);
}
MainWindow::~MainWindow()
{
delete ui;
}
void MainWindow::mousePressEvent(QMouseEvent *event)
{
/*
* On a MousePress, grab the MainWindow's Screen area
* and save it to a .png file
* This attempts to overlay the QTextEdit contents on the background
* by doing essentially a screen capture
*/
QPixmap pix = this->grab(this->rect());
pix.save("C:/Users/temp/foo.png");
}
void MainWindow::paintEvent(QPaintEvent *event)
{
QPainter painter(this);
//Read in the Background image (could be anything)
QPixmap pix("C:/Users/temp/photo.jpg");
/*
* Move it into somewhere inside main screen so it shows
* as overlay in MainWindow's view
*/
text->move(QPoint(40, 40));
text->show();
/*
* Paint the background to MainWindow's view
*/
painter.drawPixmap(0,0, this->width(), this->height(), pix);
}