3、QT 的基础控件的使用

news2024/11/16 12:41:02

一、qFileDialog 文件窗体

Header:
#include <QFileDialog> 
qmake:
QT += widgets
Inherits:
QDialog

静态函数接口:

void Widget::on_pushButton_clicked()
{
    //获取单个文件的路径名
    QString filename = QFileDialog :: getOpenFileName(this, 
                                                      tr("Open File"), 
                                                      "./", 
                                                      tr("C File(*.cpp *.c)"));

    ui->label->setText(filename);
}

void Widget::on_pushButton_2_clicked()
{

    //获取多个文件的路径名
    QStringList file = QFileDialog :: getOpenFileNames(this,
                                                       "Select one or more file to open",
                                                       "/home",
                                                       "all(*)");
    for(int i = 0; i < file.length(); i++)
    {
        qDebug() << file.at(i) << endl;;
    }
}

QStringList 的使用:

append(const T &)往list中添加字符串
at(int)const T &//取出字符串中的数据
length()const : int //返回list的元素个数
removeAt(int)//删除某一个

二、QColorDialog 颜色窗体

Header:
#include <QColorDialog> 
qmake:
QT += widgets
Inherits:
QDialog

静态函数接口:

获取颜色值:
----------
QColor  getColor(const QColor &initial =Qt::white, QWidget *parent = nullptr, constQString &title = QString()
QColorDialog::ColorDialogOptions options =ColorDialogOptions())

直接调用全部使用默认参数
----------------------
QColor color = QColorDialog::getColor();

QColor 类的使用:
---------------
//获取当前颜色的R G B 值
void getRgb(int *r, int *g, int *b, int *a= nullptr) const
//获取当前颜色的名称
QString name() const
//设置当前颜色的RGB 值
void setRgb(int r, int g, int b, int a = 255)

练习:

void myColor::on_pushButton_clicked()
{
    //打开一个颜色窗体
    QColor color = QColorDialog :: getColor();

    //获取颜色值
    int r, g, b;
    color.getRgb(&r, &g, &b);
    qDebug() <<  r  << ":"  << g <<":" << b;
    qDebug() << color.name();

    QString c = QString("background-color: rgb(%1,%2,%3);").arg(r).arg(g).arg(b);

    //设置背景颜色
    this->setStyleSheet(c);
}

三、QFontDialog 字体窗口

Header:
#include <QFontDialog> 
qmake:
QT += widgets
Inherits:
QDialog

静态接口:

官方例子:
--------
bool ok;
QFont font = QFontDialog::getFont(&ok,this);
if (ok) {
} else {
}

QFont 类的使用:
--------------
QString family() const 显示当前字体格式
void setFamily(const QString &family) 设置字体格式
int pointSize() const 获取当前字体大小
void setPointSize(int pointSize) 设置字体的大小
//其他控件的字体设置接口
setFont(const QFont &)

练习:

void myFont::on_pushButton_clicked()
{
    bool ok;
    QFont font = QFontDialog :: getFont(&ok, this);

    if(ok)
    {
        qDebug() << "选择字体成功" << endl;
        qDebug() << font.family();//字体的格式
        qDebug() << font.pointSize();//字体的大小

        this->setFont(font);//设置当前界面的字体
    }
    else
    {
        qDebug() << "失败" << endl;

    }
}

四、QInputDialog 文本输入窗体

Header:
#include <QInputDialog>
qmake:
QT += widgets

静态接口

//获取浮点数据
double getDouble(QWidget *parent, const QString&title, const QString &label)
//获取整形
int getInt(QWidget *parent, const QString &title, const QString &label)
//获取列表的数据项
QString getItem(QWidget *parent, const QString &title, const QString &label, constQStringList &items)
//获取文本
QString getText(QWidget *parent, const QString &title, const QString &label)

parent : 依赖的窗体
title:标题
label:提示信息

练习:

