开源 C++ QT Widget 开发(二)基本控件应用

文章的目的为了记录使用C++ 进行QT Widget 开发学习的经历。临时学习,完成app的开发。开发流程和要点有些记忆模糊,赶紧记录,防止忘记。

相关链接:

开源 C++ QT Widget 开发(一)工程文件结构-CSDN博客

开源 C++ QT Widget 开发(二)基本控件应用-CSDN博客

推荐链接:

开源 java android app 开发(一)开发环境的搭建-CSDN博客

开源 java android app 开发(二)工程文件结构-CSDN博客

开源 java android app 开发(三)GUI界面布局和常用组件-CSDN博客

开源 java android app 开发(四)GUI界面重要组件-CSDN博客

开源 java android app 开发(五)文件和数据库存储-CSDN博客

开源 java android app 开发(六)多媒体使用-CSDN博客

开源 java android app 开发(七)通讯之Tcp和Http-CSDN博客

开源 java android app 开发(八)通讯之Mqtt和Ble-CSDN博客

开源 java android app 开发(九)后台之线程和服务-CSDN博客

开源 java android app 开发(十)广播机制-CSDN博客

开源 java android app 开发(十一)调试、发布-CSDN博客

开源 java android app 开发(十二)封库.aar-CSDN博客

推荐链接:

开源C# .net mvc 开发(一)WEB搭建_c#部署web程序-CSDN博客

开源 C# .net mvc 开发(二)网站快速搭建_c#网站开发-CSDN博客

开源 C# .net mvc 开发(三)WEB内外网访问(VS发布、IIS配置网站、花生壳外网穿刺访问)_c# mvc 域名下不可訪問內網,內網下可以訪問域名-CSDN博客

开源 C# .net mvc 开发(四)工程结构、页面提交以及显示_c#工程结构-CSDN博客

开源 C# .net mvc 开发(五)常用代码快速开发_c# mvc开发-CSDN博客

本章主要内容:演示使用了全局变量和过时的信号槽语法。实现了多种UI控件的交互功能,特别是定时器驱动的进度条更新功能。

1.基本介绍

2.源码分析

3.所有源码

4.演示效果

一、基本介绍

Qt Widgets 是一个强大的框架,用于创建图形用户界面(GUI)应用程序。Qt Widgets 提供了一系列预定义的控件和布局管理器,使得开发者可以轻松地设计出美观且功能丰富的用户界面。这些控件包括按钮、文本框、滑块、列表、菜单等,几乎可以满足所有常见的GUI设计需求。

QT是使用的5.14.2,安装程序很简单,不再详述。

工程功能分析

  1. 定时器功能

自动启动:程序启动时定时器自动开始,每秒触发一次

进度条更新:每次定时器超时,进度条值增加1

问题:进度条会一直增加到255(uint8_t最大值)然后溢出

  1. UI控件交互

pushButton:点击时计数器增加并在lineEdit中显示

radioButton:显示"选中/取消"状态

checkBox:同样显示"选中/取消"状态

comboBox:将选择项显示在lineEdit中

listWidget:点击项时在textEdit中显示内容

  1. 界面组件推断

基于代码可以推断UI包含:

lineEdit:文本框,显示各种状态

textEdit:多行文本框,显示列表选择

progressBar:进度条,由定时器驱动

pushButton、radioButton、checkBox、comboBox、listWidget

二、源码分析

2.1 控制值得设置,使用ui 输入 -> 连接符 会出现 界面的控件,选择控件后,调用setText方法,就可以设置控件的显示值。

2.2 槽函数有多种连接形式

1)选中控件,右键选中 "转到槽"

mainwindow.h会自动生成槽函数

在on_pushButton_clicked()中,进行函数处理即可,其中pushButton为控件的名称,自动生成槽函数都是按这个规则 on + 控件名 + 动作

2)更新信号槽

在mainwindow.h中先进行定时器信号槽的声明

把定时器的时间到的信号,与event_tmr函数连接

最后填入event_tmr槽函数的处理

三、所有源码

3.1 mainwindow.h

复制代码
#ifndef MAINWINDOW_H
#define MAINWINDOW_H


#include <QListWidget>
#include <QMainWindow>


namespace Ui {
class MainWindow;
}

