基本控件(一)

目录

  • 控件的定义:
    • 使用控件的好处:
  • setupUi
    • widget.h
    • widget.cpp
    • main.cpp

控件的定义:

QT控件是在QT框架下实现的一组用户界面元素,包括按钮、标签、输入框、列表框、滚动条、菜单等等,它们用于快速构建各种应用程序的图形用户界面。

这些控件都是基于QT框架中的QWidget类派生而来的,因此它们共享QWidget的很多特性和方法,如事件处理、尺寸调整、定位、布局等等。此外,QT控件还提供了许多用于自定义与控件交互的方法和信号。

在开发QT应用程序时,开发者可以使用已有的QT控件,也可以基于现有控件进行扩展或创建全新的控件。QT控件可以根据不同的操作系统或主题进行定制,从而实现更好的用户体验。

由于QT控件具有丰富的功能和较高的可定制性,因此在QT开发中使用QT控件可以大大加速开发时间和提高应用程序质量。

使用控件的好处:

1、提高开发效率:QT控件提供了快速完成大部分常见操作的丰富库,能够大大加速开发时间。

2、跨平台支持:QT控件是跨平台的,因此可以方便地构建出能够在不同操作系统上运行的应用程序,同时也可以方便地编写单一代码,降低编码复杂性。

3、易于操作:QT控件提供了简单易懂的API,开发者可以通过这些API快速创建各种交互式界面。

4、高度的可扩展性:QT控件具有高度的定制性和可扩展性,可以通过编写自定义控件、自定义样式表等方式满足各种特定需求,帮助开发者快速实现功能。

setupUi

1、 setupUi 是用于将UI文件中设计界面的控件转化为QT控件并进行初始化的函数。该函数是一个自动生成的函数,位于用户界面类中,通过该类对象的 setupUi 函数来自动初始化所有创建的控件并将它们

连接起来。

2、在界面上拖放好控件之后,点击构建,等待成功,再转定义到 setupUi 函数,那么可以在这个函数的定义里面看到拖放在窗口上面的控件的定义,初始化,可以通过这点来学习如何通过代码实现创建控件,这点对于初学者很友好。

3、在创建好的窗口类中可以看到有一个ui指针,如果想要访问设计界面上面的控件,通过ui指针指向控件对象进行访问。

!!!
注意只有是在设计界面上,拖上去的控件,才会在 setupUi 下面定义,并且在使用的时候,必须要setupUi 之后使用。
!!!

widget.h

#ifndef WIDGET_H
#define WIDGET_H#include <QWidget>
#include <QPushButton>namespace Ui { //命名空间
class Widget;
}class Widget:public QWidget
{Q_OBJECTpublic:explicit Widget(QWidget *parent = 0);~Widget();private slots:void on_toolButton_clicked();void on_checkBox_2_clicked(bool checked);void on_buttonBox_clicked(QAbstractButton *button);void on_pushButton_no_clicked();void on_dial_sliderMoved(int position);private:Ui::Widget *ui; //指向窗口的一个指针,用来用访问在setupui中创建的控件
};#endif // WIDGET_H

widget.cpp

