Qt开发学习笔记01

设置窗口背景图

  1. 在 .h 文件中添加引用和方法

    #include <QPainter>
    #include <QPixmap>
    void paintEvent(QPaintEvent *);
    
  2. .cpp 文件中实现 paintEvent

    void sur_dev::paintEvent(QPaintEvent *ev)
    {QPainter painter(this);QPixmap pix;pix.load(":/image/bj01.png");painter.drawPixmap(0,0,1280,800,pix);pix.load(":/image/bj02.png");painter.drawPixmap(0,262,1280,276,pix);
    }
    

添加文本

QLabel *label = new QLabel(this);
label->setText("SUR一次性生物摇摆器");
label->setGeometry(210, 31, 311, 32);
QFont font("黑体",18);
label->setFont(font);

新建按钮

 const QString BUT_SHEET0 = "background-color: rgb(115, 184, 225);color: rgb(255, 255, 255);border-radius: 20px;font: 18px 'Roboto'";const QString BUT_SHEET1 = "background-color: rgb(233, 231, 242);color: rgb(16, 16, 16);border-radius: 20px;font: 18px 'Roboto'";QPushButton *chinese = new QPushButton("中文", this);chinese->setGeometry(1007, 23, 80, 40);chinese->setStyleSheet(BUT_SHEET0);QPushButton *ru = new QPushButton("RU", this);ru->setGeometry(1094, 23, 80, 40);ru->setStyleSheet(BUT_SHEET1);QPushButton *en = new QPushButton("EN", this);en->setGeometry(1181, 23, 80, 40);en->setStyleSheet(BUT_SHEET1);

新建常量文件

示例:

新建文件:constStr.h

#define CONSTSTR_H#include <QString>const QString BUT_SHEET0 = "background-color: rgb(115, 184, 225);color: rgb(255, 255, 255);border-radius: 20px;font: 18px 'Roboto'";
const QString BUT_SHEET1 = "background-color: rgb(233, 231, 242);color: rgb(16, 16, 16);border-radius: 20px;font: 18px 'Roboto'";const QString LABEL_TEXT = "SUR一次性生物摇摆器";
const QString BUTTON_TEXT_CN = "中文";
const QString BUTTON_TEXT_RU = "RU";
const QString BUTTON_TEXT_EN = "EN";

第二种方式

#define GLOBAL_WIDE 1280
#define GLOBAL_HIGH 800

QLineEdit 限制输入

//只允许大小写字母数字和下划线 
QRegExp regExp("[a-zA-Z0-9_]+");
QRegExpValidator *validator = new QRegExpValidator(regExp, this);
ui->accountEdit->setValidator(validator);

使用QLabel 添加图片

QLabel *imageLabel = new QLabel(frame);
imageLabel->setGeometry(QRect(x, y, w, h));
imageLabel->setPixmap(QPixmap(imgUrl));
imageLabel->setScaledContents(true);

QPushButton 去除边框

将flat 设为false

C++ 字符是否在数组中存在

在C++中,可以使用STL中的std::find函数来判断字符是否在数组中存在。例如,如果我们想要查找字符’c’是否在一个名为myArray的字符数组中,可以使用以下代码:

#include <algorithm>
#include <iostream>int main() {char myArray[] = {'a', 'b', 'c', 'd', 'e'};char myChar = 'c';if (std::find(std::begin(myArray), std::end(myArray), myChar) != std::end(myArray)) {std::cout << "Character found in array!" << std::endl;} else {std::cout << "Character not found in array." << std::endl;}return 0;
}

在这个例子中,我们使用std::find函数来查找字符’c’是否在myArray数组中。如果字符存在于数组中,std::find函数将返回指向该字符的迭代器,否则将返回指向数组末尾的迭代器。我们可以使用std::end函数来获取数组的末尾迭代器,然后将其与std::find函数的返回值进行比较,以确定字符是否存在于数组中。

Qt QLineEdit 去除边框

可通过ui,将frame属性取消

Sqlite 数据库连接池