//获取浮点数据
void myInput::on_pushButton_clicked()
{
    double date = QInputDialog :: getDouble(this, "请输入浮点数据", "精度为.1", 0, -100, 100, 3);
    ui->label->setNum(date);
}

void myInput::on_pushButton_2_clicked()
{
    //定义一个列表
    QStringList item;

    //往列表中添加内容
    item.append("苹果");
    item.append("雪梨");
    item.append("香蕉");
    item.append("西瓜");

    QString date = QInputDialog :: getItem(this, "请选择", "请选择", item);

    ui->label->setText(date);
}

五、QMessageBox消息窗体

QMessageBox Class
Header:
#include <QMessageBox>
qmake:
QT += widgets

静态函数接口

//关于接口
QMessageBox::about(this,"QT","生产与1998......");

//提示接口
int ret = QMessageBox::warning(this,
tr("My Application"), 
tr("The document has been modified.\n"
"Do youwant to save your changes?"),
QMessageBox::Save | QMessageBox::Discard|QMessageBox::Cancel,
QMessageBox::Save);

在这里插入图片描述
练习:

void myMwssage::on_pushButton_clicked()
{
    int ret = QMessageBox :: warning(this, tr("温馨提示"),
                                           tr("今天吃饭了吗"),
                                           QMessageBox :: Yes | QMessageBox :: No);
    if(ret == QMessageBox :: Yes)
    {
        QMessageBox :: warning(this, tr("温馨提示"),
                                     tr("健康生活从吃饭开始\n"),
                                     QMessageBox :: Ok);
    }
    else if(ret == QMessageBox :: No)
    {
        QMessageBox :: warning(this, tr("温馨提示"),
                                     tr("乖乖,宝宝,快去吃饭\n"),
                                     QMessageBox :: Ok);
    }
}

按钮的选择:

在这里插入图片描述

六、QT基础控件的使用

1、Layouts布局控件的使用

在这里插入图片描述
2、Spacer控件的使用

在这里插入图片描述
3、Button控件的使用

在这里插入图片描述
①、pushbutton的使用

setIcon(const QIcon &) //设置按钮的小图标
setIconSize(const QSize &) //设置按钮的小图标大小
setEnabled(bool) //设置按钮是否能点击

按钮的信号:
----------
void clicked(bool checked = false) 单击
void pressed() 按下
void released() 松开
void toggled(bool checked) 状态切换

②、QToolButton的使用

//选择的菜单信号
void triggered(QAction *action)
//设置工具按钮的菜单
void setMenu(QMenu *menu)
QMenu 类的使用
--------------
QMenu(const QString &title, QWidget *parent = nullptr)
QAction *addAction(const QString &text) //添加菜单
QAction *addAction(const QIcon &icon, constQString &text)
//显示菜单
ui->toolButton->showMenu();

练习:

#include "mybutton.h"
#include "ui_mybutton.h"
#include "QMenu"

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

    //设置按钮的状态为不可点击
    ui->pushButton->setEnabled(true);

     //设置菜单
    ui->toolButton->setText("菜单栏");

    QMenu *m = new QMenu("我的菜单");

    m->addAction("辣椒炒辣椒");
    m->addAction("鸡蛋炒鸡蛋");
    m->addAction("红烧番薯");

    ui->toolButton->setMenu(m);
}

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

void myButton::on_toolButton_triggered(QAction *arg1)
{
    QString str = arg1->text();

    ui->label->setText(str);
}

void myButton::on_toolButton_clicked()
{
    ui->toolButton->showMenu();
}

//点击radioButton
void myButton::on_radioButton_clicked(bool checked)
{
    if(checked)
    {
        ui->label->setText("选中");
    }
    else
    {
        ui->label->setText("松开");
    }
}

void myButton::on_checkBox_clicked(bool checked)
{
    ui->label->setText(ui->checkBox->text());
}

void myButton::on_checkBox_stateChanged(int arg1)
{
    ui->label->setNum(arg1);
}

七、item widget 视图的使用

1、listWidget的使用

