快速开发QCombox以及业务样式自定义,用法总结

 那是本人在品种实战中的个人总计,写的皇皇,有个别东西也不自然规范,有个别是投机猜想的,还指望各位不吝指教,多多商量。

QTableWidget是QT程序中常用的显得数据表格的半空中,很类似于VC、C#中的DataGrid。提及QTableWidget,就无法不讲一下它跟QTabelView的分别了。QTableWidget是QTableView的子类,主要的界别是QTableView能够运用自定义的数据模型来显示内容(相当于先要通过setModel来绑定数据源),而QTableWidget则只好接纳标准的数据模型,并且其单元格数据是QTableWidgetItem的对象来落到实处的(也便是没有需求数据源,将各个单元格内的音讯填好就能够)。那首要反映在QTableView类中有setModel成员函数,而到了QTableWidget类中,该成员函数产生了私有。使用QTableWidget就离不开QTableWidgetItem。QTableWidgetItem用来表示表格中的三个单元格,正个表格都亟需用每一个单元格创设起来。

 关于QCombox假诺不需求自定义,其实写UI是不会细小略的。

 

开创实例:QComboBox*  m_pMicrophoneCombox = new QComboBox;

[cpp] view plaincopy

自作者是用的QSS去的写样式,这里用了二个命名函数:m_pMicrophoneCombox->setObjectName("DeviceCombox");

 

借使是用的setstylesheet直接在代码里去写就好了。

  1. #include <QtGui/QApplication>  
  2. #include <QTableWidget>  
  3. #include <QTableWidgetItem>  
  4.   
  5. int main(int argc, char *argv[])  
  6. {  
  7.     QApplication a(argc, argv);  
  8.     QTableWidget *tableWidget = new QTableWidget(10,5); // 构造了三个QTableWidget的对象,况兼安装为10行,5列  
  9.     //    也可用上面包车型客车议程组织QTableWidget对象  
  10.     //    QTableWidget *tableWidget = new QTableWidget;  
  11.     //    tableWidget->setRowCount(10);     //设置行数为10  
  12.     //    tableWidget->setColumnCount(5);   //设置列数为5  
  13.     tableWidget->setWindowTitle("QTableWidget & Item");  
  14.     tableWidget->resize(350, 200);  //设置表格  
  15.     QStringList header;  
  16.     header<<"Month"<<"Description";  
  17.     tableWidget->setHorizontalHeaderLabels(header);  
  18.     tableWidget->setItem(0,0,new QTableWidgetItem("Jan"));  
  19.     tableWidget->setItem(1,0,new QTableWidgetItem("Feb"));  
  20.     tableWidget->setItem(2,0,new QTableWidgetItem("Mar"));  
  21.   
  22.     tableWidget->setItem(0,1,new QTableWidgetItem(QIcon("images/IED.png"), "Jan's month"));  
  23.     tableWidget->setItem(1,1,new QTableWidgetItem(QIcon("images/IED.png"), "Feb's month"));  
  24.     tableWidget->setItem(2,1,new QTableWidgetItem(QIcon("images/IED.png"), "Mar's month"));  
  25.     tableWidget->show();  
  26.   
  27.     return a.exec();  
  28. }  

上面说多少个本性函数:

图片 1

m_pMicrophoneCombox->set马克斯VisibleItems(2);//最大可以预知区域为显示两条。

 

m_pMicrophoneCombox->setEditable(false); //设置QComboBox可编辑。

一. 对QTableWidget自个儿的成效实现

m_pMicrophoneCombox->setFocusPolicy(Qt::NoFocus);//设置QCombox没卓殊。

  1. 将表格产生禁绝编辑

m_pMicrophoneCombox->setLineEdit(edit);//edit是三个lineedit,正是说QCombox的LineEdit可以自定义,而QT的源码中,最上端也是一个LineEdit。

在私下认可情形下,表格里的字符是能够退换的,举例双击多个单元格,就足以修改原本的开始和结果,就算想制止客户的这种操作,让这几个表格对顾客只读,能够这么:

m_pMicrophoneCombox->setCurrentIndex(0); // 设置当前当选的目录。

 tableWidget->setEditTriggers(QAbstractItemView::NoEditTriggers);

m_pMicrophoneCombox->setCurrentText(TR_TALK_DEVICE_COMBOX);//设置QCombox当前的显示text,笔者是用宏封装的,满足中期修改。

 

m_pMicrophoneCombox->setItemData(i, list[i]);//QCombox也能够和谐传入一个链表,何况本身定义索引,当然,你想传一条数据,而且本身定义索引。

QAbstractItemView.NoEditTriggers是QAbstractItemView.EditTrigger枚举中的一个,都是接触修改单元格内容的尺度:

QListWidget* pListWidget = new QListWidget();//new一个widget的实例。

 

m_pMicrophoneCombox->setModel(pListWidget->model());//塞进widget的model。
m_pMicrophoneCombox->setView(pListWidget);//将widget装进Combox。

QAbstractItemView.NoEditTriggers