#ifndef SQLITE_H
#define SQLITE_H
#include <QSqlDatabase>
#include <QSqlError>
#include <QSqlQuery>
#include <QQueue>
#include <QMutex>
#include <QDebug>
#include "../config.h"class SqLite
{
public:static SqLite &instance(){// 使用单例模式保证只创建一个连接池对象static SqLite pool;return pool;}QSqlDatabase getConnection(){// 获取连接m_mutex.lock();if (m_connections.isEmpty()){addConnections(1);}QSqlDatabase db = m_connections.dequeue();m_mutex.unlock();// 如果连接断开,则重新连接if (!db.isOpen()){db.open();}return db;}void releaseConnection(QSqlDatabase db){// 释放连接m_mutex.lock();m_connections.enqueue(db);m_mutex.unlock();}private:SqLite(){// 初始化连接池addConnections(5);}void addConnections(int count){// 创建连接for (int i = 0; i < count; i++){QSqlDatabase db = QSqlDatabase::addDatabase("QSQLITE");db.setDatabaseName(DB_PATH);if (db.open()){m_connections.enqueue(db);}else{qDebug() << "Failed to open database:" << db.lastError().text();}}}private:QMutex m_mutex;QQueue<QSqlDatabase> m_connections;
};#endif // SQLITE_H

使用方法:

QSqlDatabase db = SqLite::instance().getConnection();
QSqlQuery query(db);
....//数据库操作
SqLite::instance().releaseConnection(db);

Qt Sqlite 防止SQL注入

QSqlQuery query;
query.prepare("SELECT * FROM users WHERE name = :name");
query.bindValue(":name", username);
query.exec();

TableWidget 设置表头拉伸模式

 QHeaderView* header = tableWidget.horizontalHeader();header->setSectionResizeMode(QHeaderView::Stretch);  

QTableWidget中的列设置为只读

QTableWidgetItem *item = new QTableWidgetItem();
item->setFlags(item->flags() ^ Qt::ItemIsEditable);

也可这样:

ui->userTableWidget->setEditTriggers(QAbstractItemView::NoEditTriggers);

QTableWidget取消选中

ui.tableWidget->setSelectionMode(QAbstractItemView::NoSelection); //取消了选择样式,外观上取消选中
ui.tableWidget->setDisabled(true); //屏蔽所有鼠标键盘信号

QTableWidgetItem 文本居中

item->setTextAlignment(Qt::AlignHCenter | Qt::AlignVCenter);

TableWidget 去除序号

ui->userTableWidget->verticalHeader()->setVisible(false);

Qt中设置QTableWidget的表头高度

ui->userTableWidget->horizontalHeader()->setMinimumHeight(36);

QDialog 关闭对话框的方式

要关闭QDialog对话框,可以使用以下几种方式:

调用accept()方法:这将以"Accepted"的结果关闭对话框。可以在连接到按钮的点击事件或其他操作后调用它,表示用户已完成操作并接受了对话框的结果。例如:

QDialog dialog;
// ...QPushButton okButton("OK");
connect(&okButton, &QPushButton::clicked, [&]() {// 处理操作dialog.accept();  // 关闭对话框
});

调用reject()方法:这将以"Rejected"的结果关闭对话框。可以在连接到取消按钮的点击事件或其他操作后调用它,表示用户取消了操作或拒绝了对话框的结果。例如:

QDialog dialog;
// ...QPushButton cancelButton("Cancel");
connect(&cancelButton, &QPushButton::clicked, [&]() {dialog.reject();  // 关闭对话框
});

调用close()方法:这将直接关闭对话框,无需指定结果。可以在需要立即关闭对话框而不考虑结果的情况下使用。例如:

QDialog dialog;
// ...dialog.close();  // 关闭对话框

请根据您的具体需求选择适当的关闭方式来关闭QDialog对话框。

无框窗口提示

setWindowFlags(Qt::FramelessWindowHint | Qt::ToolTip);

##TableWidget设置

设置单元格内容

ui->tableWidget->setItem(i, 0, new QTableWidgetItem("Point1"));

设置自适应等宽

ui->tableWidget->horizontalHeader()->setSectionResizeMode(QHeaderView::Stretch);//设置自适应等宽

设置自适应高度

ui->tableWidget->verticalHeader()->setSectionResizeMode(QHeaderView::Stretch);//设置自适应高度

设置单元格自适应宽度

ui->tableWidget->horizontalHeader()->setSectionResizeMode(0, QHeaderView::ResizeToContents);//0表示列号

隐藏列表头

ui->tableWidget->verticalHeader()->setVisible(false);//隐藏列表头
ui->tableWidget->horizontalHeader()->setVisible(false);

设置单元格背景颜色
ui->tableWidget->horizontalHeader()->setVisible(false);

设置单元格背景颜色

QTableWidgetItem *item=new QTableWidgetItem(" ");
item->setBackground(QBrush(color));
ui->tableWidget->setItem(row,col,item);

设置当前选中取消

ui->tableWidget->setCurrentItem(nullptr);

添加一行

int curRow = ui.tableWidget->rowCount();//当前行号
ui. tableWidget ->insertRow(curRow);//在表格尾部添加一行

设置表格不可编辑

ui->tableWidget->setEditTriggers(QAbstractItemView::NoEditTriggers);//设置表格不可编辑 

设置表格不可选中

 ui->tableWidget->setSelectionMode(QAbstractItemView::NoSelection);//设置表格不可选中

清空所有表格内容

ui->tableWidget->clear();//清空除了表头之外的内容,清空所有的

清空表格内容(除了表头和标题)

ui->tableWidget->clearContents();//清空除了表头之外的内容

设置标题内容

QStringList horizontalHeaderLabel = { "对象名称" };
ui->tableWidget->setHorizontalHeaderLabels(horizontalHeaderLabel);

取消单元格选中

ui.tableWidget->setCurrentItem(NULL);//取消选中cell

设置选择行为-行

myTableWidget->setSelectionBehavior ( QAbstractItemView::SelectRows); //设置选择行为,以行为单位

设置选择行为-单个

myTableWidget->setSelectionBehavior ( QAbstractItemView::SelectItems); //设置选择行为,单个为单位

选择列或者行排序

connect(ui->tableWidgetConsole->horizontalHeader(),SIGNAL(sectionClicked(int)),this ,SLOT(sortTable(int)));
void MainWindow::sortTable(int colNum)
{ui->tableWidgetConsole->sortItems(colNum,Qt::AscendingOrder);
}

函数原型为:void QTableWidget::sortItems(int column, Qt::SortOrder order = Qt::AscendingOrder)

排序方式主要有两种:

设置标题对齐方式

myTableWidget->horizontalHeader()->setDefaultAlignment(Qt::AlignLeft);//设置左对齐

添加复选框

方法一

QTableWidgetItem *item=new QTableWidgetItem;
item->setCheckState (Qt::Checked);
ui->setting_tableWidget->setItem(i,j,item); //插入复选框

方法二

QCheckBox * checkB = new QCheckBox(this); //创建checkbox
checkB->setCheckState(Qt::Checked); //设置状态
QWidget *w = new QWidget(this); //创建一个widget
QHBoxLayout *hLayout = new QHBoxLayout(); //创建布局
hLayout->addWidget(checkB); //添加checkbox
hLayout->setMargin(0); //设置边缘距离 否则会很难看
hLayout->setAlignment(checkB, Qt::AlignCenter); //居中
w->setLayout(hLayout); //设置widget的布局
ui->tableWidget_UnrecognizedPrimitive->setCellWidget(row, column, w); //将widget放到table中//采取下面方式获取
if (QWidget *w = ui->tableWidget_IdentifiedPrimitives->cellWidget(row, column))//先获取widget
{QCheckBox * checkBox = qobject_cast<QCheckBox*>(w->children().at(1));  //通过children来访问checkboxif ( checkBox ){ if ( checkBox->checkState() == Qt::Unchecked ) //未选中{//操作}}
}
//转载于https://blog.csdn.net/qq_42570058/category_8252620.html

bleWidget_UnrecognizedPrimitive->setCellWidget(row, column, w); //将widget放到table中

//采取下面方式获取
if (QWidget w = ui->tableWidget_IdentifiedPrimitives->cellWidget(row, column))//先获取widget
{
QCheckBox * checkBox = qobject_cast<QCheckBox
>(w->children().at(1)); //通过children来访问checkbox
if ( checkBox )
{
if ( checkBox->checkState() == Qt::Unchecked ) //未选中
{
//操作
}
}
}
//转载于https://blog.csdn.net/qq_42570058/category_8252620.html


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

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

相关文章

openeuler安装Google浏览器

1.安装Google浏览器 下载安装文件 wget https://dl.google.com/linux/direct/google-chrome-stable_current_x86_64.rpm开始安装 yum install -y google-chrome-stable_current_x86_64.rpm2.安装todesk软件 https://www.todesk.com/linux.html 安装命令&#xff1a; sudo r…

计算机网络实用工具之nbtscan

简介 nbscan是一个用于扫描IP网络的NetBIOS名称信息的程序。它向提供范围内的每个地址发送NetBIOS状态查询&#xff0c;并以人类可读的形式列出接收到的信息。对于每个响应的主机&#xff0c;它列出了IP地址、NetBIOS计算机名、登录用户名和MAC地址。 对于安全检查、网络发现…

六要素超声波气象站气象监测小能手

随着科技的发展&#xff0c;人类对天气的掌控越来越强。六要素超声波气象站成为了现代气象预测的重要工具。本文将介绍这种气象站的特点、功能和应用&#xff0c;以及它如何改变我们对天气的预测和应对方式。 一、六要素超声波气象站简介 WX-CSQX6 六要素超声波气象站是一种集…

100G光模块的选购技巧——帮助您节省数据中心成本

数据中心在确保信息的即时可用性和访问性方面扮演着至关重要的角色。随着数据呈指数级增长&#xff0c;数据中心运营商一直在积极寻求优化其基础设施和降低成本的有效途径。在数据中心这个复杂生态系统中&#xff0c;100G光模块是一个不可或缺的部分&#xff0c;它对于实现高速…

SpringBoot3-集成mybatis

1、pom.xml <?xml version"1.0" encoding"UTF-8"?> <project xmlns"http://maven.apache.org/POM/4.0.0"xmlns:xsi"http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation"http://maven.apache.org/POM/4.0.…

小航助学题库白名单竞赛考级蓝桥杯等考scratch(16级)(含题库教师学生账号)

需要在线模拟训练的题库账号请点击 小航助学编程在线模拟试卷系统&#xff08;含题库答题软件账号&#xff09; 需要在线模拟训练的题库账号请点击 小航助学编程在线模拟试卷系统&#xff08;含题库答题软件账号&#xff09;

2022年第十一届数学建模国际赛小美赛B题序列的遗传过程解题全过程文档及程序

2022年第十一届数学建模国际赛小美赛 B题 序列的遗传过程 原题再现&#xff1a; 序列同源性是指DNA、RNA或蛋白质序列之间的生物同源性&#xff0c;根据生命进化史中的共同祖先定义[1]。DNA、RNA或蛋白质之间的同源性通常根据它们的核苷酸或氨基酸序列相似性来推断。显著的相…

【C++11(二)】lambda表达式以及function包装器

&#x1f493;博主CSDN主页:杭电码农-NEO&#x1f493;   ⏩专栏分类:C从入门到精通⏪   &#x1f69a;代码仓库:NEO的学习日记&#x1f69a;   &#x1f339;关注我&#x1faf5;带你学习C   &#x1f51d;&#x1f51d; C11 1. 前言2. lambda表达式的提出3. lambda表达…

Python之html2text,清晰解读HTML内容!

更多Python学习内容&#xff1a;ipengtao.com 大家好&#xff0c;我是彭涛&#xff0c;今天为大家分享 Python之html2text&#xff0c;清晰解读HTML内容&#xff0c;全文3900字&#xff0c;阅读大约10分钟。 HTML是Web开发中常见的标记语言&#xff0c;但有时我们需要将HTML内容…

数据结构算法-归并排序

引言 小明和小森是超市的货架管理人员&#xff0c;他们每天都要确保货架上的商品摆放整齐、有序。一天&#xff0c;他们发现一个货架上的商品有些混乱&#xff0c;需要尽快进行补货。由于该货架上的商品种类繁多&#xff0c;不同种类的商品之间还要考虑价格、销量等因素&#…

Volumetric Lights 2 HDRP

高清晰度渲染管道,包括先进的新功能,如半透明阴影图和直接灯光投射加上许多改进。 插件是一个快速,灵活和伟大的前瞻性光散射解决方案的高清晰度渲染管道。只需点击几下,即可改善场景中的照明视觉效果。 兼容: 点光源 聚光灯 碟形灯 矩形灯 通过覆盖摄像机周围大面积区域的…

算法通关村第二关—K个一组反转(黄金)

K个一组翻转链表 题目介绍 LeetCode25.给你一个链表&#xff0c;每k个节点一组进行翻转&#xff0c;请你返回翻转后的链表。k是一个正整数&#xff0c;它的值小于或等于链表的长度。如果节点总数不是k的整数倍&#xff0c;那么请将最后剩余的节点保持原有顺序。进阶&#xff1…

Android Init系统:引领设备启动的先锋

Android Init系统&#xff1a;引领设备启动的先锋 引言 Init系统是一个操作系统启动的必要组件&#xff0c;负责在启动时初始化所有系统资源、服务和应用程序。在Android设备中&#xff0c;Init系统起到了至关重要的作用&#xff0c;它是启动过程中的第一个进程&#xff0c;负…

题目:谈判(蓝桥OJ 545)

题目描述&#xff1a; 解题思路&#xff1a; 本题采用贪心的思想&#xff0c;与蓝桥的合并果子题思路一样。可以使用优先对列&#xff0c;输入进去后自动排序。将两个最小的合并再放入对列中&#xff0c;并将值加入到ans&#xff0c;最终结果即ans。如下图&#xff1a;xy为4&a…

kyuubi整合flink yarn session mode

目录 概述配置flink 配置kyuubi 配置kyuubi-defaults.confkyuubi-env.shhive 验证启动kyuubibeeline 连接使用hive catlogsql测试 结束 概述 flink 版本 1.17.1、kyuubi 1.8.0、hive 3.1.3、paimon 0.5 整合过程中&#xff0c;需要注意对应的版本。 注意以上版本 配置 ky…

JavaScript面向对象编程的奥秘揭秘:掌握核心概念与设计模式

​&#x1f308;个人主页&#xff1a;前端青山 &#x1f525;系列专栏&#xff1a;JavaScript篇 &#x1f516;人终将被年少不可得之物困其一生 依旧青山,本期给大家带来JavaScript篇专栏内容:JavaScript-面向对象 目录 什么是面向对象&#xff1f; 类与对象的主要区别 创建…

ambari 开启hdfs回收站机制

hdfs回收站类似于我们常用的windows中的回收站&#xff0c;被删除的文件会被暂时存储于此&#xff0c;和回收站相关的参数有两个&#xff1a; fs.trash.interval&#xff1a;默认值为0 代表禁用回收站&#xff0c;其他值为回收站保存文件时间&#xff0c;单位为分钟 fs.trash…

【Vue第2章】Vue组件化编程

目录 2.1 模块与组件、模块化与组件化 2.1.1 模块 2.1.2 组件 2.1.3 模块化 2.1.4 组件化 2.2 非单文件组件 2.3.1 代码 2.3.1.1 基本使用 2.3.1.2 几个注意点 2.3.1.3 组件的嵌套 2.3.1.4 VueComponent 2.3.1.5 一个重要的内置关系 2.3 单文件组件 2.3.1 一个.v…

2024年网络安全行业前景和技术自学

很多人不知道网络安全发展前景好吗&#xff1f;学习网络安全能做什么&#xff1f;今天为大家解答下 先说结论&#xff0c;网络安全的前景必然是超级好的 作为一个有丰富Web安全攻防、渗透领域老工程师&#xff0c;之前也写了不少网络安全技术相关的文章&#xff0c;不少读者朋…

基于Java OpenCV实现图像透视变换,图片自动摆正

如题&#xff0c;效果图如下&#xff1a; 稍后上源码。