当前位置: 首页 > news >正文

【QT实战の心情笔记】

文章目录

    • 界面布局
      • 主要界面分为三部分:
        • 1. 笔记列表区域
        • 2. 笔记内容编辑区域
        • 3. 操作按钮区域
      • Qt Designer 界面设计步骤
      • 完整界面布局图
      • 各控件设置和属性
      • Qt Designer 文件 (.ui)
    • 数据库表结构
        • SQL 表结构:
    • 逻辑代码
      • 1. 项目结构
      • 2. Note 类 (`Note.h` 和 `Note.cpp`)
        • `Note.h`
        • `Note.cpp`
      • 3. DatabaseManager 类 (`DatabaseManager.h` 和 `DatabaseManager.cpp`)
        • `DatabaseManager.h`
        • `DatabaseManager.cpp`
      • 4. MainWindow 类 (`MainWindow.ui`, `MainWindow.cpp` 和 `MainWindow.h`)
        • `MainWindow.ui`
        • `MainWindow.cpp`
        • `MainWindow.h`
      • 5. 总结

此程序使用 Qt Widgets 和 SQLite 来实现,并展示了笔记的标题、内容以及修改时间。

为了帮助你理解如何设计这个个人笔记应用的界面,下面我将详细描述界面布局以及各个控件的功能。由于我无法直接生成图像,我会尽量通过文字和布局描述来帮助你在 Qt Designer 中实现界面。

界面布局

主要界面分为三部分:

  1. 笔记列表区域(显示所有笔记的标题和修改时间)
  2. 笔记内容编辑区域(编辑选中的笔记的内容)
  3. 操作按钮区域(添加、删除、保存等按钮)
