草庐IT

chatgpt基于Qt实现的To-Do List小项目(内附源码),码农将何去何从....

薇风吹醒了梦 2023-08-04 原文

笔者前言:

OpenAI前一段发布聊天机器人模型ChatGPT,迅速出圈全网。chatgpt的出现,让LLMs走进了普通人的视野。同时,也让传统的AI助手变成了原始人。chatgpt向我们展示了LLM目前的天花板。而且这个天花板还相当高。

在突发奇想下,我决定用chatgpt写一个小项目,并且让他写一篇关于该项目的文章。

该项目以及博文全部是chatgpt写的,步骤详细,简单易懂

界面展示

好的,下面是一篇介绍使用 Qt 框架创建 To-Do List 应用程序的 CSDN 博客文章:

文章标题:使用 Qt 框架创建 To-Do List 应用程序

介绍:

To-Do List 是一种非常常见的任务管理工具,可以帮助用户记录和追踪待办事项。在本篇博客中,我们将介绍如何使用 Qt 框架创建一个简单的 To-Do List 应用程序,该程序可以让用户添加、编辑和删除任务,并且可以将任务状态标记为已完成或未完成。

步骤:

1.创建 Qt 应用程序

首先,我们需要使用 Qt Creator 创建一个新的 Qt 应用程序。打开 Qt Creator,选择 File -> New File or Project,然后选择 Qt Widgets Application,输入应用程序的名称和位置,最后单击“Next”。

在下一个页面上,您可以选择预设的框架和配置,或者自定义您的应用程序。在这个示例中,我们将使用默认配置。单击“Next”以继续。

在最后一个页面上,您可以选择使用 Git 版本控制器、创建一个类、在构建应用程序时运行自定义命令等。在这个示例中,我们将使用默认设置。单击“Finish”以创建新的 Qt 应用程序。

2.创建 UI 界面

在 Qt Creator 中,我们可以使用可视化设计工具创建应用程序的 UI 界面。打开“Design”视图,并向应用程序的主窗口中添加一些控件,例如一个文本框、一个按钮和一个列表。

将文本框和按钮分别命名为“m_taskLineEdit”和“m_addTaskButton”,将列表命名为“m_taskListWidget”。可以使用“Object Inspector”视图或直接在代码中定义这些控件。

在“MainWindow.h”头文件中定义这些控件:

#include <QMainWindow>
#include <QListWidget>
#include <QLineEdit>
#include <QPushButton>

class MainWindow : public QMainWindow
{
    Q_OBJECT

public:
    MainWindow(QWidget *parent = nullptr);
    ~MainWindow();

private slots:
    void addTask();
    void removeTask();
    void markTaskAsCompleted();
    void loadTasks();
    void saveTasks();

private:
    void createUI();
    void setupConnections();

    QListWidget *m_taskListWidget;
    QLineEdit *m_taskLineEdit;
    QPushButton *m_addTaskButton;
    QPushButton *m_removeTaskButton;
    QPushButton *m_markAsCompletedButton;
};

在“MainWindow.cpp”文件中,我们可以使用“setupUI()”函数创建 UI 界面并将其添加到主窗口中。

MainWindow::MainWindow(QWidget *parent)
    : QMainWindow(parent)
{
    createUI();
    setupConnections();
    loadTasks();
}

void MainWindow::createUI()
{
    // Create the task list widget
    m_taskListWidget = new QListWidget(this);
    setCentralWidget(m_taskListWidget);

    // Create the task input field and the add button
    m_taskLineEdit = new QLineEdit(this);
    m_addTaskButton = new QPushButton(tr("Add Task"), this);

    // Create the remove button and themark as completed button
    m_removeTaskButton = new QPushButton(tr("Remove Task"), this);
    m_markAsCompletedButton = new QPushButton(tr("Mark as Completed"), this);
    // Create a horizontal layout for the task input field and the add button
    QHBoxLayout *inputLayout = new QHBoxLayout;
    inputLayout->addWidget(m_taskLineEdit);
    inputLayout->addWidget(m_addTaskButton);

    // Create a horizontal layout for the remove button and the mark as completed button
    QHBoxLayout *buttonLayout = new QHBoxLayout;
    buttonLayout->addWidget(m_removeTaskButton);
        buttonLayout->addWidget(m_markAsCompletedButton);

    // Create a vertical layout for the input layout, the task list widget and the         button layout
    QVBoxLayout *mainLayout = new QVBoxLayout;
    mainLayout->addLayout(inputLayout);
    mainLayout->addWidget(m_taskListWidget);
    mainLayout->addLayout(buttonLayout);

    // Set the main layout of the main window
    QWidget *centralWidget = new QWidget(this);
    centralWidget->setLayout(mainLayout);
    setCentralWidget(centralWidget);
}


3. 添加任务

