Qt学习笔记

目录

1、QTableWidget第一列设置复选框

2、QTableWidget判断选择中的数据

3、QTableWidget设置全选、全不选、反选

3.1全选

3.2全不选

3.3反选

4、QessageBox弹出确认框

5、QJsonArray转为QString

6、设置QDateEdit为当前时间

7、switch语法

8、连接数据库

1. 在 .pro 文件中添加 SQL 模块支持

 2. 创建 Qt 应用程序和数据库连接

9、QtreeView的使用

10、常见组件样式

11、菜单阴影设置

12、Qlable设置圆形头像


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);

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值