Qt 输入组控件(Input Widgets) 显示组控件(Display Widgets)详解

news2024/11/26 15:37:04

一、Qt 输入组控件(Input Widgets)

Qt Input Widgets是一组用户界面元素,用于输入和显示文字和数字等的数据。这些小部件可以组成各种不同的表单和对话框,用户可以使用这些小部件与程序交互。

以下是Qt Input Widgets的一些常见小部件:

  1. QLineEdit:用于单行文本输入,比如用户名和密码等。
  2. QTextEdit:用于多行文本输入,比如邮件正文等。
  3. QPlainTextEdit:用于纯文本的多行输入,比如代码编辑器等。
  4. QSpinBox:用于数字输入,比如选择年龄等。
  5. QComboBox:用于下拉选择列表,比如选择性别等。
  6. QCheckBox:用于选择复选框,比如选择喜欢的运动等。
  7. QRadioButton:用于选择单选按钮,比如选择语言等。

Qt Input Widgets全部部件如下图:

控件名称依次解释如下:

  • 编辑组合框
  • 字体组合框
  • 行编辑框
  • 文本编辑框
  • 多行文本编辑器
  • 整数旋转框
  • 小数旋转框
  • 时间编辑
  • 日期编辑
  • 日期时间编辑
  • 表盘控件
  • 水平和垂直滚动条
  • 水平和垂直滑动条
  • 快捷键输入控件

案例分析:

main.window.h

#ifndef MAINWINDOW_H
#define MAINWINDOW_H

#include <QMainWindow>


// 1:Combo Box控件
#include <QComboBox>


// 2:FontComboBox控件
#include <QFontComboBox>
#include <QLabel>

// 3:Line Edit控件
#include <QLineEdit>
#include <QPushButton>

// 4:Plain Text Edit控件
#include <QPlainTextEdit>
#include <QRadioButton>

// 5:Spin Box控件
#include <QSpinBox>

// 6:时间控件
#include <QTimeEdit>
#include <QDateEdit>
#include <QDateTimeEdit>


// 7: Scroll Bar控件
#include <QScrollBar>

// 8: Key Sequence Edit控件
#include <QKeySequenceEdit>


QT_BEGIN_NAMESPACE
namespace Ui { class MainWindow; }
QT_END_NAMESPACE

class MainWindow : public QMainWindow
{
    Q_OBJECT

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

private:
    Ui::MainWindow *ui;

    // 1:声明一个QComboBox对象
private:
    QComboBox *combobox;
private slots:
    void comboboxIndex(int);

    // 2:声明QFontComboBox/QLabel对象
private:
    QFontComboBox *fontcombobox;
    QLabel *qlabels;
private slots:
    void fontcomboboxFunc(QFont);

    // 3:声明QLineEdit/QPushButton/QLabel对象
private:
    QLineEdit *lineedit;
    QPushButton *pushbutton;
    QLabel *qlabely;
private slots:
    void pushbuttonclicked();

    // 4:声明QPlainTextEdit/QRadioButton对象
private:
    QPlainTextEdit *plaintedit;
    QRadioButton *radiobutton;
private slots:
    void radioButtonClicked();

    // 5:声明QPlainTextEdit/QRadioButton对象
private:
    QSpinBox *spinbox;
private slots:
    void spinboxValueChanged(int);

    // 6:声明QDateTimeEdit/QTimeEdit/QDateEdit对象
private:
    QDateTimeEdit *dte;
    QTimeEdit *te;
    QDateEdit *de;

    // 7:声明QScrollBar对象
private:
    QScrollBar *hscrollbar,*vscrollbar;


    // 8:声明QKeySequenceEdit对象
private:
    QKeySequenceEdit *kse;
private slots:
    void keyseqeditChanged(const QKeySequence &);

};
#endif // MAINWINDOW_H

main.cpp

#include "mainwindow.h"

#include <QApplication>

int main(int argc, char *argv[])
{
    QApplication a(argc, argv);
    MainWindow w;
    w.show();
    return a.exec();
}

