如何将QTextEdit内容覆盖到背景Pixmap中?

如何将QTextEdit内容覆盖到背景Pixmap中?,qt,qtextedit,Qt,Qtextedit,我正在为我的IDE使用QT 其目的是将QTextEdit文本内容移动到背景Pixmap中,并保持透明度,以便只有文本显示为背景Pixmap顶部的重叠-即,除了文本之外,背景中的任何内容都将显示为穿透,即使在QTextEdit框内。我的应用程序(未显示)是将QTextEdit内容“烧录”到背景pixmap中,以便为照片制作横幅文本等 我的尝试是在主窗口小部件上使用抓取,因为它似乎是最简单的。下面的基本程序说明了我所做的工作: 奇怪的是,它在主窗口的屏幕上显示的正是我想要的。 截图为: 但是foo

我正在为我的IDE使用QT

其目的是将QTextEdit文本内容移动到背景Pixmap中,并保持透明度,以便只有文本显示为背景Pixmap顶部的重叠-即,除了文本之外,背景中的任何内容都将显示为穿透,即使在QTextEdit框内。我的应用程序(未显示)是将QTextEdit内容“烧录”到背景pixmap中,以便为照片制作横幅文本等

我的尝试是在主窗口小部件上使用抓取,因为它似乎是最简单的。下面的基本程序说明了我所做的工作: 奇怪的是,它在主窗口的屏幕上显示的正是我想要的。 截图为:

但是foo.png中的实际值是

感谢任何关于这方面或其他方面的建议

谢谢

肖恩


#包括
#包括“mainwindow.h”
#包括“ui_main window.h”
#包括
QTextEdit*文本;
主窗口::主窗口(QWidget*父窗口):
QMainWindow(父级),
用户界面(新用户界面::主窗口)
{
用户界面->设置用户界面(此);
/*
*设置QTextEdit小部件
*/
text=新的QTextEdit(此);
text->viewport()->setAutoFillBackground(false);
}
MainWindow::~MainWindow()
{
删除用户界面;
}
void主窗口::MousePresseEvent(QMouseEvent*事件)
{
/*
*在鼠标按键上,抓住主窗口的屏幕区域
*并将其保存到.png文件中
*这将尝试在背景上覆盖QTextEdit内容
*基本上是通过截屏
*/
QPixmap pix=this->grab(this->rect());
保存(“C:/Users/temp/foo.png”);
}
void主窗口::paintEvent(QPaintEvent*事件)
{
油漆工(本);
//读入背景图像(可以是任何内容)
QPixmap pix(“C:/Users/temp/photo.jpg”);
/*
*将其移动到主屏幕内的某个位置,以便显示
*作为主窗口视图中的覆盖
*/
文本->移动(QPoint(40,40));
文本->显示();
/*
*绘制主窗口视图的背景
*/
drawPixmap(0,0,this->width(),this->height(),pix);
}

这在经过更多的调查后奏效:originalPixmap=QPixmap::grabWindow(winId());我应该进一步解释:在mousePressEvent中,我用QPixmap取代了抓取函数,它显然抓取了所有屏幕像素,现在可以工作了。这种方法的缺点是,它会抓住屏幕的原样——包括应用程序可能具有的任何阻塞性工具栏等。如果有一种方法可以自然地将QTextEdit内容覆盖到目标pixmap,那么它将更具确定性。QPixmap originalPixmap=QPixmap::grabWindow(winId());保存(“C:/Users/temp/foobar.png”);这在经过更多的调查后起到了作用:originalPixmap=QPixmap::grabWindow(winId());我应该进一步解释:在mousePressEvent中,我用QPixmap取代了抓取函数,它显然抓取了所有屏幕像素,现在可以工作了。这种方法的缺点是,它会抓住屏幕的原样——包括应用程序可能具有的任何阻塞性工具栏等。如果有一种方法可以自然地将QTextEdit内容覆盖到目标pixmap,那么它将更具确定性。QPixmap originalPixmap=QPixmap::grabWindow(winId());保存(“C:/Users/temp/foobar.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);

}