qt 中怎样在一个布局中添加图片,再在背景图片上添加按钮,要求按钮要在图片上面显示

qt 中怎样在一个布局中添加图片,再在背景图片上添加按钮,要求按钮要在图片上面显示,第1张

可以尝试new一个widget,设置背景为你所要的,然后new一个button设置父对象为widget,最后将此widget添加到layout中的相关位置。
不知道是不是你需要的效果。

在makefile的构造函数里这么写QPixmap pixmap("E:\making\background\sonicojpg");这个路径写自己的QPalette palette=this->palette();palettesetBrush(QPalette::Background,QBrush(pixmap));this->setPalette(palette);使用stylesheet的时候要让其余的控件不继承这个规则详细做法请查看 qss 规则QT creator 如何给主窗口添加背景,并且上面的控件能够覆盖背景?

这个简单,从QMessageBox派生一个类,
然后重载paintEvent函数,在paintEvent里面画张就搞定了。代码:
qpicmsgboxh
///////////////////////////////////
#ifndef QPICMSGBOX_H
#define QPICMSGBOX_H
#include <QMessageBox>
#include <QImage>
class QPicMsgBox : public QMessageBox
{
Q_OBJECT
public:
explicit QPicMsgBox(QWidget parent = 0);
QImage pImage;
protected:
virtual void paintEvent(QPaintEvent paintevent);
signals:
public slots:
};
#endif // QPICMSGBOX_H
///////////////////////////////////////////////
qpicmsgboxcpp
////////////////////////////////////////////
#include "qpicmsgboxh"
#include <QString>
#include <QPainter>
QPicMsgBox::QPicMsgBox(QWidget parent) :
QMessageBox(parent)
{
QString fileName = tr("7jpg");
pImage = new QImage(fileName);
}
void QPicMsgBox::paintEvent(QPaintEvent paintevent)
{
QPainter painter(this);
painterdrawImage(0, 0, pImage->scaled(this->size()));
QMessageBox::paintEvent(paintevent);
}
/////////////////////////////////////
//绘制的背景图就是7jpg缩放的,和消息框一样大。
调用上面QPicMsgBox的时候就添加代码:
#include "qpicmsgboxh"
/////////////////////
void MainWindow::on_actionMsg_triggered() ////调用消息对话框
{
QPicMsgBox pMsgBox = new QPicMsgBox;
pMsgBox->setWindowTitle(QString(tr("hello")));
pMsgBox->setText(QString(tr("hellogfkjdsgkldfsl;jgldsfg;klfdkjhglkdfs")));
pMsgBox->addButton(QMessageBox::Ok);
pMsgBox->addButton(QMessageBox::Close);
pMsgBox->exec(); /////////////exec是模式对话框,show是非模式的
}

如果比较小的话,可以在qrc文件里面添加的路径和别名
<RCC>
<qresource prefix="/image">
<file alias="check_f">image/Check_fpng</file>
</qresource>
</RCC>
我这个,路径是image/Check_fpng,别名是check_f
qt会自动将这些编译成2进制文件,和exe一起
调用时,QLabel l = new QLabel(this);
l->setPixmap(QPixmap(":/image/check_f"));
即可

void ScrollArea::set_image(char filename)
{
QImage ppm = new QImage(filename);
label = new QLabel();
printf("ppm->width()=%d, ppm->height()=%d\n",ppm->width(), ppm->height()); //获取的宽度和高度
label->setPixmap(QPixmap::fromImage(ppm));
this->setWidget(label);
/设置窗口最大高度和宽度为1024768/
this->setMaximumHeight(768);
this->setMaximumWidth(1024);
this->resize(QSize( ppm->width()+5, ppm->height() +5));
return;
}


欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/yw/13382645.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-07-25
下一篇 2023-07-25

发表评论

登录后才能评论

评论列表(0条)

保存