qt:按钮的常见操作(简单方向键项目)

1.圆形按钮

首先,设置圆形按钮,首先要将setGeometry(x位置,y位置,长,宽)中的长和宽设置为相等,再使用一下模板

   q2->setStyleSheet("QPushButton {"
                     "    background-color: black;"
                     "    color: white;"
                     "    border-radius: 25px;"
                     "    border: none;"
                     "}");

将border_radius设置为长或宽的一半,就可以得到一个圆形按钮了

 

 

2.图片按钮

   cq->setIcon(icon);
   cq->setIconSize(QSize(100,50));

那么问题来了,如何在图片上显示字呢?

最好的方法是在图片上直接p,如果使用样式表就需要绝对路径,一般不会使用绝对路径 

3.按钮快捷键

   方法

up->setShortcut(QKeySequence("w"));

up是按钮,而且w的位置也可以是ctrl+w等组合键

在使用这钟快捷键方式后,不点击小兔子,点键盘上的wasd,就能控制猫的移动了

4. 重复触发

键盘:默认支持

鼠标:setAutoReapeat,setAutoReapeatDelay(触发延迟),setAutoReapeatInterval(触发间隔)

  up->setAutoRepeat(true);
    down->setAutoRepeat(true);
     left->setAutoRepeat(true);
      right->setAutoRepeat(true);

现在按住兔子,猫就可以一直向上了

5.选择按钮

QRaioButton,属性:checkable:能否被选中,true表示可以被选中,false表示不可以,checked,表示是否已经被选中

对应槽函数,clicked是点击时,pressed是鼠标按下时,released是鼠标释放时,toggled是checked属性改时(最适合)

所有按钮默认排他,QButtonGroup可以进行分组,组内排他,QCheckbox可以复选

应用:模拟菜单(选择标题可以将按钮和标签放入一个显示组里面管理,具体可以看代码)

注意,QButtonGroup默认排他,在对复选按钮进行管理时需要setExclusive函数取消排他性,要设置标签的话可以在旁边搞一个不可选中的黑底白字按钮,或进行显示控制(之后会讲)

代码

pro

QT       += core gui
QMAKE_PROJECT_DEPTH = 0

greaterThan(QT_MAJOR_VERSION, 4): QT += widgets

CONFIG += c++17

# You can make your code fail to compile if it uses deprecated APIs.
# In order to do so, uncomment the following line.
#DEFINES += QT_DISABLE_DEPRECATED_BEFORE=0x060000    # disables all the APIs deprecated before Qt 6.0.0

SOURCES += \
    main.cpp \
    mainwindow.cpp

HEADERS += \
    mainwindow.h

FORMS += \
    mainwindow.ui

# Default rules for deployment.
qnx: target.path = /tmp/$${TARGET}/bin
else: unix:!android: target.path = /opt/$${TARGET}/bin
!isEmpty(target.path): INSTALLS += target

 .h

#ifndef MAINWINDOW_H
#define MAINWINDOW_H

#include <QMainWindow>
#include<QPushButton>
#include<QRadioButton>
#include<QCheckBox>
#include<QButtonGroup>
#include<QGroupBox>
QT_BEGIN_NAMESPACE
namespace Ui {
class MainWindow;
}
QT_END_NAMESPACE

class MainWindow : public QMainWindow
{
    Q_OBJECT

public:
    MainWindow(QWidget *parent = nullptr);

    ~MainWindow();
public slots:
    void getup();
    void getdown();
    void getleft();
    void getright();
private:
    Ui::MainWindow *ui;
    QPushButton*example;
    QPushButton*up;
    QPushButton*down;
    QPushButton*left;
    QPushButton*right;
    QRadioButton*q1;
    QRadioButton*q2;
    QCheckBox*q3;
    QCheckBox*q4;
    QCheckBox*q5;
   QButtonGroup*g1;
    QButtonGroup*g2;
};
#endif // MAINWINDOW_H