当用户在文本框中输入任务并单击“Add Task”按钮时,我们需要将该任务添加到任务列表中。在“MainWindow.cpp”文件中,我们可以使用“addTask()”函数来实现此功能。`

void MainWindow::addTask()
{
    // Get the task from the text input field
    QString task = m_taskLineEdit->text().trimmed();

    // If the task is not empty, add it to the list
    if (!task.isEmpty()) {
        QListWidgetItem *item = new QListWidgetItem(task, m_taskListWidget);
        item->setFlags(item->flags() | Qt::ItemIsEditable);
        m_taskListWidget->addItem(item);
        m_taskLineEdit->clear();
    }
}

在此函数中,我们首先从文本框中获取任务字符串。如果该字符串不为空,则创建一个 QListWidgetItem 对象,并将其添加到任务列表中。我们还设置了该对象的标志以允许用户在列表中编辑任务。最后,我们清空了文本框。

我们需要将“addTask()”函数与“m_addTaskButton”按钮的“clicked()”信号连接起来,以便在用户单击该按钮时调用该函数。在“setupConnections()”函数中添加以下代码:

connect(m_addTaskButton, &QPushButton::clicked, this, &MainWindow::addTask);

4.删除任务

当用户选择一个任务并单击“Remove Task”按钮时,我们需要将该任务从任务列表中删除。在“MainWindow.cpp”文件中,我们可以使用“removeTask()”函数来实现此功能。

void MainWindow::removeTask()
{
    // Get the selected task and remove it from the list
    QList<QListWidgetItem *> selectedItems = m_taskListWidget->selectedItems();
    for (auto item : selectedItems) {
        delete item;
    }
}

5.标记任务

当用户选择一个任务并单击“Mark as Completed”按钮时,我们需要将该任务标记为已完成。在“MainWindow.cpp”文件中,我们可以使用“markTaskAsCompleted()”函数来实现此功能。

void MainWindow::markTaskAsCompleted()
{
    // Get the selected task and set its text decoration to strike out
    QList<QListWidgetItem *> selectedItems = m_taskListWidget->selectedItems();
    for (auto item : selectedItems) {
        QFont font = item->font();
        font.setStrikeOut(true);
        item->setFont(font);
    }
}

在此函数中,我们首先获取用户选择的任务,然后将其文本装饰设置为删除线。

我们需要将“markTaskAsCompleted()”函数与“m_markAsCompletedButton”按钮的“clicked()”信号连接起来,以便在用户单击该按钮时调用该函数。在“setupConnections()”函数中添加以下代码:

connect(m_markAsCompletedButton, &QPushButton::clicked, 
this, &MainWindow::markTaskAsCompleted);

6.处理窗口关闭事件

当用户关闭窗口时,我们需要询问他们是否真的想退出应用程序。在“MainWindow.cpp”文件中,我们可以使用“closeEvent()”函数来实现此功能。

void MainWindow::closeEvent(QCloseEvent *event)
{
    // Ask the user if they really want to quit
    QMessageBox::StandardButton resBtn = QMessageBox::question(this, tr("Todo List"),
                                                               tr("Are you sure you want to exit?\n"),
                                                               QMessageBox::Cancel | QMessageBox::No | QMessageBox::Yes,
                                                               QMessageBox::Yes);
    if (resBtn != QMessageBox::Yes) {
        event->ignore();
    } else {
        event->accept();
    }
}

在此函数中,我们创建了一个 QMessageBox 对话框来询问用户是否真的想退出应用程序。如果用户单击“是”按钮,则我们接受关闭事件,否则我们忽略它。

这就完成了我们的 To-Do List 应用程序!现在我们可以编译并运行它,添加、删除和标记任务为已完成。当我们尝试关闭应用程序时,它会提示我们是否真的想退出。

源代码:link 点我下载

提取码:f56u

总结

作为一个刚入行的新码农,在被ChatGPT震撼之后,胡言乱语。自从我接触代码起,作为一名程序员,我居然第一次对程序产生了恐惧感,那种从无形的世界里给了我有形的一拳,让我感到后怕。。。

但是,我觉得现阶段最重要的是,要学会利用好AI。AI可以帮助我们以更高效的方式思考和工作。要学习如何与AI沟通,如何利用AI的能力提高自己的效率。比如,过去要调用一个API,需要一遍遍的查阅各种文档、例子以及教程。现在,只要一句话,我们就能得到一段几乎可以直接使用的代码。但是,同时也要加强自身知识的积累。未来能留存下来的人,除了能利用AI,也要能发现AI的问题。互补才是生存之道。

有关chatgpt基于Qt实现的To-Do List小项目(内附源码),码农将何去何从....的更多相关文章

  1. ruby-on-rails - rails : save file from URL and save it to Amazon S3 - 2

    从给定URL下载文件并立即将其上传到AmazonS3的更直接的方法是什么(+将有关文件的一些信息保存到数据库中,例如名称、大小等)?现在,我既不使用Paperclip,也不使用Carrierwave。谢谢 最佳答案 简单明了:require'open-uri'require's3'amazon=S3::Service.new(access_key_id:'KEY',secret_access_key:'KEY')bucket=amazon.buckets.find('image_storage')url='http://www.ex

  2. ruby - 续集在添加关联时访问many_to_many连接表 - 2

    我正在使用Sequel构建一个愿望list系统。我有一个wishlists和itemstable和一个items_wishlists连接表(该名称是续集选择的名称)。items_wishlists表还有一个用于facebookid的额外列(因此我可以存储opengraph操作),这是一个NOTNULL列。我还有Wishlist和Item具有续集many_to_many关联的模型已建立。Wishlist类也有:selectmany_to_many关联的选项设置为select:[:items.*,:items_wishlists__facebook_action_id].有没有一种方法可以

  3. ruby-on-rails - rails : How to make a form post to another controller action - 2

    我知道您通常应该在Rails中使用新建/创建和编辑/更新之间的链接,但我有一个情况需要其他东西。无论如何我可以实现同样的连接吗?我有一个模型表单,我希望它发布数据(类似于新View如何发布到创建操作)。这是我的表格prohibitedthisjobfrombeingsaved: 最佳答案 使用:url选项。=form_for@job,:url=>company_path,:html=>{:method=>:post/:put} 关于ruby-on-rails-rails:Howtomak

  4. ruby-on-rails - link_to 不显示任何 rails - 2

    我试图在索引页中创建一个超链接,但它没有显示,也没有给出任何错误。这是我的index.html.erb代码。ListingarticlesTitleTextssss我检查了我的路线,我认为它们也没有问题。PrefixVerbURIPatternController#Actionwelcome_indexGET/welcome/index(.:format)welcome#indexarticlesGET/articles(.:format)articles#indexPOST/articles(.:format)articles#createnew_articleGET/article

  5. ruby - 无法覆盖 irb 中的 to_s - 2

    我在pry中定义了一个函数:to_s,但我无法调用它。这个方法去哪里了,怎么调用?pry(main)>defto_spry(main)*'hello'pry(main)*endpry(main)>to_s=>"main"我的ruby版本是2.1.2看了一些答案和搜索后,我认为我得到了正确的答案:这个方法用在什么地方?在irb或pry中定义方法时,会转到Object.instance_methods[1]pry(main)>defto_s[1]pry(main)*'hello'[1]pry(main)*end=>:to_s[2]pry(main)>defhello[2]pry(main)

  6. ruby-on-rails - 错误 : Error installing pg: ERROR: Failed to build gem native extension - 2

    我克隆了一个rails仓库,我现在正尝试捆绑安装背景:OSXElCapitanruby2.2.3p173(2015-08-18修订版51636)[x86_64-darwin15]rails-v在您的Gemfile中列出的或native可用的任何gem源中找不到gem'pg(>=0)ruby​​'。运行bundleinstall以安装缺少的gem。bundleinstallFetchinggemmetadatafromhttps://rubygems.org/............Fetchingversionmetadatafromhttps://rubygems.org/...Fe

  7. ruby-on-rails - Prawn PDF : I need to generate nested tables - 2

    我需要一个表,其中行实际上是2行表,一个嵌套表是..我怎样才能在Prawn中做到这一点?也许我需要延期..但哪一个? 最佳答案 现在支持子表:Prawn::Document.generate("subtable.pdf")do|pdf|subtable=pdf.make_table([["sub"],["table"]])pdf.table([[subtable,"original"]])end 关于ruby-on-rails-PrawnPDF:Ineedtogeneratenested

  8. ruby - rails 3 redirect_to 将参数传递给命名路由 - 2

    我没有找到太多关于如何执行此操作的信息,尽管有很多关于如何使用像这样的redirect_to将参数传递给重定向的建议:action=>'something',:controller=>'something'在我的应用程序中,我在路由文件中有以下内容match'profile'=>'User#show'我的表演Action是这样的defshow@user=User.find(params[:user])@title=@user.first_nameend重定向发生在同一个用户Controller中,就像这样defregister@title="Registration"@user=Use

  9. ruby - 怎么来的(a_method || :other) returns :other only when assigning to a var called a_method? - 2

    给定以下方法:defsome_method:valueend以下语句按我的预期工作:some_method||:other#=>:valuex=some_method||:other#=>:value但是下面语句的行为让我感到困惑:some_method=some_method||:other#=>:other它按预期创建了一个名为some_method的局部变量,随后对some_method的调用返回该局部变量的值。但为什么它分配:other而不是:value呢?我知道这可能不是一件明智的事情,并且可以看出它可能有多么模棱两可,但我认为应该在考虑作业之前评估作业的右侧...我已经在R

  10. ruby - RVM "ERROR: Unable to checkout branch ."单用户 - 2

    我在新的Debian6VirtualBoxVM上安装RVM时遇到问题。我已经安装了所有需要的包并使用下载了安装脚本(curl-shttps://rvm.beginrescueend.com/install/rvm)>rvm,但以单个用户身份运行时bashrvm我收到以下错误消息:ERROR:Unabletocheckoutbranch.安装在这里停止,并且(据我所知)没有安装RVM的任何文件。如果我以root身份运行脚本(对于多用户安装),我会收到另一条消息:Successfullycheckedoutbranch''安装程序继续并指示成功,但未添加.rvm目录,甚至在修改我的.bas

随机推荐