QListWidget Class
Header:
#include <QListWidget>
qmake:
QT += widgets

接口函数

添加列表项信息:
void addItem(const QString &label)
void addItem(QListWidgetItem *item)
void addItems(const QStringList &labels)
-------------
在第几行插入:
void insertItem(int row, const QString&label)
-------------
取第几行的信息:
QListWidgetItem *item(int row) const
-------------
去除第几行:
QListWidgetItem *takeItem(int row)

-------------------选择信号-------------------------
void currentRowChanged(int currentRow) //选择第几行信号
void itemClicked(QListWidgetItem *item) //点击信号
void itemDoubleClicked(QListWidgetItem*item)//双击信号

-------------------QListWidgetItem类的使用-------------------------
QListWidgetItem(const QString &text);
QListWidgetItem(const QIcon &icon, constQString &text);

练习:

#include "mylistwidget.h"
#include "ui_mylistwidget.h"
#include <QFileDialog>

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

    //添加字符
    ui->listWidget->addItem("小花");

    //添加图标
    ui->listWidget->addItem(new QListWidgetItem(QIcon("D:/2024/QT_Creator/003/work/pic/ma.jpg"), "二维码"));
}

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

//双击取出list中的内容
void mylistWidget::on_listWidget_itemDoubleClicked(QListWidgetItem *item)
{
    QString str = item->text();

    ui->label->setText(str);
}

void mylistWidget::on_pushButton_clicked()
{
    //获取图片名称
    QStringList file = QFileDialog :: getOpenFileNames(this,
                                                       "Select one or more files to open",
                                                       "/home",
                                                       "Image(*.png *.jpg)");
    //添加图片名字进入lisi
    ui->listWidget->addItems(file);
}

八、treeWidget的使用

1、添加列信息

在这里插入图片描述

2、添加项目信息

在这里插入图片描述

接口函数:

双击信号:
void itemDoubleClicked(QTreeWidgetItem *item, int column)
取出用户选择的数据:
QString msg = item->text(column); //根据行号取出数据

练习:

#include "mytreewidget.h"
#include "ui_mytreewidget.h"
#include <QDebug>

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

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

//双击表格信号
void mytreeWidget::on_treeWidget_itemDoubleClicked(QTreeWidgetItem *item, int column)
{
    QString msg = item->text(column);

    qDebug() << msg << endl;
}

九、tableWidget的使用

1、添加列的信息

在这里插入图片描述

2、添加行的信息

在这里插入图片描述

接口函数

设置第几行第几列的信息
void setItem(int row, int column, QTableWidgetItem *item)
QTableWidgetItem类的构造函数:
QTableWidgetItem(const QString &text);

信号:
void cellDoubleClicked(int row, int column)//取出用户点击的行与列
void itemDoubleClicked(QTableWidgetItem *item) //取出点击的item

练习:设计一个表格,并往表格中插入 3个学生信息,列 姓名,班级 ,成绩

#include "mytabelwidget.h"
#include "ui_mytabelwidget.h"
#include <QTableWidgetItem>
#include <QDebug>

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

    //初始化表格信息(需要先有表格才能插入)
    ui->tableWidget->setItem(0,0,new QTableWidgetItem("小明"));
    ui->tableWidget->setItem(0,1,new QTableWidgetItem("178"));
    ui->tableWidget->setItem(0,2,new QTableWidgetItem("100"));

    ui->tableWidget->setItem(1,0,new QTableWidgetItem("小华"));
    ui->tableWidget->setItem(1,1,new QTableWidgetItem("170"));
    ui->tableWidget->setItem(1,2,new QTableWidgetItem("90"));

    ui->tableWidget->setItem(2,0,new QTableWidgetItem("小花"));
    ui->tableWidget->setItem(2,1,new QTableWidgetItem("170"));
    ui->tableWidget->setItem(2,2,new QTableWidgetItem("80"));
}

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

//双击取出选中信息
void mytabelWidget::on_tableWidget_itemDoubleClicked(QTableWidgetItem *item)
{
    qDebug() << item->text();
}