main

#include "mainwindow.h"

#include <QApplication>

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

.cpp

#include "mainwindow.h"
#include "ui_mainwindow.h"
#include<QLabel>
#include<QVBoxLayout>
MainWindow::MainWindow(QWidget *parent)
    : QMainWindow(parent)
    , ui(new Ui::MainWindow)
{
    ui->setupUi(this);
    example=new QPushButton(this);

    up=new QPushButton(this);
    down=new QPushButton(this);
    left=new QPushButton(this);
    right=new QPushButton(this);
    example->setGeometry(100,100,50,50);
     up->setGeometry(375,200,100,100);
     down->setGeometry(375,400,100,100);
     left->setGeometry(275,300,100,100);
     right->setGeometry(475,300,100,100);
    QIcon cat("D:/project/cat.jpg");
    example->setIcon(cat);
    example->setIconSize(QSize(55,75));
     QIcon upsign("D:/project/p1.jpg");
    up->setIcon(upsign);
     up->setIconSize(QSize(100,100));
    down->setIcon(upsign);
    down->setIconSize(QSize(100,100));
    left->setIcon(upsign);
    left->setIconSize(QSize(100,100));
    right->setIcon(upsign);
    right->setIconSize(QSize(100,100));
    up->setShortcut(QKeySequence("w"));
     down->setShortcut(QKeySequence("s"));
     left->setShortcut(QKeySequence("a"));
      right->setShortcut(QKeySequence("d"));
     up->setAutoRepeat(true);
    down->setAutoRepeat(true);
     left->setAutoRepeat(true);
      right->setAutoRepeat(true);
    connect(up,&QPushButton::clicked,this,&MainWindow::getup);
    connect(down,&QPushButton::clicked,this,&MainWindow::getdown);
    connect(left,&QPushButton::clicked,this,&MainWindow::getleft);
    connect(right,&QPushButton::clicked,this,&MainWindow::getright);
    q1=new QRadioButton("麦辣鸡腿",this);
    q1->setGeometry(600,100,100,100);
    q2=new QRadioButton("双层吉士",this);
    q2->setGeometry(500,100,100,100);
    q3=new QCheckBox("蛋挞",this);
    q3->setGeometry(100,200,100,100);
    q4=new QCheckBox("可乐",this);
    q4->setGeometry(100,300,100,100);
    q5=new QCheckBox("雪碧",this);
    q5->setGeometry(100,400,100,100);
    g1=new QButtonGroup(this);
    g2=new QButtonGroup(this);
    g1->addButton(q1);
    g1->addButton(q2);
    g2->setExclusive(false);
    g2->addButton(q3);
    g2->addButton(q4);
   g2->addButton(q5);
    //QLabel*l=new QLabel("汉堡",this);
  //  l->setGeometry(400,100,100,100);
  //  QVBoxLayout *layout = new QVBoxLayout(this);
   // layout->addWidget(l);
   // layout->addWidget(q1);
   // layout->addWidget(q2);


}
void MainWindow::getup()
{
    QPoint mypos = example->pos();
  mypos.setY(mypos.y() -5);
    example->move(mypos);
}void MainWindow::getdown()
{
    QPoint mypos = example->pos();
    mypos.setY(mypos.y() +5);
    example->move(mypos);
}
void MainWindow::getleft()
{
    QPoint mypos = example->pos();
    mypos.setX(mypos.x() - 5);
    example->move(mypos);
}
void MainWindow::getright()
{
    QPoint mypos = example->pos();
    mypos.setX(mypos.x() + 5);
    example->move(mypos);
}
MainWindow::~MainWindow()
{
    delete ui;
}

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

SAP-ABAP:外部断点设置详解

在 SAP 中打外部断点&#xff08;External Breakpoint&#xff09;是调试 ABAP 程序的一种常用方法&#xff0c;尤其是在调试标准程序、增强或用户出口时。外部断点允许开发人员在特定用户或特定会话中触发断点&#xff0c;而不会影响其他用户。以下是使用外部断点时需要注意的…

