QTreeView使用總結2,常用API介紹

逆風微光發表於2018-03-25

1,簡介

上一篇展示了一個最簡單的QTreeView示例,只是剛剛能顯示資料而已。

實際使用中,需要對QTreeView的各項屬性進行配置,下面介紹一下常用設定項。

先看最終效果:


2,QTreeView常用設定項

void MainWindow::InitTree()
{
    //1,QTreeView常用設定項
    QTreeView* t = ui->treeView;
    t->setEditTriggers(QTreeView::NoEditTriggers);			//單元格不能編輯
    t->setSelectionBehavior(QTreeView::SelectRows);			//一次選中整行
    t->setSelectionMode(QTreeView::SingleSelection);        //單選,配合上面的整行就是一次選單行
    t->setAlternatingRowColors(true);                       //每間隔一行顏色不一樣,當有qss時該屬性無效
    t->setFocusPolicy(Qt::NoFocus);                         //去掉滑鼠移到單元格上時的虛線框

    //2,列頭相關設定
//    t->header()->hide();                                  //隱藏列頭
    t->header()->setStretchLastSection(true);               //最後一列自適應寬度
    t->header()->setDefaultAlignment(Qt::AlignCenter);      //列頭文字預設居中對齊

    //3,構造Model
    QStandardItemModel* model = new QStandardItemModel(ui->treeView);
    model->setHorizontalHeaderLabels(QStringList()<<QStringLiteral("序號") << QStringLiteral("名稱"));     //設定列頭
    for(int i=0;i<5;i++)
    {
        //一級節點,加入mModel
        QList<QStandardItem*> items1;
        QStandardItem* item1 = new QStandardItem(QString::number(i));
        QStandardItem* item2 = new QStandardItem(QStringLiteral("一級節點"));
        items1.append(item1);
        items1.append(item2);
        model->appendRow(items1);

        for(int j=0;j<5;j++)
        {
            //二級節點,加入第1個一級節點
            QList<QStandardItem*> items2;
            QStandardItem* item3 = new QStandardItem(QString::number(j));
            QStandardItem* item4 = new QStandardItem(QStringLiteral("二級節點"));
            items2.append(item3);
            items2.append(item4);
            item1->appendRow(items2);

            for(int k=0;k<5;k++)
            {
                //三級節點,加入第1個二級節點
                QList<QStandardItem*> items3;
                QStandardItem* item5 = new QStandardItem(QString::number(k));
                QStandardItem* item6 = new QStandardItem(QStringLiteral("三級節點"));
                items3.append(item5);
                items3.append(item6);
                item3->appendRow(items3);
            }
        }
    }

    //4,應用model
    t->setModel(model);

    //一些項在應用model後設定
    //5,設第一列初始寬度;第一列固定寬度
    t->header()->resizeSection(0,100);
    t->header()->setSectionResizeMode(0,QHeaderView::Fixed);
    //6,預設選中一級節點的第一行
    QModelIndex rootIndex = t->rootIndex();
    QModelIndex selIndex = model->index(0,0,rootIndex);
    t->setCurrentIndex(selIndex);
}


3,說明

QTreeView常用介面:

1,setEditTriggers:設定單元格是否可編輯、如何操作來編輯。

引數含義為:

enum EditTrigger {
    NoEditTriggers = 0,     //不可編輯
    CurrentChanged = 1,     //任何時候都能對單元格修改
    DoubleClicked = 2,      //雙擊單元格
    SelectedClicked = 4,    //單擊已選中的內容
    EditKeyPressed = 8,     //鍵盤的編輯鍵,如F2
    AnyKeyPressed = 16,     //按下任意鍵就能修改
    AllEditTriggers = 31    //以上條件全包括
};

2,setSelectionBehavior:設定以單個單元格、還是一行、一列方式選擇

引數含義為:

enum SelectionBehavior {
    SelectItems,        //選中單個單元格
    SelectRows,         //選中一行
    SelectColumns       //選中一列
};

3,setSelectionMode:設定單選、多選

enum SelectionMode {
    NoSelection,        //不能選擇
    SingleSelection,    //單選
    MultiSelection,     //多選,不用按ctrl鍵即可多選,選擇新項時不取消之前選擇,已選中的再選擇會取消選擇
    ExtendedSelection,  //多選,按ctrl、shift鍵多選,選擇新項時取消之前選擇
    ContiguousSelection   //多選,需要按ctrl或shift都是shift選中效果,即選中兩次點選之間的所有元素
};

4,setAlternatingRowColors:設定每間隔一行,背景色不同,如圖


5,setFocusPolicy(Qt::NoFocus) ;    // 常用來取消單元格的虛線框

6,t->header()->setStretchLastSection(true);     //最後一列自適應寬度

7,t->header()->setDefaultAlignment(Qt::AlignCenter);      //列頭文字預設居中對齊

8,//設第一列初始寬度;第一列固定寬度
    t->header()->resizeSection(0,100);

    t->header()->setSectionResizeMode(0,QHeaderView::Fixed);

9,//,預設選中一級節點的第一行
    QModelIndex rootIndex = t->rootIndex();
    QModelIndex selIndex = model->index(0,0,rootIndex);

    t->setCurrentIndex(selIndex);



相關文章