使用Qt框架制作一个表白程序

 更新时间:2024年01月29日 10:16:28   作者:0zxm  
这篇文章主要为大家详细介绍了如何使用Qt框架制作一个表白程序,文中的示例代码讲解详细,具有一定的借鉴价值,有需要的小伙伴可以参考一下

刷视频看到大家学了图形化界面编程后的第一件事,一定是写出一个表白小程序用来对自己心爱的人用来表白,而且一定要让他接受,所以我写了一个qt小程序,能够把窗口置于顶层,让她一直感到你的爱意,而且怎么关也关不掉,正好适合对不怎么会使用电脑的人使用

当然,关掉的方法还是有很多的,包括但不限于调出任务管理器kill掉等方法

成品展示

这是点击不接受的窗口,右侧是马里奥的gif动画

若是不接受,会一直置于顶层

这是接受后弹出的窗口,可以拖拽

关键部分讲解

添加动画

使用了qt写好的qmovie类,创建时指定动画资源,设置好播放速度,窗口创建就会开始播放,默认循环播放

    //添加马里奥动画
    QMovie * mario = new QMovie(":/mario.gif");
    ui->marioLabel->setMovie(mario);
    ui->marioLabel->setScaledContents(true); // 将内容缩放以适应控件大小
    //设置播放速度
    mario->setSpeed(150);
    mario->start();

循环逻辑

这里使用connect链接按钮的点击事件,若是接受了,会弹出一个自定义的yes_next窗口,里面是我写好的从多处收集来的情诗和句子,背景我使用了爱心图片填充

如果用户点击了不接受,就会创建一个循环对话框,一直监听信号,直到用户点击yes,在弹出yes_next对话框

// 连接按钮的点击事件
    QObject::connect(ui->pushButton_Yes, &QPushButton::clicked, [=](){
        Yes_Next *y = new Yes_Next;
        y->setVisible(true);
        y->setWindowFlag(Qt::WindowStaysOnTopHint);
        //y->setGeometry(100, 100, 400, 400); // 设置窗口位置和大小
        y->setGeometry(600,150,400,600);
        y->show();
        y->raise();
        this->close();
        //exit(0);
    });
    QObject::connect(ui->pushButton_No, &QPushButton::clicked, [=](){

        // 用户点击了 "No" 按钮,继续循环
        while (true) {
            QDialog loopDialog;
            loopDialog.setWindowTitle("循环对话框");
            loopDialog.setWindowFlag(Qt::WindowStaysOnTopHint);
            loopDialog.setModal(true);
            loopDialog.setFixedSize(350, 100); // 设置固定大小

            QLabel *label = new QLabel(&loopDialog);
            label->setText("你在考虑下,接不接受"); // 确保文本正确设置
            label->show();
            label->setGeometry(120, 10, 150, 35); // 设置位置和大小
            //label->setStyleSheet("border: 1px solid black"); // 添加边框以显示位置
            QPalette palette = label->palette();
            palette.setColor(QPalette::Text, QColor(0, 0, 255)); // 设置文本颜色为蓝色
            label->setPalette(palette);

            QPushButton *btnYesLoop = new QPushButton("Yes", &loopDialog);
            QPushButton *btnNoLoop = new QPushButton("No", &loopDialog);
            btnYesLoop->setGeometry(50, 50, 100, 30);
            btnNoLoop->setGeometry(200, 50, 100, 30);

            // 设置父子关系
            btnYesLoop->setParent(&loopDialog);
            btnNoLoop->setParent(&loopDialog);

            // 连接按钮的点击事件
            QObject::connect(btnYesLoop, &QPushButton::clicked, &loopDialog, &QDialog::accept);
            QObject::connect(btnNoLoop, &QPushButton::clicked, &loopDialog, &QDialog::reject);

            // 显示循环对话框
            if (loopDialog.exec() == QDialog::Accepted) {
                // 用户点击了 "Yes" 按钮,退出循环
                Yes_Next *y = new Yes_Next;
                y->setGeometry(600, 150, 400, 400); // 设置窗口位置和大小
                y->show();
                y->raise();
                this->close();
                //exit(0);
                break;
            }
        }
    });

yes_next窗口

#include "yes_next.h"
#include "ui_yes_next.h"

