• 9880阅读
  • 16回复

窗口如何加载图片 [复制链接]

上一主题 下一主题
离线2003wanglian
 
只看楼主 倒序阅读 楼主  发表于: 2011-01-04
— 本帖被 XChinux 执行加亮操作(2011-01-22) —
请问各位:
       我想在一个窗口的固定位置加载一些图片,通过点击按钮设置加载具体的那一张,并且能够进行切换。我现在实现了点击按钮可以加载,但是切换不能实现,急!急!急!
离线lphua2006
只看该作者 1楼 发表于: 2011-01-04
你是想切换显示图片图片吗?如果是

1.先预加载好图片,用QPixmap
2.点击按钮,在paint事件中绘制不同的QPixmap
离线2003wanglian
只看该作者 2楼 发表于: 2011-01-05
我是按你说的那样弄的,只能切换一次,我要实现的是每次点击按钮都要显示对应的图片。有办法吗?等待你的回复,谢谢!!!
离线2003wanglian
只看该作者 3楼 发表于: 2011-01-05
我看了qt手册上说,paintEvent事件函数不能接收重复的update()信号,不知道我这个功能能不能实现啊?
离线roywillow

只看该作者 4楼 发表于: 2011-01-05
不妨放上来源码看看吧
专业维修核潜艇,回收二手航母、二手航天飞机,大修核反应堆,拆洗导弹发动机更换机油,无人侦察机手动挡改自动,航天飞机保养换三滤,飞碟外太空年检 ,各型号导弹加装迎宾踏板,高空作业擦洗卫星表面除尘、打蜡及抛光,东风全系列巡航导弹。并提供原子对撞机。量大从优,有正规发票。
离线twocity
只看该作者 5楼 发表于: 2011-01-06
回 2楼(2003wanglian) 的帖子
每次更换pixmap后,update()
离线XChinux

只看该作者 6楼 发表于: 2011-01-06
什么窗口?不能用QLabel吗?必须用paintEvent()吗?
二笔 openSUSE Vim N9 BB10 XChinux@163.com 网易博客 腾讯微博
承接C++/Qt、Qt UI界面、PHP及预算报销系统开发业务
离线2003wanglian
只看该作者 7楼 发表于: 2011-01-10
#include "mainwindow.h"
#include "ui_mainwindow.h"

#include <QPainter>  //sunny 画图
#include <QPoint>
#include <QDebug>
#include <QBrush>
#include <QDebug>


MainWindow::MainWindow(QWidget *parent) :
    QMainWindow(parent),
    ui(new Ui::MainWindow)
{
    ui->setupUi(this);
    resize(900,680);
    serial_init();

}

void MainWindow::serial_init()
{
    time1= new QTimer(this);
    time1->start(100);

   //serial1 = new Win_QextSerialPort("com1",QextSerialBase::EventDriven); //create com1 and set
    serial1 = new Win_QextSerialPort("com1",QextSerialBase::Polling);
    serial1->open(QIODevice::ReadWrite);
    serial1->setBaudRate(BAUD115200);
    serial1->setDataBits(DATA_8);
    serial1->setFlowControl(FLOW_OFF);
    serial1->setParity(PAR_NONE);
    serial1->setStopBits(STOP_1);
    serial1->setTimeout(10);
   // connect(serial1,SIGNAL(readyRead()),this,SLOT(readserial1()));
    connect(time1,SIGNAL(timeout()),this,SLOT(readserial1()));

}
MainWindow::~MainWindow()
{
    delete ui;
    delete serial1;

}

void MainWindow::changeEvent(QEvent *e)
{
    QMainWindow::changeEvent(e);
    switch (e->type()) {
    case QEvent::LanguageChange:
        ui->retranslateUi(this);
        break;
    default:
        break;
    }
}




void MainWindow::paintEvent(QPaintEvent *)    //sunny   加载靶型图
{

    QPainter painter(this);
    pix.load("GPU.bmp");
    painter.drawPixmap(340,50,520,503,pix);



  
}


void MainWindow::mousePressEvent(QMouseEvent *event)
{
   qDebug() << event->pos();
}

