一步步学Qt,第四天-Qt程序发布问题

在尝试为朋友编写包含资源文件(如图片)的小型软件时,遇到Qt程序发布后无法正确加载资源的问题。在Release模式下,可执行文件无法显示资源。同时,讨论了QString到STL string的转换以及不规则窗体的实现。在将QWidget替换为QDialog后,发现图片加载异常,可能是代码问题,需要进一步研究。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一步步学Qt,第四天-Qt程序发布问题

今天打算给朋友写一个小小的软件,在程序当中加入了一些资源文件,比如图片之类的,可以问题来了.release之后在release目录下面的可执行文件.执行之后确没有加载资源.不解?


有哪位朋友知道的,分享一下!小弟谢过!



下面写一下,在那个程序编写过程中遇到的问题

1. QString到STL string类型的转换

 QString t;
 QByteArray ba = t.toLatin1();
 string str = string(ba.data());

2. 不规则窗体的实现

#ifndef WIDGET_H
#define WIDGET_H

#include <QWidget>

namespace Ui {
    class Widget;
}

class Widget : public QWidget
{
    Q_OBJECT

public:
    explicit Widget(QWidget *parent = 0);
    ~Widget();

    void mouseMoveEvent(QMouseEvent *);
    void paintEvent(QPaintEvent *);
    void mousePressEvent(QMouseEvent *event);
private slots:
    void on_pushButton_clicked();

private:
    Ui::Widget *ui;
    QPoint dragPosition;
};

#endif // WIDGET_H

看看构造函数

Widget::Widget(QWidget *parent) :
    QWidget(parent),
    ui(new Ui::Widget)
{
    ui->setupUi(this);
    QPixmap pix;
    pix.load(":/images/Gmail.png",0,Qt::AvoidDither | Qt::ThresholdAlphaDither | Qt::ThresholdDither);
    resize(pix.size());
    setMask(pix.mask());
}

鼠标事件响应处理

void Widget::mouseMoveEvent(QMouseEvent *event){
    if(event->buttons() & Qt::LeftButton){
        move(event->globalPos()- dragPosition);
        event->accept();
    }
}

void Widget::paintEvent(QPaintEvent *){
    QPainter painter(this);
    painter.drawPixmap(0,0,QPixmap(":/images/Gmail.png"));
}


void Widget::mousePressEvent(QMouseEvent *event){
    if(event->button() == Qt::LeftButton){
        dragPosition = event->globalPos() - frameGeometry().topLeft();
        event->accept();
    }
    if(event->button() == Qt::RightButton){
        close();
    }
}
程序运行效果:


看头文件可知:

Widget继承自QWidget,那么我们把上面的QWidget改成QDialog会如何呢?修改后执行结果有点意外,图片不能正确加载,就是简单的Dialog

或许是的我code有问题,继续研究中.




评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值