Qt5 用法细节记录

const 修饰类函数

     void xxClass::fun() const
    {
    //类成员变量是不能在函数中赋值的 
    }

QMap 删除误区

QMap<QString, QWidget*>WidgetMap;
//第一种删除容器中的值 **失败**
QMap<QString, QWidget*> CustomMapTabWidget::getWidgetMap()
{
    return WidgetMap;
}
delete getWidgetMap().take(key);
//第二种删除容器中的值 **失败**
QMap<QString, QWidget*> & CustomMapTabWidget::getWidgetMap()
{
    return WidgetMap;
}
delete getWidgetMap().take(key);
//第三种删除  **成功**
int CustomMapTabWidget::removeWidgetMap(const QString &key)
{
	if(!WidgetMap[key]){
	    return -1;
    }
    delete WidgetMap[key];
   return WidgetMap.remove(key);
}

界面去焦点(虚框)

 QWidget.setFocusPolicy(Qt::NoFocus); //去焦点,去界面焦点虚框
 QSS写法: QWidget:focus{outline: none;}/*设置所有QWidget及其子类焦点框隐藏*/

QListView默认选中某一行

QStringListModel *pQStringListModel = new QStringListModel (ui->listView);

void RobotTaskForm::initListView(const QStringList& list)
{
    pQStringListModel->setStringList(list);
    ui->listView->setCurrentIndex(pQStringListModel->index(list.size()-1,0));
    ui->listView->clicked(ui->listView->currentIndex());
    ui->listView->update();
}

paint 透明图片

 QPixmap map("xxx/xxx.png");
        QImage img(map.toImage());
       
        QPainter painter(this);
        painter.setRenderHint(QPainter::Antialiasing, true);
        painter.setRenderHint(QPainter::SmoothPixmapTransform);
        QPainter::PixmapFragment qpf = QPainter::PixmapFragment::create(dstr.center(),img.rect(),
                                                                        dstr.width()*1.0f/img.width(),
                                                                        dstr.height()*1.0f/img.height(),0,0.9);
        painter.drawPixmapFragments(&qpf,1,QPixmap::fromImage(img));

忽略的QListWidget的 count

    int row = ui->listWidget->count();
    qDebug()<<"ui->listWidget->count(): before: "<<ui->listWidget->count();//0
    QListWidgetItem *item = new QListWidgetItem(ui->listWidget);
    qDebug()<<"ui->listWidget->count(): after: "<<ui->listWidget->count();//1
    RobotTaskListMenuCell* cell = new RobotTaskListMenuCell(ui->listWidget);
    connect(cell,SIGNAL(sigRobotTaskListMenuCell(int)),this,SLOT(slotRobotTaskListMenuCell(int)));
    cell->setRow(row);
    cell->init(fileInfo);
    item->setSizeHint(QSize(ui->listWidget->width(),75));
    ui->listWidget->setItemWidget(item,cell);

忽略的QMap的细节

  QMap<QString,QWidget*>RobotListWidgetCellMap;//空的QMap容器(size为0)
  for(int i=0;i<RobotListWidgetCellMap.keys().size();++i){ //未打印
        qDebug()<<"key000: "<<RobotListWidgetCellMap.keys().at(i);
    }
    if(!RobotListWidgetCellMap.value(ip)){//未打印
        for(int i=0;i<RobotListWidgetCellMap.keys().size();++i){
            qDebug()<<"key111: "<<RobotListWidgetCellMap.keys().at(i);
        }
    }
    if(!RobotListWidgetCellMap[ip]){//此判断后,如果key为空则把ip值插入(size变为1)
        for(int i=0;i<RobotListWidgetCellMap.keys().size();++i){//打印
            qDebug()<<"key222: "<<RobotListWidgetCellMap.keys().at(i);
        }
    }
    结果:key222: "xxxx"

类成员静态变量的作用域

一个c++类的静态成员变量在这个类对象被销毁时,这个静态成员变量依然存在,记得在析构中清理这个静态成员变量的数据。

QGraphicsItem 放大到一定大小会消失问题

QGraphicsItem中的的::boundingRect() const{ return QPainterPath;} 中的 QPainterPath 区域小于paintEvent函数中的区域导致的

注意 .pro .pri中 \ 反斜杠

在这里插入图片描述
因为箭头处有反斜杠,导致报下面的警告, 作为强迫症患者, 看着很不爽, 就查了一下发现这个问题。 反斜杠最后加个空格。与自动生成的文件添加格式一致。跟着Qt creator规范走肯定没错。

c++ 继承关系

//A.h
#ifndef A_H
#define A_H

#include <QDebug>

class Base{
public:

    Base(){}
    void print(){
        qDebug()<<_index;
    }
    int _index = 0;
};

class A : public Base
{
public:
    explicit A(){}
};

class B : public Base
{
public:
    explicit B(){}
};

class C : public A ,public B
{
public:
    explicit C(){
        Base::_index = 0;
        qDebug()<<"--------[Base::_index = 0]---------";
        qDebug()<<"A"<<A::_index<<"B:"<<B::_index<<"Base:"<<Base::_index;
        A::_index = 1;
        qDebug()<<"--------[A::_index = 1]---------";
        qDebug()<<"A"<<A::_index<<"B:"<<B::_index<<"Base:"<<Base::_index;
        B::_index = 2;
        qDebug()<<"--------[B::_index = 1]---------";
        qDebug()<<"A"<<A::_index<<"B:"<<B::_index<<"Base:"<<Base::_index;
    }
};
#endif // A_H

//main.cpp
#include <QApplication>
#include "A.h"

int main(int argc, char *argv[])
{
    QApplication app(argc,argv);
    C c;
    qDebug()<<"--------c.Base::print()--------";
    c.Base::print();
    qDebug()<<"--------c.A::print()--------";
    c.A::print();
    qDebug()<<"--------c.B::print()--------";
    c.B::print();

    return app.exec();
}
//输出结果
--------[Base::_index = 0]---------
A 0 B: 0 Base: 0
--------[A::_index = 1]---------
A 1 B: 0 Base: 1
--------[B::_index = 1]---------
A 1 B: 2 Base: 1
--------c.Base::print()--------
1
--------c.A::print()--------
1
--------c.B::print()--------
2

得出结论:
当A,B继承Base, C继承,A,B时得出。

class C : public A ,public B
C 类中的 Base::_index 是等于声明最近的类 即: A::_index

class C : public B ,public A
C 类中的 Base::_index 是等于声明最近的类 即:B::_index

double to QString 保留大于6位小数

    double x = 0.012312312321;
    qDebug()<<"x:"<<x<<QString::number(x,'g',16);
    //输出
    x: 0.0123123 "0.012312312321"

QTableView 排序的秘密

QTableWidgetItem* item = new QTableWidgetItem();
//按字母排序
item->setText("2");
//按数值排序
item->setData(Qt::DisplayRole, 2); 
//将第column列降序排列
TableWidget->sortItem(column, Qt::DescendingOrder);

QTableView 排序的秘密

在这里插入图片描述

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值