void MainWindow::readserial1()
{
    qDebug() << "read:" <<serial1->bytesAvailable()<<"bytes";
   // QByteArray temp =serial1->readAll();          //读取串口缓冲区的所有数据给临时变量temp
   // ui->textBrowser->insertPlainText(temp);       //将串口的数据显示在窗口的文本浏览器中

  

/*添加判断代码  在界面的相应位置显示相关信息   */
}

void MainWindow::on_pushButton_mode_clicked()
{
      mod.show();
}



void MainWindow::on_pushButton_distance_clicked()
{
    dis.show();
}

void MainWindow::on_pushButton_recond_clicked()
{

  rec.show();
    //display  recond infor
}

void MainWindow::on_pushButton_res_clicked()
{



}

void MainWindow::on_pushButton_save_clicked()
{

}

void MainWindow::on_pushButton_cancel_clicked()
{
    close();
}




void MainWindow::on_pushButton_banshen_clicked()
{

    pix.load("bs500dy.bmp");
    update();
}
void MainWindow::on_pushButton_xiong_clicked()
{

    pix.load("xh500dy.bmp");
    update();
}
void MainWindow::on_pushButton_ppc_clicked()
{

    pix.load("PB-27dy.bmp");
    update();
}

离线2003wanglian
只看该作者 8楼 发表于: 2011-01-10
这是我的代码,只能显示一次,然后点击按钮之后就不能再实现图片切换了。
离线梅克斯
只看该作者 9楼 发表于: 2011-01-11
用repaint()刷新 试下
离线2003wanglian
只看该作者 10楼 发表于: 2011-01-13
不行,我试过了。
离线梅克斯
只看该作者 11楼 发表于: 2011-01-13
哥,你的paintEvent里面一直加载同一张图....这样貌似图片变不了吧.....一直都是你在paintEvent里加载的图吧
离线XChinux

只看该作者 12楼 发表于: 2011-01-16
为什么不用QGraphcsView吧,或者QLabel?
二笔 openSUSE Vim N9 BB10 XChinux@163.com 网易博客 腾讯微博
承接C++/Qt、Qt UI界面、PHP及预算报销系统开发业务
离线2003wanglian
只看该作者 13楼 发表于: 2011-01-17
我想实现随意点击ppc按钮,胸环靶按钮,半身靶按钮这三个按钮实现靶型图切换,源码如下:只能切换一次,之后点击任何按钮,图片都不在变化,请高手指教!不胜感激!!!
!!
#include "mainwindow.h"
#include "ui_mainwindow.h"
#include <QPainter>  //sunny 画图
#include <QPoint>
#include <QDebug>
#include <QBrush>
#include <QDebug>

MainWindow::MainWindow(QWidget *parent) :
    QMainWindow(parent),
    ui(new Ui::MainWindow)
{
    ui->setupUi(this);
    resize(900,680);
    serial_init();
}
void MainWindow::serial_init()
{
    time1= new QTimer(this);
    time1->start(100);

   //serial1 = new Win_QextSerialPort("com1",QextSerialBase::EventDriven); //create com1 and set
    serial1 = new Win_QextSerialPort("com1",QextSerialBase::Polling);
    serial1->open(QIODevice::ReadWrite);
    serial1->setBaudRate(BAUD115200);
    serial1->setDataBits(DATA_8);
    serial1->setFlowControl(FLOW_OFF);
    serial1->setParity(PAR_NONE);
    serial1->setStopBits(STOP_1);
    serial1->setTimeout(100);
   // connect(serial1,SIGNAL(readyRead()),this,SLOT(readserial1()));
    connect(time1,SIGNAL(timeout()),this,SLOT(readserial1()));
}
MainWindow::~MainWindow()
{
    delete ui;
    delete serial1;
}
void MainWindow::changeEvent(QEvent *e)
{
    QMainWindow::changeEvent(e);
    switch (e->type()) {
    case QEvent::LanguageChange:
        ui->retranslateUi(this);
        break;
    default:
        break;
    }
}


void MainWindow::paintEvent(QPaintEvent *)    //sunny   加载靶型图
{
    QPainter painter(this);
    pix.load("GPU.bmp");
    painter.drawPixmap(340,50,520,503,pix);

  /*
    QPainter painter1(&pix);
    painter1.drawEllipse(10,10,50,50);
    painter1.drawEllipse(180,200,5,5);
    painter.drawPixmap(310,50,503,503,pix);

     QPainter p(this);
     QBrush brush;
     brush.setColor(Qt::red);
     p.setBrush(brush);
     p.drawEllipse(450,300,5,5);
*/
}