#include "widget.h"
#include "ui_widget.h"#include <QDebug>
#include <QTime>
#include <QTimer>   //计时器Widget::Widget(QWidget *parent):QWidget(parent),ui(new Ui::Widget)
{//ui->pushButton_no->setText("好"); //这句话是错的,因为这个代码在这个位置就意味着在创建pushButton控件之前就执行。ui->setupUi(this);//    QPushButton *pushButton_no; //相当于创建了这个按钮的指针。//1、在new一个控件对象的时候,需要把这个控件放在某个窗口上面显示,那么new对象的时候传参某个窗口对象的地址//2、如果我们的类直接或间接继承QObject那么如果存在窗口对象的时候指定父对象,那么父对象死亡,会带子对象一起死亡
//    pushButton_no = new QPushButton(this); //这里的形参是this指针,符合setupUi头文件里创建新对象是的传入的参数类型
//    pushButton_no->setGeometry(QRect(250, 225, 201, 51));   //设置rect结构
//    QFont font;
//    font.setFamily(QStringLiteral("Consolas"));
//    font.setPointSize(33);
//    font.setBold(true);
//    font.setWeight(75);
//    pushButton_no->setFont(font);
//    pushButton_no->setIcon(QIcon(":/png/downloadsfolder.png")); //设置图标
//    pushButton_no->setIconSize(QSize(32, 32));
//    pushButton_no->setText("这是按钮");//上面的12行代码都是去setupUi的头文件里复制过来的,因为构建之后,setupUi的头文件就有咱创建的一些东西了。//上面的代码说明,不靠手动拖动按钮,单靠代码,也能实现相同的效果。ui->radioButton->setChecked(true);  //设置选中//QCheckBox的判断和QRadioButton的一样//    ui->comboBox->insertItem(0,"A");    //指定位置添加
//    ui->comboBox->addItem("Z");         //尾部添加//ui->comboBox->removeItem(3);    //删除下标为3的,下标从0开始ui->textEdit->setText("asdf");ui->textEdit->insertPlainText("插入内容");ui->textEdit->append("换行添加");ui->plainTextEdit->setPlainText("asdf");ui->plainTextEdit->insertPlainText("插入内容");ui->plainTextEdit->appendPlainText("换行添加");ui->spinBox->setValue(12);  //设置值QTimer *timer=new QTimer(this);timer->start(10);   //时间间隔10毫秒//计时器对象每隔10毫秒就发送一次信号timeout()//计时器是一个回调的过程,还是主线程来执行这个槽函数connect(timer,&QTimer::timeout,this,[=]{ui->dateTimeEdit->setDate(QDate::currentDate());ui->dateTimeEdit->setTime(QTime::currentTime());//while(1);});   //connect函数里有一个闭包lambda表达式[]//    ui->verticalSlider->setMaximum(10);
//    ui->verticalSlider->setMinimum(0);
//    ui->verticalSlider->setValue(999);
}Widget::~Widget()
{delete ui;
}void Widget::on_toolButton_clicked()
{
//    if(ui->radioButton_4->isChecked())
//        qDebug()<<"选中";
//    else
//        qDebug()<<"未选中";//QString str;    //当成std::string进行使用
//    QString str1=ui->comboBox->currentText();   //选中项文字
//    int index=ui->comboBox->currentIndex();     //选中项下标
//    QString str2=ui->comboBox->itemText(2);     //获取下标为2的项的字符串
//    qDebug()<<str1<<index<<str2;//    QFont font = ui->fontComboBox->currentFont();
//    ui->pushButton_no->setFont(font); //设置字体样式,但不设置字体大小
}void Widget::on_checkBox_2_clicked(bool checked)
{if(checked)qDebug()<<"B设备打开";elseqDebug()<<"B设备关闭";
}void Widget::on_buttonBox_clicked(QAbstractButton *button)
{if(ui->buttonBox->button(QDialogButtonBox::Ok)==button) //判断点击的按钮是不是ok{qDebug()<<"你点击了OK";}
}void Widget::on_pushButton_no_clicked()
{//ui->lineEdit->setText("设置的文字");//ui->lineEdit->insert("AAAAA"); //在光标处追加文字//qDebug()<<ui->lineEdit->text(); //这是单行的输出写法//下面是计算器的示例,求和。//QString str=ui->lineEdit->text();
//    int num=str.toInt(); //转换成能计算的数值类型
//    qDebug()<<num;//    qDebug()<<ui->textEdit->toPlainText();
//    qDebug()<<ui->plainTextEdit->toPlainText();qDebug()<<ui->spinBox->value();
}void Widget::on_dial_sliderMoved(int position)
{qDebug()<<position;
}

在这里插入图片描述
这个地方是在.ui文件里创建的两个按钮。

在这里插入图片描述
把图标文件拖动到项目目录下之后,可以通过在源文件这里右键添加现有文件来添加之前有的.qrc文件。

一般这四行用来设置按钮中的文字。其他的写法还是比较复杂一点的。

pushButton_no->setFont(font);
pushButton_no->setIcon(QIcon(":/png/downloadsfolder.png")); //设置图标
pushButton_no->setIconSize(QSize(32, 32));
pushButton_no->setText("这是按钮");

名字中带有add的函数都是尾部添加。

main.cpp

#include "widget.h"
#include <QApplication>
#include <QPushButton>int main(int argc, char *argv[])
{QApplication a(argc, argv);Widget w;QPushButton *button=new QPushButton; //如果这里不指定父对象,程序会把这个按钮当做窗口。所以有了下边的button->show();button->setParent(&w);//通过代码写的按钮,需要自己全部初始化button->setGeometry(QRect(500,400,100,25));button->setText("这是按钮");w.show();//button->show();return a.exec();
}

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

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

