目录
1、QTableWidget第一列设置复选框
QCheckBox *checkBox = new QCheckBox();
ui->ruleTableWidget->setCellWidget(row, 0, checkBox);
2、QTableWidget判断选择中的数据
int rowCount=ui->ruleTableWidget->rowCount();
bool anyChecked = false; // 标记是否有任何复选框被选中
for (int row = 0; row < rowCount; ++row) {
QCheckBox *checkBox = qobject_cast<QCheckBox*>(ui->ruleTableWidget->cellWidget(row, 0));
if (checkBox && checkBox->isChecked()) {
// 如果这一行的复选框被选中
// 执行你的逻辑...
anyChecked = true; // 标记有复选框被选中
// 你可以在这里停止循环,或者继续检查所有复选框
QTableWidgetItem *item = ui->ruleTableWidget->item(row, 7); // 注意列索引是从0开始的,所以第二列的索引是1
// 如果单元格不为空,则获取其文本
QString Id = item->text();
}
}
if (anyChecked) {
// 如果有任何复选框被选中,执行你的逻辑...
}else{
}
3、QTableWidget设置全选、全不选、反选
3.1全选
void HomeWindow::on_ruleSelectAllButton_clicked()
{
for (int row = 0; row < ui->ruleTableWidget->rowCount(); ++row) {
QCheckBox *checkBox = qobject_cast<QCheckBox*>(ui->ruleTableWidget->cellWidget(row, 0));
if (checkBox) {
checkBox->setChecked(ui->ruleTableWidget);
}
}
}
3.2全不选
void HomeWindow::on_ruledeSelectAllButton_clicked()
{
for (int row = 0; row < ui->ruleTableWidget->rowCount(); ++row) {
QCheckBox *checkBox = qobject_cast<QCheckBox*>(ui->ruleTableWidget->cellWidget(row, 0));
checkBox->setChecked(false);
}
}
3.3反选
void HomeWindow::on_ruleInvertButton_clicked()
{
for (int row = 0; row < ui->ruleTableWidget->rowCount(); ++row) {
QCheckBox *checkBox = qobject_cast<QCheckBox*>(ui->ruleTableWidget->cellWidget(row, 0));
if (checkBox) {
checkBox->setChecked(!checkBox->isChecked());
}
}
}
4、QessageBox弹出确认框
QMessageBox msgBox;
msgBox.setWindowTitle("确认");
msgBox.setText("你确定要执行这个操作吗?");
msgBox.setIcon(QMessageBox::Question); // 设置图标
msgBox.setStandardButtons(QMessageBox::Yes | QMessageBox::No); // 设置按钮
msgBox.setDefaultButton(QMessageBox::No); // 设置默认按钮
int reply = msgBox.exec(); // 显示对话框并等待用户选择
if (reply == QMessageBox::Yes) {
// 用户点击了“是”
qDebug() << "用户选择了是";
} else {
// 用户点击了“否”或者关闭了对话框
qDebug() << "用户选择了否或关闭了对话框";
}
5、QJsonArray转为QString
QString jsonArrayToString(const QJsonArray &array) {
// 使用QJsonDocument将QJsonArray序列化为JSON字符串
QJsonDocument doc(array);
// QJsonDocument::toJson() 默认输出未格式化的JSON字符串
// 如果需要格式化的字符串(即带有缩进的字符串),可以使用第二个参数指定缩进
QByteArray jsonByteArray = doc.toJson(QJsonDocument::Indented);
// 将QByteArray转换为QString
QString jsonString = QString::fromUtf8(jsonByteArray);
return jsonString;
}
6、设置QDateEdit为当前时间
// 创建 QDateEdit 和 QTimeEdit
QDateEdit *dateEdit = new QDateEdit();
QTimeEdit *timeEdit = new QTimeEdit();
// 设置当前日期和时间
dateEdit->setDate(QDate::currentDate());
timeEdit->setTime(QTime::currentTime());
// 将 QDateEdit 和 QTimeEdit 添加到布局中
layout->addWidget(dateEdit);
layout->addWidget(timeEdit);
7、switch语法
switch (expression) {
case constant1:
// 处理常量1的代码
break; // 可选,用于跳出 switch 语句
case constant2:
// 处理常量2的代码
break; // 可选
...
default:
// 如果没有匹配的 case,则执行这里的代码
}
8、连接数据库
1. 在 .pro
文件中添加 SQL 模块支持
首先,确保你在项目的 .pro
文件中添加了 SQL 模块支持:
QT += core sql
2. 创建 Qt 应用程序和数据库连接
QSqlDatabase db = QSqlDatabase::addDatabase("QSQLITE");
db.setDatabaseName("mydatabase.db"); // 设置数据库文件名,如果没有,会自动创建
// 2. 打开数据库连接
if (!db.open()) {
qDebug() << "Error: Unable to open database";
return -1;
} else {
qDebug() << "Database opened successfully!";
}
// 3. 创建一个 SQL 查询对象
QSqlQuery query;
// 4. 创建一个表
if (!query.exec("CREATE TABLE IF NOT EXISTS users (id INTEGER PRIMARY KEY AUTOINCREMENT, name TEXT, age INTEGER)")) {
qDebug() << "Error: Failed to create table";
return -1;
} else {
qDebug() << "Table created successfully (if not exists)";
}
// 5. 插入一些数据
query.prepare("INSERT INTO users (name, age) VALUES (?, ?)");
query.addBindValue("Alice");
query.addBindValue(30);
if (!query.exec()) {
qDebug() << "Error: Failed to insert data";
return -1;
} else {
qDebug() << "Data inserted successfully";
}
// 6. 查询数据
if (!query.exec("SELECT id, name, age FROM users")) {
qDebug() << "Error: Failed to query data";
return -1;
} else {
while (query.next()) {
int id = query.value(0).toInt();
QString name = query.value(1).toString();
int age = query.value(2).toInt();
qDebug() << "User ID:" << id << ", Name:" << name << ", Age:" << age;
}
}
// 7. 关闭数据库
db.close();
9、QtreeView的使用
/*****初始化树形结构*****/
void MainWindow::initFirstPage()
{
this->model = new QStandardItemModel(this);
// 示例JSON数据
QString jsonString = R"([
{
"code": "1",
"name": "目录1",
"childNode": [
{
"code": "101",
"name": "目录101"
},
{
"code": "102",
"name": "目录102"
}
]
},
{
"code": "2",
"name": "目录2",
"childNode": [
{
"code": "201",
"name": "目录201"
},
{
"code": "202",
"name": "目录202"
}
]
}
])";
// 解析JSON字符串
QJsonDocument doc = QJsonDocument::fromJson(jsonString.toUtf8());
QJsonArray array = doc.array();
// 遍历JSON数组并构建树模型
for (const QJsonValue &value : array) {
QJsonObject obj = value.toObject();
QString name = obj["name"].toString();
QString code = obj["code"].toString();
QStandardItem *parentItem = new QStandardItem(name);
parentItem->setData(code, Qt::UserRole); // 保存code到Qt::UserRole
// 处理子节点
if (obj.contains("childNode")) {
QJsonArray childrenArray = obj["childNode"].toArray();
for (const QJsonValue &childValue : childrenArray) {
QJsonObject childObj = childValue.toObject();
QString childName = childObj["name"].toString();
QString childCode = childObj["code"].toString();
QStandardItem *childItem = new QStandardItem(childName);
childItem->setData(childCode, Qt::UserRole); // 保存子节点的code
parentItem->appendRow(childItem);
}
}
// 将父节点添加到模型
this->model->appendRow(parentItem);
}
// QStandardItemModel *model = new QStandardItemModel(this);
// 设置模型的根项
// QStandardItem *rootItem = model->invisibleRootItem();
// 创建子项
// QStandardItem *item1 = new QStandardItem("Item 1");
// QStandardItem *item2 = new QStandardItem("Item 2");
// QStandardItem *subItem1 = new QStandardItem("SubItem 1");
// 构建树形结构
// rootItem->appendRow(item1);
// rootItem->appendRow(item2);
// item1->appendRow(subItem1);
// 将模型设置给 QTreeView
ui->treeView->setModel(this->model);
// 设置树的行为
ui->treeView->setSelectionMode(QAbstractItemView::SingleSelection); // 单选
ui->treeView->expandAll(); // 展开所有项
connect( ui->treeView, &QTreeView::clicked, this, &MainWindow::onItemClicked);
}
/***点击树形获取代码****/
/***点击树形获取代码****/
void MainWindow::onItemClicked(const QModelIndex &index)
{
// 获取当前项
QStandardItem *item = model->itemFromIndex(index);
QVariant code = item->data(Qt::UserRole); // 获取存储的code数据
if (code.isValid()) {
QMessageBox::information(this, "Code", "Selected code: " + code.toString());
}
}
10、常见组件样式
QPushButton {
background-color: rgb(0, 170, 0); /* 背景颜色*/
border: none; /* 无边框*/
color: rgb(255, 255, 255);
padding: 15px 32px; /* 内边距*/
text-align: center; /* 文字居中*/
text-decoration: none; /* 无下划线*/
display: inline-block; /* 显示为行内块元素*/
font-size: 16px; /* 字体大小*/
cursor: pointer; /* 鼠标光标*/
border-radius: 12px; /* 圆角*/
}
QPushButton:hover {
background-color: #45a049; /* 鼠标悬停时的背景颜色*/
}
QPushButton:pressed {
background-color: #3e8e41; /* 按钮按下时的背景颜色*/
}
QLineEdit {
background-color: #f0f0f0; /* 背景颜色*/
border: 2px solid #4CAF50; /* 边框*/
border-radius: 10px; /* 圆角*/
padding: 5px; /* 内边距*/
font-size: 16px; /* 字体大小*/
color: #333; /* 字体颜色*/
}
QLineEdit:focus {
/* 聚焦时边框颜色*/
border-color: rgb(85, 170, 255);
}
QComboBox {
background-color: #f0f0f0; /* 背景颜色*/
border: 2px solid #4CAF50; /* 边框颜色*/
border-radius: 5px; /* 圆角效果*/
padding: 5px; /* 内边距*/
font-size: 14px; /* 字体大小*/
color: #333; /* 字体颜色*/
}
QComboBox::drop-down {
border-left: 2px solid #4CAF50; /* 下拉箭头的边框颜色*/
background-color: #e0e0e0; /* 下拉箭头背景颜色*/
width: 25px; /* 设置下拉箭头的宽度*/
}
QComboBox::down-arrow {
image: url(:/icons/down-arrow.png); /* 自定义箭头图标*/
width: 15px;
height: 15px;
}
QRadioButton {
font-size: 16px;
color: #333;
padding: 5px 10px;
background-color: #f0f0f0;
border: 2px solid #4CAF50;
border-radius: 12px;
}
QRadioButton::indicator {
width: 20px;
height: 20px;
border: 2px solid #4CAF50;
border-radius: 10px;
background-color: #fff;
}
QRadioButton:hover {
color: #ff6347; /* 悬停时字体颜色变化*/
background-color: #e0e0e0; /* 悬停时背景颜色变化*/
}
QRadioButton::indicator:hover {
background-color: #e0e0e0; /* 悬停时按钮背景颜色变化*/
}
QRadioButton:checked {
color: #fff; /* 选中时字体颜色*/
/* 选中时的背景色*/
background-color: rgb(255, 170, 0);
}
QRadioButton::indicator:checked {
background-color: #4CAF50; /* 选中时的圆形按钮背景色*/
border-color: #4CAF50; /* 选中时边框颜色*/
}
QRadioButton:pressed {
color: #fff; /* 按下时字体颜色*/
background-color: #2E8B57; /* 按下时的背景色*/
}
QCheckBox {
font-size: 14px;
color: #333;
padding: 8px 20px;
background-color: transparent;
border: 1px solid #999;
border-radius: 20px; /* 圆角效果*/
transition: all 0.3s ease; /* 平滑过渡效果*/
}
QCheckBox::indicator {
width: 20px;
height: 20px;
border-radius: 5px;
background-color: #fff;
border: 2px solid #999; /* 初始边框颜色*/
}
QCheckBox:hover {
background-color: #f4f4f4; /* 悬停时的背景色*/
}
QCheckBox::indicator:hover {
border-color: #0078D4; /* 悬停时边框颜色*/
}
QCheckBox:checked {
color: white; /* 选中时字体为白色*/
background-color: #0078D4; /* 选中时的背景色*/
}
QCheckBox::indicator:checked {
background-color: #0078D4; /* 选中时的勾选框背景色*/
border-color: #0078D4; /* 选中时边框颜色*/
}
QCheckBox:pressed {
background-color: #0056A3; /* 按下时的背景色*/
}
QDateTimeEdit {
font-size: 16px;
color: #333;
background-color: rgba(170, 255, 255,20);
border: 1px solid #cccccc;
border-radius: 8px;
padding: 5px 10px;
}
QDateTimeEdit::drop-down {
width: 30px; /* 设置下拉按钮的宽度*/
height: 30px; /* 设置下拉按钮的高度*/
border-radius: 50%; /* 圆形下拉按钮*/
background-color: #4CAF50; /* 下拉按钮背景色*/
border: 2px solid #388E3C; /* 下拉按钮边框*/
}
QDateTimeEdit::drop-down:hover {
background-color: #388E3C; /* 悬停时改变下拉按钮的颜色*/
}
QLabel {
font-size: 20px;
color: #333;
background-color: #f5f5f5;
padding: 10px;
border: 1px solid #ccc;
border-radius: 5px;
}
QLabel:hover {
background-color: #f5f5f5;
color: white; /* 悬停时字体颜色变为白色*/
}
QTableWidget {
background-color: #f5f5f5; /* 设置背景颜色*/
border: 2px solid #4CAF50; /* 设置边框颜色和宽度*/
font-size: 14px; /* 设置字体大小*/
font-family: Arial, sans-serif; /* 设置字体类型*/
gridline-color: #dcdcdc; /* 设置表格网格线颜色*/
}
QTableWidget {
background-color: #f5f5f5; /* 设置背景颜色*/
border: 2px solid #4CAF50; /* 设置边框颜色和宽度*/
font-size: 14px; /* 设置字体大小*/
font-family: Arial, sans-serif; /* 设置字体类型*/
gridline-color: #dcdcdc; /* 设置表格网格线颜色*/
}
QTableWidget::item:selected {
background-color: rgba(0, 170, 0,30); /* 设置选中单元格的背景颜色*/
color: white; /* 设置选中单元格的文本颜色*/
}
QTableWidget::item:!selected {
background-color: transparent; /* 未选中时背景透明*/
}
QTreeView {
background-color: #f5f5f5; /* 设置背景颜色*/
border: 2px solid #4CAF50; /* 设置边框样式*/
font-size: 14px; /* 设置字体大小*/
font-family: Arial, sans-serif; /* 设置字体*/
gridline-color: #dcdcdc; /* 设置网格线颜色*/
}
QTreeView::item {
background-color: #ffffff; /* 设置默认节点背景颜色*/
color: #333333; /* 设置节点字体颜色*/
font-size: 12px; /* 设置节点字体大小*/
padding: 5px; /* 设置节点内容的内边距*/
}
QTreeView::item:hover {
background-color: #f0f0f0; /* 鼠标悬停时的节点背景颜色*/
cursor: pointer; /* 鼠标悬停时变为手型*/
}
QListView {
background-color: #f5f5f5; /* 设置背景颜色*/
border: 2px solid #4CAF50; /* 设置边框样式*/
font-size: 14px; /* 设置字体大小*/
font-family: Arial, sans-serif; /* 设置字体*/
gridline-color: #dcdcdc; /* 设置网格线颜色*/
}
11、菜单阴影设置
QGraphicsDropShadowEffect *shadowEffect = new QGraphicsDropShadowEffect;
shadowEffect->setBlurRadius(10); // 阴影模糊半径
shadowEffect->setOffset(5, 5); // 阴影偏移量
shadowEffect->setColor(QColor(0, 0, 0, 160)); // 阴影颜色
ui->pushButton->setGraphicsEffect(shadowEffect);
QPushButton {
border-radius: 25px;
border: 2px solid #4CAF50;
background-color: rgba(255, 255, 255, 10);
color: #4CAF50;
padding: 10px 20px;
font-size: 16px;
}
QPushButton:pressed {
background-color: rgba(255, 255, 25, 50);
}
12、Qlable设置圆形头像
//设置椭圆的长轴、短轴
int w = ui->label_profile->width();
int h = ui->label_profile->height();
QPixmap pixmapa(":/image/bg.png");
QPixmap pixmap(w,h);
pixmap.fill(Qt::transparent);
QPainter painter(&pixmap);
painter.setRenderHints(QPainter::Antialiasing | QPainter::SmoothPixmapTransform);
QPainterPath path;
path.addEllipse(0, 0, w, h); //绘制椭圆
painter.setClipPath(path);
painter.drawPixmap(0, 0, w, h, pixmapa);
// Set the circular pixmap to the QLabel
ui->label_profile->setPixmap(pixmap);