springboot399-中文社区交流平台(源码+数据库+纯前后端分离+部署讲解等)

&#x1f495;&#x1f495;作者&#xff1a; 爱笑学姐 &#x1f495;&#x1f495;个人简介&#xff1a;十年Java&#xff0c;Python美女程序员一枚&#xff0c;精通计算机专业前后端各类框架。 &#x1f495;&#x1f495;各类成品Java毕设 。javaweb&#xff0c;ssm&#xf…

(9/100)每日小游戏平台系列

项目地址位于&#xff1a;小游戏导航 新增一个跳跃小方块&#xff01; 游戏简介 跳跃小方块&#xff08;Jumping Square&#xff09;是一款轻松有趣的休闲小游戏&#xff0c;考验玩家的反应速度和操作技巧。玩家需要控制一个蓝色小方块&#xff0c;通过点击屏幕或按下空格键进…

React实现自动滚动表格

在 React 中实现一个自动滚动的表格&#xff0c;可以通过 CSS 动画和 JavaScript 定时器来实现。以下是一个完整的示例代码&#xff0c;包含示例数据和自动滚动功能。 实现思路&#xff1a; ** 自动滚动&#xff1a;** 使用 setInterval 实现表格的自动滚动。 手动滚动&…

数字滤波器的设计实现及应用(论文+仿真)

3.1系统总体设计 对于本次毕业设计的课题基于DSP的IIR数字滤波器来说&#xff0c;在此选用了TI公司的DSP芯片TMS320F5402芯片来作为数字滤波器的主控制器&#xff0c;另外再采用高速AD模拟到数字转换芯片来进行输入信号的采样&#xff0c;以此将采集到的信号输出给主控制器进行…

Blackbox.AI:高效智能的生产力工具新选择

前言 在当今数字化时代&#xff0c;一款高效、智能且功能全面的工具对于开发者、设计师以及全栈工程师来说至关重要。Blackbox.AI凭借其独特的产品特点&#xff0c;在众多生产力工具中脱颖而出&#xff0c;成为了我近期测评的焦点。以下是我对Blackbox.AI的详细测评&#xff0…

Ollama DeepSeek + AnythingLLM 实现本地私有AI知识库

Ollama DeepSeek AnythingLLM 实现本地私有AI知识库 本地部署DeepSeek-r1下载安装AnythingLLMAnythingLLM 配置LLM首选项Embedder首选项向量数据库工作区其他配置 AnythingLLM Workspace使用上传知识词嵌入知识检索 本文主要介绍了如何使用AnythingLLM结合Ollama部署的DeepSee…

用 Python 实现 DeepSeek R1 本地化部署

DeepSeek R1 以其出色的表现脱颖而出&#xff0c;不少朋友想将其本地化部署&#xff0c;网上基于 ollama 的部署方式有很多&#xff0c;但今天我要带你领略一种全新的方法 —— 使用 Python 实现 DeepSeek R1 本地化部署&#xff0c;让你轻松掌握&#xff0c;打造属于自己的 AI…

在Windows和Linux平台上使用c++获取文件当前路径

.h #include <iostream> #include <string> #ifdef _WIN32 #include <windows.h> // 包含Windows API定义 #else #include <limits.h> // 为了PATH_MAX #include <unistd.h> // 为了getcwd #endif // _WIN32 using namespace std; #ifdef _WIN…

LabVIEW 中的 3dgraph.llb库

3dgraph.llb 库位于C:\Program Files (x86)\National Instruments\LabVIEW 2019\vi.lib\Platform目录下&#xff0c;是 LabVIEW 系统里用于 3D 图形相关操作的关键库。它为 LabVIEW 用户提供众多功能&#xff0c;可在应用程序内创建、显示和交互各类 3D 图形&#xff0c;极大增…