mainwindow.cpp

#include "mainwindow.h"
#include "ui_mainwindow.h"

#include <QMessageBox>
#include <QDebug>

#include <QDir>
#include <QTextStream>


MainWindow::MainWindow(QWidget *parent)
    : QMainWindow(parent)
    , ui(new Ui::MainWindow)
{
    ui->setupUi(this);


    // 设置主空格的显示位置及大小
    this->setGeometry(300,200,1000,600);

    // 1:QComboBox
    combobox=new QComboBox(this); // 实例化对象
    combobox->setGeometry(10,10,200,30);
    combobox->addItem("北京市");
    combobox->addItem("上海市");
    combobox->addItem("天津市");
    combobox->addItem("重庆市");
    combobox->addItem("湖南省");
    combobox->addItem("江西省");
    combobox->addItem("广东省");
    combobox->addItem("香港特别行政区");
    combobox->addItem("澳门特别行政区");

    // 信号槽函数连接实现
    connect(combobox,SIGNAL(currentIndexChanged(int)),this,SLOT(comboboxIndex(int)));

    // 2:QFontComboBox/QLabel
    fontcombobox=new QFontComboBox(this);
    qlabels=new QLabel(this);
    fontcombobox->setGeometry(10,50,200,30);
    qlabels->setGeometry(10,70,300,50);

    // 信号与槽函数连接
    connect(fontcombobox,SIGNAL(currentFontChanged(QFont)),this,SLOT(fontcomboboxFunc(QFont)));

    // 3:QLineEdit/QPushButton/QLabel
    lineedit=new QLineEdit(this);
    lineedit->setGeometry(10,150,200,30);
    pushbutton=new QPushButton(this);
    pushbutton->setGeometry(220,150,100,30);
    pushbutton->setText("点击我");
    qlabely=new QLabel(this);
    qlabely->setGeometry(10,200,400,30);
    qlabely->setText("你输入的内容为:");

    // 信号与槽函数连接
    connect(pushbutton,SIGNAL(clicked()),this,SLOT(pushbuttonclicked()));

    // 4:QPlainTextEdit/QRadioButton
    plaintedit=new QPlainTextEdit(this);
    plaintedit->setGeometry(10,250,400,200);
    radiobutton=new QRadioButton(this);
    radiobutton->setGeometry(300,220,200,30);
    radiobutton->setText("只读模式");

    // 设置工作目录为可执行程序的工作目录
    QDir::setCurrent(QCoreApplication::applicationDirPath());
    QFile fe("moc_mainwindow.cpp"); // moc(Meta-Object Compiler,也就是“元对象编译器”)找不到返回上一级
    fe.open((QFile::ReadOnly|QFile::Text));

    // 加载到文件流
    QTextStream strin(&fe);
    plaintedit->insertPlainText(strin.readAll());

    // 信号与槽函数连接
    connect(radiobutton,SIGNAL(clicked()),this,SLOT(radioButtonClicked()));


    // 5: 改变窗口背景颜色
    this->setStyleSheet("QMainWindow{background-color:""rgba(250,220,120,100%)}");

    spinbox=new QSpinBox(this);
    spinbox->setGeometry(440,250,150,30);

    spinbox->setRange(0,100);
    spinbox->setSingleStep(10);
    spinbox->setValue(100);

    spinbox->setSuffix("%不透明度");

    // 信号与槽函数连接
    connect(spinbox,SIGNAL(valueChanged(int)),this,SLOT(spinboxValueChanged(int)));


    // 6:QDateTimeEdit/QTimeEdit/QDateEdit
    dte=new QDateTimeEdit(QDateTime::currentDateTime(),this);
    dte->setGeometry(440,290,200,30);
    te=new QTimeEdit(QTime::currentTime(),this);
    te->setGeometry(440,330,200,30);
    de=new QDateEdit(QDate::currentDate(),this);
    de->setGeometry(440,370,200,30);


    // 7: QScrollBar
    hscrollbar=new QScrollBar(Qt::Horizontal,this);
    hscrollbar->setGeometry(0,500,1000,30);
    vscrollbar=new QScrollBar(Qt::Vertical,this);
    vscrollbar->setGeometry(970,0,30,500);

    // 8:QKeySequenceEdit
    kse=new QKeySequenceEdit(this);
    kse->setGeometry(400,530,200,30);
    // 信号与槽函数连接
    connect(kse,SIGNAL(keySequenceChanged(const QKeySequence &)),
             this,SLOT(keyseqeditChanged(const QKeySequence &)));

}

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

