QT学习记录—2020-4-26

前言

最近在做两个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!

  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值