class MainWindow : public QMainWindow
{
    Q_OBJECT

public:
    explicit MainWindow(QWidget *parent = 0);
    ~MainWindow();
    QTimer *myTmr;
private slots:
    void on_pushButton_clicked();

    void on_radioButton_clicked();

    void on_checkBox_clicked();

    void on_comboBox_activated(const QString &arg1);

    void on_btnTmrStart_clicked();

    void event_tmr();
    void on_listWidget_itemClicked(QListWidgetItem *item);

private:
    Ui::MainWindow *ui;
};

#endif // MAINWINDOW_H

3.2 mainwindow.cpp

复制代码
#include "mainwindow.h"
#include "ui_mainwindow.h"
#include <string.h>
#include "QTimer"
uint8_t ucCnt=0;
uint8_t ucCntTmr=0;
MainWindow::MainWindow(QWidget *parent) :
    QMainWindow(parent),
    ui(new Ui::MainWindow)
{
    ui->setupUi(this);
    /*******定时器设置***************/
    myTmr =new QTimer(this);
    connect(myTmr, &QTimer::timeout, this, &MainWindow::event_tmr);
    myTmr->start(1000);
}

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

void MainWindow::on_pushButton_clicked()
{
    QString a;

    ucCnt++;
    a=QString::number(ucCnt);
    ui->lineEdit->setText(a);



}

void MainWindow::on_radioButton_clicked()
{
    bool BFlg = ui->radioButton->isChecked();
    if(BFlg ==true)
    {
        ui->lineEdit->setText("选中");
    }
    else
    {
        ui->lineEdit->setText("取消");
    }
}

void MainWindow::on_checkBox_clicked()
{
    bool BFlg = ui->checkBox->isChecked();
    if(BFlg ==true)
    {
        ui->lineEdit->setText("选中");
    }
    else
    {
        ui->lineEdit->setText("取消");
    }
}

void MainWindow::on_comboBox_activated(const QString &arg1)
{
    ui->lineEdit->setText(arg1);
}


void MainWindow::on_btnTmrStart_clicked()
{


}
void MainWindow::event_tmr()
{


    ucCntTmr++;
    if(ucCntTmr>90)ucCntTmr=0;

    ui->progressBar->setValue(ucCntTmr);
}


void MainWindow::on_listWidget_itemClicked(QListWidgetItem *item)
{
    if (item) {
            QString text = item->text();



            // 方法2:在lineEdit中显示
            ui->textEdit->setText("选中: " + text);

            // 方法3:显示消息框(可选)
            // QMessageBox::information(this, "选中项", "您选择了: " + text);
        }
}

四、显示效果

相关推荐
冬奇Lab25 分钟前
开源项目第185期:Orca — YC 支持的 AI Agent 开发环境,并行运行多个 Coding Agent、手机远程监控、Design Mode 直接截图喂给 AI
人工智能·开源·资讯
dong_junshuai3 小时前
每天一个开源项目#68 Needle:14MB 工具调用小模型装进口袋设备
程序员·开源·github
东方小月3 小时前
从零开发一个 Coding Agent(十):实现 CLI 参数解析与静态命令
前端·人工智能·开源
Bifrost4 小时前
使用飞书机器人让 Codex 24 小时在线:随时随地给你的 AI 工程师派活
chatgpt·开源·openai
Joy T5 小时前
Agent 开源项目全景解析(下):LlamaIndex、Dify、FastGPT 与真实工程选型
langchain·开源·框架·agent·springai·langgraph·mcp
QQ5416451216 小时前
【驿帮查件助手python开源】开源聚合查件机器人,实现 24 类驿站批量查件取代短信通知。技术方案分享
python·机器人·开源·驿站查件机器人
zlinear数据采集卡6 小时前
D223的SRAM硬件记录仪:外部触发与瞬态波形捕获方案
arm开发·嵌入式硬件·fpga开发·开源
DM今天肝到几点?7 小时前
英伟达发布 Nemotron 3.5 Lightning:31.6B 参数的“闪电”开源模型,本地智能体的新引擎
人工智能·深度学习·语言模型·开源·知识图谱
FIT2CLOUD飞致云8 小时前
学习笔记丨MaxKB原生工作流实现AI PPT生成
人工智能·ai·开源·智能体·maxkb
dong_junshuai10 小时前
每天一个开源项目#67 Orca:4.3万星的并行 AI 编程控制台
程序员·开源·github