// 1:
void MainWindow::comboboxIndex(int index)
{
    qDebug()<<"你选择的区别是:"<<combobox->itemText(index)<<endl;

    QMessageBox mybox(QMessageBox::Question,"信息",combobox->itemText(index),QMessageBox::Yes|QMessageBox::No);
    mybox.exec();
}

// 2:
void MainWindow::fontcomboboxFunc(QFont font)
{
    qlabels->setFont(font);
    QString qStr="罗小白的干爹";
    qlabels->setText(qStr);

}

// 3:
void MainWindow::pushbuttonclicked()
{
    QString qStr;
    qStr="你输入的内容为:";
    qStr=qStr+lineedit->text();

    qlabely->setText(qStr);
    lineedit->clear();
}

// 4:
void MainWindow::radioButtonClicked()
{
    if(radiobutton->isChecked()){
        plaintedit->setReadOnly(true);
    }
    else
        plaintedit->setReadOnly(false);
}

// 5:
void MainWindow::spinboxValueChanged(int x)
{
    double dx=(double)x/100;

    this->setWindowOpacity(dx);
}

// 8:
void MainWindow::keyseqeditChanged(const QKeySequence &key)
{
    if(key==QKeySequence(tr("Ctrl+Q")))
        this->close();
    else
        qDebug()<<key.toString()<<endl;

}

编译执行结果:

二、Qt 显示组控件(Display Widgets)

Qt Display Widgets 是 Qt 框架中用于显示和展示数据的相关窗口部件。该部件库包含了多种用于显示文本、图像、图表、列表、树形结构等数据的窗口部件,支持用户交互、布局和样式自定义等功能。以下是 Qt Display Widgets 的主要部件:

  1. QLabel:用于显示文本和图像。

  2. QTextEdit:用于显示和编辑富文本。

  3. QPlainTextEdit:用于显示和编辑纯文本。

  4. QListView:用于显示列表数据。

  5. QTreeView:用于显示树形结构数据。

  6. QTableWidget:用于显示二维表格数据。

  7. QChartView:用于显示各种图表,如折线图、柱状图、饼图等。

Qt Display Widgets 全部部件如下图:

控件名称依次解释如下:

  • Label: 标签
  • Text Browser:文本浏览器
  • Graphics View :图形视图框架
  • Calendar Widget : 日历控件
  • LCD Number:液晶字体数字控件
  • Progress Bar: 进度条
  • Horizontal Line/Vertical Line :水平线/垂直线
  • OpenGL Widget : OpenGL 图形染控件
  • QQuickWidget :QML 嵌入控件

案例实现功能:

  • Label: 标签 -> 放图片
  • Text Browser:文本浏览器 -> 存放打开的文件
  • 测试进度条
  • 通过按钮开始或暂停定时

ui绘图:

widget.h

#ifndef WIDGET_H
#define WIDGET_H

#include <QWidget>

// 1:
#include <QMessageBox>

// 2:
#include <QFile>

// 4:
#include <QTimer>

QT_BEGIN_NAMESPACE
namespace Ui { class Widget; }
QT_END_NAMESPACE

class Widget : public QWidget
{
    Q_OBJECT

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

private slots:
    void on_pushButtonProgressBar_clicked();

    void on_pushbtnstart_clicked();

    void on_pushbtnpause_clicked();

    void on_pushbtnreset_clicked();

