Gaming Life

一日24時間、ゲームは10時間

Qt5 QListViewのダブルクリック編集を無効にする

 最近Qt5を触ってるのでそのメモ。

 QListViewにQStringListModelを突っ込み、リストビューを作るのはそんなに難しくない。

#include "mainwindow.h"
#include <QLayout>
#include <QString>
#include <QStringListModel>

MainWindow::MainWindow(QWidget *parent)
    : QWidget(parent)
{
    QListView *listView;

    //QListViewを生成,ここにlistModelを追加していく
    listView = new QListView();
    Q_CHECK_PTR(listView);

    //listItemTextに文字をセットする
    QStringList listItemText;

    listItemText << "001";
    listItemText << "002";
    listItemText << "003";

    QStringListModel *model;

    model = new QStringListModel();

    //モデルにlistItemTextを追加する
    model->setStringList(listItemText);

    //listViewにmodelをセット
    listView->setModel(model);

    QVBoxLayout *mainLayout = new QVBoxLayout;
    mainLayout->addWidget(listView);

    setLayout(mainLayout);
    setWindowTitle(tr("ListViewTest"));
}

 実行するとこんな感じ。

f:id:ai_gaminglife:20180809154812p:plain

 ただこのままでは一つ問題があって、要素をダブルクリックすると中身を書き換えることができてしまう。

 これを解決するには、下の1行が必要。

    listView->setEditTriggers(QAbstractItemView::NoEditTriggers);

 これでダブルクリック編集が無効になる。

参考サイト

http://doc.qt.io/archives/qt-4.8/qabstractitemview.html#EditTrigger-enum https://stackoverflow.com/questions/6226185/uneditable-qlistview

 しかしQtの公式ドキュメントは本当に充実している。UE4もこれぐらいドキュメント使いやすくしてほしいなあ。