Linux书签上下移动
步骤
读书签文件,分割到QStringList,点击右键菜单获取序号,交换序号,写书签文件。
QStringList.swap(int, int) 过时,QStringList.swapItemsAt(int, int) 代替。
书签文件路径
- mainwindow.h
const QString filepath_bookmark = QStandardPaths::writableLocation(QStandardPaths::ConfigLocation) + "/gtk-3.0/bookmarks";
上移
connect(action_bookmark_move_up, &QAction::triggered, [=](){ QTreeWidgetItem *TWI = ui->treeWidget_nav->currentItem(); int index = TWI_bookmark->indexOfChild(TWI); QFile file(filepath_bookmark); if (file.open(QFile::ReadWrite)) { QTextStream TS(&file); QString s = TS.readAll(); QStringList SL = s.split("\n"); SL.swapItemsAt(index, index - 1); s = ""; for (int i=0; i<SL.length(); i++) { s += SL.at(i); if (i < SL.length() - 1) s += "\n"; } file.resize(0); TS << s; file.close(); } });
下移
- swap -1 改成 +1,其他一样。
connect(action_bookmark_move_down, &QAction::triggered, [=](){ QTreeWidgetItem *TWI = ui->treeWidget_nav->currentItem(); int index = TWI_bookmark->indexOfChild(TWI); QFile file(filepath_bookmark); if (file.open(QFile::ReadWrite)) { QTextStream TS(&file); QString s = TS.readAll(); QStringList SL = s.split("\n"); SL.swapItemsAt(index, index + 1); s = ""; for (int i=0; i<SL.length(); i++) { s += SL.at(i); if (i < SL.length() - 1) s += "\n"; } file.resize(0); TS << s; file.close(); } });
监视到书签文件变化更新书签树
QFileSystemWatcher只触发一次
- 百度AI回答:
- 只能触发一次,如果需要持续触发,需要在处理完触发后,再次添加路径。
const QString filepath_bookmark = QStandardPaths::writableLocation(QStandardPaths::ConfigLocation) + "/gtk-3.0/bookmarks"; QFileSystemWatcher *watcher = new QFileSystemWatcher; watcher->addPath(filepath_bookmark); connect(watcher, &QFileSystemWatcher::fileChanged, [=]{ genBookmark(); watcher->addPath(filepath_bookmark); });