相关文章

【Linux】gcc与g++的认识

gcc与g是linux下的编译器&#xff0c; 我们都知道写好了源文件gcc一下就可以得到.exe文件 那么其中会经过几个过程呢&#xff1f;也就是源文件翻译过程&#xff0c; 预处理&#xff08;预编译&#xff09;编译汇编链接 本篇文章的侧重点是围绕链接进行理解C语言标准库 目录 …

Java项目:ssm框架基于spring+springmvc+mybatis框架的民宿预订管理系统设计与实现(ssm+B/S架构+源码+数据库+毕业论文)

一、项目简介 本项目是一套ssm827基于SSM框架的民宿预订管理系统设计与实现&#xff0c;主要针对计算机相关专业的正在做毕设的学生与需要项目实战练习的Java学习者。 包含&#xff1a;项目源码、数据库脚本等&#xff0c;该项目附带全部源码可作为毕设使用。 项目都经过严格调…

POI及EasyExcel学习笔记

POI及EasyExcel学习笔记 组件、工具 POI-Excel概述 Apache POI 结构&#xff1a; HSSF &#xff0d; 提供读写[Microsoft Excel](https://baike.baidu.com/item/Microsoft Excel)格式档案的功能。XSSF &#xff0d; 提供读写Microsoft Excel OOXML格式档案的功能。HWPF &am…

93. 复原 IP 地址 - 力扣(LeetCode)

题目描述 有效 IP 地址 正好由四个整数&#xff08;每个整数位于 0 到 255 之间组成&#xff0c;且不能含有前导 0&#xff09;&#xff0c;整数之间用 ‘.’ 分隔。 例如&#xff1a;“0.1.2.201” 和 “192.168.1.1” 是 有效 IP 地址&#xff0c;但是 “0.011.255.245”、“…

matlab appdesigner系列-常用16-状态按钮

状态按钮&#xff0c;有两个状态&#xff0c;按下状态&#xff0c;返回值为1或true&#xff1b;未按下状态&#xff0c;返回值为0或false 示例&#xff1a;设置一状态按钮&#xff0c;用文本记录其状态 操作步骤&#xff1a; 1&#xff09;将状态按钮、文本区域拖拽到画布上…

LeetCode 热题 100 | 哈希

目录 1 基础知识 1.1 定义哈希表 1.2 遍历哈希表 1.3 查找某一个键 1.4 插入键值对 1.5 获取键值对的值 1.6 搜索功能 2 三道题 2.1 1. 两数之和 2.2 49. 字母异位词分组 2.3 128. 最长连续序列 菜鸟做题第一周&#xff0c;语言是 C 1 基础知识 1.1 定…

对网站进行打点(不要有主动扫描行为)

什么是打点&#xff1f; 简单来说就是获取一个演习方服务器的控制权限。 目的&#xff1a; 1. 上传一个一句话木马 2. 挖到命令执行 3. 挖到反序列化漏洞 4. 钓鱼 假设对“千峰”网站进行打点&#xff1a; 1. 利用平台 1. 利用各类平台&#xff1a; 天眼查-商业查询平…

Unity SnapScrollRect 滚动 匹配 列表 整页

展示效果 原理: 当停止滑动时 判断Contet的horizontalNormalizedPosition 与子Item的缓存值 相减,并得到最小值&#xff0c;然后将Content horizontalNormalizedPosition滚动过去 使用方式&#xff1a; 直接将脚本挂到ScrollRect上 注意&#xff1a;在创建Content子物体时…

Mysql运维篇(二) 主从复制

一路走来,所有遇到的人,帮助过我的、伤害过我的都是朋友,没有一个是敌人,如有侵权请留言,我及时删除。 一、主从复制的原理 主库会生成一个I/O操作线程进去写的的操作,而从库则生成两个线程,其一是I/O读取线程,其二是一个SQL线程。 1、主库将数据的操作记录到一个二进…

C++的流库

1.流的概念 “流”&#xff0c;即“流动”的意思&#xff0c;是物质从一处向另一处流动的过程。在计算机这边通常是指对一种有序连续且具有方向性的数据的抽象描述。 C 中的流一般指两个过程的统一&#xff1a; 信息从外部输入设备&#xff08;键盘&#xff09;向计算机内部…

