19.QListview綁定到數(shù)據(jù)庫--Apple的學(xué)習(xí)筆記

一 ,前言

之前18.QListView添加刪除修改的應(yīng)用--Apple的學(xué)習(xí)筆記中已經(jīng)描述,Qistview顯示的內(nèi)容沒有和數(shù)據(jù)庫綁定,所謂的添加刪除修改都是臨時的。今天我加入數(shù)據(jù)庫存儲。當(dāng)然存儲形式可以有多種,包括json,ini,xml等等。但是我選擇sqlite,為的是便于后續(xù)的實驗,并且我將來的工具需要用到sqlite數(shù)據(jù)庫。

二,需求

listview綁定sqlite進(jìn)行數(shù)據(jù)查詢顯示及修改保存。

三,遇到的問題

1. QT自帶的sqlmodel能綁定到Qlistview顯示嗎?
答:不能吧,暫時我不清楚方法。主要是覺得沒必要,2者不搭配。
2. 如何把數(shù)據(jù)傳遞到sql的語句中?
答:用prepare加exec語法來準(zhǔn)備和執(zhí)行數(shù)據(jù),當(dāng)然綁定數(shù)據(jù)用bindValue方法。其實和printf傳參類似的用法。
3. 表的主鍵和row如何綁定?
答:我自建了一個record和row綁定,但是row被刪除后也會變。所以最后設(shè)置為listname唯一,作為主鍵。
4. 刪除一條后其他條目信息在界面上全為空白?
答:我用的是listView->currentIndex().data().toString()若刪除后,此值為空。所以slm->removeRow(row);要放在sqlite操作后面進(jìn)行。最后我的代碼如下

void Widget::deleteItem()
{
    int row = listView->currentIndex().row();
    //執(zhí)行sql數(shù)據(jù)刪除
    setDataInfo(0,listView->currentIndex().data().toString(),"uint8","uint8",1);
    //做刪除動作則先改本地數(shù)據(jù)庫,再在模型數(shù)據(jù)庫,否則currentIndex會變化。
    slm->removeRow(row);
    //指向上一行
    if(slm->rowCount())
    {
        //qDebug("focus on %d",row);
        itemClicked(slm->index(row,0));
    }
    else //模型中已無數(shù)據(jù)
    {
        pages->setCurrentIndex(0);
    }
}

5. list數(shù)據(jù)綁定的界面信息如何切換
答:選擇的list進(jìn)行name查詢后,將獲取的數(shù)據(jù)設(shè)置到右邊的LineEdit文本框即可。

void Widget::itemClicked(const QModelIndex &item)
{
    curselectItem = item;
    if(pages->currentIndex() == 0)
    {
        pages->setCurrentIndex(1);
    }
    qDebug()<<"itemClicked";
    //界面信息更新
    setDataInfo(0,listView->currentIndex().data().toString(),"uint8","uint8",3);
}

6. QLineEdit編輯完成光標(biāo)移走及回車的信號是什么?
答:查看help可以知道信號為editingFinished。我的信號綁定如下

void DataProperties::InitConnect()
{
    connect(m_txtlist[0], &QLineEdit::editingFinished, this, &DataProperties::updateNameInfo);
    connect(m_txtlist[1], &QLineEdit::editingFinished, this, &DataProperties::updateNameInfo);
    connect(m_txtlist[2], &QLineEdit::editingFinished, this, &DataProperties::updateNameInfo);
}

四,效果

軟件一運行就從創(chuàng)建新的數(shù)據(jù)庫開始。沒有判斷若已經(jīng)有數(shù)據(jù)庫,則顯示界面。這部分要實現(xiàn)也容易,將來有需求再加入即可。


image.png

五,小結(jié)

從實際應(yīng)用角度學(xué)習(xí)了下,把Listview和數(shù)據(jù)庫聯(lián)動。但是僅適合小數(shù)據(jù)庫,因為我界面一更新就會去操作數(shù)據(jù)庫,沒有用到緩存技術(shù),并且我也沒有使用自定義itemmodule,所以這樣的設(shè)計方法效率不高,適用于簡單的小型數(shù)據(jù)庫快速開發(fā)。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容