【linux】更换ollama的deepseek模型默认安装路径

【linux】更换ollama的deepseek模型默认安装路径 文章目录 【linux】更换ollama的deepseek模型默认安装路径Ollama 默认安装路径及模型存储路径迁移ollama模型到新的路径1.创建新的模型存储目录2.停止ollama3.迁移现有模型4.修改 Ollama 服务配置5.重启ollama6.验证迁移是否成功…

【学习】验证数独的正确性

源于面试的一个问题&#xff0c;在leetcode里也有这道题&#xff0c;参考站内的一篇文章。 首先此问题的分析需要满足三个约束条件&#xff1a; 每行不能有重复的数每列不能有重复的数每个3*3的方格中不能有重复的数 其中前两个约束条件都是容易满足的&#xff0c;关键在第三…

进阶——第十六届蓝桥杯嵌入式熟练度练习(eeprom的读写)

在MX中开启PB6,PB7 读函数 uint8_t eeprom_read(uint8_t addr) {I2CStart();I2CSendByte(0xa0);I2CWaitAck();I2CSendByte(addr);I2CWaitAck();I2CStart();I2CSendByte(0xa1);I2CWaitAck();dataI2CReceiveByte();I2CSendNotAck();I2CStop();return data; } 写函数 void eep…

哈希表(C语言版)

文章目录 哈希表原理实现(无自动扩容功能)代码运行结果 分析应用 哈希表 如何统计一段文本中&#xff0c;小写字母出现的次数? 显然&#xff0c;我们可以用数组 int table[26] 来存储每个小写字母出现的次数&#xff0c;而且这样处理&#xff0c;效率奇高。假如我们想知道字…

Java 富文本编辑器

所有桌面工具包都提供文本编辑控件&#xff0c;范围从最基础的到更高级的选项。但富文本编辑呢&#xff1f;是否有控件允许用户格式化文本并添加图片&#xff1f;有没有可以在 Java 应用程序中使用的 WYSIWYG 编辑器&#xff1f; 在本文中&#xff0c;我们将探讨如何使用 JxBr…

几道常见的链表算法题

1. 两数相加 题目描述 Leetcode:给定两个非空链表来表示两个非负整数。位数按照逆序方式存储&#xff0c;它们的每个节点只存储单个数字。将两数相加返回一个新的链表。 你可以假设除了数字 0 之外&#xff0c;这两个数字都不会以零开头。 示例&#xff1a; 输入&#xff1a;…

STM32——HAL库开发笔记20(定时器1—时基单元)(参考来源:b站铁头山羊)

一、定义 单片机中的定时器&#xff08;Timer&#xff09;是一a个非常重要的外设模块&#xff0c;用于生成精确的时间延迟、测量时间间隔、产生PWM信号等。定时器的核心是一个计数器&#xff0c;它通过对时钟信号进行计数来实现时间相关的功能。 时钟树为定时器提供时钟信号&…

字符串操作总结(C# and Lua)

C# 获取字符串长度 字符串拼接 替换字符串 分割字符串 截取字符串 判断子串是否存在 转大写字母 转小写字母 剔除空白符 首尾匹配 查找索引 插入字符串 Lua 声明字符串 获取字符串长度 例子 &#xff1a;local str "123abc我" 长度 #str 9 string.len(str) …

ComfyUI的安装

ComfyUI的安装 1、访问官网进行下载 https://github.com/comfyanonymous/ComfyUI 2、下载完成后解压、双击运行run_nvidia_gpu.bat 3、进入主页面&#xff0c;可以开始玩耍了

新数据结构(11)——Java类的产生和反射

反射是获取类信息的一种能力 类信息包括属性、方法、构造器、父类、接口等 类信息的来源 来自类的加载器&#xff0c;这是从.class文件到内存中的java虚拟器&#xff08;JVM&#xff09;中间的一个阶段&#xff08;如下图&#xff09; 类的加载器里&#xff0c;用Field数组存…