QTableWidget设置代理 添加QCombox

一、实现功能:向QTableWidget上添加QCombox

  显示效果:双击鼠标才显示Combox组件

  如下图所示:未双击效果图

    

  双击效果图:

    

二、向第二列添加combox代码如下  

1 ui.tableWidget_TestItems->verticalHeader()->setVisible(false);//隐藏垂直表头
2 ui.tableWidget_TestItems->setSelectionBehavior(QAbstractItemView::SelectRows);//选择一行
3 setItemIsEditable(ui.tableWidget_TestItems, 0);//禁止表格编辑
4 setItemIsEditable(ui.tableWidget_TestItems, 2);
5 setItemIsEditable(ui.tableWidget_TestItems, 3);
6 ui.tableWidget_TestItems->setItemDelegateForColumn(1, new Delegate(this));//添加QCombox代理

三、封装Delegate类

  

 1 #ifndef DELEGATE_H
 2 #define DELEGATE_H
 3
 4 #include <QStyledItemDelegate>
 5 #include <QItemDelegate>
 6 #include <QModelIndex>
 7 #include <QPainter>
 8 #include <QWidget>
 9
10 #define  COMBOXCOL 1
11 class Delegate : public QItemDelegate
12 {
13     Q_OBJECT
14
15 public:
16     Delegate(QObject *parent = nullptr);
17     ~Delegate();
18
19     void paint(QPainter *painter, const QStyleOptionViewItem &option,
20                     const QModelIndex &index) const;
21     QSize sizeHint(const QStyleOptionViewItem &option, const QModelIndex &index) const;
22
23     QWidget *createEditor(QWidget *parent, const QStyleOptionViewItem &option,
24                                         const QModelIndex &index) const;
25     void setEditorData(QWidget *editor, const QModelIndex &index) const;
26     void setModelData(QWidget *editor, QAbstractItemModel *model,
27                                     const QModelIndex &index) const;
28
29 private:
30
31 };
32
33 #endif // DELEGATE_H
 1 #include "Delegate.h"
 2 #include <QComboBox>
 3
 4 Delegate::Delegate(QObject *parent)
 5     : QItemDelegate(parent)
 6 {
 7
 8 }
 9
10 Delegate::~Delegate()
11 {
12
13 }
14 void Delegate::paint(QPainter *painter, const QStyleOptionViewItem &option,
15     const QModelIndex &index) const
16 {
17     QItemDelegate::paint(painter, option, index);
18 }
19
20 QSize Delegate::sizeHint(const QStyleOptionViewItem &option, const QModelIndex &index) const
21 {
22     return QItemDelegate::sizeHint(option, index);
23 }
24
25 QWidget *Delegate::createEditor(QWidget *parent, const QStyleOptionViewItem &option,
26                                                    const QModelIndex &index) const
27 {
28     if (index.isValid() && index.column() == COMBOXCOL)
29     {
30         QComboBox *editor = new QComboBox(parent);
31         editor->setEditable(true);
32         editor->installEventFilter(const_cast<Delegate *>(this));
33         return editor;
34     }
35     else
36     {
37         return QItemDelegate::createEditor(parent, option, index);
38     }
39 }
40
41 void Delegate::setEditorData(QWidget *editor, const QModelIndex &index) const
42 {
43     if (index.isValid() && index.column() == COMBOXCOL)
44     {
45         QString value = index.model()->data(index, Qt::DisplayRole).toString();
46         QComboBox *combox = static_cast<QComboBox *>(editor);
47         combox->addItem("+");
48         combox->addItem("+2");
49         combox->addItem("+3");
50         combox->addItem("+4");
51         combox->setCurrentText(value);
52     }
53     else
54     {
55         QItemDelegate::setEditorData(editor, index);
56     }
57 }
58
59 void Delegate::setModelData(QWidget *editor, QAbstractItemModel *model,
60                                              const QModelIndex &index) const
61 {
62     if (index.isValid() && index.column() == COMBOXCOL)
63     {
64         QComboBox *combox = static_cast<QComboBox *>(editor);
65         model->setData(index, combox->currentText());
66     }
67     else
68     {
69         QItemDelegate::setModelData(editor, model, index);
70     }
71 }

  

