Qt模仿微信扫一扫

实现扫描的动画是一个label加定时器

label = new QLabel(this);
    label->setGeometry((width() - VIEWFINDER_WIDTH)/2,(height() + VIEWFINDER_HEIGHT)/2,VIEWFINDER_WIDTH,GRADUAL_WIDTH);


    QImage mainimg=QImage(2*VIEWFINDER_WIDTH,GRADUAL_WIDTH,QImage::Format_ARGB32);
    QPainter painter(&mainimg);


    painter.setRenderHint(QPainter::Antialiasing, true);
//    QRadialGradient radialGradient(mainimg.width()/2,mainimg.height()/2,100,mainimg.width()/2,mainimg.height()/2);
//    radialGradient.setColorAt(0,QColor(105,  164,  53,TRANSPARENCY));
//    radialGradient.setColorAt(1,QColor(200,  228,  173,TRANSPARENCY));
//    painter.setBrush(radialGradient);
    painter.setPen(QPen(QColor(105,  164,  53),  1));
    painter.setBrush(QBrush(QColor(105,  164,  53)));
    painter.drawEllipse(0,0,label->width(),5);
    QPixmap pix = QPixmap::fromImage(mainimg);
    label->setPixmap(pix);

整个界面是QPaintEvent绘制

Q_UNUSED(event);
    QPainter painter(this);

    painter.setPen(QPen(QColor(127,  194,  65),  6));
    //左上
    painter.drawLine(QPointF((width() - VIEWFINDER_WIDTH)/2,(height() - VIEWFINDER_HEIGHT)/2),
                     QPointF((width() - VIEWFINDER_WIDTH)/2 + 5,(height() - VIEWFINDER_HEIGHT)/2));
    painter.drawLine(QPointF((width() - VIEWFINDER_WIDTH)/2,(height() - VIEWFINDER_HEIGHT)/2),
                     QPointF((width() - VIEWFINDER_WIDTH)/2 ,(height() - VIEWFINDER_HEIGHT)/2 + 5));

    //右上
    painter.drawLine(QPointF((width()+VIEWFINDER_WIDTH)/2,(height() - VIEWFINDER_HEIGHT)/2),
                     QPointF((width()+VIEWFINDER_WIDTH)/2 - 5,(height() - VIEWFINDER_HEIGHT)/2));
    painter.drawLine(QPointF((width()+VIEWFINDER_WIDTH)/2,(height() - VIEWFINDER_HEIGHT)/2),
                     QPointF((width()+VIEWFINDER_WIDTH)/2,(height() - VIEWFINDER_HEIGHT)/2 + 5));

    //左下
    painter.drawLine(QPointF((width() - VIEWFINDER_WIDTH)/2,(height() + VIEWFINDER_HEIGHT)/2),
                     QPointF((width() - VIEWFINDER_WIDTH)/2 + 5,(height() + VIEWFINDER_HEIGHT)/2));
    painter.drawLine(QPointF((width() - VIEWFINDER_WIDTH)/2,(height() + VIEWFINDER_HEIGHT)/2),
                     QPointF((width() - VIEWFINDER_WIDTH)/2 ,(height() + VIEWFINDER_HEIGHT)/2 - 5));

    //右下
    painter.drawLine(QPointF((width()+VIEWFINDER_WIDTH)/2,(height() + VIEWFINDER_HEIGHT)/2),
                     QPointF((width()+VIEWFINDER_WIDTH)/2 - 5,(height() + VIEWFINDER_HEIGHT)/2));
    painter.drawLine(QPointF((width()+VIEWFINDER_WIDTH)/2,(height() + VIEWFINDER_HEIGHT)/2),
                     QPointF((width()+VIEWFINDER_WIDTH)/2,(height() + VIEWFINDER_HEIGHT)/2 - 5));

    //画周边阴影
    painter.setCompositionMode( QPainter::CompositionMode_Darken );
    QColor darkenColor(0, 0, 0, 100);

    painter.fillRect( 5, 5, width(), (height() - VIEWFINDER_HEIGHT)/2 - 5, darkenColor );
    painter.fillRect( 5, (height() - VIEWFINDER_HEIGHT)/2, (width() - VIEWFINDER_WIDTH)/2 - 5,  + VIEWFINDER_HEIGHT, darkenColor );
    painter.fillRect( (width()+VIEWFINDER_WIDTH)/2, (height() - VIEWFINDER_HEIGHT)/2, (width() - VIEWFINDER_WIDTH)/2 ,  + VIEWFINDER_HEIGHT, darkenColor);
    painter.fillRect( 5, (height() + VIEWFINDER_HEIGHT)/2, width() ,  (height() + VIEWFINDER_HEIGHT)/2, darkenColor);

效果图:

完整代码:https://download.csdn.net/download/yu_20501253/10922665

实现这些功能,你需要使用 Qt 框架和一些 Qt 组件。下面是一些可能有用的组件和建议: 1. 登录界面:使用 Qt 的 QWidget 和 QGridLayout 组件创建一个登录窗口。添加 QLineEdit 和 QPushButton 组件用于输入用户名和密码,以及登录按钮。使用 QValidator 来验证输入的用户名和密码。当用户单击登录按钮时,您可以使用 Qt 的网络模块来发送 POST 请求到微信服务器进行身份验证。 2. 好友列表:使用 QtQTreeView 组件创建一个树形视图,显示用户的好友列表。您可以使用 QStandardItemModel 来设置数据和视图。为每个好友添加一个图标和名称,并使用 QMenu 组件添加一些上下文菜单选项,例如发送消息和删除好友。 3. 聊天窗口:使用 QtQTextEdit 和 QListView 组件创建聊天窗口。 QTextEdit 组件用于显示聊天消息,而 QListView 组件用于显示聊天历史记录。您可以使用 QStandardItemModel 来设置数据和视图。为每个聊天消息添加一个时间戳和发送者的图标和名称。 4. 使用信号和槽连接组件:使用 Qt 的信号和槽连接组件之间的事件和操作。例如,当用户单击登录按钮时,将发出一个信号,该信号将触发一个槽函数,该函数将处理身份验证并打开好友列表。当用户选择一个好友时,将发出一个信号,该信号将触发一个槽函数,该函数将打开聊天窗口并显示相应的聊天历史记录。 以上是一些可能有用的建议和组件,但您需要根据您的具体需求和设计进行修改和调整。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值