    // 4:
    // 自定义函数:定时器
    void on_timerout();
private:
    int iValues=0;
    QTimer *timers; // 定时器
    void InitFunc();

private:
    Ui::Widget *ui;

    // 1:
private:
    void textlabelFunc();

    // 2:
private:
    void textbrowserFuncReadTxt();

};
#endif // WIDGET_H

main.cpp

#include "widget.h"

#include <QApplication>

int main(int argc, char *argv[])
{
    QApplication a(argc, argv);
    Widget w;
    w.show();
    return a.exec();
}

widget.cpp

#include "widget.h"
#include "ui_widget.h"

Widget::Widget(QWidget *parent)
    : QWidget(parent)
    , ui(new Ui::Widget)
{
    ui->setupUi(this);

    // 1:调用函数
    textlabelFunc();

    // 2:调用函数
    textbrowserFuncReadTxt();

    // 3:初始化进程条
    ui->progressBar->setRange(0,1000000);
    ui->progressBar->setValue(0);

    // 4:
    InitFunc();
    // 信号与槽函数连接
    connect(timers,&QTimer::timeout,this,&Widget::on_timerout);

}

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

// 1:
void Widget::textlabelFunc()
{
    QString fName("D:\\刘德华.jpg");

    QImage *qimg=new QImage;

    if(!(qimg->load(fName))) // 判断加载图片
    {
        QMessageBox::information(this,"失败","加载jpg图片失败,请重新检查?");
        delete  qimg;

        return;
    }

    ui->label->setPixmap(QPixmap::fromImage(*qimg));
}

// 2:
void Widget::textbrowserFuncReadTxt()
{
    QString qStrdData;
    QFile qfile("d:\\THIRD-PARTY-LICENSES.txt");

    if(!(qfile.open(QIODevice::ReadOnly|QIODevice::Text)))
    {
        QMessageBox::warning(this,"失败","打开文件失败,请重新检查?");
    }

    while (!qfile.atEnd())
    {
        QByteArray ay=qfile.readLine();
        QString strs(ay);
        qStrdData.append(strs);
    }

    ui->textBrowser->setText(qStrdData);
}

void Widget::on_pushButtonProgressBar_clicked()
{
    for(int i=1;i<=1000000;i++)
    {
        for(int j=0;j<1;j++)
        {
            ui->progressBar->setValue(i);
        }
    }
}

void Widget::on_pushbtnstart_clicked()
{
    timers->start(); // 1s触发一次操作
    ui->pushbtnstart->setEnabled(false);
    ui->pushbtnpause->setEnabled(true);
    ui->pushbtnreset->setEnabled(true);

}

void Widget::on_pushbtnpause_clicked()
{
    timers->stop(); // 1s触发一次操作
    ui->pushbtnstart->setEnabled(true);
    ui->pushbtnpause->setEnabled(false);
    ui->pushbtnreset->setEnabled(true);

}

void Widget::on_pushbtnreset_clicked()
{
    timers->stop(); // 1s触发一次操作
    iValues=0;

    ui->lcdNumber->display(iValues);

    ui->pushbtnstart->setEnabled(true);
    ui->pushbtnpause->setEnabled(true);
    ui->pushbtnreset->setEnabled(false);

}

void Widget::InitFunc()
{
    timers=new QTimer(this);
    timers->setInterval(1000); // 定时周期为1s
    timers->stop();

}

void Widget::on_timerout()
{
    iValues++;
    ui->lcdNumber->display(iValues);
}

编译执行结果:

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1090157.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

vue面试题-应用层

MVC与MVVM MVCMVVM 双向数据绑定 vue2 双向绑定原理 v-model原理 vue3 双向绑定原理 示例 对比 vue2响应式原理和Vue3响应式原理 data为什么是函数?v-if 与 v-show MVC与MVVM MVC和MVVM是两种流行的设计模式&#xff0c;它们都是用于构建动态应用程序的框架。 MVC MVC&#…

Prometheus PromQL及传统部署 Alertmanager 发送告警

