<strike id="cy2gs"><menu id="cy2gs"></menu></strike>
  • <del id="cy2gs"><dfn id="cy2gs"></dfn></del>
  • QTableView基本用法

    2018-8-17    seo達人

    如果您想訂閱本博客內容,每天自動發到您的郵箱中, 請點這里

    一、添加表頭:

    1. QStandardItemModel *model = new QStandardItemModel(); 
    2. model->setColumnCount(2); 
    3. model->setHeaderData(0,Qt::Horizontal,QString::fromLocal8Bit("卡號")); 
    4. model->setHeaderData(1,Qt::Horizontal,QString::fromLocal8Bit("姓名"));

    復制代碼


    二、設置表格屬性:

    1. ui->tableView->setModel(model); 
    2. //表頭信息顯示居左 
    3. ui->tableView->horizontalHeader()->setDefaultAlignment(Qt::AlignLeft); 
    4. //設置列寬不可變 
    5. ui->tableView->horizontalHeader()->setResizeMode(0,QHeaderView::Fixed); 
    6. ui->tableView->horizontalHeader()->setResizeMode(1,QHeaderView::Fixed); 
    7. ui->tableView->setColumnWidth(0,101); 
    8. ui->tableView->setColumnWidth(1,102);

    復制代碼


    注:在進行表格設置時必須是“ui->tableView->setModel(model);”在前,屬性具體設置在后,

    反之則設置不會生效。如上述代碼所示。

    三、添加行(添加三行一樣的信息):

    1. for(int i = 0; i < 3; i++) 
    2.      model->setItem(i,0,new QStandardItem("2009441676")); 
    3.         //設置字符顏色 
    4.      model->item(i,0)->setForeground(QBrush(QColor(255, 0, 0))); 
    5.         //設置字符位置 
    6.      model->item(i,0)->setTextAlignment(Qt::AlignCenter); 
    7.      model->setItem(i,1,new QStandardItem(QString::fromLocal8Bit("哈哈"))); 
    8. }

    復制代碼


    四、刪除行:

    1. //x是指定刪除哪一行 
    2. model->removeRow(x); 
    3. //刪除所有行 
    4. model->removeRows(0,model->rowCount());

    復制代碼


    再舉一個例子:

    在一個藥品劃價模塊中有這樣的操作流程:

    檢索處方項目成功后,把該項目顯示到QTableView里,把需要編輯的數量字段提供給用戶輸入,用戶輸入確認后,該項目留在列表中,然后開始下一項目檢索錄入。

    實現過程如下:

    錄入的項目保留在臨時表tmp中,界面上的QTableView取名為tbList,與tbList關聯的Model取名為tb1。檢索成功后,把檢索結果插入到臨時表中,把需要編輯的字段提供給用戶。

    1. tb1=newQSqlTableModel(this,*dbR); //dbR是本應用中的數據源 
    2. tb1->setTable("tmp"); //處方臨時表

    復制代碼


    程序中需要顯示的時候,

    1. tbList->setModel(NULL); //清除原先數據集 
    2. tbList->setModel(tb1); //刷新顯示

    復制代碼


    程序中需要提供編輯輸入的時候

    1. QModelIndexmdidx=m_ui->tbList->model()->index(row,column); //獲得需要編輯的單元格的位置 
    2. m_ui->tbList->setFocus(); //把輸入焦點交給tbList 
    3. m_ui->tbList->setCurrentIndex(mdidx); //設定需要編輯的單元格 
    4. m_ui->tbList->edit(mdidx); //開始編輯

    復制代碼


    有一個問題需要注意。向QTableView中添加記錄時,字段一定要完整,不能有空白字段,否則結果無法保存。切記。

    如果需要對用戶輸入做限制,比如只能在指定的字段輸入指定的數據類型,可以通過QItemDelegate來實現。

    貼一段代碼,說明QTableView基本用法

    1. QStandardItemModel model; 
    2. //設置大小 
    3. model.setColumnCount(3); //列 
    4. model.setRowCount(musicFound); //行 
    5. //設置標題 
    6. model.setHeaderData(0,Qt::Horizontal,"ID"); 
    7. //添加數據 
    8. for(int j=0;j<row;j++)
    9. {
    10.             //寫id
    11.             QStandardItem *itemID = new QStandardItem("hello");//QString::number(j)));
    12.             model.setItem(j,0,itemID);
    13. }
    14. //選擇這個model 
    15. m_ui->tableView->setModel(&model); 
    16. //隱藏左邊那列 
    17. m_ui->tableView->verticalHeader()->hide(); 
    18. //列寬 
    19. m_ui->tableView->setColumnWidth(0,30); 
    20. //整行選擇 
    21. m_ui->tableView->setSelectionBehavior(QAbstractItemView::SelectRows);

     

     

    QT的MVC(View/Delegate)模型十分強大,可以利用各種控件來對表格的輸入進行限制,不過我以前一直沒有過,這幾天研究了一下,寫個小例子,希望大家喜歡。
     
    如果看不懂這個例子,請先看QT的自帶例子:http://qt-project.org/doc/qt-4.8/itemviews-spinboxdelegate.html
     
    思路:
     
    1:為每一列定義委托:
    A:第一列是編號列,使用只讀委托,令該列的單元格是只讀的
    B:第三列是ID列,只能輸入1-12個數字,利用QLineEdit委托和正則表達式對輸入進行限制
    C:第四年齡列,利用QSpinBox委托進行輸入限制,只能輸入1-100之間的數字
    D:第五列是性別列,利用QComboBox委托對輸入進行限制,該列的單元格只能輸入Male或Female
    E:第六列是頭像列,在該列的單元格中央放置一張頭像
    2:定義代理類,把所有單元格中的字符居中顯示。
    3:利用QSS,將表格的背景色弄成黃藍相間。
     
    截圖:
     


    上代碼:
     1.#include <QtGui>   
     2.  
     3.//編號列,只讀委托   
     4.//這個方法我還真想不到,呵呵   
     5.class ReadOnlyDelegate : public QItemDelegate  
     6.{  
     7.    Q_OBJECT  
     8.public:  
     9.    ReadOnlyDelegate(QObject *parent = 0): QItemDelegate(parent) { }  
     10.    QWidget *createEditor(QWidget*parent, const QStyleOptionViewItem &option, 
     11.        const QModelIndex &index) const  
     12.    {  
     13.        return NULL;  
     14.    }  
     15.};  
     16.  
     17.//ID列,只能輸入1-12個數字   
     18.//利用QLineEdit委托和正則表達式對輸入進行限制   
     19.class UserIDDelegate : public QItemDelegate  
     20.{  
     21.    Q_OBJECT  
     22.public:  
     23.    UserIDDelegate(QObject *parent = 0): QItemDelegate(parent) { }  
     24.    QWidget *createEditor(QWidget *parent, const QStyleOptionViewItem &option, 
     25.        const QModelIndex &index) const  
     26.    {  
     27.        QLineEdit *editor = new QLineEdit(parent);  
     28.        QRegExp regExp("[0-9]{0,10}");  
     29.        editor->setValidator(new QRegExpValidator(regExp, parent));  
     30.        return editor;  
     31.    }  
     32.    void setEditorData(QWidget *editor, const QModelIndex &index) const  
     33.    {  
     34.        QString text = index.model()->data(index, Qt::EditRole).toString();  
     35.        QLineEdit *lineEdit = static_cast<QLineEdit*>(editor);  
     36.        lineEdit->setText(text);  
     37.    }  
     38.    void setModelData(QWidget *editor, QAbstractItemModel *model,  
     39.        const QModelIndex &index) const  
     40.    {  
     41.        QLineEdit *lineEdit = static_cast<QLineEdit*>(editor);  
     42.        QString text = lineEdit->text();  
     43.        model->setData(index, text, Qt::EditRole);  
     44.    }  
     45.    void updateEditorGeometry(QWidget *editor,  
     46.        const QStyleOptionViewItem &option, const QModelIndex &index) const  
     47.    {  
     48.        editor->setGeometry(option.rect);  
     49.    }  
     50.};  
     51.  
     52.//年齡列,利用QSpinBox委托進行輸入限制,只能輸入1-100之間的數字   
     53.class AgeDelegate : public QItemDelegate  
     54.{  
     55.    Q_OBJECT  
     56.public:  
     57.    AgeDelegate(QObject *parent = 0): QItemDelegate(parent) { }  
     58.    QWidget *createEditor(QWidget *parent, const QStyleOptionViewItem &option, 
     59.        const QModelIndex &index) const  
     60.    {  
     61.        QSpinBox *editor = new QSpinBox(parent);  
     62.        editor->setMinimum(1);  
     63.        editor->setMaximum(100);  
     64.        return editor;  
     65.    }  
     66.    void setEditorData(QWidget *editor, const QModelIndex &index) const  
     67.    {  
     68.        int value = index.model()->data(index, Qt::EditRole).toInt();  
     69.        QSpinBox *spinBox = static_cast<QSpinBox*>(editor);  
     70.        spinBox->setValue(value);  
     71.    }  
     72.    void setModelData(QWidget *editor, QAbstractItemModel *model,  
     73.        const QModelIndex &index) const  
     74.    {  
     75.        QSpinBox *spinBox = static_cast<QSpinBox*>(editor);  
     76.        spinBox->interpretText();  
     77.        int value = spinBox->value();  
     78.        model->setData(index, value, Qt::EditRole);  
     79.    }  
     80.    void updateEditorGeometry(QWidget *editor,  
     81.        const QStyleOptionViewItem &option, const QModelIndex &index) const  
     82.    {  
     83.        editor->setGeometry(option.rect);  
     84.    }  
     85.};  
     86.  
     87.//性別列,利用QComboBox委托對輸入進行限制   
     88.//這一列的單元格只能輸入Male或Female   
     89.class SexDelegate : public QItemDelegate  
     90.{  
     91.    Q_OBJECT  
     92.public:  
     93.    SexDelegate(QObject *parent = 0): QItemDelegate(parent) { }  
     94.    QWidget *createEditor(QWidget *parent, const QStyleOptionViewItem &option, 
     95.        const QModelIndex &index) const  
     96.    {  
     97.        QComboBox *editor = new QComboBox(parent);  
     98.        editor->addItem("Female");  
     99.        editor->addItem("Male");  
     100.        return editor;  
     101.    }  
     102.    void setEditorData(QWidget *editor, const QModelIndex &index) const  
     103.    {  
     104.        QString text = index.model()->data(index, Qt::EditRole).toString(); 
     105.        QComboBox *comboBox = static_cast<QComboBox*>(editor);  
     106.        int tindex = comboBox->findText(text);  
     107.        comboBox->setCurrentIndex(tindex);  
     108.    }  
     109.    void setModelData(QWidget *editor, QAbstractItemModel *model,  
     110.        const QModelIndex &index) const  
     111.    {  
     112.        QComboBox *comboBox = static_cast<QComboBox*>(editor);  
     113.        QString text = comboBox->currentText();  
     114.        model->setData(index, text, Qt::EditRole);  
     115.    }  
     116.    void updateEditorGeometry(QWidget *editor,  
     117.        const QStyleOptionViewItem &option, const QModelIndex &index) const 
     118.    {  
     119.        editor->setGeometry(option.rect);  
     120.    }  
     121.};  
     122.  
     123.//頭像列,只是在單元格中央放一張小圖而已   
     124.class IconDelegate : public QItemDelegate  
     125.{  
     126.    Q_OBJECT  
     127.public:  
     128.    IconDelegate(QObject *parent = 0): QItemDelegate(parent) { }  
     129.    void paint(QPainter *painter, const QStyleOptionViewItem &option,  
     130.        const QModelIndex & index ) const  
     131.    {  
     132.        //show.bmp是在工程目錄中的一張圖片(其實就是QQ的圖標啦,呵呵)   
     133.        QPixmap pixmap = QPixmap("show.bmp").scaled(24, 24);  
     134.        qApp->style()->drawItemPixmap(painter, option.rect,  Qt::AlignCenter, QPixmap(pixmap)); 
     135.    }  
     136.};  
     137.  
     138.//代理類,把所有單元格中的字符居中顯示   
     139.class VIPModel : public QStandardItemModel  
     140.{  
     141.    Q_OBJECT  
     142.public:  
     143.    VIPModel(QObject *parent=NULL) : QStandardItemModel(parent) { }  
     144.    VIPModel(int row, int column, QObject *parent=NULL)  
     145.        : QStandardItemModel(row, column, parent) { }  
     146.    QVariant data(const QModelIndex &index, int role = Qt::DisplayRole) const 
     147.    {  
     148.        if( Qt::TextAlignmentRole == role )  
     149.            return Qt::AlignCenter;   
     150.        return QStandardItemModel::data(index, role);  
     151.    }  
     152.  
     153.};  
     154.  
     155.#include "main.moc"   
     156.  
     157.int main(int argc, char *argv[])  
     158.{  
     159.    QApplication app(argc, argv);  
     160.  
     161.    VIPModel *model = new VIPModel(5, 5);  
     162.    QTableView *tableView = new QTableView;  
     163.  
     164.    //把表格的背景調成黃藍相間   
     165.    //這種方法是在網上看到的,用起來還真方便啊   
     166.    tableView->setAlternatingRowColors(true);  
     167.    tableView->setStyleSheet("QTableView{background-color: rgb(250, 250, 115);" 
     168.        "alternate-background-color: rgb(141, 163, 215);}");  
     169.  
     170.    tableView->setWindowTitle("VIP List");  
     171.    tableView->resize(700, 400);  
     172.    tableView->setModel(model);  
     173.    QStringList headerList;  
     174.    headerList << "No." << "ID" << "Name" << "Age" << "Sex" << "Show";  
     175.    model->setHorizontalHeaderLabels(headerList);  
     176.    tableView->verticalHeader()->setVisible(false);  
     177.    tableView->horizontalHeader()->setStretchLastSection(true);  
     178.  
     179.    //為每一列加載委托   
     180.    ReadOnlyDelegate readOnlyDelegate;  
     181.    tableView->setItemDelegateForColumn(0, &readOnlyDelegate);  
     182.    UserIDDelegate userIDDelegate;  
     183.    tableView->setItemDelegateForColumn(1, &userIDDelegate);  
     184.    AgeDelegate spinBoxDelegate;  
     185.    tableView->setItemDelegateForColumn(3, &spinBoxDelegate);  
     186.    SexDelegate comboBoxDelegate;  
     187.    tableView->setItemDelegateForColumn(4, &comboBoxDelegate);  
     188.    IconDelegate iconDelegate;  
     189.    tableView->setItemDelegateForColumn(5, &iconDelegate);  
     190.  
     191.    for(int i=0; i<10; i++)  
     192.    {  
     193.        QModelIndex index = model->index(i, 0, QModelIndex());  
     194.        model->setData(index, i);  
     195.    }  
     196.  
     197.    tableView->show();  
     198.    return app.exec();  
     199.} 

    藍藍設計m.skdbbs.com )是一家專注而深入的界面設計公司,為期望卓越的國內外企業提供卓越的UI界面設計、BS界面設計 、 cs界面設計 、 ipad界面設計 、 包裝設計 、 圖標定制 、 用戶體驗 、交互設計、 網站建設 平面設計服務

    日歷

    鏈接

    個人資料

    藍藍設計的小編 http://m.skdbbs.com

    存檔

    主站蜘蛛池模板: 国产精品区一区二区三在线播放| 一区二区三区日韩精品| 成人区人妻精品一区二区不卡视频| 国内精品伊人久久久久网站| 2022国产精品不卡a| 熟女精品视频一区二区三区 | 色婷婷在线精品国自产拍| 国产精品一区三区| 久久久精品午夜免费不卡| 国产成人久久精品一区二区三区 | 中文字幕一精品亚洲无线一区| 国产欧美在线观看精品一区二区| 91视频国产精品| 色偷偷88888欧美精品久久久 | 中文字幕无码精品亚洲资源网久久 | 9久热这里只有精品| sihu国产精品永久免费| 日本VA欧美VA欧美VA精品| 亚洲精品第一国产综合境外资源 | 华人在线精品免费观看| 久久66热人妻偷产精品9| 在线观看亚洲精品福利片 | 精品国产欧美一区二区| 国产精品免费高清在线观看| 久久精品国产亚洲77777| 夜夜精品无码一区二区三区| 久久精品18| 久久精品国产亚洲精品| 国产精品成人99久久久久91gav| 亚洲国产精品久久久久| 久久99热国产这有精品| 国产精品视频网站你懂得| 国产成人精品视频一区二区不卡| 精品一区二区三区在线成人 | 成人无码精品1区2区3区免费看| 久久精品人人做人人爽电影蜜月 | 99热亚洲色精品国产88| HEYZO无码综合国产精品227| 国产成人精品视频在放| 国产精品天天影视久久综合网| 好吊妞视频精品|