金曜日, 11月 10, 2023

QTreeWidget アイテムの追加・削除

 

QTreeWidget はそのまま使えるツリー構造用のコンポーネントです。そのまま、というのは QTreeView 派生クラスなど作らなくても備え付けのデータクラスが使えるという意味です。

QTreeWidget へアイテムを追加するコードはヘルプにもありますが、ここではルート要素へも追加できるコードを置いておきます。


void MainWindow::addItem() {
bool ok;
QString text = QInputDialog::getText(this, tr("New Item"), tr("New Item:"),
QLineEdit::Normal, "", &ok);
if (ok && !text.isEmpty()) {
if (m_pItem == nullptr) {
QStringList lst = {text};
QTreeWidgetItem *item =
new QTreeWidgetItem(static_cast<QTreeWidget *>(nullptr), lst);
ui->treeWidget->addTopLevelItem(item);
} else {
QTreeWidgetItem *newItem = new QTreeWidgetItem(m_pItem);
newItem->setText(0, text);
m_pItem->setExpanded(true);
}
}
}


アイテムを削除する方法はこちらです。ルート要素の削除もできます。

void MainWindow::deleteItem() {
QList<QTreeWidgetItem *> items = ui->treeWidget->selectedItems();
QTreeWidgetItem *pp = nullptr;
if (!items.isEmpty()) {
foreach (QTreeWidgetItem *item, items) {
pp = item->parent();
if (pp != nullptr) {
pp->removeChild(item);
}
delete item;
}
}
}

Qt: 外部プログラムを起動する

  Qt/C++ のアプリは、外部へ直接アクセスできます。これはネットアプリでは不可能な Qt のメリットです。 外部プログラムを起動することもできます。QProcess::startDetached() を使うと独立したプロセスを立ち上げることができます。 この QProces...