十、contain Box 的使用

1、toolBox

在这里插入图片描述

2、tabWidget

在这里插入图片描述
在这里插入图片描述

练习:模仿Windows 的图片浏览器制作一个图片浏览器
在这里插入图片描述

#include "mywork.h"
#include "ui_mywork.h"
#include <QMenu>
#include <QDebug>
#include <QFileDialog>
#include <QPixmap>
#include <QMessageBox>

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

    ui->toolButton->setEnabled(true);
    QMenu *tool_Menu = new QMenu;
    tool_Menu->addAction("打开文件");

    ui->toolButton->setMenu(tool_Menu);
}

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

//选择文件中的图片
void myWork::on_toolButton_triggered(QAction *arg1)
{
    if(arg1->text() == "打开文件")
    {
        QStringList list = QFileDialog :: getOpenFileNames(this,
                                                           "打开图片文件",
                                                           "D:/picture",
                                                           "image(*.jpg *.png)");

        ui->listWidget->addItems(list);

        //获得listWidget列表的个数
        pic_Maxcount = ui->listWidget->count();
    }
}

//选择选项
void myWork::on_toolButton_clicked()
{
    ui->toolButton->showMenu();
}


//双击显示图片
void myWork::on_listWidget_itemDoubleClicked(QListWidgetItem *item)
{
    pic_Index = ui->listWidget->row(item);
    QPixmap pic = QPixmap(item->text());
    pic = pic.scaled(ui->label->width(), ui->label->height());

    ui->label->setPixmap(pic);
}


//前一张图片
void myWork::on_pushButton_clicked()
{
    if(--pic_Index < 0)
    {
        pic_Index = pic_Maxcount - 1;
    }

    QPixmap pic = QPixmap(ui->listWidget->item(pic_Index)->text());
    pic = pic.scaled(ui->label->width(), ui->label->height());

    ui->label->setPixmap(pic);
    pha = 0;
}

//后一张图片
void myWork::on_pushButton_2_clicked()
{
    if(++pic_Index > pic_Maxcount - 1)
    {
        pic_Index = 0;
    }

    QPixmap pic = QPixmap(ui->listWidget->item(pic_Index)->text());
    pic = pic.scaled(ui->label->width(), ui->label->height());

    ui->label->setPixmap(pic);
    pha = 0;
}

//左转
void myWork::on_pushButton_3_clicked()
{
    pha = (pha + 45) % 360;;
    QString str = ui->listWidget->item(pic_Index)->text();
    QPixmap pic = QPixmap(str);
    QTransform a;
    a.rotate(pha);

    pic = pic.transformed(a);
    pic = pic.scaled(ui->label->width(), ui->label->height());

    ui->label->setPixmap(pic);
}
//右转
void myWork::on_pushButton_4_clicked()
{
    pha = (pha - 45) % 360;;
    QString str = ui->listWidget->item(pic_Index)->text();
    QPixmap pic = QPixmap(str);
    QTransform a;
    a.rotate(pha);

    pic = pic.transformed(a);
    pic = pic.scaled(ui->label->width(), ui->label->height());

    ui->label->setPixmap(pic);
}

//关于本程序(使用QMessageBox消息窗体)
void myWork::on_toolButton_2_clicked()
{

    QMessageBox::StandardButton result = QMessageBox::information(this,
                                                                  tr("关于"),
                                                                  tr("生产与1998"),
                                                                  QMessageBox :: Ok);
}

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

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

相关文章

【taro react】(游戏) ---- 贪吃蛇

1. 预览 2. 实现思路 实现食物类&#xff0c;食物坐标和刷新食物的位置&#xff0c;以及获取食物的坐标点&#xff1b;实现计分面板类&#xff0c;实现吃食物每次的计分以及积累一定程度的等级&#xff0c;实现等级和分数的增加&#xff1b;实现蛇类&#xff0c;蛇类分为蛇头和…