文章目录 一.PromQL 简介1.PromQL概念2.时间序列3.Prometheus数据模型4.指标名称及标签使用注意事项5.样本数据格式 二.PromQL 的数据类型1.PromQL 的表达式中支持 4 种数据类型2.时间序列选择器&#xff08;Time series Selectors&#xff09;①瞬时向量选择器由两部分组成②定…

关于智能控制领域中模糊控制算法的概述

智能控制领域中的模糊控制算法是一种基于模糊逻辑的控制策略&#xff0c;它通过对模糊集合的刻画来处理模糊信息&#xff0c;从而获得模糊输出并进行控制。模糊控制算法在实际控制工程中具有良好的应用前景&#xff0c;它不但具有较强的鲁棒性和适应性&#xff0c;而且可以为复…

Stable Diffusion 动画animatediff-cli-prompt-travel

基于 sd-webui-animatediff 生成动画或者动态图的基础功能,animatediff-cli-prompt-travel突破了部分限制,能让视频生成的时间更长,并且能加入controlnet和提示词信息控制每个片段,并不像之前 sd-webui-animatediff 的一套关键词控制全部画面。 动图太大传不上来,凑合看每…

数据仓库DW-理论知识储备

数据仓库DW 数据仓库具备 采集数据、分析数据、存储数据的功能&#xff0c;最后得出一些有用的数据&#xff0c;一些目标数据来使用。 采集来自不同源的数据&#xff0c;然后对这些数据进行分析和计算得出一些有用的指标&#xff0c;提供数据决策支持。 数据的来源有&#xff…

[华为杯研究生创新赛 2023] 初赛 REV WP