1. 笔记列表区域
  • 使用 QListView 来显示笔记的标题和修改时间。
  • 每个笔记的显示格式为:
    • 标题(一行文字)
    • 修改时间(时间戳,格式为 yyyy-MM-dd HH:mm:ss

QListView 上需要显示的内容是:

Title 1
2024-12-18 15:30:00Title 2
2024-12-17 14:20:00
2. 笔记内容编辑区域
  • 使用 QTextEdit 来显示和编辑选中的笔记的详细内容。
  • 用户可以在这里修改笔记内容,当保存时内容会更新到数据库。
3. 操作按钮区域
  • 添加按钮:用户点击后可以创建一个新笔记。
  • 删除按钮:用户点击后可以删除当前选中的笔记。
  • 保存按钮:用户点击后保存当前编辑的笔记内容。

Qt Designer 界面设计步骤

Qt Designer 中,你可以按照以下步骤创建界面:

  1. 创建一个 QMainWindow

    • 选择 QMainWindow 作为主窗口类型。
  2. 添加一个 QWidget

    • 将一个 QWidget 拖入 QMainWindow 中,作为主界面的容器。
  3. 设置布局

    • QWidget 中,设置一个 QHBoxLayoutQVBoxLayout 来组织控件。
    • 推荐使用 QVBoxLayout,将界面分成垂直区域。
  4. 添加 QListView 控件

    • 在上方区域添加一个 QListView 控件,宽度设置为适当的大小来显示笔记的标题和修改时间。
    • 设置 QListView 的大小策略,使其能够填充上方区域。
  5. 添加 QTextEdit 控件

    • 在下方区域添加一个 QTextEdit 控件,用来显示和编辑笔记的内容。
    • 设置其大小策略,使其填充剩余的空间。
  6. 添加操作按钮

    • 在界面底部,使用 QHBoxLayout 添加三个按钮:
      • Add 按钮:用于创建新笔记。
      • Delete 按钮:用于删除选中的笔记。
      • Save 按钮:用于保存当前编辑的笔记。

完整界面布局图

--------------------------------------
|             笔记列表区域            |
|------------------------------------|
| Title 1       2024-12-18 15:30:00  |
| Title 2       2024-12-17 14:20:00  |
| ...                                  |
--------------------------------------
|             笔记内容编辑区域        |
|------------------------------------|
| [此处显示或编辑笔记内容]              |
--------------------------------------
|      [Add]    [Delete]    [Save]    |
--------------------------------------

各控件设置和属性

  1. QListView

    • 需要绑定一个 QStringListModelQListView 模型来显示笔记的标题和修改时间。
    • 在模型中,每个条目应当是 “标题 + 修改时间”。
  2. QTextEdit

    • 设置 setPlainText()setHtml() 方法来显示笔记内容。
    • 用户可以编辑其中的内容。
  3. 按钮

    • 设置按钮的文本为 AddDeleteSave,并为这些按钮添加相应的信号与槽连接。

Qt Designer 文件 (.ui)

你可以按照以上描述在 Qt Designer 中创建界面,下面是一个简化版的 .ui 文件结构,你可以在 Qt Designer 中直接创建这个界面。

<?xml version="1.0" encoding="UTF-8"?>
<ui version="4.0"><class>MainWindow</class><widget class="QMainWindow" name="MainWindow"><widget class="QWidget" name="centralwidget"><layout class="QVBoxLayout" name="verticalLayout"><widget class="QListView" name="noteListView"/><widget class="QTextEdit" name="noteTextEdit"/><layout class="QHBoxLayout" name="buttonLayout"><widget class="QPushButton" name="addButton"><property name="text"><string>Add</string></property></widget><widget class="QPushButton" name="deleteButton"><property name="text"><string>Delete</string></property></widget><widget class="QPushButton" name="saveButton"><property name="text"><string>Save</string></property></widget></layout></layout></widget><centralwidget/><statusbar/></widget>
</ui>

数据库表结构

首先,我们需要一个数据库表来存储笔记。创建数据库和表结构。

SQL 表结构:
CREATE TABLE IF NOT EXISTS notes (id INTEGER PRIMARY KEY AUTOINCREMENT,title TEXT NOT NULL,content TEXT,modified_time TEXT
);
  • id:笔记的唯一标识符。
  • title:笔记的标题。
  • content:笔记的内容。
  • modified_time:笔记的修改时间(格式为 yyyy-MM-dd HH:mm:ss)。

逻辑代码

1. 项目结构

该项目包含以下文件:

  • Note.hNote.cpp:定义笔记类。
  • DatabaseManager.hDatabaseManager.cpp:管理数据库的类。
  • MainWindow.ui:Qt Designer 设计的主窗口界面。
  • MainWindow.cppMainWindow.h:主窗口的实现和交互逻辑。

2. Note 类 (Note.hNote.cpp)

Note 类用于表示单个笔记,包含标题、内容和修改时间等信息。

Note.h
#ifndef NOTE_H
#define NOTE_H#include <QString>class Note
{
public:Note();int getId() const;QString getTitle() const;QString getContent() const;QString getModifiedTime() const;void setId(int id);void setTitle(const QString &title);void setContent(const QString &content);void setModifiedTime(const QString &modifiedTime);private:int id;QString title;QString content;QString modifiedTime;
};#endif // NOTE_H
Note.cpp
#include "Note.h"Note::Note() : id(-1), title(""), content(""), modifiedTime("") {}int Note::getId() const { return id; }
QString Note::getTitle() const { return title; }
QString Note::getContent() const { return content; }
QString Note::getModifiedTime() const { return modifiedTime; }void Note::setId(int id) { this->id = id; }
void Note::setTitle(const QString &title) { this->title = title; }
void Note::setContent(const QString &content) { this->content = content; }
void Note::setModifiedTime(const QString &modifiedTime) { this->modifiedTime = modifiedTime; }

3. DatabaseManager 类 (DatabaseManager.hDatabaseManager.cpp)

DatabaseManager 类用于操作 SQLite 数据库,执行插入、删除、更新和查询等操作。

DatabaseManager.h
#ifndef DATABASEMANAGER_H
#define DATABASEMANAGER_H#include <QObject>
#include <QSqlDatabase>
#include <QSqlQuery>
#include <QSqlError>
#include <QVariant>
#include <QList>
#include "Note.h"class DatabaseManager : public QObject
{Q_OBJECTpublic:DatabaseManager();bool openDatabase();bool addNote(const QString &title, const QString &content);bool deleteNote(int id);bool updateNote(int id, const QString &title, const QString &content);QList<Note> getAllNotes();private:QSqlDatabase db;
};#endif // DATABASEMANAGER_H
DatabaseManager.cpp
#include "DatabaseManager.h"
#include <QSqlError>
#include <QDebug>
#include <QDateTime>DatabaseManager::DatabaseManager()
{db = QSqlDatabase::addDatabase("QSQLITE");db.setDatabaseName("notes.db");
}bool DatabaseManager::openDatabase()
{if (!db.open()) {qDebug() << "Error: Failed to open database!";return false;}return true;
}bool DatabaseManager::addNote(const QString &title, const QString &content)
{QSqlQuery query;query.prepare("INSERT INTO notes (title, content, modified_time) VALUES (?, ?, ?)");query.addBindValue(title);query.addBindValue(content);query.addBindValue(QDateTime::currentDateTime().toString("yyyy-MM-dd HH:mm:ss"));if (!query.exec()) {qDebug() << "Error: Failed to add note!";return false;}return true;
}bool DatabaseManager::deleteNote(int id)
{QSqlQuery query;query.prepare("DELETE FROM notes WHERE id = ?");query.addBindValue(id);if (!query.exec()) {qDebug() << "Error: Failed to delete note!";return false;}return true;
}bool DatabaseManager::updateNote(int id, const QString &title, const QString &content)
{QSqlQuery query;query.prepare("UPDATE notes SET title = ?, content = ?, modified_time = ? WHERE id = ?");query.addBindValue(title);query.addBindValue(content);query.addBindValue(QDateTime::currentDateTime().toString("yyyy-MM-dd HH:mm:ss"));query.addBindValue(id);if (!query.exec()) {qDebug() << "Error: Failed to update note!";return false;}return true;
}QList<Note> DatabaseManager::getAllNotes()
{QList<Note> notes;QSqlQuery query("SELECT * FROM notes");while (query.next()) {Note note;note.setId(query.value("id").toInt());note.setTitle(query.value("title").toString());note.setContent(query.value("content").toString());note.setModifiedTime(query.value("modified_time").toString());notes.append(note);}return notes;
}

4. MainWindow 类 (MainWindow.ui, MainWindow.cppMainWindow.h)

MainWindow 类中,我们需要显示笔记的列表,包括标题、内容和修改时间,同时实现笔记的添加、删除和保存功能。

MainWindow.ui

Qt Designer 中,设计一个界面:

  • 使用 QListView 显示笔记列表,格式化显示 标题修改时间
  • 使用 QTextEdit 编辑和显示笔记内容。
  • 使用 QPushButton 实现笔记的添加、删除和保存功能。
MainWindow.cpp
#include "MainWindow.h"
#include "ui_MainWindow.h"
#include "DatabaseManager.h"
#include "Note.h"
#include <QInputDialog>
#include <QMessageBox>
#include <QDateTime>MainWindow::MainWindow(QWidget *parent): QMainWindow(parent), ui(new Ui::MainWindow)
{ui->setupUi(this);dbManager = new DatabaseManager();// 打开数据库if (!dbManager->openDatabase()) {qDebug() << "Failed to open the database!";return;}// 更新笔记列表updateNoteList();// 连接按钮的信号槽connect(ui->addButton, &QPushButton::clicked, this, &MainWindow::addNote);connect(ui->deleteButton, &QPushButton::clicked, this, &MainWindow::deleteNote);connect(ui->saveButton, &QPushButton::clicked, this, &MainWindow::saveNote);
}MainWindow::~MainWindow()
{delete ui;
}void MainWindow::updateNoteList()
{// 获取所有笔记QList<Note> notes = dbManager->getAllNotes();QStringList noteTitles;// 格式化笔记标题和修改时间for (const Note &note : notes) {QString displayText = note.getTitle() + "\n" + note.getModifiedTime();noteTitles.append(displayText);}// 更新笔记列表显示ui->noteListView->clear();ui->noteListView->addItems(noteTitles);// 更新当前选中的笔记内容if (!notes.isEmpty()) {ui->noteTextEdit->setText(notes.first().getContent());}
}void MainWindow::addNote()
{bool ok;QString title = QInputDialog::getText(this, "New Note", "Enter note title:", QLineEdit::Normal, "", &ok);if (ok && !title.isEmpty()) {dbManager->addNote(title, "");updateNoteList();}
}void MainWindow::deleteNote()
{QModelIndex selectedIndex = ui->noteListView->currentIndex();if (selectedIndex.isValid()) {int noteId = selectedIndex.row() + 1;dbManager->deleteNote(noteId);updateNoteList();}
}void MainWindow::saveNote()
{QModelIndex selectedIndex = ui->noteListView->currentIndex();if (selectedIndex.isValid()) {int noteId = selectedIndex.row() + 1;QString content = ui->noteTextEdit->toPlainText();dbManager->updateNote(noteId, ui->noteListView->currentItem()->text(), content);updateNoteList(); // 更新笔记列表}
}
MainWindow.h
#ifndef MAINWINDOW_H
#defineMAINWINDOW_H#include <QMainWindow>
#include "DatabaseManager.h"namespace Ui {
class MainWindow;
}class MainWindow : public QMainWindow
{Q_OBJECTpublic:explicit MainWindow(QWidget *parent = nullptr);~MainWindow();private slots:void addNote();void deleteNote();void saveNote();private:Ui::MainWindow *ui;DatabaseManager *dbManager;void updateNoteList();
};#endif // MAINWINDOW_H

5. 总结

这段代码实现了一个简单的笔记应用,支持:

  • 添加笔记:点击按钮输入标题创建新笔记。
  • 删除笔记:选择列表中的笔记删除。
  • 保存笔记:编辑笔记内容后点击保存。

笔记列表中显示每个笔记的 标题修改时间,通过 SQLite 数据库进行数据存储和管理。

可以进一步扩展应用功能,例如:

  • 添加笔记的分类。
  • 笔记搜索功能。
  • 导出和导入笔记等。

世界上的事情,最忌讳的就是个十全十美,凡事总要稍留欠缺,才能持恒

相关文章:

【QT实战の心情笔记】

文章目录 界面布局主要界面分为三部分&#xff1a;1. 笔记列表区域2. 笔记内容编辑区域3. 操作按钮区域 Qt Designer 界面设计步骤完整界面布局图各控件设置和属性Qt Designer 文件 (.ui) 数据库表结构SQL 表结构&#xff1a; 逻辑代码1. 项目结构2. Note 类 (Note.h 和 Note.c…...

图像生成工具WebUI

介绍 Stable Diffusion WebUI&#xff08;AUTOMATIC1111&#xff0c;简称A1111&#xff09;是一个为高级用户设计的图形用户界面&#xff08;GUI&#xff09;&#xff0c;它提供了丰富的功能和灵活性&#xff0c;以满足复杂和高级的图像生成需求。如今各种人工智能满天飞&…...

排查常见的 MySQL性能问题

1. 查询速度慢&#xff1a;MySQL 数据库中最常见的性能问题之一是查询执行速度慢。缓慢的查询会增加等待时间和阻碍应用程序响应能力&#xff0c;从而显著影响用户体验。这些缓慢的查询可能由各种因素引起&#xff0c;例如缺少适当的索引、设计不佳的数据库架构、查询逻辑本身效…...

滑雪场管理系统

【毕业设计】基于SpringBoot Vue的滑雪场管理系统 摘要 随着信息化时代的快速发展&#xff0c;滑雪场作为冬季旅游的热门目的地&#xff0c;其管理效率和服务质量直接影响着游客的体验。为此&#xff0c;设计一个高效、安全、易用的滑雪场管理系统成为当务之急。本文详细阐述…...

西游记战力排名、笔记等

文章目录 战力排名对西游记的理解各个版本游戏题材西游记关卡和妖怪 西游记家喻户晓&#xff0c;没有谁不知道吧&#xff0c;无论是电视剧、影视&#xff0c;还是小说&#xff0c;乃至游戏&#xff0c;很多地方都有西游记的身影。 虽然知道&#xff0c;但总不如对三国啊、水浒啊…...

vue3 + js + vite创建的项目中配置svg图

安装 npm install vite-plugin-svg-icons npm install fast-globvite.config.js文件中配置如下内容 import { defineConfig } from vite import vue from vitejs/plugin-vue import { createSvgIconsPlugin } from vite-plugin-svg-icons import path from path export defau…...

c++ 找第一个只出现一次的字符

【题目描述】 给定一个只包含小写字母的字符串&#xff0c;请你找到第一个仅出现一次的字符。如果没有&#xff0c;输出no。 【输入】 一个字符串&#xff0c;长度小于100000。 【输出】 输出第一个仅出现一次的字符&#xff0c;若没有则输出no。 【输入样例】 abcabd【输出样…...

在 Unity 6 中使用APV为您的世界创建全局照明的新方法(一)

Unity 6 中推出的新照明功能让您能够更快速、更高效的完成对烘焙场景的照明工作&#xff0c;在本文中我们将与大家详细分享在 Unity 6 中应用自适应探针卷创建快速全局光照的更多细节与具体应用方法。由于内容比较丰富&#xff0c;我们将把内容分为三篇文章&#xff0c;以便大家…...

Win11安装安卓子系统WSA

文章目录 简介一、启用Hyper-V二、安装WSA三、安装APKAPK商店参考文献 简介 WSA&#xff1a;Windows Subsystem For Android 一、启用Hyper-V 控制面板 → 程序和功能 → 启用或关闭 Windows 功能 → 勾选 Hyper-V 二、安装WSA 进入 Microsoft Store&#xff0c;下拉框改为 …...

利用两种方式分别实现单例模式(懒汉式、饿汉式)

package testsingle;//实现单例的两种方式 public class TestMySingle {public static void main(String[] args) {ClassA ca1 ClassA.getClassA();ClassA ca2 ClassA.getClassA();System.out.println(ca1ca2);ClassB cb1 ClassB.getClassB();ClassB cb2 ClassB.getClassB(…...

js分页功能

先声明些全局变量方便我们在下面的代码中使用 //一页有多少条数据 let pagenum 10; //页码下标 let page_index 0; //总页数 let total_page; // 声明一个用于接数据的变量 let data&#xff1b; //获取数据 let res;通过获取数据渲染页面 // 渲染函数 function applys(da…...

Ubuntu20.04 编译运行 ORBSLAM2_with_pointcloud_map(以RGBD Orbbec Astra+为例)保姆级教程

Ubuntu20.04 编译运行 ORBSLAM2_with_pointcloud_map(以RGBD Orbbec Astra为例) 获取源码 git clone https://github.com/gaoxiang12/ORBSLAM2_with_pointcloud_map.git解压文件 得到如下内容 编译安装修改后的g2o cd g2o_with_orbslam2 mkdir build cd build cmake .. make…...

MyBatis(四)

第一章&#xff1a;MyBatis延迟加载策略 1. 延迟加载的概念 立即加载和延迟加载的区别&#xff0c;使用一对多的环境举例子。 立即加载&#xff1a;当前查询用户的时候&#xff0c;默认也把该用户所拥有的帐户信息查询出来了。 延迟加载&#xff1a;当前查询用户的时候&…...

【从零开始的LeetCode-算法】3285. 找到稳定山的下标

有 n 座山排成一列&#xff0c;每座山都有一个高度。给你一个整数数组 height &#xff0c;其中 height[i] 表示第 i 座山的高度&#xff0c;再给你一个整数 threshold 。 对于下标不为 0 的一座山&#xff0c;如果它左侧相邻的山的高度 严格大于 threshold &#xff0c;那么我…...

Docker常用命令总结~

1、关于镜像 获取镜像 docker pull [image name] [option:tag]AI助手//获取postgres镜像(没有设置镜像版本号则默认获取最新的&#xff0c;使用latest标记) docker pull postgres or docker pull postgres:11.14 列出本地镜像 docker imagesAI助手 指定镜像启动一个容…...

浅谈怎样系统的准备前端面试

前言 创业梦碎&#xff0c;回归现实&#xff0c;7 月底毅然裸辞&#xff0c;苦战两个月&#xff0c;拿到了美团和字节跳动的 offer&#xff0c;这算是从业以来第一次真正意义的面试&#xff0c;遇到蛮多问题&#xff0c;比如一开始具体的面试过程我都不懂&#xff0c;基本一直是…...

如何配置防火墙提高服务器安全性

配置防火墙是提高服务器安全性的重要措施之一。防火墙可以控制网络流量&#xff0c;限制未经授权的访问&#xff0c;防止恶意攻击。以下是配置防火墙以提高服务器安全性的详细指南。 一、为什么需要配置防火墙 防火墙的主要作用是&#xff1a; 限制未经授权的访问&#xff1a…...

java集合-Map HashMap 源码解析

hashMap简介 HashMap是基于哈希表实现的&#xff0c;每一个元素是一个key-value对&#xff0c;无序&#xff0c;不可重复。HashMap是非线程安全的&#xff0c;只是用于单线程环境下&#xff0c;多线程环境下可以采用concurrent并发包下的concurrentHashMap。HashMap 实现了Ser…...

案例分享|企查查的数据降本增效之路

分享嘉宾 任何强 企查查科技股份有限公司 大数据架构负责人 关于企查查 “企查查”是企查查科技股份有限公司旗下的一款企业信用查询工具。2023年5月20日&#xff0c;企查查正式发布全球首款商查大模型——“知彼阿尔法”&#xff0c;该模型基于企查查覆盖的全球企业信用数据进…...

图书馆管理系统(四)基于jquery、ajax--完结篇

任务3.6 后端代码编写 任务描述 这个部分主要想实现图书馆管理系统的后端&#xff0c;使用 Express 框架来处理 HTTP 请求&#xff0c;并将书籍数据存储在一个文本文件 books.txt 中。 任务实施 3.6.1 引入模块及创建 Express 应用 const express require(express); cons…...

什么是Modbus协议网关?

在工业自动化领域&#xff0c;设备间的通信与数据交换是实现高效、智能控制的关键。Modbus协议作为一种广泛应用的通信协议&#xff0c;自1971年由Modicon公司首次推出以来&#xff0c;便以其标准、开放、支持多种电气接口等特点&#xff0c;在工业控制系统中占据了重要地位。然…...

Docker 容器中启用 SSH 服务

在 Docker 容器中运行 SSH 服务需要一些调整&#xff0c;因为 Docker 容器通常使用 init 系统而不是完整的 systemd。以下是配置 SSH 服务在 Docker Ubuntu 容器中运行的步骤&#xff1a; 1. 安装 SSH 服务 如果还未安装 OpenSSH&#xff0c;请先安装&#xff1a; apt update…...

Linux系统—利用systemd管控系统以及服务详解(十四)

本文为Ubuntu Linux操作系统- 第十四弹~~ 新的一周开始了&#xff0c;时间过得真快&#xff0c;这星期就要冬至啦&#xff01;&#xff01; 今天继续Linux系统高级管理板块&#xff0c;主要讲述使用systemd管控系统和服务~ 上期回顾&#xff1a;“Linux系统—进程管理详解” 更…...

人工智能 AI 大模型研究设计与实践应用技术毕业论文

标题:人工智能 AI 大模型研究设计与实践应用技术 内容:1.摘要 人工智能 AI 大模型是当前人工智能领域的研究热点之一&#xff0c;它具有高度的通用性、灵活性和智能性&#xff0c;可以应用于多种领域&#xff0c;如自然语言处理、计算机视觉、语音识别等。本文旨在探讨人工智能…...

已有 containerd 的情况下部署二进制 docker 共存

文章目录 [toc]学习目的开始学习dockerd启动 containerd准备配置文件启动 containerd 启动 docker准备配置文件启动 docker 环境验证停止 docker 和 containerd 学习目的 使用容器的方式做一些部署的交付&#xff0c;相对方便很多&#xff0c;不需要担心别人的环境缺少需要的依…...

VSCode 搭建Python编程环境 2024新版图文安装教程(Python环境搭建+VSCode安装+运行测试+背景图设置)

名人说&#xff1a;一点浩然气&#xff0c;千里快哉风。—— 苏轼《水调歌头》 创作者&#xff1a;Code_流苏(CSDN) 目录 一、Python环境安装二、VScode下载及安装三、VSCode配置Python环境四、运行测试五、背景图设置 很高兴你打开了这篇博客&#xff0c;更多详细的安装教程&…...

vue+springboot+cas配置及cookie传递问题

cookie的注意事项 前边的文章已经介绍过cookie的基本信息&#xff0c;这里再次说明一点&#xff1a;cookie是无法进行跨域传递的&#xff0c;很多时候cookie无法设置和传递都是因为跨域问题&#xff0c;ip/端口不一致。 主要就是&#xff1a;被设置cookie和要传递cookie的地址…...

0009.基于springboot+layui的ERP企业进销存管理系统

一、系统说明 基于springbootlayui的ERP企业进销存管理系统,系统功能齐全, 代码简洁易懂&#xff0c;适合小白学编程,课程设计&#xff0c;毕业设计。 二、系统架构 前端&#xff1a;html| layui 后端&#xff1a;springboot | mybatis| thymeleaf 环境&#xff1a;jdk1.8 |…...

ZYNQ初识2(zynq_7010)基于vivado,从PL端调用PS端的时钟

由于需要进行一些FPGA的简单开发&#xff0c;但板载PL端没有焊接晶振&#xff0c;所以需要从PS端借用时钟到PL端使用。 首先新建项目&#xff0c;根据自己的板载选择芯片&#xff0c;我的板载芯片是zynq_7010。 一路next&#xff0c;在自己的vivado的工作文档新建文件夹并给自…...

Android详解——ConstraintLayout约束布局

目录 一、ConstraintLayout概述 二、ConstraintLayout属性介绍 1. 相对位置 2. 边距 3. 中心和偏移位置 中心位置 偏移位置 4. 圆形位置 5. 可见性 6. 尺寸约束 最小尺寸 WRAP_CONTENT :强制约束 MATCH_CONSTRAINT Min和Max 百分比尺寸 比率 7. 链式布局 创建…...