99久久精品国产片-99久久精品国产免费-99久久精品国产麻豆-99久久精品国产国产毛片-99久久精品国产高清一区二区-99久久精品费精品国产一区二区

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.} 

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

日歷

鏈接

個人資料

藍藍設計的小編 http://www.lapeinture.cn

存檔

国产91素人搭讪系列天堂| 精品在线视频播放| 国产一区免费在线观看| 日日爽天天| 免费毛片基地| 999久久狠狠免费精品| 日韩在线观看视频黄| 免费毛片播放| 久草免费在线观看| 国产精品免费久久| 久久久成人影院| 久久国产一区二区| 九九久久国产精品大片| 99久久精品国产麻豆| 精品视频一区二区三区| 日韩在线观看免费完整版视频| 欧美激情一区二区三区在线 | 韩国三级香港三级日本三级la | 成人在免费观看视频国产| 日韩一级黄色片| 国产成人精品综合久久久| 成人a级高清视频在线观看| 亚洲精品中文字幕久久久久久| 亚洲女人国产香蕉久久精品| 欧美爱色| 日日日夜夜操| 成人高清视频在线观看| 99久久视频| 国产91精品露脸国语对白| 成人a大片高清在线观看| 麻豆系列 在线视频| 天天做人人爱夜夜爽2020毛片| 欧美电影免费| 久久国产精品只做精品| 国产91精品一区二区| 精品视频在线观看视频免费视频| 欧美一区二区三区在线观看| 精品视频免费在线| 日本在线www| 国产网站在线| 午夜在线亚洲| 精品视频免费在线| 香蕉视频久久| 青青青草影院| 色综合久久天天综线观看| 美女免费精品视频在线观看| 夜夜操天天爽| 欧美国产日韩久久久| 国产精品自拍一区| 香蕉视频久久| 黄色短视频网站| 精品久久久久久免费影院| 精品国产一区二区三区精东影业| 欧美爱爱网| 欧美电影免费| 亚洲精品中文字幕久久久久久| 国产成人啪精品| 久草免费在线视频| 一级片片| 成人高清视频在线观看| 成人免费一级毛片在线播放视频| 久久99中文字幕| 欧美一级视频免费| 999精品影视在线观看| 精品视频在线观看一区二区三区| 尤物视频网站在线观看| 精品国产三级a| 国产欧美精品| 99久久精品费精品国产一区二区| 精品在线视频播放| 午夜激情视频在线播放| 国产精品自拍一区| 午夜久久网| 久久99中文字幕久久| 精品久久久久久中文字幕2017| 美女免费精品视频在线观看| 四虎影视库| 99久久精品国产麻豆| 欧美激情一区二区三区中文字幕| 国产精品自拍亚洲| 午夜在线亚洲| 超级乱淫伦动漫| 99久久精品国产麻豆| 国产亚洲精品成人a在线| 亚洲天堂免费| 999精品在线| 日韩中文字幕在线播放| 日韩专区亚洲综合久久| a级黄色毛片免费播放视频| 国产精品自拍在线观看| 免费国产一级特黄aa大片在线| 国产高清在线精品一区二区| 99久久网站| 亚欧视频在线| 天堂网中文字幕| 日韩在线观看网站| 97视频免费在线观看| 日韩男人天堂| 日韩欧美一及在线播放| 国产欧美精品| 黄视频网站免费| 国产精品1024在线永久免费| 九九免费高清在线观看视频| 精品国产一区二区三区免费 | 久久99中文字幕久久| 精品视频一区二区三区免费| 精品国产一区二区三区久| 欧美激情一区二区三区在线 | 99久久网站| 精品国产亚洲人成在线| 欧美另类videosbestsex视频| 久久国产影院| 日韩一级黄色大片| 色综合久久天天综合绕观看| 二级片在线观看| 九九久久99| 韩国毛片免费大片| 韩国毛片免费| 国产极品精频在线观看| 麻豆午夜视频| 色综合久久天天综线观看| 91麻豆精品国产综合久久久| 欧美激情中文字幕一区二区| 成人免费一级毛片在线播放视频| 欧美夜夜骑 青草视频在线观看完整版 久久精品99无色码中文字幕 欧美日韩一区二区在线观看视频 欧美中文字幕在线视频 www.99精品 香蕉视频久久 | 日韩欧美一二三区| 人人干人人插| 尤物视频网站在线观看| 久久99这里只有精品国产| 国产成人女人在线视频观看| 精品在线观看国产| 日本特黄一级| 久草免费在线色站| 国产福利免费视频| 日韩专区亚洲综合久久| 九九九网站| 日本在线www| 亚洲精品中文一区不卡| 国产视频网站在线观看| 日韩专区第一页| 99久久精品费精品国产一区二区| a级精品九九九大片免费看| a级毛片免费全部播放| 精品国产三级a∨在线观看| 国产极品白嫩美女在线观看看| 好男人天堂网 久久精品国产这里是免费 国产精品成人一区二区 男人天堂网2021 男人的天堂在线观看 丁香六月综合激情 | 国产伦久视频免费观看 视频| 免费的黄视频| 国产成人欧美一区二区三区的| 久久精品成人一区二区三区| 成人免费一级毛片在线播放视频| 99久久精品国产国产毛片| 中文字幕一区二区三区 精品| 99久久精品国产高清一区二区| 欧美1区2区3区| 欧美大片一区| 国产一级生活片| 成人高清视频在线观看| 黄视频网站在线观看| 高清一级毛片一本到免费观看| 免费的黄色小视频| 国产高清在线精品一区a| 成人免费观看的视频黄页| 天天做人人爱夜夜爽2020毛片| 欧美大片aaaa一级毛片| 韩国毛片免费| 成人高清视频在线观看| 黄视频网站免费看| 国产精品免费精品自在线观看| 黄视频网站免费| 香蕉视频亚洲一级| 青青青草视频在线观看| 精品国产一区二区三区久久久狼| 欧美18性精品| 可以免费在线看黄的网站| 国产麻豆精品视频| 国产视频一区在线| 欧美日本国产| 国产视频一区在线| 香蕉视频久久| 国产一区二区精品在线观看| 一级毛片看真人在线视频| 日韩av片免费播放| 黄色福利| 国产麻豆精品免费视频| 国产高清在线精品一区a| 国产伦精品一区二区三区在线观看| 国产综合成人观看在线| 日韩中文字幕一区二区不卡| 久久精品人人做人人爽97| 日韩一级黄色大片| 精品久久久久久免费影院| 国产亚洲精品成人a在线| 精品视频免费观看| 精品国产一级毛片| 天天做日日爱| 黄色免费网站在线| 夜夜操网| 毛片高清| 国产网站免费观看|