【数据结构与算法】之字符串系列-20240121

这里写目录标题 一、344. 反转字符串二、125. 验证回文串三、205. 同构字符串四、242. 有效的字母异位词五、290. 单词规律 一、344. 反转字符串 简单 编写一个函数&#xff0c;其作用是将输入的字符串反转过来。输入字符串以字符数组 s 的形式给出。 不要给另外的数组分配额…

k8s集群加入一个master2--kubeadm方式

已经有一个集群&#xff1a; 192.168.206.138 master 192.168.206.136 k8s-node1 192.168.206.137 k8s-node2 kubectl get nodes -o wide 新加入一个master2节点 192.168.206.139 master2 一、初始化系统参数 139 master2 上 #在136、137、138上添加hosts“” echo "…

贪心算法笔记

贪心 1.序列问题1.1摆动序列1.2单调递增的数字 2.多维度权衡2.1分发糖果2.2根据身高重构队列 3.区间问题3.1跳跃问题3.2跳跃问题 II3.3用最小数量的箭引爆气球3.4无重叠区间3.5划分字母区间3.6合并区间 4.其他4.1最大子数组和4.2加油站4.3监控二叉树 正如这个算法的名字一样&am…

【办公类-19-02】20240122图书EXCEL插入列并删除空行

作品展示 背景需求 上次23个班级班主任统计图书&#xff0c;写在EXCEL内 【办公类-19-01】20240108图书统计登记表制作&#xff08;23个班级&#xff09;EXCEL复制表格并合并表格-CSDN博客文章浏览阅读693次&#xff0c;点赞12次&#xff0c;收藏7次。【办公类-19-01】202401…

Unity 编辑器篇|(十三)自定义属性绘制器(PropertyDrawer ,PropertyAttribute) (全面总结 | 建议收藏)

目录 1. 前言2. PropertyDrawer2.1 参数总览2.2 两种用途2.3 注意事项2.4 代码样例 3. PropertyDrawer与PropertyAttribute结合使用 1. 前言 在Unity中&#xff0c;PropertyDrawer和PropertyAttribute是两个重要的工具&#xff0c;它们主要用于自定义属性的显示和行为。Proper…

【JS逆向学习】国家加密系列-SM算法实例

SM系列 1、国家加密算法介绍 事实上从 2010 年开始&#xff0c;我国国家密码管理局就已经开始陆续发布了一系列国产加密算法&#xff0c;其中SM1、SM4、SM7、祖冲之密码&#xff08;ZUC&#xff09;是对称算法&#xff1b;SM2、SM9是非对称算法&#xff1b;SM3是哈希算法。目…

Django框架二

一、模型层及ORM 1.模型层定义 负责跟数据库之间进行通信 2.Django配置mysql 安装mysqlclient&#xff0c;mysqlclient版本最好在13.13以上 pip3 install mysqlclient DATABASES {default: {ENGINE: django.db.backends.mysql,NAME: "mysite1",USER:root,PASSWO…

pip安装之后还是无法使用问题处理

最近由于需要使用到Python 相关功能&#xff0c; 记录下一些入门小技巧 1 python 下载安装 在window10 环境下载免安装版本&#xff0c; 并解压 安装包下载地址&#xff1a; https://www.python.org/ftp/python/3.12.1/python-3.12.1-embed-amd64.zip 2. 安装pip, 由于是内嵌…

【立创EDA-PCB设计基础】5.布线设计规则设置

前言&#xff1a;本文详解布线前的设计规则设置。经过本专栏中的【立创EDA-PCB设计基础】前几节已经完成了布局&#xff0c;接下来开始进行布线&#xff0c;在布线之前&#xff0c;要设置设计规则。 目录 1.间距设置 1.1 安全间距设置 1.2 其它间距设置 2.物理设置 2.1 导…

力扣hot100 合并两个有序链表 递归 双指针

Problem: 21. 合并两个有序链表 文章目录 &#x1f496; 递归思路 &#x1f496; 双指针 &#x1f496; 递归 思路 &#x1f468;‍&#x1f3eb; 参考地址 n , m n,m n,m 分别为 list1 和 list2 的元素个数 ⏰ 时间复杂度: O ( n m ) O(nm) O(nm) &#x1f30e; 空间复杂…