前言
最近在做两个QT的项目,一个比较简单,已经接入尾声啦,另一个才刚刚开始,逻辑比较复杂。很多东西,都还在学习的阶段,坑呢,也踩了不少,有些是自己的粗心造成,有些则是自己技术不够硬呀。之前每次遇到的问题,都是习惯性的百度,但是现在呢,可能先会去看一下帮助文档,实在无法解决,自然就是百度啦。然后蛮多都可以找到的,感谢各路大神~今天,我也总结一下自己遇到的一些问题吧,希望也能够帮助到别人~
遇到的问题
1、QT设置表格(QTableWidget)文字居中对齐时,发现单独对某一项设置时,会出现“程序异常”的报错信息,从而导致程序闪退;
解决方法:对整体表格的Item进行设置,代码如下:说明:row:表格的行数、column:表格的列数
补充说明:这个好像有点问题,好像可以当读对某一项进行设置,这个后续再更新!!!!
for(int m=0;m<row;m++){
for(int n=0;n<column;n++){
ui->tableWidget->item(m,n)->setTextAlignment(Qt::AlignHCenter|Qt::AlignVCenter);
}
}
2、在框选表格的过程中,随着选区的改变,会一直获取到改变后的选区,如果希望只有在鼠标弹起那一刻才获取选区,那要怎么做呢?
解决方法:通过itemSelectionChanged()信号,实现QTableWidget表格单元格的框选事件时,选区改变,此时无法捕获QMouseResleEvent(),这是可以使用Qt的事件过滤器,捕获QTableWidget的视窗的QMouseResleEvent,在鼠标弹起时,通过自定义信号,获取到当前的选区(具体参考:https://blog.csdn.net/baidu_33850454/article/details/80838305)。那这样子又会引起一个问题,如何判断是哪一个鼠标弹起呢?那就需要将QEvent类型强制转换成QMouseEvent了,然后在进行判断。具体代码如下:
if(event->type()==QEvent::MouseButtonRelease){
QMouseEvent *ev = static_cast<QMouseEvent *>(event);
if( ev->button()==Qt::LeftButton){
fn();
}
3、QT表格(QTableWidget)“单元格”的右键菜单事件(其实是表格右键菜单哈):
需求:表格单元格,能够实现右键菜单修改名称的功能;
解决方法:一开始呢,想通过自定义QTableWidgetItem来实现,后面我发现,我想多啦,其实很简单,哈哈哈
思路:1、 ui->tableWidget->setContextMenuPolicy(Qt::CustomContextMenu); // 想要弄右键菜单,这个是必须的~(别问我为什么)
2、信号槽;
3、槽函数,具体如下;
void YourClass::xxx(QPoint point){
QMenu *menu=new QMenu(ui->tableWidget);
QAction *pAction=new QAction("xxx",ui->tableWidget);
connect(pAction,SIGNAL(triggered(bool)),this,SLOT(xxxx()));
menu->addAction(pAction);
menu->move(cursor().pos());
menu->show();
//获得鼠标点击的x,y坐标点
int x=point.x();
int y=point.y();
QModelIndex index=ui->tableWidget->indexAt(QPoint(x,y));
curRow=index.row(); //得到item的行
curCol=index.column(); //得到item的列
}
void YourClass::xxx(){
//改名
}
后记
遇到的问题其实还是挺多,挑些重点的来写~
今天是很神奇的一天,因为我又老了一岁啦~
23岁的大姑娘啦~感谢父母,感谢那些帮助过我的人呀~
希望,以后的自己更加努力一些,不断的向优秀的自己迈进!
That's all,Thank you!