0

No editing possible. 不能对表格内容进行修改

QAbstractItemView.CurrentChanged

1

Editing start whenever current item changes.任何时候都能对单元格修改

QAbstractItemView.DoubleClicked

2

Editing starts when an item is double clicked.双击单元格

QAbstractItemView.SelectedClicked

4

Editing starts when clicking on an already selected item.单击已选中的内容

QAbstractItemView.EditKeyPressed

8

Editing starts when the platform edit key has been pressed over an item.

QAbstractItemView.AnyKeyPressed

16

Editing starts when any key is pressed over an item.按下任意键就能修改

QAbstractItemView.AllEditTriggers

31

Editing starts for all above actions.以上条件全包括

m_pMicrophoneCombox->count();//用来计量combox下拉窗体的深浅。

 

m_pMicrophoneCombox->addItems(list);//插入二个列表。

 

m_pMicrophoneCombox->addItem("111");//插入单条数据。

  1. 设置表格为整行选用

上述函数基本满意事业须求,假使交互的体裁相比较复杂,须求自定义样式,那样的话,大家将要团结去写每一个item的体制。

tableWidget->setSelectionBehavior(QAbstractItemView::SelectRows);  //整行选中的方式

深入分析下QCombox的源码,其实她的贯彻正是三个LineEdit和八个ListWidget,知道啊这么些就足以协调去重新写一个ListWidget。

QAbstractItemView.SelectionBehavior枚举还也可以有如下类型

Item *pItem = new Item(); //item是本身自定义写的布局,每八个item的自定义样式就可以写在此个里面。
QListWidgetItem *pListWidgetItem = new QListWidgetItem(list[i],pListWidget);//笔者是将链表的数码塞进QCombox里。
pItem->setItemData(list[i]);//给每八个item塞进多少
pListWidget->setItemWidget(pListWidgetItem, pItem);//关于这些函数笔者的知情是:在底下一层上边再覆盖一层。

 

然后在QSS的体制里写hover、pressed鼠标事件,就有鼠标的相互。

Constant

Value

Description

QAbstractItemView.SelectItems

0

Selecting single items.选中单个单元格

QAbstractItemView.SelectRows

1

Selecting only rows.选中一行

QAbstractItemView.SelectColumns

2

Selecting only columns.选中一列

这种艺术就算平价,但是多少不与UI分离,都搅在一团。

 

至上的方案正是:

 

  既然QT的combox帮忙listwidget,那么全体都用自身定制的listwidget。

3.单个选竹秋八个当选的装置:

 在itemwidget里写布局,自个儿搞一个delegate,在代理去管理UI,数据在model里去操作,这里的model或许要团结包裹一层,满意combox的互相要求。

tableWidget->setSelectionMode(QAbstractItemView::ExtendedSelection);  //设置为能够选中多少个目的

pListWidget->m_pModel->Append(list[i]);//将每三个数目塞进model,剩下的数额操作就由model去管理。

该函数的参数还是能是:

相当注意的是:那年,qt原生的那多少个接口都不奏效了,举个例子:setcurrenttext还应该有setcurrentindex,查看源码发掘都以依照索引来操控,而事实上,我们用本人的model

QAbstractItemView.NoSelection      不可能采用

去管理的数据,并不会调换一个索引来满足combox管理的数量,所以那个对外的接口恐怕也要团结去封装出来,能够说基本上是舍本求最后combox,自个儿去组装LineEdit和ListWidget。

QAbstractItemView.SingleSelection  选中单个指标

实质上代码量是不菲的,企务能够去封装成控件,方便开荒。

QAbstractItemView.MultiSelection    选中七个目的

    最终,假设大神们有越来越好的主意,接待商量。

QAbstractItemView.ExtendedSelection   QAbstractItemView.ContiguousSelection 的区分不明朗,首要意义是常规情况下是单选,但按下Ctrl或Shift键后,能够多选

 

 

 

  1. 报表表头的显得与潜伏

对此水平或垂直方法的表头,能够用以下方法张开 隐敝/展现 的设置:

[cpp] view plaincopy

 

  1. tableWidget->verticalHeader()->setVisible(false);   //掩盖列表头  
  2. tableWidget->horizontalHeader()->setVisible(false); //掩饰行表头  

注意:需要 #include <QHeaderView>

 

  1. 对表头文字的字体、颜色进行设置

[cpp] view plaincopy

 

  1. QTableWidgetItem *columnHeaderItem0 = tableWidget->horizontalHeaderItem(0); //获得水平方向表头的Item对象  
  2. columnHeaderItem0->setFont(QFont("Helvetica")); //设置字体  
  3. columnHeaderItem0->setBackgroundColor(QColor(0,60,10)); //设置单元格背景颜色  
  4. columnHeaderItem0->setTextColor(QColor(200,111,30)); //设置文字颜色  

注意:需要 #include <QHeaderView>

 

  1. 在单元格里投入控件:

QTableWidget不唯有允许把文字加到单元格,还允许把控件也置于单元格中。比方,把二个下拉框加入单元格,能够这么做:

[cpp] view plaincopy

 

  1. QComboBox *comBox = new QComboBox();  
  2. comBox->addItem("Y");  
  3. comBox->addItem("N");  
  4. tableWidget->setCellWidget(0,2,comBox);  

读取QComboBox 信息:

 

[html] view plaincopy

 

  1. QWidget * widget=ui->tableWidget->cellWidget(i,0);//获得widget     
  2. QComboBox *combox=(QComboBox*)widget;//强制转化为QComboBox       
  3. QString string=combox->currentText();    
  4. qDebug()<<string;  

 

二. 对单元格的拓宽设置

  1. 单元格设置字体颜色和背景颜色 及字体字符

[cpp] view plaincopy

 

  1. QTableWidgetItem *item = new QTableWidgetItem("Apple");  
  2. item->setBackgroundColor(QColor(0,60,10));  
  3. item->setTextColor(QColor(200,111,100));  
  4. item->setFont(QFont("Helvetica"));  
  5. tableWidget->setItem(0,3,item);  

另:如果急需对具有的单元格都应用这种字体,则能够动用  tableWidget->setFont(QFont("Helvetica"));

  1. 设置单元格内文字的对齐格局

那个相比轻松,使用newItem.setTextAlignment()函数就能够,该函数的参数为单元格内的对齐情势,和字符输入顺序是自左相右依然自右向左。

水平对齐格局有:

 

Constant Value Description
Qt.AlignLeft 0x0001 Aligns with the left edge.
Qt.AlignRight 0x0002 Aligns with the right edge.
Qt.AlignHCenter 0x0004 Centers horizontally in the available space.
Qt.AlignJustify 0x0008 Justifies the text in the available space.

 

垂直对齐格局:

 

Constant Value Description
Qt.AlignTop 0x0020 Aligns with the top.
Qt.AlignBottom 0x0040 Aligns with the bottom.
Qt.AlignVCenter 0x0080 Centers vertically in the available space.

 

假使三种都要安装,只要用 Qt.AlignHCenter|  Qt.AlignVCenter 的方式即可

 

  1. 合併单元格效果的完结:

tableWidget->setSpan(0, 0, 3, 1)  # 其参数为: 要改成单元格的   1行数  2列数     要合并的  3行数  4列数

 

  1. 设置单元格的大大小小

率先,能够钦赐某些行仍旧列的深浅

[cpp] view plaincopy

 

  1. tableWidget->setColumnWidth(3,200);  
  2. tableWidget->setRowHeight(3,60);  

仍能将行和列的大小设为与内容相相称

[cpp] view plaincopy

 

  1. tableWidget->resizeColumnsToContents();  
  2. tableWidget->resizeRowsToContents();  
  1. 收获单击单元格的原委

经过兑现 itemClicked (QTableWidgetItem *) 时域信号的槽函数,就能够赢得鼠标单击到的单元格指针,进而获取在这之中的文字音讯

connect(tableWidget,SIGNAL(itemDoubleClicked(QTreeWidgetItem*,int)),this,SLOT(getItem(QTreeWidgetItem*,int)));

//将itemClicked确定性信号与函数getItem绑定

6.QTableWidget要调动表格行宽主要涉嫌以下三个函数

resizeColumnsToContents();                      依照剧情调节列宽          
resizeColumnToContents(int col);               依据剧情自动调治给定列宽
horizontalHeader()->setResizeMode````           把给定列设置为给定方式
非常重要形式有Stretch和Fixed

7.

int row = rowCount();
 removeRow(row);//清除已部分行列
 setShowGrid(true);//展现表格线
 verticalHeader()->setVisible(false);//遮蔽侧面垂直
 QHeaderView *headerView = horizontalHeader();
 headerView->setMovable(false);//去除表头的运动
 headerView->resizeSection(0,284);//设置第一列宽
 headerView->resizeSection(1,127);//设置第二列宽
 headerView->setResizeMode(QHeaderView::Fixed);//列表不可能移动
 headerView->setClickable(false);//不响应鼠标单击
 setEditTriggers(QTableWidget::NoEditTriggers);//不可能编辑
 setSelectionBehavior(QTableWidget::SelectRows);//二回入选一行
 setSelectionMode(QAbstractItemView::SingleSelection);//只能单选
 /*QScrollBar *scrollBar = horizontalScrollBar();
 scrollBar->hide();*/
 setHorizontalScrollBarPolicy(Qt::ScrollBarAlwaysOff);//去掉水平滚动条
 setVerticalScrollMode(QAbstractItemView::ScrollPerItem);//垂直滚动条按项运动
 setAutoScroll(false);//去掉自动滚动

参考:

本文由星彩网app下载发布于星彩网app下载,转载请注明出处:快速开发QCombox以及业务样式自定义,用法总结

TAG标签: 星彩网app下载
Ctrl+D 将本页面保存为书签,全面了解最新资讯,方便快捷。