我自己继承了一个QFrame 的类 QMyFrame 在类中加入paintEvent(QPaintEvent *event); 并实现
把这个QMyFrame 作为控件 加入窗体TWS中 可是无法
显示我画的图像
在TWS 加入paintEvent(QPaintEvent *event); 并实现 就能显示 。
有什么办法能够解决这个问题么? 这样我在加入自定义控件的时候 就可以直接把图像显示出来了。实际上能够显示 有图片 设置断点调试时 得到的坐标 也是相对于窗体的坐标啊 不知道为什么显示成这个样子了
运行时无法显示:
最大化后能显示了:
代码如下:
.h
class QMyFrame : public QFrame
{
Q_OBJECT
public:
QMyFrame(QWidget * parent);
public:
~QMyFrame();
private:
//鼠标事件
void mousePressEvent(QMouseEvent *);
void paintEvent(QPaintEvent *event);
signals:
void clicked();
private slots:
bool ChangeColor();
};
----------------------------------------------------------------------
.cpp
#include "qmyframe.h"
QMyFrame::QMyFrame(QWidget *parent = 0):QFrame(parent)
{
QObject::connect( this, SIGNAL( clicked() ), this, SLOT( ChangeColor()) ); //信号连接
}
QMyFrame::~QMyFrame()
{
}
//鼠标事件
void QMyFrame::mousePressEvent(QMouseEvent *e)
{
emit clicked();
//emit expandItem(QTreeWidgetItem *);
}
bool QMyFrame::ChangeColor()
{
setBackgroundColor(Qt::red);
setAutoFillBackground(true);
return true;
}
void QMyFrame::paintEvent(QPaintEvent *event)
{
QPainter painter(this);
QImage image("1.bmp");
QImage image1("tt.bmp");
int mFx = x(); //在窗体TWS中调用这个函数是写成ui.frame->x()
int mFy = y()+80;
int mWidth= width();
int mHeight = height();//得到控件的坐标和大小
int x=mFx+mWidth/7;
int y=mFy+mHeight/7;
int w=mWidth/7;
int h=mHeight/7*4;//算出画图的坐标和大小
QBrush brush;
QPen pen;
QRect mRect;
mRect.setRect(x,y,w,h);
pen.setWidth(3);
pen.setColor(Qt::black);
painter.setPen(pen);//)QColor(46,80,141,255));
painter.drawRect(mRect); //框体大小
int DzX=x-h/10;
int DzY=y+h;
int DzWidth=w+h/10*2;
int DzHeight=h/10; //得出底座的坐标和大小
mRect.setRect(DzX,DzY,DzWidth,DzHeight);//底座大小
painter.drawRect(mRect);
pen.setWidth(2);
painter.drawLine(x,y+h-h/10,x-h/10,y+h);//
painter.drawLine(x+w,y+h-h/10,x+w+h/10,y+h);
mRect.setRect(x+1,y+1+h/10,w-1,h-1-h/10);
brush.setStyle(Qt::Dense4Pattern);
brush.setColor(Qt::red);
painter.fillRect(mRect,brush);//QColor(46,80,141,255));
painter.drawImage(x-25,y+h-10,image);
painter.drawImage(x-25,y+h/2-10,image);
painter.drawImage(x-25,y-10,image);
painter.drawImage(x+w+5,y,image1);
painter.drawText(x+w+30,y,40,20,40,"100%",20);
}----------------------------------------------------------------
能够显示的是在TWS 加入paintEvent(QPaintEvent *event);
加入 上面的代码
[ 此贴被unforgiver在2008-06-18 16:19重新编辑 ]