配置 qt-creator 用作 IDE

  • 导入代码

    File -> New File Or Project -> Import Project -> Import Existing Project
  • 添加删除文件
  • 设置 include 目录
  • 设置预定义宏
  • 打开 ClangModel,去除部分 warning

    -Wno-extra-semi -Wno-unused-parameter -Wno-missing-variable-declarations -Wno-sign-conversion -Wno-vla -Wno-pedantic -Wno-implicit-function-declaration -Wno-cast-qual -Wno-conversion -Wno-unused-variable
    

QSortFilterProxyModel 对任意列进行排序方法

  • 从 SDK examples 学习来的方法

    • 使用 setRole,设置需要排列的列
    • 使用 sort 方法,进行排序

    使用以上方法,发现只能对第一次 setRole 的列起作用,再切换其它列就不管用了。

  • stackoverflow 学习的方法
    • 重载 lessThan 方法

      bool SortFilterProxyModel::lessThan(const QModelIndex &source_left, const QModelIndex &source_right) const
      {
          QVariant left = sourceModel()->data(source_left, m_sortRole);
          QVariant right = sourceModel()->data(source_right, m_sortRole);
          return left.toString() < right.toString();
      }   
      
    • 在代码中保存列并排序 m_sortRole

      void SortFilterProxyModel::sortColumn(int column, Qt::SortOrder order)
      {
          m_sortRole = column + LogListModel::NameRole;
          sort(0, order);
      }   
      
    • qml 中响应 TableView 列排序事件

      tableView.onSortIndicatorColumnChanged: {
          logProxyModel.sortColumn(tableView.sortIndicatorColumn, tableView.sortIndicatorOrder)
      }
      tableView.onSortIndicatorOrderChanged: {
          logProxyModel.sortColumn(tableView.sortIndicatorColumn, tableView.sortIndicatorOrder)
      }    
      

android 内核编译打包方法

  • 教程 {XDA}{Tutorial}Build your first kernel.
  • bootimg 打包工具

    下载代码 unpackbootimg ,直接 make 编译解包和打包工具。

  • 编译内核
  • 生成 boot.img 内核包
    • 解包得到 ramdisk 根文件系统

      unpackbootimg -i boot.img -o .
    • 解包 ramdisk.gz 方法(一般不用解包,直接使用即可)

      gunzip -k ramdisk.gz 
      apt install cpio
      cpio -i -F ramdisk 
    • 与编译得到的 boot 内核一起打包,得到 boot.img

      vim pack.sh
      ./mkbootimg \
        --kernel build/arch/arm64/boot/Image.gz \
        --ramdisk ramdisk.gz \
        --cmdline "console=null androidboot.hardware=qcom user_debug=31 msm_rtb.filter=0x37 ehci-hcd.park=3 lpm_levels.sleep_disabled=1 cma=24M@0-0xffffffff rcupdate.rcu_expedited=1" \
        --base 0x80000000 \
        --pagesize 4096 \
        --dt build/arch/arm64/boot/dtb.img \
        --ramdisk_offset 0x02200000 \
        --tags_offset 0x02000000 \
        --output boot.img
      tar -cvf boot.tar boot.img
      
  • 刷入内核
    • 将 boot.img 打包进 boot.tar

      tar cvf boot.tar boot.img

      AP 中可以包含 boot.img, recovery.img, system.ext 等分区,仅打包部分分区,刷机时不会影响其它分区。

    • 用 Odin 工具刷入 AP,选择 boot.tar 刷入

ubuntu 启动恢复方法

等待网络时间太长

vim /etc/systemd/system/network-online.targets.wants/networking.service
TimeoutStartSec=10sec
systemctl daemon-reload

不显示启动日志

vim /etc/default/grub

删除 quiet splash 参数

update-grub

进入 grub 菜单

开机后,按 escshift 键,可以进入 grub 菜单

grub 命令行修复 ubuntu 引导

grub rescue> ls
(hd0) (hd1) (hd1,gpt8)....

grub rescue> ls (hd1,gpt7)/
./ ../ lost+found/ bin/ boot/ dev/...

grub rescue> set root=(hd1,gpt7)
grub rescue> set prefix=(hd1,gpt7)/boot/grub

grub rescue> insmod normal
grub rescue> normal

##引导进入 ubuntu 后
grub-install /dev/sdb2

win10 安装或升级 docker 失败问题

  • 必须关闭 win10 的实时防毒功能!
  • 如果已经失败,无法安装,无法启动,可以运行的 PowerShell 脚本 remove-docker.ps1 删除。

    $ErrorActionPreference = "SilentlyContinue"
    
    kill -force -processname 'Docker for Windows', com.docker.db, com.docker.slirp, com.docker.proxy, com.docker.9pdb, moby-diag-dl, dockerd
    kill -force -processname com.docker.service
    
    try {
    pushd "C:\Program Files\Docker\Docker\Resources"
    ./MobyLinux.ps1 -Destroy
    popd
    } Catch {}
    
    $service = Get-WmiObject -Class Win32_Service -Filter "Name='com.docker.service'"
    if ($service) { $service.StopService() }
    if ($service) { $service.Delete() }
    Start-Sleep -s 5
    Remove-Item -Recurse -Force "~/AppData/Local/Docker"
    Remove-Item -Recurse -Force "~/AppData/Roaming/Docker"
    if (Test-Path "C:\ProgramData\Docker") { takeown.exe /F "C:\ProgramData\Docker" /R /A /D Y }
    if (Test-Path "C:\ProgramData\Docker") { icacls "C:\ProgramData\Docker" /T /C /grant Administrators:F }
    Remove-Item -Recurse -Force "C:\ProgramData\Docker"
    Remove-Item -Recurse -Force "C:\Program Files\Docker"
    Remove-Item -Recurse -Force "C:\ProgramData\Microsoft\Windows\Start Menu\Programs\Docker"
    Remove-Item -Force "C:\Users\Public\Desktop\Docker for Windows.lnk"
    Remove-Item -Recurse -Force "~.docker"
    Remove-Item -Recurse -Force "~\DockerSwarm"
    Get-ChildItem HKLM:\software\microsoft\windows\currentversion\uninstall | ForEach-Object {Get-ItemProperty $_.PSPath} | Where-Object { $_.DisplayName -eq "Docker" } | Remove-Item -Recurse -Force
    Get-ChildItem HKLM:\software\classes\installer\products | ForEach-Object {Get-ItemProperty $_.pspath} | Where-Object { $_.ProductName -eq "Docker" } | Remove-Item -Recurse -Force
    Get-Item 'HKLM:\software\Docker Inc.' | Remove-Item -Recurse -Force
    
    Get-ItemProperty HKCU:\software\microsoft\windows\currentversion\Run -name "Docker for Windows" | Remove-Item -Recurse -Force
    Get-ItemProperty HKCU:\software\microsoft\windows\currentversion\UFH\SHC | ForEach-Object {Get-ItemProperty $_.PSPath} | Where-Object { $_.ToString().Contains("Docker for Windows.exe") } | Remove-Item -Recurse -Force
    
    Get-Item Env:\COMPOSE_CONVERT_WINDOWS_PATHS | Remove-Item
    Get-Item Env:\DOCKER_* | Remove-Item # DOCKER_CERT_PATH, DOCKER_HOST, DOCKER_MACHINE_NAME, DOCKER_TLS_VERIFY