QT中的QTableView的使用

来源:互联网 发布:金融公司网络销售面试 编辑:程序博客网 时间:2024/05/20 19:31
void MainWindow::initCtrl(){//下面是初始化 tableView_include if(tableview_model==NULL) {tableview_model = new QStandardItemModel(this);}QList<QStandardItem *>  items;QStandardItem *pcolumn1=new QStandardItem();items.append(pcolumn1);tableview_model->appendColumn(items);tableview_model->setHeaderData(0,Qt::Horizontal,"ICE files");ui->tableView_include->setModel( tableview_model );delete pcolumn1;}

void MainWindow::on_pushButton_clicked(){QStringList mimeTypeFilters;mimeTypeFilters << "ice/ice"; QFileDialog dialog(this);dialog.setNameFilter("*.ice");dialog.exec();QStringList fileNames;fileNames = dialog.selectedFiles();QDir dir=dialog.directory();QFileInfo qfinfo(fileNames[0]);QString filename=qfinfo.filePath();//qfinfo.fileName(); //如果filename已经在qsicefile中,那么不进行处理,不 重复添加if (qsicefile.contains(filename)==true){return;}qsicefile.append(filename);//下面给tableView_include添加数据QStandardItem *_picefile=new QStandardItem(filename);tableview_model->appendRow(_picefile);picefile.append(_picefile);}


参考:
http://blog.sina.com.cn/s/blog_a6fb6cc90101iang.html
C:\Qt\Qt5.5.1\Examples\Qt-5.5\widgets\itemviews\coloreditorfactory\coloreditorfactory.pro
C:\Qt\Qt5.5.1\Examples\Qt-5.5\widgets\itemviews\spinboxdelegate\spinboxdelegate.pro
C:\Qt\Qt5.5.1\Examples\Qt-5.5\widgets\itemviews\stardelegate\stardelegate.pro


QT中用TABVIEW显示一个QCOMBOX的例子1: 工程 spinboxdelegate
spinboxdelegate.pro:
QT += widgets
HEADERS     = delegate.h \
    tablemodel.h
SOURCES     = delegate.cpp \
              main.cpp \
    tablemodel.cpp
# install
target.path = $$[QT_INSTALL_EXAMPLES]/widgets/itemviews/spinboxdelegate
INSTALLS += target


delegate.h:
#ifndef DELEGATE_H
#define DELEGATE_H
#include <QStyledItemDelegate>
#include <QComboBox>
class SpinBoxDelegate : public QStyledItemDelegate
{
    Q_OBJECT
public:
    SpinBoxDelegate(QObject *parent = 0);
    QWidget *createEditor(QWidget *parent, const QStyleOptionViewItem &option,const QModelIndex &index) const Q_DECL_OVERRIDE;
    void setEditorData(QWidget *editor, const QModelIndex &index) const Q_DECL_OVERRIDE;
    void setModelData(QWidget *editor, QAbstractItemModel *model,const QModelIndex &index) const Q_DECL_OVERRIDE;
    void updateEditorGeometry(QWidget *editor,const QStyleOptionViewItem &option, const QModelIndex &index) const Q_DECL_OVERRIDE;
private slots:
    void commitAndCloseEditor(const QString &s);
};
#endif


tablemodel.h:
#ifndef SMSDTABLEMODEL_H
#define SMSDTABLEMODEL_H
#include <QAbstractTableModel>
class SMSDTableModel : public QAbstractTableModel
{
    Q_OBJECT
public:
    explicit SMSDTableModel(QObject *parent = 0);
    ~SMSDTableModel(void);
    int rowCount(const QModelIndex &parent) const Q_DECL_OVERRIDE;
    int columnCount(const QModelIndex &parent) const Q_DECL_OVERRIDE;
    bool setData(const QModelIndex &index, const QVariant &value, int role = Qt::EditRole)Q_DECL_OVERRIDE;
    QVariant data(const QModelIndex &index, int role) const Q_DECL_OVERRIDE;
    Qt::ItemFlags flags(const QModelIndex &index) const Q_DECL_OVERRIDE;
    QVariant headerData(int section, Qt::Orientation orientation, int role) const Q_DECL_OVERRIDE;
public:
    void setShowData(QVector<QStringList> &data) ;
    void setComboxData(QVector<QString> &data) ;
    void setHorizontalHeader(const QStringList& headers);
private:
    QStringList m_HorizontalHeader;
    QVector<QStringList> m_TableModelShowData;
    QVector<QString> m_ComboxShowData;
    int comboCol;
};
#endif


delegate.cpp:
#include "delegate.h"
#include <QSpinBox>
#include <QDebug>


SpinBoxDelegate::SpinBoxDelegate(QObject *parent)
    : QStyledItemDelegate(parent)
{
}


QWidget *SpinBoxDelegate::createEditor(QWidget *parent, const QStyleOptionViewItem & option , const QModelIndex & index ) const
{
    QComboBox  *editor = new QComboBox(parent);
    editor->setFrame(false);
    connect(editor, SIGNAL(currentTextChanged(const QString &)),
            this, SLOT(commitAndCloseEditor(const QString &)));
//    QSpinBox *editor = new QSpinBox(parent);
//    editor->setFrame(false);
//    editor->setMinimum(0);
//    editor->setMaximum(100);
    return editor;
}


void SpinBoxDelegate::setEditorData(QWidget *editor,
                                    const QModelIndex &index) const
{
    QStringList value = index.model()->data(index, Qt::EditRole).toStringList();
    QString curvalue = index.model()->data(index, Qt::DisplayRole).toString();


    QComboBox *spinBox = static_cast<QComboBox*>(editor);
    spinBox->addItems(value);
    spinBox->setCurrentText(curvalue);
    //spinBox->setValue(value);
//    int value = index.model()->data(index, Qt::EditRole).toInt();
//    QSpinBox *spinBox = static_cast<QSpinBox*>(editor);
//    spinBox->setValue(value);
}


void SpinBoxDelegate::setModelData(QWidget *editor, QAbstractItemModel *model,
                                   const QModelIndex &index) const
{
    QComboBox *spinBox = static_cast<QComboBox*>(editor);


    QStringList value = model->data(index, Qt::EditRole).toStringList();
    model->setData(index, value, Qt::EditRole);
    //spinBox->interpretText();
    //QStringList sl = spinBox->item
    QString scur = spinBox->currentText();
    qDebug()<<"SpinBoxDelegate::setModelData"<<scur;
    model->setData(index, scur, Qt::DisplayRole);
    //int value = spinBox->value();
    //model->setData(index, scur, Qt::DisplayRole);
//    QSpinBox *spinBox = static_cast<QSpinBox*>(editor);
//    spinBox->interpretText();
//    int value = spinBox->value();
//    model->setData(index, value, Qt::EditRole);
}


void SpinBoxDelegate::updateEditorGeometry(QWidget *editor,const QStyleOptionViewItem &option, const QModelIndex &/* index */) const
{
    editor->setGeometry(option.rect);
}


void SpinBoxDelegate::commitAndCloseEditor(const QString & s)
{
    QComboBox *editor = qobject_cast<QComboBox *>(sender());
    QString scur = editor->currentText();
qDebug()<<"SpinBoxDelegate::commitAndCloseEditor"<<scur;
    emit commitData(editor);
    //emit closeEditor(editor);
}


tablemodel.cpp:
#include "tablemodel.h"
#include "QDebug"


SMSDTableModel::SMSDTableModel(QObject *parent) :
    QAbstractTableModel(parent)
{
    comboCol=1;
}


SMSDTableModel::~SMSDTableModel()
{


}




int SMSDTableModel::rowCount(const QModelIndex &parent) const
{
    Q_UNUSED( parent)
    int i=m_TableModelShowData.size();
    return i;
}


int SMSDTableModel::columnCount(const QModelIndex &parent) const
{
    Q_UNUSED( parent)
    int j=m_TableModelShowData.size();
    return j;
}


bool SMSDTableModel::setData(const QModelIndex &index, const QVariant &value, int role)
{
    /*if (!index.isValid())
        return false;


    int r=index.row();
    int c=index.column();
    QStringList tempList1=m_TableModelShowData.at(r);
    if(role == Qt::EditRole&&c!=comboCol)
    {
        QAbstractTableModel.setData(index,tempList1.at(0),Qt::EditRole);
        return true;
    }
    if(role == Qt::EditRole&&c==comboCol)
    {
        QStringList inner;
        inner<<tempList1.at(1)<<tempList1.at(2)<<tempList1.at(3);
        QAbstractTableModel.setData(index,inner,Qt::EditRole);
        return true;
    }*/
     return false;
}


QVariant SMSDTableModel::data(const QModelIndex &index, int role) const
{
    if (!index.isValid())
        return QVariant();


    int r=index.row();
    int c=index.column();
    QStringList tempList1=m_TableModelShowData.at(r);
    QString sCombox = m_ComboxShowData.at(r);


    if(role == Qt::EditRole&&c!=comboCol)
    {
        QString stemp  = tempList1.at(0);
        return QVariant(stemp);
    }
    if(role == Qt::EditRole&&c==comboCol)
    {
        QStringList inner;
        inner<<tempList1.at(1)<<tempList1.at(2)<<tempList1.at(3);
        return QVariant(inner);
    }
    if(role == Qt::DisplayRole&&c==comboCol)
    {
        //QString innerx;
        return QVariant(sCombox);
//        QVariant va=this->data(index,Qt::DisplayRole);
//        QString innerx = va.toString();
//        qDebug()<<"SMSDTableModel::data"<<innerx;
//        //inner<<tempList1.at(1)<<tempList1.at(2)<<tempList1.at(3);
//        return QVariant(innerx);
    }
    //model->setData(index, scur, Qt::DisplayRole);
    return QVariant();
}


Qt::ItemFlags SMSDTableModel::flags(const QModelIndex &index) const
{
    if (!index.isValid())
        return Qt::NoItemFlags;


    Qt::ItemFlags flag = QAbstractItemModel::flags(index);


    flag|=Qt::ItemIsEditable; // 设置单元格可编辑,此处注释,单元格无法被编辑
    return flag;
}


void SMSDTableModel::setHorizontalHeader(const QStringList &headers)
{
    m_HorizontalHeader =  headers;
}




QVariant SMSDTableModel::headerData(int section, Qt::Orientation orientation, int role) const
{
    int m=m_HorizontalHeader.size();
    if(m==0) return QVariant();
    if (role == Qt::DisplayRole && orientation == Qt::Horizontal) {
        QString ss=m_HorizontalHeader.at(section);
        //QString strTemp=QString::fromLocal8Bit(ss.c_str());
        QString strTemp=ss;
        //QString strTemp(ss.c_str());
        QVariant vaTemp(strTemp);
        return vaTemp;
    }
    return QAbstractTableModel::headerData(section, orientation, role);
}


void SMSDTableModel::setShowData(QVector<QStringList> &data)
{
    m_TableModelShowData.clear();
    m_TableModelShowData=data;
}


void SMSDTableModel::setComboxData(QVector<QString> &data)
{
    m_ComboxShowData.clear();
    m_ComboxShowData=data;
}


main.cpp:
#include "delegate.h"
#include <QApplication>
#include <QHeaderView>
#include <QStandardItemModel>
#include <QTableView>
#include <tablemodel.h>


int main(int argc, char *argv[])
{
    QApplication app(argc, argv);


    QTableView tableView;
    SMSDTableModel model(&tableView);


    QStringList tempList0;
    tempList0<<"000xxx"<<"000yyy"<<"000zzz"<<"000ttt";


    QStringList tempList1;
    tempList1<<"111xxx"<<"111yyy"<<"111zzz"<<"111ttt";


    QVector<QStringList> vecAlldata;
    vecAlldata.append(tempList0);
    vecAlldata.append(tempList1);
    model.setShowData(vecAlldata);


    QVector<QString> Comboxdata;
    Comboxdata.append(tempList0.at(2));
    Comboxdata.append(tempList1.at(2));
    model.setComboxData(Comboxdata);


    QStringList heas;
    heas<< QString("xxx")<< QString("yyyy");
    model.setHorizontalHeader(heas);
    tableView.horizontalHeader()->setStretchLastSection(true);


    SpinBoxDelegate delegate;
    //tableView.setItemDelegate(&delegate);
    tableView.setItemDelegateForColumn(1,&delegate);


    tableView.setModel(&model);


//    QModelIndex index01 = model.index(0, 1, QModelIndex());
//    model.setData(index01,tempList0,Qt::EditRole);
//    model.setData(index01,tempList0.at(0),Qt::DisplayRole);


//    QModelIndex index02 = model.index(1, 1, QModelIndex());
//    model.setData(index02,tempList1,Qt::EditRole);
//    model.setData(index02,tempList1.at(0),Qt::DisplayRole);
    /*for (int row = 0; row < 2; ++row) {
        for (int column = 1; column < 2; ++column) {
            QModelIndex index = model.index(row, column, QModelIndex());
            QString strTemp;
            strTemp.arg("%d-%d").arg(row).arg(column);
            //model.setData(index,tempList0)
            //model.setData(index, QVariant((row + 1) * (column + 1)));
        }
//! [1] //! [2]
    }*/
    tableView.setWindowTitle(QObject::tr("Spin Box Delegate"));
    tableView.show();
    return app.exec();
}


QT中用TABVIEW显示一个QCOMBOX的例子2: 工程 工程:coloreditorfactory
coloreditorfactory.pro
QT += widgets
HEADERS    = colorlisteditor.h \
     window.h
SOURCES    = colorlisteditor.cpp \
     window.cpp \
     main.cpp
# install
target.path = $$[QT_INSTALL_EXAMPLES]/widgets/itemviews/coloreditorfactory
INSTALLS += target


colorlisteditor.h:
#ifndef COLORLISTEDITOR_H
#define COLORLISTEDITOR_H


#include <QComboBox>
#include <QDebug>


QT_BEGIN_NAMESPACE
class QColor;
class QWidget;
QT_END_NAMESPACE


//! [0]
class ColorListEditor : public QComboBox
{
    Q_OBJECT
    //Q_PROPERTY(QColor ljtcolor READ getcolor WRITE setColor USER true)
    Q_PROPERTY(QString xxComboStr READ getComboStr WRITE setComboStr USER true)
public:
    ColorListEditor(QWidget *widget = 0);
public:
//    QColor getcolor() const;
//    void setColor(QColor c);


    QString getComboStr() const;
    void setComboStr(QString c);
private:
    void populateList();
    QVector<QString> myAllComboData;
};
//! [0]
#endif


window.h:
#ifndef WINDOW_H
#define WINDOW_H
#include <QWidget>>
#include <QTableWidgetItem>


class Window : public QWidget
{
    Q_OBJECT


public:
    Window();
public slots:
    void openPersistentEditor(QTableWidgetItem *item);
    void slotSelectionChanged();
    void oxkslot();
private:
    void createGUI();
    QTableWidget *table;
    QString getCurcobo;
};
#endif


colorlisteditor.cpp:
#include <QtWidgets>


#include "colorlisteditor.h"


ColorListEditor::ColorListEditor(QWidget *widget) : QComboBox(widget)
{
    populateList();
}


QString ColorListEditor::getComboStr() const
{
    QString strcur = qvariant_cast<QString>(itemData(currentIndex(), Qt::DisplayRole));
    //emit commitData(editor);
    //connect(this, SIGNAL(currentTextChanged(const QString &)),
            //this, SLOT(commitAndCloseEditor(const QString &)));
    //qDebug()<<strcur;
return strcur;
}


void ColorListEditor::setComboStr(QString c)
{
setCurrentIndex(findData(c, int(Qt::DisplayRole)));
}


//! [0]
//QColor ColorListEditor::getcolor() const
//{
//    return qvariant_cast<QColor>(itemData(currentIndex(), Qt::DecorationRole));
//}
////! [0]


////! [1]
//void ColorListEditor::setColor(QColor color)
//{
//    setCurrentIndex(findData(color, int(Qt::DecorationRole)));
//}
////! [1]


//! [2]
void ColorListEditor::populateList()
{
//    QStringList colorNames = QColor::colorNames();


//    for (int i = 0; i < colorNames.size(); ++i) {
//        QColor color(colorNames[i]);


//        insertItem(i, colorNames[i]);
//        setItemData(i, color, Qt::DecorationRole);
//    }
    myAllComboData.append("00000--xxxxx");
    myAllComboData.append("11111--xxxxx");
    myAllComboData.append("22222--xxxxx");
    myAllComboData.append("33333--xxxxx");
    myAllComboData.append("44444--xxxxx");
    myAllComboData.append("55555--xxxxx");


    for (int i = 0; i < myAllComboData.size(); ++i)
    {
        insertItem(i, myAllComboData[i]);
        setItemData(i, myAllComboData[i], Qt::DisplayRole);
    }
}
//! [2]


window.cpp:
#include <QtWidgets>


#include "window.h"
#include "colorlisteditor.h"
#include <QDebug>


//! [0]
Window::Window()
{
    QItemEditorFactory *factory = new QItemEditorFactory;


    QItemEditorCreatorBase *colorListCreator =
        new QStandardItemEditorCreator<ColorListEditor>();


    //factory->registerEditor(QVariant::Color, colorListCreator);
    factory->registerEditor(QVariant::String, colorListCreator);


    QItemEditorFactory::setDefaultFactory(factory);


    createGUI();
}
//! [0]
void Window::openPersistentEditor(QTableWidgetItem* item)
{
    int rowt = item->row() ;
    int col = item->column() ;
    //qDebug()<<rowt<<col;
    if(col==0)
    {
        table->closePersistentEditor(item);
        item->setFlags(Qt::ItemIsSelectable|Qt::ItemIsEnabled);
        //table->closePersistentEditor(item);
    }
}
void Window::slotSelectionChanged()
{
    //table->closePersistentEditor(lastOpen,1);
}


void Window::createGUI()
{
    QList<QPair<QString, QString> > list;
    list << QPair<QString, QString>(tr("Alice"), QString("00000--xxxxx")) <<
            QPair<QString, QString>(tr("Neptun"), QString("11111--xxxxx")) <<
            QPair<QString, QString>(tr("Ferdinand"), QString("22222--xxxxx"));


    table = new QTableWidget(3, 2);
    QObject::connect(table,SIGNAL(itemDoubleClicked(QTableWidgetItem*)),
            this,SLOT(openPersistentEditor(QTableWidgetItem*)));
    //QObject::connect(table,SIGNAL(itemSelectionChanged ()),
            //this,SLOT(slotSelectionChanged()));
    table->setHorizontalHeaderLabels(QStringList() << tr("Name")
                                                   << tr("Hair Color"));
    table->setEditTriggers(QAbstractItemView::DoubleClicked);
    //table->setEditTriggers(QAbstractItemView::NoEditTriggers);
    table->verticalHeader()->setVisible(false);
    table->resize(150, 50);


    for (int i = 0; i < 3; ++i) {
        QPair<QString, QString> pair = list.at(i);
        QTableWidgetItem *nameItem = new QTableWidgetItem(pair.first);
        QTableWidgetItem *colorItem = new QTableWidgetItem;
        colorItem->setData(Qt::DisplayRole, pair.second);
        table->setItem(i, 0, nameItem);
        table->setItem(i, 1, colorItem);
    }
    table->resizeColumnToContents(0);
    table->horizontalHeader()->setStretchLastSection(true);


    QGridLayout *layout = new QGridLayout;
    layout->addWidget(table, 0, 0);


    QPushButton* pbn = new QPushButton("ok");


    connect(pbn, SIGNAL(clicked()),this, SLOT(oxkslot()));
    layout->addWidget(pbn,1, 0);
    setLayout(layout);
    setWindowTitle(tr("Color Editor Factory"));
}


void Window::oxkslot()
{
    int rowcnt = table->rowCount() ;
    int colcnt=table->colorCount();
    for(int i=0;i<rowcnt;i++)
    {
        QTableWidgetItem * itemsv = table->item(i,1);
        QString tt=itemsv->text();
        qDebug()<<i<<tt;


    }
}


main.cpp:
#include <QtWidgets>
#include "window.h"


int main(int argv, char **args)
{
    QApplication app(argv, args);


    Window window;
    window.show();


    return app.exec();
}
下面看另外一个QT的QTABLEVIEW中的一个单元格中插入COMBO的例子:



untitled.pro:
QT       += core gui
greaterThan(QT_MAJOR_VERSION, 4): QT += widgets
TARGET = untitled
TEMPLATE = app
SOURCES += main.cpp\
        mainwindow.cpp \
    delegate.cpp
HEADERS  += mainwindow.h \
    delegate.h
FORMS    += mainwindow.ui
delegate.h:
#ifndef DELEGATE_H
#define DELEGATE_H
#include <QStyledItemDelegate>


class SpinBoxDelegate : public QStyledItemDelegate
{
    Q_OBJECT
public:
    SpinBoxDelegate(QObject *parent = 0);
    QWidget *createEditor(QWidget *parent, const QStyleOptionViewItem &option,
                          const QModelIndex &index) const Q_DECL_OVERRIDE;
    void setEditorData(QWidget *editor, const QModelIndex &index) const Q_DECL_OVERRIDE;
    void setModelData(QWidget *editor, QAbstractItemModel *model,
                      const QModelIndex &index) const Q_DECL_OVERRIDE;
    void updateEditorGeometry(QWidget *editor,
        const QStyleOptionViewItem &option, const QModelIndex &index) const Q_DECL_OVERRIDE;
    QVector<QStringList> vecStrListCombo;
    QVector<QString> vecStrListEdit;
};


#endif
mainwindow.h:
#ifndef MAINWINDOW_H
#define MAINWINDOW_H


#include <QMainWindow>
#include <QStandardItemModel>
#include "delegate.h"


namespace Ui {
class MainWindow;
}
struct testViewAllStruCombo
{
    QString col0;
    QStringList col1;
    QString col1UserSel;
};


class MainWindow : public QMainWindow
{
    Q_OBJECT


public:
    explicit MainWindow(QWidget *parent = 0);
    ~MainWindow();
    void initModelAndDel();


    QStringList testHeads;
    QStandardItemModel *mystdmodel;
    //tableArrorRbtnModel *myisConfmodel;
    SpinBoxDelegate *myisOutDelegate;
    QVector<QStringList> delegateStrListCombo;
    QVector<testViewAllStruCombo> vec_testViewAllStruCombo;
    void gouZaoData();
    int rowt;
    int colt;
private slots:
    void on_pushButton_clicked();


private:
    Ui::MainWindow *ui;
};
#endif // MAINWINDOW_H
delegate.cpp:
#include "delegate.h"
#include <QSpinBox>
#include <QComboBox>


SpinBoxDelegate::SpinBoxDelegate(QObject *parent)
    : QStyledItemDelegate(parent)
{
}
QWidget *SpinBoxDelegate::createEditor(QWidget *parent,
    const QStyleOptionViewItem & option ,
    const QModelIndex & index ) const
{
    int r=index.row();
    QString value = index.model()->data(index, Qt::EditRole).toString();
    QStringList valuel = index.model()->data(index, Qt::UserRole).toStringList();
    QComboBox *editor = new QComboBox(parent);
    //editor->addItems(vecStrListCombo.at(r));
    editor->addItems(valuel);
    editor->setCurrentText(value);


    editor->installEventFilter(const_cast<SpinBoxDelegate*>(this));
    editor->setFrame(false);
    return editor;
}
void SpinBoxDelegate::setEditorData(QWidget *editor,
                                    const QModelIndex &index) const
{
   // int value = index.model()->data(index, Qt::EditRole).toInt();
    QString value = index.model()->data(index, Qt::EditRole).toString();
    QComboBox *spinBox = static_cast<QComboBox*>(editor);
    spinBox->setCurrentText(value);
}
void SpinBoxDelegate::setModelData(QWidget *editor, QAbstractItemModel *model,
                                   const QModelIndex &index) const
{
    QComboBox *spinBox = static_cast<QComboBox*>(editor);
    QString value=spinBox->currentText();
    model->setData(index, value, Qt::EditRole);
}
void SpinBoxDelegate::updateEditorGeometry(QWidget *editor,
    const QStyleOptionViewItem &option, const QModelIndex &/* index */) const
{
    editor->setGeometry(option.rect);
}
mainwindow.cpp:
#include "mainwindow.h"
#include "ui_mainwindow.h"
#include <QDebug>


MainWindow::MainWindow(QWidget *parent) :
    QMainWindow(parent),
    ui(new Ui::MainWindow)
{
    ui->setupUi(this);
    gouZaoData();
    initModelAndDel();
    //initModelAndDel();
}


MainWindow::~MainWindow()
{
    delete ui;
}
void MainWindow::gouZaoData()
{
    rowt=3;
    colt=2;
    testHeads<<"testcol0name"<<"testcol1name";
    QStringList s1; s1<<"aaa000s1"<<"aaa111s1"<<"aaa222s1";
    QStringList s2; s2<<"aaa000s2"<<"aaa111s2"<<"aaa222s2"<<"aaa333s2";
    QStringList s3; s3<<"aaa000s3"<<"aaa111s3"<<"aaa222s3"<<"aaa333s3"<<"aaa444s3";


    testViewAllStruCombo tempCombo0;
    tempCombo0.col0="testcol0";
    tempCombo0.col1=s1;


    testViewAllStruCombo tempCombo1;
    tempCombo1.col0="testcol1";
    tempCombo1.col1=s2;


    testViewAllStruCombo tempCombo2;
    tempCombo2.col0="testcol2";
    tempCombo2.col1=s3;


    vec_testViewAllStruCombo.append(tempCombo0);
    vec_testViewAllStruCombo.append(tempCombo1);
    vec_testViewAllStruCombo.append(tempCombo2);


    delegateStrListCombo.append(s1);
    delegateStrListCombo.append(s2);
    delegateStrListCombo.append(s3);
}


void MainWindow::initModelAndDel()
{
    //QStandardItemModel *mystdmodel;
    mystdmodel=new QStandardItemModel(rowt,colt);
    mystdmodel->setHorizontalHeaderLabels(testHeads);
    ui->tableView->setModel(mystdmodel);


    myisOutDelegate = new SpinBoxDelegate(this);
    //myisOutDelegate->vecStrListCombo=delegateStrListCombo;//! 透传数据的时候,可能通过此变量,直接透传,也可以通过下面的Qt::UserRole来透传,见QWidget *SpinBoxDelegate::createEditor中的代码说明注释


    ui->tableView->setItemDelegateForColumn(colt-1,myisOutDelegate);
    ui->tableView->horizontalHeader()->setStretchLastSection(true);
    ui->tableView->resizeColumnsToContents();
    //myisConfmodel=new QStandardItemModel(this);
    for (int row = 0; row < rowt; ++row)
    {
        QStringList ComboData=delegateStrListCombo.at(row);
        //qDebug()<<row<<ComboData;  delegateStrListCombo
        testViewAllStruCombo allRowData = vec_testViewAllStruCombo.at(row);
        for (int column = 0; column < colt; ++column)
        {
            if(column==0)//0
            {
                QModelIndex index = mystdmodel->index(row, column, QModelIndex());
                mystdmodel->setData(index, QVariant(allRowData.col0),Qt::EditRole);
            }
            if(column==1)
            {
                QString tempCombo =  ComboData.at(0);
                QModelIndex index = mystdmodel->index(row, column, QModelIndex());
                mystdmodel->setData(index, QVariant(tempCombo),Qt::EditRole);
                mystdmodel->setData(index, QVariant(ComboData),Qt::UserRole);
            }
        }
    }
}


void MainWindow::on_pushButton_clicked()
{
    //! 从界面中取数据 s2为取到的值
    int j=colt-1;
        for(int i=0;i<rowt;i++)
        {
            QModelIndex tt =mystdmodel->index(i,j);
            QString s2 = tt.data(Qt::EditRole).toString();
            vec_testViewAllStruCombo[i].col1UserSel=s2;
            //QString s1 = tt.data(Qt::DisplayRole).toString();//s1==s2
            //qDebug()<<"xxxxxx"<<s2<<s1;
        }
}
main.cpp:
#include "mainwindow.h"
#include <QApplication>


int main(int argc, char *argv[])
{
    QApplication a(argc, argv);
    MainWindow w;
    w.show();


    return a.exec();
}
需要代理为何种WIDGET,只需要在

SpinBoxDelegate
中写就可以了。


下面用QTABLEWIDGET来实现:


#include "mainwindow.h"#include "ui_mainwindow.h"#include <QDebug>#include <QComboBox>MainWindow::MainWindow(QWidget *parent) :    QMainWindow(parent),    ui(new Ui::MainWindow){    ui->setupUi(this);    initTableWidget();}MainWindow::~MainWindow(){    delete ui;}void MainWindow::initTableWidget(){    QComboBox *pcom0=new QComboBox(this);    pcom0->addItem("1111");    pcom0->addItem("2222");    pcom0->addItem("3333");pcom0->setCurrentIndex(1);    QComboBox *pcom1=new QComboBox(this);    pcom1->addItem("1111");    pcom1->addItem("2222");    pcom1->addItem("3333");pcom1->setCurrentIndex(1);    QComboBox *pcom2=new QComboBox(this);    pcom2->addItem("1111");    pcom2->addItem("2222");    pcom2->addItem("3333");pcom2->setCurrentIndex(1);    tableWidgetRowCount=3;    tableWidgetColumnCount=2;    ui->tableWidget->setRowCount(tableWidgetRowCount);    ui->tableWidget->setColumnCount(tableWidgetColumnCount);    for(int i=0;i<tableWidgetRowCount;i++)        for(int j=0;j<tableWidgetColumnCount;j++)        {            {                QTableWidgetItem *newItem = new QTableWidgetItem(tr("%1").arg((i+1)*7));                ui->tableWidget->setItem(i, 0, newItem);            }        }    ui->tableWidget->setCellWidget(0,1,pcom0);    ui->tableWidget->setCellWidget(1,1,pcom1);    ui->tableWidget->setCellWidget(2,1,pcom2);}void MainWindow::on_pushButton_clicked(){    QComboBox *spinBox0 = static_cast<QComboBox*>(ui->tableWidget->cellWidget(0,1));    QString s01 = spinBox0->currentText();    QComboBox *spinBox1 = static_cast<QComboBox*>(ui->tableWidget->cellWidget(1,1));    QString s11 = spinBox1->currentText();    QComboBox *spinBox2 = static_cast<QComboBox*>(ui->tableWidget->cellWidget(2,1));    QString s21 = spinBox2->currentText();    qDebug()<<s01<<s11<<s21;}

#include "mainwindow.h"#include "ui_mainwindow.h"#include <QDebug>#include <QComboBox>#include "testdlg.h"MainWindow::MainWindow(QWidget *parent) :    QMainWindow(parent),    ui(new Ui::MainWindow){    ui->setupUi(this);    initTableWidget();}MainWindow::~MainWindow(){    delete ui;}void MainWindow::initTableWidget(){    /*QComboBox *pcom0=new QComboBox(this);    pcom0->addItem("1111");    pcom0->addItem("2222");    pcom0->addItem("3333");pcom0->setCurrentIndex(1);    QComboBox *pcom1=new QComboBox(this);    pcom1->addItem("1111");    pcom1->addItem("2222");    pcom1->addItem("3333");pcom1->setCurrentIndex(1);    QComboBox *pcom2=new QComboBox(this);    pcom2->addItem("1111");    pcom2->addItem("2222");    pcom2->addItem("3333");pcom2->setCurrentIndex(1);*/    tableWidgetRowCount=3;    tableWidgetColumnCount=2;    ui->tableWidget->setRowCount(tableWidgetRowCount);    ui->tableWidget->setColumnCount(tableWidgetColumnCount);    for(int i=0;i<tableWidgetRowCount;i++)        for(int j=0;j<tableWidgetColumnCount;j++)        {            {                QTableWidgetItem *newItem = new QTableWidgetItem(tr("%1").arg((i+1)*7));                ui->tableWidget->setItem(i, 0, newItem);            }        }    testdlg *plg0=new testdlg(this);    QStringList sList0;sList0<<"true"<<"true"<<"false"<<"false";    plg0->initAllCk(sList0);    ui->tableWidget->setCellWidget(0,1,plg0);    //ui->tableWidget->setCellWidget(1,1,pcom1);    //ui->tableWidget->setCellWidget(2,1,pcom2);}void MainWindow::on_pushButton_clicked(){    /*QComboBox *spinBox0 = static_cast<QComboBox*>(ui->tableWidget->cellWidget(0,1));    QString s01 = spinBox0->currentText();    QComboBox *spinBox1 = static_cast<QComboBox*>(ui->tableWidget->cellWidget(1,1));    QString s11 = spinBox1->currentText();    QComboBox *spinBox2 = static_cast<QComboBox*>(ui->tableWidget->cellWidget(2,1));    QString s21 = spinBox2->currentText();*/    testdlg *spinBox0 = static_cast<testdlg*>(ui->tableWidget->cellWidget(0,1));    qDebug()<<spinBox0->m_pageRes.checkBox->checkState()<<spinBox0->m_pageRes.checkBox_2->checkState()<<spinBox0->m_pageRes.checkBox_3->checkState()<<spinBox0->m_pageRes.checkBox_4->checkState();}

#ifndef TESTDLG_H#define TESTDLG_H#include <QWidget>>#include <QTableWidgetItem>#include "ui_testdlg.h"class testdlg : public QWidget{    Q_OBJECTpublic:    testdlg(QWidget *parent=0);    ~testdlg();    void initAllCk(QStringList valuel);    Ui::testDlg m_pageRes;};#endif

#include <QtWidgets>#include "testdlg.h"//#include "TableItemComboBoxEditor.h"#include <QDebug>#include <QObject>//! [0]testdlg::testdlg(QWidget *parent){    m_pageRes.setupUi(this);    this->setWindowFlags(Qt::FramelessWindowHint);}testdlg::~testdlg(){}void testdlg::initAllCk(QStringList valuel){    if(valuel.at(0)==tr("false")) m_pageRes.checkBox->setCheckState(Qt::Unchecked);    if(valuel.at(0)==tr("true")) m_pageRes.checkBox->setCheckState(Qt::Checked);    if(valuel.at(1)==tr("false")) m_pageRes.checkBox_2->setCheckState(Qt::Unchecked);    if(valuel.at(1)==tr("true")) m_pageRes.checkBox_2->setCheckState(Qt::Checked);    if(valuel.at(2)==tr("false")) m_pageRes.checkBox_3->setCheckState(Qt::Unchecked);    if(valuel.at(2)==tr("true")) m_pageRes.checkBox_3->setCheckState(Qt::Checked);    if(valuel.at(3)==tr("false")) m_pageRes.checkBox_4->setCheckState(Qt::Unchecked);    if(valuel.at(3)==tr("true")) m_pageRes.checkBox_4->setCheckState(Qt::Checked);}


0 0
原创粉丝点击