当前位置:嗨网首页>书籍在线阅读

22-自定义代理类的使用

  
选择背景色: 黄橙 洋红 淡粉 水蓝 草绿 白色 选择字体: 宋体 黑体 微软雅黑 楷体 选择字体大小: 恢复默认

5.5.4 自定义代理类的使用

同样的,可以创建基于QDoubleSpinBox的自定义代理组件类QWFloatSpinDelegate,用于编辑浮点数,还可以创建基于QComboBox的自定义组件类QWComboBoxDelegate。在主窗口的类定义中定义3个代理类的实例变量(省略了其他定义内容):

class MainWindow : public QMainWindow
{
private:
   QWIntSpinDelegate   intSpinDelegate; //整型数
   QWFloatSpinDelegate  floatSpinDelegate; //浮点数
   QWComboBoxDelegate   comboBoxDelegate; //列表选择
}

在MainWindow的构造函数中,为tableView的某些列设置自定义代理组件。增加了自定义代理组件的构造函数代码如下(去掉了初始化状态栏等一些不重要的内容):

MainWindow::MainWindow(QWidget *parent) : QMainWindow(parent), ui(new Ui::MainWindow)
{
   ui->setupUi(this);
   theModel = new QStandardItemModel(2,FixedColumnCount,this); 
   theSelection = new QItemSelectionModel(theModel);//选择模型
   connect(theSelection,SIGNAL(currentChanged(QModelIndex,QModelIndex)),
         this,SLOT(on_currentChanged(QModelIndex,QModelIndex)));
   ui->tableView->setModel(theModel); //设置数据模型
   ui->tableView->setSelectionModel(theSelection);//设置选择模型
//为各列设置自定义代理组件
   ui->tableView->setItemDelegateForColumn(0,&intSpinDelegate);//测深
   ui->tableView->setItemDelegateForColumn(1,&floatSpinDelegate);//浮点数
   ui->tableView->setItemDelegateForColumn(2,&floatSpinDelegate); //浮点数
   ui->tableView->setItemDelegateForColumn(3,&floatSpinDelegate); //浮点数
   ui->tableView->setItemDelegateForColumn(4,&comboBoxDelegate); //列表
}

为TableView的某一列设置自定义代理组件,使用setItemDelegateForColumn()函数;为某一行设置自定义代理组件,可使用setItemDelegateForRow()函数;若为整个TableView设置一个自定义代理组件,则调用setItemDelegate()函数。

如此增加了自定义代理功能后,在编辑“测深”列时,会在单元格的位置出现一个SpinBox组件,用于输入整数;在编辑第2至4列的浮点数时,会出现一个DoubleSpinBox组件,用于输入浮点数;而在编辑“固井质量”列时,会自动出现一个ComboBox组件,用于从下拉列表中选择一个字符串。