• 7328阅读
  • 0回复

控件上画图在窗体上无法显示问题? [复制链接]

上一主题 下一主题
离线unforgiver
 

只看楼主 正序阅读 楼主  发表于: 2008-06-18
— 本帖被 XChinux 执行加亮操作(2008-06-19) —
我自己继承了一个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重新编辑 ]
快速回复
限100 字节
 
上一个 下一个