void MainWindow::mousePressEvent(QMouseEvent *event)
{
   qDebug() << event->pos();
}
void MainWindow::readserial1()
{
    //qDebug() << "read:" <<serial1->bytesAvailable()<<"bytes";
    QByteArray temp =serial1->read(12);    //读取串口缓冲区的所有数据给临时变量temp
    int num=temp.size();
    qDebug() << "size:" << num ;
    ui->lineEdit_danwei->insert(temp.toHex());
    qDebug()<<temp.data()[0];
    qDebug()<<temp.data()[0]<<temp.toHex().data()[15];
    if(temp.data()[0]==0xa1&&temp.data()[1]==0xc9)
    {
        if(temp.data()[3]==0x01) //name
        {
            ui->lineEdit_name->insert(&temp.toHex().data()[5]);
            ui->lineEdit_name->insert(&temp.toHex().data()[6]);
            ui->lineEdit_name->insert(&temp.toHex().data()[7]);
            ui->lineEdit_name->insert(&temp.toHex().data()[8]);
        }
        if(temp.data()[3]==0x02)//sex
        {
            ui->lineEdit_name->insert(&temp.toHex().data()[5]);
            ui->lineEdit_name->insert(&temp.toHex().data()[6]);
            ui->lineEdit_name->insert(&temp.toHex().data()[7]);
            ui->lineEdit_name->insert(&temp.toHex().data()[8]);
        }
        if(temp.data()[3]==0x03)    //age
        {

            ui->lineEdit_name->insert(&temp.toHex().data()[5]);
            ui->lineEdit_name->insert(&temp.toHex().data()[6]);
            ui->lineEdit_name->insert(&temp.toHex().data()[7]);
            ui->lineEdit_name->insert(&temp.toHex().data()[8]);
        }
        if(temp.data()[3]==0x04)//num_jing
        {
            ui->lineEdit_name->insert(&temp.toHex().data()[5]);
            ui->lineEdit_name->insert(&temp.toHex().data()[6]);
            ui->lineEdit_name->insert(&temp.toHex().data()[7]);
            ui->lineEdit_name->insert(&temp.toHex().data()[8]);
        }
        if(temp.data()[3]==0x05) //danwei
        {
            ui->lineEdit_name->insert(&temp.toHex().data()[5]);
            ui->lineEdit_name->insert(&temp.toHex().data()[6]);
            ui->lineEdit_name->insert(&temp.toHex().data()[7]);
            ui->lineEdit_name->insert(&temp.toHex().data()[8]);
        }
    }
    else
        if(temp.data()[0]==0x51&&temp.toHex().data()[1]==0x39)
        {
        }

/*  添加判断代码  在界面的相应位置显示相关信息   */
}
void MainWindow::on_pushButton_mode_clicked()
{
      mod.show();
}

void MainWindow::on_pushButton_distance_clicked()
{
    dis.show();
}
void MainWindow::on_pushButton_recond_clicked()
{
  rec.show();
    //display  recond infor
}
void MainWindow::on_pushButton_res_clicked()
{

}
void MainWindow::on_pushButton_save_clicked()
{
    serial1->write(ui->lineEdit->text().toAscii());
}
void MainWindow::on_pushButton_cancel_clicked()
{
    close();
}


void MainWindow::on_pushButton_banshen_clicked()
{
    pix.load("bs500dy.bmp");
    update();
}
void MainWindow::on_pushButton_xiong_clicked()
{
    pix.load("xh500dy.bmp");
    update();
}
void MainWindow::on_pushButton_ppc_clicked()
{
    pix.load("PB-27dy.bmp");
    update();
}



[ 此帖被2003wanglian在2011-01-17 16:58重新编辑 ]
离线2003wanglian
只看该作者 14楼 发表于: 2011-01-22
已解决。谢谢大家
离线btptboy

只看该作者 15楼 发表于: 2011-03-08
点击的事件发出信号
Qlabel label=new Qlabel;
label.setPIxmap("picture");
label接受信号并重新setPixmap
试试
我思故我在
离线pengdekai

只看该作者 16楼 发表于: 2011-03-30
大哥~~~咋解决的也介绍一下啊~~~~
快速回复
限100 字节
 
上一个 下一个