那是本人在品种实战中的个人总计,写的皇皇,有个别东西也不自然规范,有个别是投机猜想的,还指望各位不吝指教,多多商量。
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直接在代码里去写就好了。
上面说多少个本性函数:
m_pMicrophoneCombox->set马克斯VisibleItems(2);//最大可以预知区域为显示两条。
m_pMicrophoneCombox->setEditable(false); //设置QComboBox可编辑。
一. 对QTableWidget自个儿的成效实现
m_pMicrophoneCombox->setFocusPolicy(Qt::NoFocus);//设置QCombox没卓殊。
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。
|
|
No editing possible. 不能对表格内容进行修改 |
|
|
Editing start whenever current item changes.任何时候都能对单元格修改 |
|
|
Editing starts when an item is double clicked.双击单元格 |
|
|
Editing starts when clicking on an already selected item.单击已选中的内容 |
|
|
Editing starts when the platform edit key has been pressed over an item. |
|
|
Editing starts when any key is pressed over an item.按下任意键就能修改 |
|
|
Editing starts for all above actions.以上条件全包括 |
m_pMicrophoneCombox->count();//用来计量combox下拉窗体的深浅。
m_pMicrophoneCombox->addItems(list);//插入二个列表。
m_pMicrophoneCombox->addItem("111");//插入单条数据。
上述函数基本满意事业须求,假使交互的体裁相比较复杂,须求自定义样式,那样的话,大家将要团结去写每一个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 |
---|---|---|
|
|
Selecting single items.选中单个单元格 |
|
|
Selecting only rows.选中一行 |
|
|
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键后,能够多选
对此水平或垂直方法的表头,能够用以下方法张开 隐敝/展现 的设置:
[cpp] view plaincopy
注意:需要 #include <QHeaderView>
[cpp] view plaincopy
注意:需要 #include <QHeaderView>
QTableWidget不唯有允许把文字加到单元格,还允许把控件也置于单元格中。比方,把二个下拉框加入单元格,能够这么做:
[cpp] view plaincopy
读取QComboBox 信息:
[html] view plaincopy
二. 对单元格的拓宽设置
[cpp] view plaincopy
另:如果急需对具有的单元格都应用这种字体,则能够动用 tableWidget->setFont(QFont("Helvetica"));
那个相比轻松,使用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 的方式即可
tableWidget->setSpan(0, 0, 3, 1) # 其参数为: 要改成单元格的 1行数 2列数 要合并的 3行数 4列数
率先,能够钦赐某些行仍旧列的深浅
[cpp] view plaincopy
仍能将行和列的大小设为与内容相相称
[cpp] view plaincopy
经过兑现 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以及业务样式自定义,用法总结