时间: 2024-11-10 14:28:03

QTableWidget设置代理 添加QCombox的相关文章

设置代理的步骤

设置代理的几个步骤 (1)如果一个视图中的某个按钮被点击了,这个时候需要去主控制器中刷新数据.有一种做法是,让这个视图拥有控制器这个属性,然后当按钮被点击的时候去利用该属性去做刷新数据的操作.另一种做法是把控制器设置为这个视图的代理,当视图中的某个按钮被点击的时候,通知它的代理(主控制器)去干刷新数据这件事. (2)要成为代理是由条件的,有以下几个步骤 1).双方约定一个协议(代理协议,注意命名规范),在视图中自定义一个协议,协议中提供一个方法. @protocol YYHeaderViewDe

如何在android studio 1.0 启动时设置代理【解决WARN - ateSettings.impl.UpdateChecker - Connection failed.】

今天第一次用android studio,下了个比较新的1.0.1 linux版本,结果启动时老是出现以下错误: [ 6987] WARN - ateSettings.impl.UpdateChecker - Connection failed. Please check your network connection and try again. 百度了以下,都没找到可行方案,最后在google里找到了解决方案,在此记录下来,供大家参考. 方法1: 到android studio安装目录,打开

C# WebBrowser 设置代理完全解决方案

微软webbrowser控件也就是IE插件,他的所有功能就像IE类似,当然设置也是一样的,下面介绍下webbrowser如何设置代理,可不要用这个对抗广告联盟哦 You can change the proxy with InternetSetOption method from the wininet.dll, here is a example to set the proxy: using System.Runtime.InteropServices; Public struct Stru

Centos 设置代理

yum源 编辑/etc/yum.conf 文件 添加: #Proxy proxy=http://username:[email protected]:8080/ 全局代理 编辑/etc/profile 文件 添加: # Proxy http_proxy="http://username:[email protected]:8080" export_http_proxy 或 # Proxy export http_proxy="http://username:[email pr

phantomjs 设置代理

phantomjs 可通过以下设置代理ip #coding=utf-8import osimport reimport timeimport requestsfrom scrapy.selector import HtmlXPathSelectorfrom scrapy.http import HtmlResponsefrom selenium import webdriverfrom selenium.webdriver.common.proxy import ProxyType import

Qt5 设置代理

现在编写Qt的http服务,需要抓包看一下,所以需要设置代理.具体代码如下: 在pro添加:      QT+=network 添加头文件:#include <QNetworkProxy>     QNetworkProxy proxy;         proxy.setType (QNetworkProxy::HttpProxy);     proxy.setHostName ("127.0.0.1");     proxy.setPort (8888);     QN

CentOS7 设置代理

大多数公司的网络都使用局域网加代理上网,也就是说上外网必须使用公司指定的代理服务器,这有几个好处: 1. 首先代理可以一定程度提高浏览速度,因为可以将更多的网页缓存在代理服务器上,需要的时候直接拿就很快 2. 保障了局域网内计算机网络的安全,相当于多了一个屏障,外网能看到的只有代理服务器的ip而无法知道内网ip 3. 可以有效管控内网计算机的访问区域,适当屏蔽一些网站,相当于防火墙 但是缺点也是大大的有,作为员工这样上网就很受限制了,本文中主要讲如何在CentOS7中设置代理上网: 首先由于Ce

IOS第五天(1:取消按钮的监听和设置代理textField字数限制)

***********取消按钮的监听和设置代理textField字数限制 UITextFieldDelegate #import "HMViewController.h" @interface HMViewController () <UITextFieldDelegate> @end @implementation HMViewController /** 1> UIButton -> UIControl -> UIView 1.1 设置控件的状态 启用

Github for windows设置代理

Github for windows设置代理 一:简介 在公司.常常为了某些原因会使用代理.所以要在有代理的环境下使用Github.就要为其设置代理.Github for windows提供了GUI和shell 版本.GUI没有提供设置代理的地方.可以通过shell设置.最终结果都是修改Github的配置文件.gitconfig.此文件一般都在用户目录下:C:\Users\andychen\.gitconfig.如以前的文章提到过.配置文件没有特殊必要的话.最好是放在用户目录下.而不是放在一个全