Yes_Next::Yes_Next(QWidget *parent)
    : QWidget(parent)
    , ui(new Ui::Yes_Next)
{
    ui->setupUi(this);
    this->setWindowTitle("poems");

    /*使用HTML标记:你可以使用HTML标记来在QLabel中显示换行文字。例如,你可以使用<br>标记来表示换行。示例代码如下:
        ui->label->setText("第一行文字<br>第二行文字");
    使用QLabel的setWordWrap方法:你可以使用setWordWrap方法来启用QLabel的自动换行功能。示例代码如下:
        ui->label->setText("这是一段很长的文字,当文字超出label的大小时会自动换行");
        ui->label->setWordWrap(true);
    这两种方法都可以用来在QLabel中显示换行文字。你可以根据你的需求选择其中一种方法*/

    QString poem = "<br>莎士比亚的《十四行诗》:<br>“我能否将你比作夏日?<br>但你比夏日更可爱也更温柔。”<br>"
                   "<br>杰拉尔德的《未与你共度一切》:<br>“我曾遇到过无数生灵,曾看过无数美景,<br>这一切却未与你共度,<br>这都会是我的损失;<br>这些事情我都想与你共度,"
                   "<br>这一切才会是我的收获。”<br><br>波伏娃的《越洋情书》:<br>“唯有你也想见我的时候,我们的见面才有意义。”<br><br>“犹如飞蛾扑向星星,又如黑夜追求黎明。”<br><br>“见你第一眼我就沦陷了。”<br><br>“他是我的南北,"
                   "我的西东,我的工作日,我的礼拜天,我的正午,我的深夜,我的言语,我的歌声。我认为爱可以不朽。”";

    ui->label->setText(poem);
    ui->label->setStyleSheet("background-color: pink; font-style: italic; font-family: 华文楷体;");
    QFont font = ui->label->font(); // 获取label的当前字体
    font.setPointSize(16); // 设置字体大小为16
    ui->label->setFont(font); // 应用新的字体
    ui->label->setWordWrap(true);

    // 设置背景图片
    QString imagePath = "url(:/loveheart.jfif)"; // 替换成你的图片路径
    this->setStyleSheet("background-image: "+ imagePath + "; background-position: center; background-attachment: fixed;");
    /*使用background-size属性来指定背景图片的大小和填充方式。例如,你可以设置为background-size: cover;
     * 来让背景图片覆盖整个窗口,或者设置为background-size: contain;来让背景图片完整显示在窗口内,不进行裁剪。*/
    //background-repeat: no-repeat不重复
}


Yes_Next::~Yes_Next()
{
    delete ui;
}

这个窗口里面有使用到一些html和qss之类的知识,我都在注释中写了,看注释就可以

Qt打包成品

如果不打包的话,这个程序只能在qt框架中使用,到别人的电脑上不一定能用(缺少依赖环境),所以最好把成品打包,再发给别人

release

箭头处切换成release版本在编译运行

找到release的生成文件夹,一般就在项目的同级目录下

找到.exe文件,复制到任意一个空文件夹

右键在终端中打开

输入windeployqt “你的exe程序名字”,就会帮你自动打包需要的资源文件,最后放在此文件夹中,然后你就可以把这个文件夹发给别人开心的玩耍了!

到此这篇关于使用Qt框架制作一个表白程序的文章就介绍到这了,更多相关Qt表白程序内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • QT实战之打开最近图片功能的实现

    QT实战之打开最近图片功能的实现

    这篇文章主要为大家详细介绍了如何利用Qt和QSettings实现打开最近图片功能,文中的示例代码讲解详细,对我们学习QT有一定的帮助,感兴趣的可以了解一下
    2022-06-06
  • C语言常见排序算法之插入排序(直接插入排序,希尔排序)

    C语言常见排序算法之插入排序(直接插入排序,希尔排序)

    这篇文章介绍C语言常见排序算法之插入排序(直接插入排序,希尔排序),主要分享介绍的是插入排序的两种常用算法,直接插入排序和希尔排序,需要的朋友可以参考一下
    2022-07-07
  • 详解C#byte数组怎么传入C

    详解C#byte数组怎么传入C

    在本篇内容里小编给大家整理了关于C#byte数组怎么传入C的相关知识点内容,有兴趣的朋友们学习参考下。
    2019-03-03
  • C++中内存分区及其作用分析

    C++中内存分区及其作用分析

    C++内存分区包括栈区、堆区、全局静态区、常量区,各自负责不同的数据存储和回收,栈区主要用于存放函数局部变量和参数,堆区用于动态分配内存,全局静态区用于存放全局静态变量和静态成员变量,常量区用于存放常量和字符串常量
    2023-04-04
  • C++利用类实现矩阵的数乘,乘法以及点乘

    C++利用类实现矩阵的数乘,乘法以及点乘

    这篇文章主要为大家详细介绍了C++如何利用类实现矩阵的数乘,乘法以及点乘,文中的示例代码讲解详细,对我们学习C++有一定帮助,需要的可以参考一下
    2022-11-11
  • C++中的友元函数与友元类详情

    C++中的友元函数与友元类详情

    这篇文章主要介绍了C++中的友元函数与友元类详情,对类的封装是C++三大特性中的一个重要特性,封装好的数据在类的外部是访问不到的但是一旦出了问题,想要操作被封装的数据怎么办呢?由此友元函数友元类诞生了,下文我们来详细来接一下具体的有缘类吧
    2022-02-02
  • Mingw64编译wxWidgets 3.0.2常见错误分析

    Mingw64编译wxWidgets 3.0.2常见错误分析

    这篇文章主要介绍了Mingw64编译wxWidgets 3.0.2常见错误分析,需要的朋友可以参考下
    2016-11-11
  • C++中sln,vcxproj,vcxproj.filters,lib,dll,exe的含义说明

    C++中sln,vcxproj,vcxproj.filters,lib,dll,exe的含义说明

    这篇文章主要介绍了C++中sln,vcxproj,vcxproj.filters,lib,dll,exe的含义说明,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2024-05-05
  • C++实现LeetCode(23.合并k个有序链表)

    C++实现LeetCode(23.合并k个有序链表)

    这篇文章主要介绍了C++实现LeetCode(23.合并k个有序链表),本篇文章通过简要的案例,讲解了该项技术的了解与使用,以下就是详细内容,需要的朋友可以参考下
    2021-07-07
  • C++实现一键关闭桌面的示例代码

    C++实现一键关闭桌面的示例代码

    这篇文章主要为大家详细介绍了如何利用C++实现一键关闭桌面的功能,文中的示例代码讲解详细,具有一定的学习价值,感兴趣的小伙伴可以了解一下
    2023-07-07

最新评论