16 Linux之JavaEE定制篇-搭建JavaEE环境

16 Linux之JavaEE定制篇-搭建JavaEE环境 文章目录 16 Linux之JavaEE定制篇-搭建JavaEE环境16.1 概述16.2 安装JDK16.3 安装tomcat16.4 安装idea2020*16.5 安装mysql5.7 学习视频来自于B站【小白入门 通俗易懂】2021韩顺平 一周学会Linux。可能会用到的资料有如下所示&#xff0…

Matlab图像处理-灰度插值法

最近邻法 最近邻法是一种最简单的插值算法&#xff0c;输出像素的值为输入图像中与其最邻近的采样点的像素值。是将(u0,v0)(u_0,v_0)点最近的整数坐标u,v(u,v)点的灰度值取为(u0,v0)(u_0,v_0)点的灰度值。 在(u0,v0)(u_0,v_0)点各相邻像素间灰度变化较小时&#xff0c;这种方…

使用ELK收集解析nginx日志和kibana可视化仪表盘

文章目录 ELK生产环境配置filebeat 配置logstash 配置 kibana仪表盘配置配置nginx转发ES和kibanaELK设置账号和密码 ELK生产环境配置 ELK收集nginx日志有多种方案&#xff0c;一般比较常见的做法是在生产环境服务器搭建filebeat 收集nginx的文件日志并写入到队列&#xff08;k…

图解 STP

网络环路 现在我们的生活已经离不开网络&#xff0c;如果我家断网&#xff0c;我会抱怨这什么破网络&#xff0c;影响到我刷抖音、打游戏&#xff1b;如果公司断网&#xff0c;那老板估计会骂娘&#xff0c;因为会影响到公司正常运转&#xff0c;直接造成经济损失。网络通信中&…

传统分拣弊端明显,AI机器视觉赋能物流行业包裹分类产线数智化升级

随着电子商务的快速发展&#xff0c;物流行业的包裹数量持续增长&#xff0c;给物流企业带来了巨大的运营压力。目前&#xff0c;国内大型物流运转中心已开始采用机器视觉自动化设备&#xff0c;但多数快递公司处于半自动化状态&#xff0c;中小型物流分拣中心目前仍靠人工录入…

iOS系统修复软件 Fix My iPhone for Mac

Fix My iPhone for Mac是一款iOS系统恢复工具。修复您的iPhone卡在Apple徽标&#xff0c;黑屏&#xff0c;冻结屏幕&#xff0c;iTunes更新/还原错误和超过20个iOS 12升级失败。这个macOS桌面应用程序提供快速&#xff0c;即时的解决方案来修复您的iOS系统问题&#xff0c;而不…

基于单片机的遥控器设计

一、项目介绍 随着科技的不断发展&#xff0c;红外遥控器已经成为我们日常生活中普遍使用的一种电子设备。它能够给我们带来便捷和舒适&#xff0c;减少人工操作的繁琐性。然而&#xff0c;在实际应用中&#xff0c;有时候我们可能需要制作一个自己的红外遥控器&#xff0c;以…

【云原生进阶之PaaS中间件】第一章Redis-2.4缓存更新机制

1 缓存和数据库的数据一致性分析 1.1 Redis 中如何保证缓存和数据库双写时的数据一致性&#xff1f; 无论先操作db还是cache&#xff0c;都会有各自的问题&#xff0c;根本原因是cache和db的更新不是一个原子操作&#xff0c;因此总会有不一致的问题。想要彻底解决这种问题必须…

目标检测YOLO算法,先从yolov1开始

学习资源 有一套配套的学习资料&#xff0c;才能让我们的学习事半功倍。 yolov1论文原址&#xff1a;You Only Look Once: Unified, Real-Time Object Detection 代码地址&#xff1a;darknet: Convolutional Neural Networks (github.com) 深度学习经典检测方法 one-stag…

React 18 对 state 进行保留和重置

