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

一、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_NAMESPACEclass MainWindow : public QMainWindow
{Q_OBJECTpublic: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:QComboBoxcombobox=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/QLabelfontcombobox=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/QLabellineedit=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/QRadioButtonplaintedit=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/QDateEditdte=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: QScrollBarhscrollbar=new QScrollBar(Qt::Horizontal,this);hscrollbar->setGeometry(0,500,1000,30);vscrollbar=new QScrollBar(Qt::Vertical,this);vscrollbar->setGeometry(970,0,30,500);// 8:QKeySequenceEditkse=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);}elseplaintedit->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();elseqDebug()<<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_NAMESPACEclass Widget : public QWidget
{Q_OBJECTpublic: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); // 定时周期为1stimers->stop();}void Widget::on_timerout()
{iValues++;ui->lcdNumber->display(iValues);
}

编译执行结果:

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

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

如何用 ChatGPT 的 Advanced Data Analysis 帮你采集数据?

&#xff08;注&#xff1a;本文为小报童精选文章&#xff0c;已订阅小报童或加入知识星球「玉树芝兰」用户请勿重复付费&#xff09; 想采集网页数据却不会写 Python 爬虫&#xff1f;不会就不会吧&#xff0c;ChatGPT 会就可以了 &#x1f602; 问题描述 朋友最近遇到了一点儿…

互联网Java工程师面试题·Java 并发编程篇·第五弹

目录 52、什么是线程池&#xff1f; 为什么要使用它&#xff1f; 53、怎么检测一个线程是否拥有锁&#xff1f; 54、你如何在 Java 中获取线程堆栈&#xff1f; 55、JVM 中哪个参数是用来控制线程的栈堆栈小的? 56、Thread 类中的 yield 方法有什么作用&#xff1f; 57、…

jwt详细介绍

jwt详细介绍 1.jwt 简介&#xff1a;2.jwt 工具类介绍3.案列演示&#xff1a;3.1并在web.xml进行配置过滤器 3.2过滤3.3全局响应设置 1.jwt 简介&#xff1a; 。JWT&#xff08;JSON Web Token&#xff09; 是一种用于安全传输信息的开放标准&#xff08;RFC 7519&#xff09;…

ue5打包失败与优化项目

打包报错&#xff1a; PackagingResults: Error: Multiple game targets found for project. Specify the desired target using the -Target... argument. 解决方案&#xff1a; 关闭项目后&#xff0c;删除项目目录下的 Intermediate 文件 再重新启动项目打包即可 参考&…

Linux实现原理 — I/O 处理流程与优化手段

Linux I/O 接口 Linux I/O 接口可以分为以下几种类型&#xff1a; 文件 I/O 接口&#xff1a;用于对文件进行读写操作的接口&#xff0c;包括 open()、read()、write()、close()、lseek() 等。 网络 I/O 接口&#xff1a;用于网络通信的接口&#xff0c;包括 socket()、conne…

buuctf week2-web-ez_sql

闭合之后尝试判断字段数&#xff0c;存在WAF&#xff0c;使用大小写绕过&#xff08;后面的sql语句也需要进行大小写绕过&#xff09; ?id1 Order by 5-- 测出有5列 ?id1 Order by 6-- 查一下数据库名、版本、用户等信息 ?id1Union Select database(),version(),user(),4,…

关于Vue+webpack使用unocss编写CSS,打包后CSS没加前缀

关于Vuewebpack使用unocss编写CSS&#xff0c;打包后CSS没加前缀&#xff0c;封装了一个插件去解决了这个问题 unocss-postcss-webpack-plugin unocss在vite中使用配置&#xff0c;关于unocss在vite中使用&#xff0c;自行查阅官网 https://unocss.dev/integrations/vite ,vi…

最详细STM32,cubeMX 点亮 led

这篇文章将详细介绍 如何在 stm32103 板子上点亮一个LED. 文章目录 前言一、开发环境搭建。二、LED 原理图解读三、什么是 GPIO四、cubeMX 配置工程五、解读 cubeMX 生成的代码六、延时函数七、控制引脚状态函数点亮 LED 八、GPIO 的工作模式九、为什么使用推挽输出驱动 LED总结…

鲲山科技:引入和鲸 ModelWhale,实现量化策略的高效迭代

量化投资是数据科学在金融行业的应用。 2023 年&#xff0c;量化行业的超额收益开始收敛&#xff0c;量化私募如何形成自身核心竞争力&#xff1f; 和鲸拜访客户鲲山科技&#xff08;深圳&#xff09;&#xff0c;揭示其“弯道超车”的独家秘诀。 群体作战 年初至今&#xff…

idea中导入eclipse的javaweb项目——tomact服务(保姆级别)

idea中导入eclipse的javaweb项目——tomact服务&#xff08;保姆级别&#xff09; 1. 导入项目2. Project Settings下的各种配置步骤2.1 检查/修改 jdk 的引入2.2 配置Modules-Dependencies2.2.1 删掉eclipse相关的多余配置2.2.2 删掉jar包2.2.3 添加tomcat的依赖 2.3 配置Libr…

JMeter定时器

一. 同步定时器&#xff08;Synchronizing Timer) &#xff08;在Loadrunner中叫做集合点&#xff09; 思考&#xff1a; 如何模拟多个用户同时抢一个红包&#xff1f;如何测试电商网站中抢购活动、秒杀活动&#xff1f; 1.1 介绍 Sync Timer的目的是阻塞线程&#xff0c;直…

云原生SIEM解决方案

云原生&#xff08;Cloud Native&#xff09;是一种基于云计算的软件开发和部署方法论&#xff0c;它强调将应用程序和服务设计为云环境下的原生应用&#xff0c;以实现高可用性、可扩展性和灵活性。 云原生的优势有哪些 高可用性&#xff1a;云原生可以实现应用程序的高可用…

分享一下便利店怎么做微信小程序

便利店微信小程序开发&#xff0c;让生意更便捷&#xff01; 在这个数字化时代&#xff0c;微信小程序已经成为一种新的生活方式。它不仅改变了人们的消费习惯&#xff0c;还为各行各业提供了无限商机。对于便利店来说&#xff0c;微信小程序是一个绝佳的营销工具&#xff0c;…

汉诺塔问题

汉诺塔问题 本文部分截图来源&#xff1a;汉诺塔可视化小游戏 移动最终目标&#xff1a;将A柱中的所有盘移动至C柱 移动过程要求&#xff1a;1.每次只能移动一个盘 2.每次移动后必须保证小盘在大盘上方 问题简化 我们先将三个盘&#xff08;n-1&#xff0c;n4&#xff09;看作…

微信小程序clearInterval无法关闭时间间隔器问题解决

今天在微信小程序遇到了一个问题 我的代码是这样的 // 关闭动画函数 AnimationOff() {//定义时间间隔器clearInterval(this.animationTimer) }, DefineAnimation() {//定义时间间隔器this.animationTimer setInterval(() > {console.log("执行");}, 1000) },但是…

C++ - git 命令行

为什么要有 git 你很可能遇到过这种情况&#xff0c;在写项目的时候&#xff0c;要我不符合 leader 的要求&#xff0c;因而修改了很多个版本&#xff0c;但是修改到最后一版的时候&#xff0c;leader 有觉得当前这版还没有之前 某一版好&#xff0c;现在又要求你在 之前的那一…

MyBatis基础之自动映射、映射类型、文件注解双配置

文章目录 自动映射原理jdbcType同时启用配置文件和注解两种配置方式 自动映射原理 在 MyBatis 的配置文件&#xff08;settings 元素部分&#xff09;中&#xff0c;有一个 autoMappingBehavior 配置&#xff0c;其默认值为 PARTIAL &#xff0c;表示 MyBatis 会自动映射&…

Spring实战 | Spring AOP核心秘笈之葵花宝典

Spring实战系列文章&#xff1a; Spring实战 | Spring IOC不能说的秘密&#xff1f; 国庆中秋特辑系列文章&#xff1a; 国庆中秋特辑&#xff08;八&#xff09;Spring Boot项目如何使用JPA 国庆中秋特辑&#xff08;七&#xff09;Java软件工程师常见20道编程面试题 国庆…

SpringBoot日志文件

目录 日志级别 设置日志级别 日志持久化 获取日志的两种方式 1.LoggerFactory.getLogger(类名.class) 2. lombok的slf4j注解和log对象 日志级别 由低到高依次是&#xff1a;trace->debug->info->warn->error->fatal 其中当程序里设置了日志级别后&#xff0c;程…

实验3:左右循环LED灯

获取流水灯工程&#xff1a; 方式一&#xff1a; keilproteus 完成最小系统&#xff0c;点亮led 灯实验_吴小凹的博客-CSDN博客 方式二&#xff1a; Flowing_led.zip - 蓝奏云直接下载。 原理图修改&#xff1a; 无须修改只需要使用流水灯的工程即可&#xff0c;解压到桌面…