如何将QTextEdit内容覆盖到背景Pixmap中?
我正在为我的IDE使用QT 其目的是将QTextEdit文本内容移动到背景Pixmap中,并保持透明度,以便只有文本显示为背景Pixmap顶部的重叠-即,除了文本之外,背景中的任何内容都将显示为穿透,即使在QTextEdit框内。我的应用程序(未显示)是将QTextEdit内容“烧录”到背景pixmap中,以便为照片制作横幅文本等 我的尝试是在主窗口小部件上使用抓取,因为它似乎是最简单的。下面的基本程序说明了我所做的工作: 奇怪的是,它在主窗口的屏幕上显示的正是我想要的。 截图为: 但是foo.png中的实际值是 感谢任何关于这方面或其他方面的建议 谢谢 肖恩如何将QTextEdit内容覆盖到背景Pixmap中?,qt,qtextedit,Qt,Qtextedit,我正在为我的IDE使用QT 其目的是将QTextEdit文本内容移动到背景Pixmap中,并保持透明度,以便只有文本显示为背景Pixmap顶部的重叠-即,除了文本之外,背景中的任何内容都将显示为穿透,即使在QTextEdit框内。我的应用程序(未显示)是将QTextEdit内容“烧录”到背景pixmap中,以便为照片制作横幅文本等 我的尝试是在主窗口小部件上使用抓取,因为它似乎是最简单的。下面的基本程序说明了我所做的工作: 奇怪的是,它在主窗口的屏幕上显示的正是我想要的。 截图为: 但是foo
#包括
#包括“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);
}