1はじめに
最近、私はJSONファイルの削除、修正の小さなツールキー属性を作りました。私たちはここに遭遇したより厄介な問題のいくつかをまとめるだけでなく、ピットのいくつかは、彼らの評価を容易にするために辞任しました。また、私は必要としている人々は、いくつかの迂回路について以下とすることができることを願っています。主な機能として、ツール(下記):右クリックして属性行がためにファイルQlistWidget JSONを追加または削除する場合、特定のデータファイルJSON QTableWidgetを表示するには、表示するすべてのファイルJSON QListWidgetのすべてのJSONファイルのパスとファイル名を読み込みますJSONデータファイルは、変更後に保存します。プロパティ名は、ドロップダウンボックスをJSONファイルの読み込みで。
問題の2の概要
(1)QTableWidget指定されたランクがTableWidgetItemを追加しますか?
UI-> tableWidget-> SetItem関数(行、列、新しい新 QTableWidgetItem(QStringのitemNameに)); //コンテンツitemNameには、表示されます
(2)QTableWidget内のマウスは、右のアクションイベントであるか否かを決定?
/// 右键菜单显示 空隙 DisJsonParam ::によってContextMenuEvent(QContextMenuEvent * イベント) { のQPoint I = UI-> tableWidget-> mapFromGlobal(イベント - > globalPos()); QRect四角形(のQPoint(0、0)、UI-> tableWidget-> サイズ()); もし(rect.contains(I)) { _tableWidgetMenu - > EXEC(イベント - > globalPos()); } }
(3)行を挿入するQTableWidget権を、行を削除しますか?//(2)右の追加および削除機能を有するラインの組成
QMenu * _tableWidgetMenu = nullptr;
QAction *メソッドaddProperty = 新 QAction(" プロパティを追加"、このことを)。 QAction * delProperty = 新 QAction(" デル・プロパティ"、この);
_tableWidgetMenu - > addAction(メソッドaddProperty)。
_tableWidgetMenu - > addAction(delProperty)。
(メソッドaddProperty、接続&QAction ::トリガ、この、&DisJsonParam :: addPropertyClicked)。
(delProperty、接続&QAction ::トリガ、この、&DisJsonParam :: delPropertyClicked)。
ボイドDisJsonParam :: delPropertyClicked() { UI - > tableWidget->またremoveRow(rowIndexプロパティ); // rowIndexプロパティを削除する行の数 }
ボイドDisJsonParam :: addPropertyClicked() { int型の行= UI-> tableWidget-> をrowCount(); UI - > tableWidget->のinsertRow(行); // 一番下の最後の行に挿入 }
(4)ファイルパスの特定の形式の下にあるすべてのファイル名を表示QListWidget?
空DisJsonParam :: listJsonFiles() { IF FOLDERPATH _(_folderPath.isEmpty())//ファイルのパス { QMessageBox ::情報(この、" プロンプト"、" パスのエラー!" ); を返す; } QDir DIR = のQFileInfoの( _folderPath).absolutePath(); // QFileInfoList infolist = dir.entryInfoList(QDir ::ファイル); // で使用addItemsと listWidget- UI - >> クリア(); QStringList一覧 = dir.entryList(); QStringのjsonName。 以下のための(INTインデックス= 0、インデックス<はlist.size();インデックス++ ) { jsonName = list.at(インデックス) のQFileInfoのFileInfoの = ;のQFileInfoの(jsonName) QStringのサフィックス = fileinfo.suffix(); IF(接尾== " JSON " )//フィルタ指定された形式のファイル { UI - > listWidget-> のaddItem(jsonName); } } // UI-> listWidget-> addItems(リスト); // 一度に表示することができるが、ファイルリストは、他のフォーマットが含まれますファイル }
(5)ファイルを変更または切り替えるためにソフトウェアインタフェースを閉じた後、ファイルを保存するかどうかを尋ねましたか?
/// JSONファイルを切り替える、またはウィジェットを終了するとき、クエリがtablewidgetを変更された場合、変更されたデータファイルのJSON書き込まれる 空隙DisJsonParam :: saveJsonObj2JsonFile() { IF (changedFlag)を { QMessageBox :: StandardButton selectKey; selectKey = QMessageBox。 :質問(この、" プロンプト"、" ファイルの変更を保存するかどうか、修正された?" 、 QMessageBox ::はい | QMessageBox ::いいえ、 QMessageBox :: NoButton); のiF(selectKey == QMessageBox ::はい) { QJsonDocument jsonDoc (_currentJsonObj)。 QStringのjsonString =jsonDoc.toJson(); qfileによりSAVEFILE(_folderPath + _currentFileName)。 もし(!saveFile.open(のQIODevice ::書き込み専用)) { QMessageBox ::情報(この、" 提示"、" 无法保存JSON文件" ); 返します。 } saveFile.write(jsonString.toLocal8Bit())。 saveFile.close(); } changedFlag = 偽。 } }
(6)バルクは、ドロップダウンオプションからCoboBoxに項目JSONファイルを追加し、ヒントは、各ドロップダウンオプションヒントを高めるために?
/// キー属性JSONファイルを取得し、コンボボックスに表示名を初期化するために、コンボボックスと表示itemTips、showNameにアイテムを追加する ボイド(、QComboBox * prptesJsonFilePath QStringの、QStringのshowname DisJsonParam :: addPropertiesAndTipsFromJsonをコンボボックス) { qfileによりファイル(prptesJsonFilePath ); File.open(のQIODevice ::読み取り専用 | のQIODevice ::テキスト); QStringの値 = file.readAll(); File.close(); QJsonParseError parseJsonErr; QJsonDocument propertiesJsonDoc = QJsonDocument :: fromJson(value.toUtf8()、&parseJsonErr); IF((parseJsonErr.error ==!QJsonParseError :: NOERROR)) { QMessageBox ::情報(この、" 提示"、" 无法读取JSON文件" ); 返します。 } QJsonObject propertiesJsonObj = propertiesJsonDoc。オブジェクト(); QStringList keyNameList = propertiesJsonObj.keys()。 keyNameList.removeOne(showName)。 QStandardItemModel *モデル= 新しい QStandardItemModel(この); QStandardItem * アイテム。 アイテム = 新しいQStandardItem(showName)。 アイテム - >setToolTip(propertiesJsonObjは[showName] .toString()); モデル - > appendRow(項目); 以下のために(int型 i = 0 ; I <keyNameList.size(); iは++ ) { アイテム = 新しいQStandardItem(keyNameList [I])。 アイテム - > setToolTip(propertiesJsonObj [keyNameList [I]のtoString())。 モデル - > appendRow(項目); } コンボボックス - > てsetModel(モデル)。 }
(7)動的QComboBoxを追加TableWidget?
* = PropertiesCombobox QComboBox 新しい新QComboBox(); addPropertiesAndTipsFromJson(_prptesJsonFilePath、キー[ " プロパティ名" ] .toString()、propertiesCombobox); //コール(5) 接続(propertiesCombobox、SIGNAL(currentIndexChanged(QStringの))、この、SLOT(saveChange2JsonObj ())); //各制御信号は、データ交換に接続されています。
UI - > tableWidget - > setCellWidgetの(I、J、propertiesCombobox); I行の数である// jはどこ列の数であります
(8)動的QSpinBox(追加TableWidget QDoubleSpinBoxを)?
* = UpperSpinBoxItem QDoubleSpinBox 新しい新QDoubleSpinBox(); upperSpinBoxItem - > setRange( - 9999999999、9999999999 ); //数値表示範囲設定 upperSpinBoxItem - >のsetValue(キー[ " アッパー" ] .toDouble()); 接続(upperSpinBoxItem、SIGNAL(のvalueChangedを(ダブル))、このスロット(saveChange2JsonObj())); //各制御信号は、データ交換に接続されている
UI-> tableWidget - > setCellWidgetの(I、J + 2、upperSpinBoxItem);行の// I、の列とJ + 2