QT控件使用详解
更新时间:2024-06-06 21:15:01 阅读量: 综合文库 文档下载
- qt控件推荐度:
- 相关推荐
QTableWidget
table->setSelectionMode(QAbstractItemView::SingleSelection) table.horizontalHeader()->setResizeMode(QheaderView::Fixed); table.horizontalHeader()->setStretchLastSection(true); table.setEditTrigger(QAbstractItemView::NoEditTriggers); table.setShowGrid(false);
1.QTableWidget不能在mainwindow中随主窗口的大小变化? 解决:在表格外部添加布局。
代码:tableWidget = new QTableWidget;
tableWidget ->setObjectName(QString::fromUtf8(\
QVBoxLayout *verticalLayout;
verticalLayout->addWidget(tableWidget );
2.将表格变为禁止编辑:
tableWidget->setEditTriggers(QAbstractItemView::NoEditTriggers);
(参数含义:QAbstractItemView::NoEditTriggers--不能对表格内容进行修改 QAbstractItemView::CurrentChanged--任何时候都能对单元格修改 QAbstractItemView::DoubleClicked--双击单元格
QAbstractItemView::SelectedClicked--单击已选中的内容 QAbstractItemView::EditKeyPressed--
QAbstractItemView::AnyKeyPressed--按下任意键就能修改 QAbstractItemView::AllEditTriggers--以上条件全包括) 3.设置表格为整行选择
tableWidget->setSelectionBehavior(QAbstractItemView::SelectRows); //整行选中的方式
(参数含义:AbstractItemView.SelectItems--选中单个单元格 QAbstractItemView.SelectRows--选中一行
QAbstractItemView.SelectColumns--选中一列).
4.单个选中和多个选中的设置:
tableWidget->setSelectionMode(QAbstractItemView::ExtendedSelection); //设置为可以选中多个目标
(参数含义:QAbstractItemView.NoSelection--不能选择
QAbstractItemView.SingleSelection--选中单个目标 QAbstractItemView.MultiSelection--选中多个目标
QAbstractItemView.ExtendedSelection/QAbstractItemView.ContiguousSelection 的区别不明显,主要功能是正常情况下是单选,但按下Ctrl或Shift键后,可以多选)
5.表格表头的显示与隐藏
对于水平或垂直方法的表头,可以用以下方式进行 隐藏/显示 的设置: tableWidget->verticalHeader()->setVisible(false); //隐藏列表头 tableWidget->horizontalHeader()->setVisible(false); //隐藏行表头 注意:需要 #include
6.对表头文字的字体、颜色进行设置
QTableWidgetItem *columnHeaderItem0 = tableWidget->horizontalHeaderItem(0); //获得水平方向表头的Item对象
columnHeaderItem0->setFont(QFont(\设置字体
columnHeaderItem0->setBackgroundColor(QColor(0,60,10)); //设置单元格背景颜色 columnHeaderItem0->setTextColor(QColor(200,111,30)); //设置文字颜色 注意:需要 #include
7.在单元格里加入控件:
QComboBox *comBox = new QComboBox(); comBox->addItem(\ comBox->addItem(\
tableWidget->setCellWidget(0,2,comBox);
8.单元格中添加图片: tableWidget->setItem(row,0,new kingdemo.ico\
QTableWidgetItem
(QIcon
(
\
/new/
images/
9设置单元格字体颜色、背景颜色和字体字符:
QTableWidgetItem *item = new QTableWidgetItem(\ item->setBackgroundColor(QColor(0,60,10)); item->setTextColor(QColor(200,111,100)); item->setFont(QFont(\ tableWidget->setItem(0,3,item);
另:如果需要对所有的单元格都使用这种字体,则可以使用 tableWidget->setFont(QFont(\
10.设置单元格内文字的对齐方式
水平对齐方式有:
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 的方式即可
11.合并单元格:
tableWidget->setSpan(0, 0, 3, 1) # 其参数为: 要改变单元格的1行数、2列数,要合并的3行数、4列数
(0,0,3,1) 12.设置单元格的大小
首先,可以指定某个行或者列的大小: tableWidget->setColumnWidth(3,200); tableWidget->setRowHeight(3,60);
还可以将行和列的大小设为与内容相匹配:
tableWidget->resizeColumnsToContents(); tableWidget->resizeRowsToContents(); 13.获得单击单元格的内容
通过实现 itemClicked (QTableWidgetItem *) 信号的槽函数,就可以获得鼠标单击到的单元格指针,进而获得其中的文字信息
connect(tableWidget,SIGNAL(itemDoubleClicked(QTreeWidgetItem*,int)),this,SLOT(getItem(QTreeWidgetItem*,int)));
//将itemClicked信号与函数getItem绑定
14.QTableWidget要调整表格行宽主要涉及以下函数
tableWidget->horizontalHeader()->setResizeMode(QHeaderView::Stretch);//使列完全填充并平分
tableWidget->verticalHeader()->setResizeMode(QHeaderView::Stretch);// 行自适应宽度 tableWidget->resizeColumnsToContents(); //根据内容调整列宽
tableWidget->resizeColumnToContents(int col);//根据内容自动调整给定列宽 tableWidget->horizontalHeader()->setResizeMode//把给定列设置为给定模式 主要模式有Stretch和Fixed 15.添加表头内容:
方法一:
QStringList header;
header<<\ 方法二:
tableWidget->setHorizontalHeaderLabels(QStringList() tr(\16.清除:
tableWidget->clear();//清除所有可见数据(包括表头),行还在 tableWidget->clearContents();//只清除表中数据,不清除表头内容 tableWidget->setRowCount(0);//连行也清除掉 15.一些零碎的知识点代码:
int row = tableWidget->rowCount();//获取表格中当前总行数
<<
tableWidget->insertRow(row)//添加一行 tableWidget->setRowCount(row+1);//添加一行 tableWidget->removeRow(row);//清除已有的行列
Int row1 = tableWidget->currentItem()->row();//当前选中行
bool focus = tableWidget->isItemSelected(tableWidget->currentItem());//判断是否选中一行 QString proName = tableWidget->item(row, col)->text();//获取某一格内容 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);//只能单选 setHorizontalScrollBarPolicy(Qt::ScrollBarAlwaysOff);//去掉水平滚动条
setVerticalScrollMode(QAbstractItemView::ScrollPerItem);//垂直滚动条按项移动 setAutoScroll(false);//去掉自动滚动
Qt事件过滤
Qt事件模型一个非常强大的功能是:QObject实例在看到它自己的事件之前,可以通过设置另外一个QObject实例先监视这些事件。创建一个事件过滤器包括如下两步:a、通过对目标对象调用installEventFilter()来注册监视对象;b、在监视对象的eventFilter()函数中处理目标对象的事件。事件过滤器一旦注册,发送给目标对象的事件就会在它们到达目的地之
前先被发送给监视对象的eventFilter()函数。如 test::test() {
label1->installEventFilter(this); label2->installEventFilter(this); }
bool test::eventFilter(QObject *target, QEvent *event) {
if(target == label1 | target == label2) {
if(event->type() == QEvent::KeyPress) {
QKeyEvent *keyevent = static_cast
//...... } } }
return QWidget::eventFilter(target, event); }
发送给label1、label2的事件之前会先被发送给test的eventFilter()函数。 很多事件类型,都可以对它们进行传递,如果在事件到达它的目标对象之前没有得到处理,或者也没有被它自己的目标对象处理,那么就会重复整个事件的处理过程,但这一次会把目标对象的父对象当作新的目标对象,这样一直继续下去,从父对象再到父对象的父对象,直到这个事件完全得到处理或者 是达到了最顶层的对象为止。
当调用AQpplication::exec()时,就启动了Qt的事件循环。在开始的时候,Qt会发出一些事件命令来显示和绘制窗口部件,在这之后,事件循环就开始运行,它不断检查是否有事件发生并且把这些事件发送给应用程序中的QObject。当处理一个事件时,也可能会同时产生一些其他的事件并且会将其追加到Qt的事件队列中。 如果在处理一个特定事件上耗费的时间过多,那么用户界面会变得无法响应,这种情况下,一种解决方法是使用多线程;一种解决方法是在耗时的代码中频繁调用QApplication::processEvents(),这个函数告诉Qt处理所有那些还没有被处理的各类事件,然后再将控制权返还给调用者;还有一种处理长时间运行操作的不同方法:不是在用户请求的时候执行处理,而是一直推迟到应用程序空闲下来的时候处理,在Qt中通过使用一个0毫秒定时器就可以实现这种方法。如: myTimerId = QObject::startTimer(30); void test::timeEvent(QTimerEvent *event) {
if(event->timerId() == myTimerId) {
if(!qApp->hasPendingEvents()) //......
} else {
QWidget::timerEvent(event); } }
如果hasPendingEvents()的返回值为true就停止处理并且把控制权交还给Qt,当Qt处理完所有事件后就会重新恢复这项操作。
正在阅读:
QT控件使用详解06-06
部室管理人员安全知识教育(通用)07-19
广州市轨道交通工程建设安全风险管理细则11-12
特许经营加盟店协议范本07-17
水利业务基础知识资料01-26
市政工程资料员工作内容09-24
新职业英语第一册课后练习答案10-27
- 冀教版版五年级科学下册复习资料
- 微生物学复习提纲
- 2013—2014学年小学第二学期教研组工作总结
- 国有土地转让委托服务合同协议范本模板
- 我的固废说明书
- 企业管理诊断报告格式
- 东鼎雅苑施工组织设计
- 谈谈如何做好基层党支部书记工作
- 浮梁县环保局市级文明单位创建工作汇报
- 管理学基础知识
- 大学物理实验报告23 - PN结温度传感器特性1
- 计算机网络实践
- 酒桌上这四种情况下要坐牢,千万别不当回事……
- 国家康居示范工程建设技术要点
- 中国贴布行业市场调查研究报告(目录) - 图文
- 新课标下如何在高中物理教学中培养学生的创新能力初探
- 营养师冬季养生食谱每日一练(7月4日)
- 关注江西2017年第3期药品质量公告
- 建设海绵城市专题习题汇总
- 10万吨年环保净水剂建设项目报告书(2).pdf - 图文
- 控件
- 详解
- 使用
- 东风本田汽车营销策略研究 x完整论文 - 图文
- Windows2012 R2下如何搭建PXE Server - 图文
- 样品工程师岗位说明书
- 标准化变电站建设实施规范(公共设备及安全标识) - 图文
- 学生会干事考核制度
- 几种基本的教学方法
- 律师实习人员实习鉴定书.doc(1)
- 中华人民共和国各行业特殊工种名录大全
- 经典诵读诗歌脚本
- 北京四方CSC-103C(D)说明书(0SF.451.043)_V1.00
- 第一讲 唯物论与辩证法
- 浙江省律师协会申请律师执业人员实习管理实施细则
- 2012年湖南省高考作文评卷补充细则及标杆作文-以“手”为话题的
- 计算机网络课后答案 杨晓辉 铁道出版社
- 关于开展安全标准化班组岗位达标工作 - 图文
- 基于智能交通监控系统中目标检测与追踪技术研究-开题报告 (1013)
- ttfpaw我 - 的英语学习计划
- 2019年10月国防知识竞赛试题及答案
- 高一语文部分重点字词及注音
- 小学六年级美术上册《唱大戏》名师公开课配套说课稿湘教版