Qt开发学习笔记01

news2024/11/29 1:37:44

设置窗口背景图

  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来访问checkbox
    if ( 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.coloradmin.cn/o/1291130.html

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

相关文章

金融行业文件摆渡,如何兼顾安全和效率?

金融行业是数据密集型产业&#xff0c;每时每刻都会产生海量的数据&#xff0c;业务开展时&#xff0c;数据在金融机构内部和内外部快速流转&#xff0c;进入生产的各个环节。 为了保障基础的数据安全和网络安全&#xff0c;金融机构采用网络隔离的方式来隔绝外部网络的有害攻击…

vue v-for获取子组件$ref总是拿到最后一个元素

页面循环列表&#xff0c;把子组件放在循环里面&#xff0c;此处获取this.$refs返回的应该是个数组&#xff0c;但是不知道为什么&#xff0c;一直返回的是循环的最后一个的子组件实列&#xff0c;官网上已经说明v-for返回的就是数组&#xff0c;所以一直很困惑 代码如下&#…

02 CSS基础入门

文章目录 一、CSS介绍1. 简介2. 相关网站3. HTML引入方式 二、选择器1. 标签选择器2. 类选择器3. ID选择器4. 群组选择器 四、样式1. 字体样式2. 文本样式3. 边框样式4. 表格样式 五、模型和布局1. 盒子模型2. 网页布局 一、CSS介绍 1. 简介 CSS主要用于控制网页的外观&#…

编程实战:类C语法的编译型脚本解释器(十)编译表达式

系列入口&#xff1a;编程实战&#xff1a;类C语法的编译型脚本解释器&#xff08;九&#xff09;编译语句 本文介绍表达式的编译。 一、代码概览 表达式的编译就是不断获取下一个标识符&#xff0c;直到遇到不属于表达式的东西。 完整代码如下&#xff1a; Expression* GetExp…

使用vue UI安装路由插件

1.使用vue创建项目 vue create vue-appvue ui 2.使用vue ui界面创建管理项目 终端页面输入&#xff1a;vue ui 创建项目 安装完成。可以直接在ui界面运行&#xff0c;也可以在编辑器中使用命令运行 安装路由&#xff0c;安装状态 选择插件 - 添加vue-router、添加vuex 安装…

面试常问的dubbo的spi机制到底是什么?(下)

前文回顾 前一篇文章主要是讲了什么是spi机制&#xff0c;spi机制在java、spring中的不同实现的分析&#xff0c;同时也剖析了一下dubbo spi机制的实现ExtensionLoader的实现中关于实现类加载以及实现类分类的源码。 一、实现类对象构造 看实现类对象构造过程之前&#xff0c;先…

8051的存储结构组成--程序存储空间、数据存储卡空间、特殊功能寄存器、位地址空间

AT89S51的存储结构 本文主要涉及8051单片机的存储结构&#xff0c;它的存储结构主要包括四部分&#xff0c;分别是出程序存储空间、数据存储卡空间、特殊功能寄存器、位地址空间四部分&#xff0c;下面将会展开描述。 文章目录 AT89S51的存储结构一、 程序存储空间二、 数据存储…

总结|哪些平台有大模型知识库的Web API服务

截止2023/12/6 笔者个人的调研&#xff0c;有三家有大模型知识库的web api服务&#xff1a; 平台类型文档数量文档上传并解析的结构api情况返回页码文心一言插件版多文档有问答api&#xff0c;文档上传是通过网页进行上传有&#xff0c;而且是具体的chunk id&#xff0c;需要设…

CentOS服务器网页版Rstudio-server及R包批量安装最佳实践

CentOS服务器安装网页版Rstudio-server及R包批量安装 以下为CentOS 7/8的Rstudio-server安装、配置和R包安装操作 1. 软件包安装 Centos 7安装 # 下载安装包&#xff0c;大小115.14 MB wget -c https://download2.rstudio.org/server/centos7/x86_64/rstudio-server-rhel-…

【工厂方法】设计模式项目实践

前言 以采集数据处理逻辑为例&#xff0c;数据采集分为不同种类如&#xff1a;MQTT、MODBUS、HTTP等&#xff0c;不同的采集数据有不同的解析处理逻辑。但总体解析处理步骤是固定的。可以使用工厂方法设计模式简化代码&#xff0c;让代码变得更加优雅。 代码实践 抽象类 总体…

每天五分钟计算机视觉:通过残差块搭建卷积残差神经网络Resnet

本文重点 随着深度神经网络的层数的增加,神经网络会变得越来越难以训练,之所以这样就是因为存在梯度消失和梯度爆炸问题。本节课程我们将学习跳跃连接方式,它可以从某一网络层获取激活a,然后迅速反馈给另外一层,甚至是神经网络的更深层,从而解决梯度消失的问题。 传统的…

SMART PLC求余指令

SMART PLC求余功能块在伪随机数发生器上的应用请查看下面文章链接&#xff1a; https://rxxw-control.blog.csdn.net/article/details/123793176https://rxxw-control.blog.csdn.net/article/details/123793176待续....

Qt之QGraphicsView —— 笔记1.2:将QGraphicsView放置主窗口上,绘制简单图元(附完整源码)

效果 相关类介绍 QGraphicsView类提供了一个小部件,用于显示QGraphicsScene的内容。QGraphicsView在可滚动视口中可视化。QGraphicsView将滚动其视口,以确保该点在视图中居中。 QGraphicsScene类 提供了一个用于管理大量二维图形项的场景。请注意,QGraphicsScene没有自己的视…

Nginx配置反向代理与负载均衡

Nginx配置反向代理与负载均衡 一、代理服务1.正向代理2.反向代理 二、实战场景-反向代理1.修改nginx配置 -> nginx.conf文件2.修改前端路径 三、实战场景-负载均衡1.热备2.轮询3.加权轮询4.ip_hash ​ Nginx (“engine x”) 是一个高性能的HTTP和反向代理服务器&#xff0c;…

ubuntu22 安装 cuda12.0

本文是先安装显卡驱动后进行的操作 查看显卡驱动支持CUDA的最新版本12.0 nvidia-smi 检查gcc版本 gcc -v 查看系统支持的gcc版本 https://docs.nvidia.com/cuda/cuda-installation-guide-linux/index.html 选择对应的安装cuda命令 https://developer.nvidia.com/cuda-too…

居民最低生活保障人数数据,2020-2022年数据,shp矢量及表格数据均有!

居民最低生活保障&#xff0c;是国家对共同生活的家庭成员人均收入低于当地最低生活保障标准&#xff0c;且符合当地最低生活保障家庭财产状况规定的家庭&#xff0c;给予最低生活保障。 基本信息. 数据名称: 居民最低生活保障人数数据 数据格式: shpexcel 数据几何类型: 面…

C练习题13

单项选择题(本大题共20小题,每小题2分,共40分。在每小题给出的四个备选项中,选出一个正确的答案,并将所选项前的字母填写在答题纸的相应位置上。) 1.结构化程序由三种基本结构组成、三种基本结构组成的算法是() A.可以完成任何复杂的任务 B. 只能完成部分复杂的任务 C. 只能完…

Fabric:链码的部署及执行

Hyperledger Fabric:V2.5.4 写在最前 使用Fabric搭建自定义网络参考&#xff1a;https://blog.csdn.net/yeshang_lady/article/details/134113296 使用Fabric创建应用通道参考&#xff1a;https://blog.csdn.net/yeshang_lady/article/details/134668458 接下来将介绍如何在自…

配置BFD多跳检测示例

BFD简介 定义 双向转发检测BFD&#xff08;Bidirectional Forwarding Detection&#xff09;是一种全网统一的检测机制&#xff0c;用于快速检测、监控网络中链路或者IP路由的转发连通状况。 目的 为了减小设备故障对业务的影响&#xff0c;提高网络的可靠性&#xff0c;网…