设置窗口背景图
-
在 .h 文件中添加引用和方法
1 2 3
| #include <QPainter> #include <QPixmap> void paintEvent(QPaintEvent *);
|
-
.cpp 文件中实现 paintEvent
1 2 3 4 5 6 7 8 9
| 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); }
|
添加文本
1 2 3 4 5
| QLabel *label = new QLabel(this); label->setText("SUR一次性生物摇摆器"); label->setGeometry(210, 31, 311, 32); QFont font("黑体",18); label->setFont(font);
|
新建按钮
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
| 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
1 2 3 4 5 6 7 8 9 10 11 12
| #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";
|
第二种方式
1 2
| #define GLOBAL_WIDE 1280 #define GLOBAL_HIGH 800
|
QLineEdit 限制输入
1 2 3 4
| QRegExp regExp("[a-zA-Z0-9_]+"); QRegExpValidator *validator = new QRegExpValidator(regExp, this); ui->accountEdit->setValidator(validator);
|
使用QLabel 添加图片
1 2 3 4
| QLabel *imageLabel = new QLabel(frame); imageLabel->setGeometry(QRect(x, y, w, h)); imageLabel->setPixmap(QPixmap(imgUrl)); imageLabel->setScaledContents(true);
|
将flat 设为false
C++ 字符是否在数组中存在
在C++中,可以使用STL中的std::find函数来判断字符是否在数组中存在。例如,如果我们想要查找字符’c’是否在一个名为myArray的字符数组中,可以使用以下代码:
1 2 3 4 5 6 7 8 9 10 11 12 13
| #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 数据库连接池
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80
| #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
|
使用方法:
1 2 3 4
| QSqlDatabase db = SqLite::instance().getConnection(); QSqlQuery query(db); .... SqLite::instance().releaseConnection(db);
|
Qt Sqlite 防止SQL注入
1 2 3 4
| QSqlQuery query; query.prepare("SELECT * FROM users WHERE name = :name"); query.bindValue(":name", username); query.exec();
|
1 2
| QHeaderView* header = tableWidget.horizontalHeader(); header->setSectionResizeMode(QHeaderView::Stretch);
|
1 2
| QTableWidgetItem *item = new QTableWidgetItem(); item->setFlags(item->flags() ^ Qt::ItemIsEditable);
|
也可这样:
1
| ui->userTableWidget->setEditTriggers(QAbstractItemView::NoEditTriggers);
|
1 2
| ui.tableWidget->setSelectionMode(QAbstractItemView::NoSelection); ui.tableWidget->setDisabled(true);
|
1
| item->setTextAlignment(Qt::AlignHCenter | Qt::AlignVCenter);
|
1
| ui->userTableWidget->verticalHeader()->setVisible(false);
|
1
| ui->userTableWidget->horizontalHeader()->setMinimumHeight(36);
|
QDialog 关闭对话框的方式
要关闭QDialog对话框,可以使用以下几种方式:
调用accept()方法:这将以"Accepted"的结果关闭对话框。可以在连接到按钮的点击事件或其他操作后调用它,表示用户已完成操作并接受了对话框的结果。例如:
1 2 3 4 5 6 7 8
| QDialog dialog;
QPushButton okButton("OK"); connect(&okButton, &QPushButton::clicked, [&]() { dialog.accept(); });
|
调用reject()方法:这将以"Rejected"的结果关闭对话框。可以在连接到取消按钮的点击事件或其他操作后调用它,表示用户取消了操作或拒绝了对话框的结果。例如:
1 2 3 4 5 6 7
| QDialog dialog;
QPushButton cancelButton("Cancel"); connect(&cancelButton, &QPushButton::clicked, [&]() { dialog.reject(); });
|
调用close()方法:这将直接关闭对话框,无需指定结果。可以在需要立即关闭对话框而不考虑结果的情况下使用。例如:
1 2 3 4
| QDialog dialog;
dialog.close();
|
请根据您的具体需求选择适当的关闭方式来关闭QDialog对话框。
无框窗口提示
1
| setWindowFlags(Qt::FramelessWindowHint | Qt::ToolTip);
|
##TableWidget设置
设置单元格内容
1
| ui->tableWidget->setItem(i, 0, new QTableWidgetItem("Point1"));
|
设置自适应等宽
1
| ui->tableWidget->horizontalHeader()->setSectionResizeMode(QHeaderView::Stretch);
|
设置自适应高度
1
| ui->tableWidget->verticalHeader()->setSectionResizeMode(QHeaderView::Stretch);
|
设置单元格自适应宽度
1
| ui->tableWidget->horizontalHeader()->setSectionResizeMode(0, QHeaderView::ResizeToContents);
|
隐藏列表头
1 2
| ui->tableWidget->verticalHeader()->setVisible(false); ui->tableWidget->horizontalHeader()->setVisible(false);
|
设置单元格背景颜色
ui->tableWidget->horizontalHeader()->setVisible(false);
设置单元格背景颜色
1 2 3
| QTableWidgetItem *item=new QTableWidgetItem(" "); item->setBackground(QBrush(color)); ui->tableWidget->setItem(row,col,item);
|
设置当前选中取消
1
| ui->tableWidget->setCurrentItem(nullptr);
|
添加一行
1 2
| int curRow = ui.tableWidget->rowCount(); ui. tableWidget ->insertRow(curRow);
|
设置表格不可编辑
1
| ui->tableWidget->setEditTriggers(QAbstractItemView::NoEditTriggers);
|
设置表格不可选中
1
| ui->tableWidget->setSelectionMode(QAbstractItemView::NoSelection);
|
清空所有表格内容
1
| ui->tableWidget->clear();
|
清空表格内容(除了表头和标题)
1
| ui->tableWidget->clearContents();
|
设置标题内容
1 2
| QStringList horizontalHeaderLabel = { "对象名称" }; ui->tableWidget->setHorizontalHeaderLabels(horizontalHeaderLabel);
|
取消单元格选中
1
| ui.tableWidget->setCurrentItem(NULL);
|
设置选择行为-行
1
| myTableWidget->setSelectionBehavior ( QAbstractItemView::SelectRows); //设置选择行为,以行为单位
|
设置选择行为-单个
1
| myTableWidget->setSelectionBehavior ( QAbstractItemView::SelectItems); //设置选择行为,单个为单位
|
选择列或者行排序
1 2 3 4 5 6
| 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)
排序方式主要有两种:
设置标题对齐方式
1
| myTableWidget->horizontalHeader()->setDefaultAlignment(Qt::AlignLeft);
|
添加复选框
方法一
1 2 3
| QTableWidgetItem *item=new QTableWidgetItem; item->setCheckState (Qt::Checked); ui->setting_tableWidget->setItem(i,j,item);
|
方法二
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24
| QCheckBox * checkB = new QCheckBox(this); checkB->setCheckState(Qt::Checked); QWidget *w = new QWidget(this); QHBoxLayout *hLayout = new QHBoxLayout(); hLayout->addWidget(checkB); hLayout->setMargin(0); hLayout->setAlignment(checkB, Qt::AlignCenter); w->setLayout(hLayout); ui->tableWidget_UnrecognizedPrimitive->setCellWidget(row, column, w);
if (QWidget *w = ui->tableWidget_IdentifiedPrimitives->cellWidget(row, column)) { QCheckBox * checkBox = qobject_cast<QCheckBox*>(w->children().at(1)); if ( checkBox ) { if ( checkBox->checkState() == Qt::Unchecked ) { } } }
|