参考文章 对 state 进行保留和重置 各个组件的 state 是各自独立的。根据组件在 UI 树中的位置&#xff0c;React 可以跟踪哪些 state 属于哪个组件。可以控制在重新渲染过程中何时对 state 进行保留和重置。 UI 树 浏览器使用许多树形结构来为 UI 建立模型。DOM 用于表示 …

3DCAT携手华为,打造XR虚拟仿真实训实时云渲染解决方案

2023年5月8日-9日&#xff0c;以 因聚而生 众志有为 为主题的 华为中国合作伙伴大会2023 在深圳国际会展中心隆重举行。本次大会汇聚了ICT产业界的广大新老伙伴朋友&#xff0c;共同探讨数字化转型的新机遇&#xff0c;共享数字化未来的新成果。 华为中国合作伙伴大会2023现场&…

Python小知识 - 使用Python进行数据分析

使用Python进行数据分析 数据分析简介 数据分析&#xff0c;又称为信息分析&#xff0c;是指对数据进行综合处理、归纳提炼、概括总结的过程&#xff0c;是数据处理的第一步。 数据分析的目的是了解数据的内在规律&#xff0c;为数据挖掘&#xff0c;并应用于商业决策、科学研究…

04ShardingSphere-JDBC垂直分片

1、准备服务器 比如商城项目中&#xff0c;有用户、订单等系统&#xff0c;数据库在设计时用户信息与订单信息在同一表中。这里创建用户服务、订单服务实现数据库的用户信息和订单信息垂直分片 服务器规划&#xff1a;使用docker方式创建如下容器 服务器&#xff1a;容器名se…

P13 VUE 二级menu实现

主要修改以下几个点&#xff1a; CommonAside.vue中 外层便利有孩子节点&#xff0c;关键词key是对应的标签&#xff0c;class动态图表渲染 内层遍历不能再用item&#xff0c;用subitem&#xff0c;遍历该item.childeren&#xff0c;关键词是path&#xff0c; <templat…

java 批量下载将多个文件(minio中存储)压缩成一个zip包

我的需求是将minio中存储的文件按照查询条件查询出来统一压成一个zip包然后下载下来。 思路&#xff1a;针对这个需求&#xff0c;其实可以有多个思路&#xff0c;不过也大同小异&#xff0c;一般都是后端返回流文件前端再处理下载&#xff0c;也有少数是压缩成zip包之后直接给…

【C++设计模式】详解装饰模式

2023年8月31日&#xff0c;周四上午 这是我目前碰到的最难的设计模式..... 非常难以理解而且比较灵活多半&#xff0c;学得贼难受&#xff0c;写得贼费劲..... 2023年8月31日&#xff0c;周四晚上19:48 终于写完了&#xff0c;花了一天的时间来学习装饰模式和写这篇博客。 …

《Kubernetes部署篇:Ubuntu20.04基于二进制安装安装kubeadm、kubelet和kubectl》

一、背景 由于客户网络处于专网环境下&#xff0c; 使用kubeadm工具安装K8S集群&#xff0c;由于无法连通互联网&#xff0c;所有无法使用apt工具安装kubeadm、kubelet、kubectl&#xff0c;当然你也可以使用apt-get工具在一台能够连通互联网环境的服务器上下载kubeadm、kubele…

说说Kappa架构

分析&回答 对于实时数仓而言&#xff0c;Lmabda架构有很明显的不足&#xff0c;首先同时维护两套系统&#xff0c;资源占用率高&#xff0c;其次这两套系统的数据处理逻辑相同&#xff0c;代码重复开发。 能否有一种架构&#xff0c;只需要维护一套系统&#xff0c;就可以…

【核磁共振成像】相位差重建

目录 一、相位差map重建一般步骤和反正切函数主值范围二、反正切运算三、可预期相位误差和伴随场的校正四、图形变形校正 一、相位差map重建一般步骤和反正切函数主值范围 MRI是一个相敏成像模态&#xff0c;MR原始数据傅里叶变换后的复数图像中每个像素值有模和相位。标准模重…