前言 一年没打比赛了, 差一题进决赛, REV当时lin的第三个challenge没看出来是凯撒, 想得复杂了, 结果错失一次线下机会 >_< T4ee 动态调试, nop掉反调试代码 发现处理过程为 置换sub_412F20处理(这里看其他师傅的wp知道应该是rc4, 我是直接en逆的buf字符串中每一位和…

GPIO子系统(三)

1&#xff0c;简述 GPIO 资源是相对来说较为简单&#xff0c;而且比较通用&#xff08;比如 LED 灯&#xff09;&#xff0c;而 Linux 的 GPIO 驱动属于 Linux Driver 中较为容易上手的部分&#xff0c;但是简单归简单&#xff0c;在 Linux 系统中&#xff0c;要使用 GPIO 资源…

BootStrap-前端框架

资料:https://v3.bootcss.com/components/ BootStrap的概念&#xff08;Web框架&#xff09; Bootstrap&#xff0c;来自 Twitter&#xff0c;是目前很受欢迎的前端框架。Bootstrap 是基于 HTML、CSS、JavaScript 的&#xff0c;它简洁灵活&#xff0c;使得 Web 开发更加快捷。…

聚观早报 | “百度世界2023”即将举办;2024款岚图梦想家上市

【聚观365】10月13日消息 “百度世界2023”即将举办 2024款岚图梦想家上市 腾势D9用户超10万 华为发布新一代GigaGreen Radio OpenAI拟进行重大更新 “百度世界2023”即将举办 “百度世界2023”将于10月17日在北京首钢园举办。届时&#xff0c;百度创始人、董事长兼首席执…

5、docker mysql安装

1、查看版本 docker search mysql 2、下载镜像到本地 下载镜像&#xff0c;本文以5.7为例 docker pull mysql:5.7 3、创建挂载目录 mkdir /usr/local/mysql 4、创建mysql容器 docker run --name mysql-test -e MYSQL_ROOT_PASSWORDroot -p 3306:3306 -d mysql –name&am…

最详细STM32,cubeMX 按键点亮 led

这篇文章将详细介绍 如何在 stm32103 板子上使用 按键 点亮一个LED. 文章目录 前言一、如何控制按键&#xff1f;为什么按键要接上拉电阻或者下拉电阻呢&#xff1f; 二、cubeMX配置工程自动生成代码解析 三、读取引脚电平函数四、按键为什么要消抖如何消除消抖 五、实现按键控…

如何提高MES系统的落地成功率?

导 读 ( 文/ 2768 ) 制造执行系统&#xff08;MES&#xff09;在现代制造业中扮演着至关重要的角色&#xff0c;但实施MES系统并取得成功并非易事。为了帮助企业提高MES系统的落地成功率&#xff0c;本文将介绍关键的方法和策略。通过深入了解业务需求、有效的团队合作、全面的…

基于nodejs+vue大学食堂订餐系统

模块包括主界面&#xff0c;首页、个人中心、管理员管理、用户管理、菜品管理、论坛管理、公告管理、基础数据管理、目 录 摘 要 I ABSTRACT II 目 录 II 第1章 绪论 1 1.1背景及意义 1 1.2 国内外研究概况 1 1.3 研究的内容 1 第2章 相关技术 3 2.1nodejs简介 4 2.2 express框…

《从菜鸟到大师之路 正则表达式 篇》

《从菜鸟到大师之路 正则表达式 篇》 正则表达式是一个强大的文本匹配工具。但是&#xff0c;对于前端初学者来说&#xff0c;众多的符号和规则可能让人难以理解。其实&#xff0c;你不需要记住所有的正则表达式语法&#xff01;本文将分享一些简单而实用的技巧&#xff0c;帮…

asp.net酒店餐饮管理系统VS开发sqlserver数据库web结构c#编程Microsoft Visual Studio

一、源码特点 asp.net酒店餐饮管理系统是一套完善的web设计管理系统&#xff0c;系统具有完整的源代码和数据库&#xff0c;系统主要采用B/S模式开发。开发环境为vs2010&#xff0c;数据库为sqlserver2008&#xff0c;使用c#语言 开发 ASP.NE 酒店餐饮管理系统 二、功能…

HSN:微调预训练ViT用于目标检测和语义分割,华南理工和阿里巴巴联合提出

今天跟大家分享华南理工大学和阿里巴巴联合提出的将ViT模型用于下游任务的高效微调方法HSN&#xff0c;该方法在迁移学习、目标检测、实例分割、语义分割等多个下游任务中表现优秀&#xff0c;性能接近甚至在某些任务上超越全参数微调。 论文标题&#xff1a;Hierarchical Side…

第六章:路由交换机及操作系统

路由交换机及操作系统 一、路由器与交换机的作用与特点1.路由器1.1 作用1.2 特点 2.交换机2.1 作用2.2 特点 二、H3C路由器与交换机介绍1. 路由器2. 交换机 三、 H3C网络设备操作系统Comware1. 介绍2. 特点![在这里插入图片描述](https://img-blog.csdnimg.cn/2b24103028654878…

玻璃生产过程中的窑内压力高精度恒定控制解决方案

摘要&#xff1a;在玻璃生产中对玻璃窑炉中窑压的要求极高&#xff0c;通常需要控制微正压4.7Pa&#xff08;表压&#xff09;&#xff0c;偏差控制在0.3Pa&#xff0c;而窑炉压力还会受到众多因素的影响&#xff0c;所以实现高稳定性的熔窑压力控制具有很大难度&#xff0c;为…

Codeforces Round 903 (Div. 3)ABCDE

Codeforces Round 903 (Div. 3)ABCDE 目录 A. Dont Try to Count题目大意思路核心代码 B. Three Threadlets题目大意思路核心代码 C. Perfect Square题目大意思路核心代码 D. Divide and Equalize题目大意思路核心代码 E. Block Sequence题目大意思路核心代码 A. Don’t Try t…

【问题解决】【爬虫】抓包工具charles与pycharm发送https请求冲突问题

问题&#xff1a; 开启charles抓包&#xff0c;运行pycharm发送https请求报以下错误 解决&#xff1a; 修改python代码&#xff0c;发送请求时添加verify false&#xff0c;此时charles也能抓取到pycharm发送的请求 2. 关闭charles抓包&#xff0c;取消勾选window proxy