【无标题】

用右值引用
unused()
 indicate指定 表明
(option->state & QStyle::State_Selected) ? QColor().darker(150) : color
Properties 属性,性质
Contents// 内容
Reimplemented Public Functions// 被重新实现的 公有类函数
Detailed Description// 详细描述
Inherits: QAbstractButton//继承:Additional Inherited Members //附加继承成员
 encapsulates封装

painter.setRenderHint(QPainter::Antialiasing, true); // 抗锯齿
font.setStyleStrategy(QFont::PreferAntialias);/字体抗锯齿
fileter 分发器

   qDebug() << QRandomGenerator::global()->bounded(10);

    //生成一个0和10.123之间的浮点数
 QRandomGenerator::global()->bounded(10.123);

    //生成一个10和15之间的整数
    qDebug() << QRandomGenerator::global()->bounded(10, 15);


QToolTip::showText(statePoint, QString("nihao"))
 QToolTip::hideText();
event->ignore();
QGraphicsItem::hoverMoveEvent(event);

//设置窗体无边框.
this->setWindowFlags(Qt::FramelessWindowHint);
this->setFixedSize(200,100);

//设置窗口背景.
QPalette palette;
palette.setColor(QPalette::Window,Qt::gray);
this->setPalette(palette);
//创建label并设置相关属性。
QLabel *label = new QLabel(this);
label->setText("hello world!");
//设置字体颜色.
label->setStyleSheet("color : rgb(255, 255, 255)");
label->setAlignment(Qt::AlignCenter);
label->resize(200,100);
//设置窗口透明度.
this->setWindowOpacity(0.8)

设置背景透明
setAttribute(Qt::WA_TranslucentBackground)
setwindowFlags(Qt;;ToolTip | Qt::FramelesswindowHint)

font-family:Microsoft Yahei;    /*字体大小为20点*/

font-size:20pt;    /*字体颜色为白色*/

color:white;    /*背景颜色*/

background-color:rgb(14 , 150 , 254);    /*边框圆角半径为8像素*/

border-radius:8px;

}/*按钮停留态*/QPushButton:hover{    /*背景颜色*/

background-color:rgb(44 , 137 , 255);

}/*按钮按下态*/QPushButton:pressed{    /*背景颜色*/

background-color:rgb(14 , 135 , 228);    /*左内边距为3像素,让按下时字向右移动3像素*/

padding-left:3px;    /*上内边距为3像素,让按下时字向下移动3像素*/

padding-top:3px;

关于QT控件提升后找不到头文件的解决方法
INCLUDE_DIRECTORIES(
    ${PROJECT_SOURCE_DIR}
)

this->setTransformationAnchor(QGraphicsView::AnchorUnderMouse); 
  *                          //用于滚轮缩放时以鼠标中心进行缩放
                              this->setResizeAnchor(QGraphicsView::AnchorUnderMouse);       
                              //用于滚轮缩放时以鼠标为中心进行缩放
                               setMouseTracking(true);//设置视图,鼠标跟踪功能开启,
在滚轮事件wheelEvent(QWheelEvent *event),不能继续往下传事件,继续传会影响到上边
代码效果。


QTransform QGraphicsView::transform() const///f返回当前view视图的坐标系统
获得c这个系统可以的得到当前坐标系统中缩放比例。平移参数,还有旋转参数等,


/ 获取view的宽高;
//    qreal viewWidth = this->viewport()->width();
//    qreal viewHeight = this->viewport()->height();

// 获取当前鼠标相对于scene的位置;
//    QPointF scenePos = this->mapToScene(QPoint(cursorPoint.x(), cursorPoint.y()));


void ProjectView::mouseMoveEvent(QMouseEvent* mouseEvent)
{
    if (isPressed ) {
        QPointF disPointF = mouseEvent->pos() - m_lastPointF;
        m_lastPointF = mouseEvent->pos();
        this->scene()->setSceneRect(this->scene()->sceneRect().x() - disPointF.x(),
            this->scene()->sceneRect().y() - disPointF.y(),
            this->scene()->sceneRect().width(),
            this->scene()->sceneRect().height());
        this->scene()->update();
    }
    
    QGraphicsView::mouseMoveEvent(mouseEvent);
}

P指针 d指针

事件传递过程
在事件函数中可对事件对象调用accept()和ignore(),这两个函数之间的区别在于对“事件”的反应不同,前者会把传递过来的事件给“收下”,而后者则会“无视”掉这个事件,让事件继续传播给自己的父组件(注意,是父组件,而不是父类,事件的传播是根据组件的继承关系而不是类的继承关系)。其中,无论是accept还是ignore,当前组件的事件函数依然会被调用,并不会影响当前事件函数的后续运行   Qt中默认为accept(),执行完事件函数之后就结束了;
QGraphicsView::mouseMoveEvent(mouseEvent)  t这段代码是调用父类的函数处理这个事件。和ignore()有本质区别

对应窗口更新后一日有某个窗口存在,很可能是存在定时器,在某个事件中帆帆调用的结果,例如mousemoveEvent()事件,或者是定时器打开后没有关闭导致的。所以,只要存在定时器,要充分考虑需要在那些事件中关闭定时器。


如果想要对窗体直接设置阴影属性,不能直接用this->setGraphicsEffect,需要用一个控件与窗体等大,对这个控件设置,然后再将窗体设置为透明色
QGraphicsDropShadowEffect *shadow = new
QGraphicsDropShadowEffect();//阴影边框效果
shadow->setBlurRadius(10);//设置阴影四角的弧度
shadow->setColor(Qt::black);//设置阴影颜色
shadow->setOffset(0);//设置阴影距离  0就看不到边框阴影
ui->widget->setGraphicsEffect(shadow);//将阴影事件放到指定控件上
this->setAttribute(Qt::WA_TranslucentBackground);//窗体设置为透明色

控件内阴影,外阴影  
方法1  通过QFrame 中的frameShape()  和frameShadow

BgWidget::BgWidget(QWidget *parent) :
    QWidget(parent),
    ui(new Ui::BgWidget)
{
    ui->setupUi(this);
    //设置窗体透明
    this->setAttribute(Qt::WA_TranslucentBackground, true);
    //设置无边框
    this->setWindowFlags(Qt::Window | Qt::FramelessWindowHint);
    //实例阴影shadow
    GraphicsDropShadowEffect *shadow = new QGraphicsDropShadowEffect(this);
    //设置阴影距离
    shadow->setOffset(0, 0);
    //设置阴影颜色
    shadow->setColor(QColor("#444444"));
    //设置阴影圆角
    shadow->setBlurRadius(30);
    //给嵌套QWidget设置阴影
    ui->widget_bg->setGraphicsEffect(shadow);
    //给垂直布局器设置边距(此步很重要, 设置宽度为阴影的宽度)
    ui->lay_bg->setMargin(24);

alt +回车  快速加头文件


scene  和view 的一点个人理解  scene.初始化给的位置参数,就view(0,0)对应的位置。如果想让

    setAcceptedMouseButtons(Qt::NoButton);设置  item不接受鼠标事件,默认接收所有事件。


结构体转化为QByteArray,主要使用的是append()函数;
QByteArray转化为结构体,主要使用的data()函数。
在使用过程中,要注意类型的转化问题。

dropEvent中通过这种方式进行转换实现MimDate
const MimeDataDrogLine* drogMimDate=qobject_cast<const MimeDataDrogLine*>(event->mimeData());

在点击或者移动函数中通过继承QMimDate类实现对不兼容数据类型的定义。在继承中需要支持信号与槽机制。添加我们自己需要的数据类型作为成员变量
在点击事件中添加这个类型的对象,并给上边的数据类型赋值。用于后边函数访问。


 const qreal lod = option->levelOfDetailFromTransform(painter->worldTransform());//鼠标缩放倍数。

transform().m11()  获得view的缩放比例


painter.setWindow(0,0,800,600)将窗口映射到屏幕上,坐标是映射关系,这时候如果手动改变窗口大小,变化后的窗口依然按照800,600 映射。

painter.setViewport(0,0,800,600);视口 用于在窗口显示的一个窗口,  具体讲解https://www.cnblogs.com/realid/archive/2013/05/05/3061312.html


所以setPos(50,50)是把item坐标点(0,0)设置为与scene坐标点(50,50)重合

先把QMainWindow的CentrolWidget使用setMouseTracking(true)开启移动监视。然后在把QMainWindow的setMouseTracking(true)开启监视。之后就一切正常了。

void Widget::keyPressEvent(QKeyEvent *event)
{
 if(event->modifiers() == Qt::ControlModifier)
 {
     if(event->key() == Qt::Key_0)
     {
         qDebug()<<"I'm key press";
     }
     //if(event->isAutoRepeat()) return;
 }
}
 
//以下是键盘释放事件
void Widget::keyReleaseEvent(QKeyEvent *event)
{
    if(event->modifiers() == Qt::ControlModifier)
    {
        if(event->key() == Qt::Key_0)
        {
            qDebug()<<"I'm key release";
        }
    }

setRect(QRectF(0,0,(secondpointscene-oldpointScene).x(),(secondpointscene-oldpointScene).y()));
设置矩形时要以0点为起点设置矩形,这样才能保证位置的对应关系
setPos(oldpointScene);矩形放入SCene中的具体位置


事件过滤器

int dx = curPoint.x() - mousePoint.x();
        int dy = curPoint.y() - mousePoint.y();
        int rx = horizontalScrollBar()->value();
        int ry = verticalScrollBar()->value();
        int ax = rx - dx;
        int ay = ry - dy;
       horizontalScrollBar()->setValue(ax);
        verticalScrollBar()->setValue(ay);
        mousePoint.setX(curPoint.x());
        mousePoint.setY(curPoint.y());


 bool QWidget::underMouse()  如果在返回true,不在返回false

currentLine->move(0, event->pos().y() - currentLine->getFixWidth() / 2);


int fixI = qRound(i);
            painter->setPen(graduationColor);
            painter->drawLine(graduationStart, fixI, graduationEnd, fixI);
            painter->save();
            painter->rotate(-90);
            painter->setPen(textColor);
            painter->drawText(QRectF(-fixI - textWidth / 2.0f, 0, textWidth, textHeight), Qt::AlignCenter, QString::number(index));
            painter->restore();


过滤器的使用  别忘了 setAttribute 开启过滤器;
 m_tryagain->installEventFilter(this);
    m_tryagain->setAttribute(Qt::WA_Hover,true);

HwProgressBar::eventFilter(QObject *target, QEvent *event)
{

    if(state==ERRORINFO){
    if(target==m_tryagain){

       if(event->type()==QEvent::HoverEnter){

           setCursor(Qt::PointingHandCursor);

       }
       if(event->type()==QEvent::HoverLeave){
           setCursor(Qt::ArrowCursor);

       }
       if(event->type()==QEvent::MouseButtonPress){
           qDebug()<<"请根据业务需求进行处理,此函数位置为"
                    <<"HwProgressBar::eventFilter(QObject *target, QEvent *event)";
       }
    }
    }
    return QWidget::eventFilter(target,event);
}


QSS文件加载
 QFile qssFile(":/qss/lightLoose/HwProgressBarLight.qss");
    if( qssFile.open(QFile::ReadOnly))
    {
        QString styleSheet = QLatin1String(qssFile.readAll());
        this->setStyleSheet(styleSheet);
        qssFile.close();

    }
    else
    {

        QMessageBox::warning(NULL, "warning", "Open failed", QMessageBox::Yes | QMessageBox::No, QMessageBox::Yes);

    }

std::unordered_set<ReferenceLine*>方便插入刪除的容器
  setWindowFlags(windowFlags() |Qt::FramelessWindowHint);  隐藏标题  第一个参数必须有

 QString okandcanclestring=QString(R"(
        QPushButton {
             border-radius: 5px;
            border-width: 1px;
            margin: 0px;
            padding: 0px;
            font-size: %1px;
            color: rgba(255,255,255,0.9);
            background: rgb(78,78,78);
            outline: none;
        }
        QPushButton:hover{
            outline: none;
            background: #4C88FF;
            color: white;
            text-decoration:underline;
        }
        )").arg(16);

加载字体

 int fontId = QFontDatabase::addApplicationFont(":/font/Manrope-Bold.ttf");
    if(fontId >= 0){
        QString mysh = QFontDatabase::applicationFontFamilies(fontId).at(0);
        QFont font(mysh);
        setFont(font);
    }
    else{
        qDebug() << "fontId:" << fontId << "加载失败";
    }


    setStyleSheet("EditMarcoDialog{background:#393939;\
                               border:1px solid red;\
                                border-radius: 5px;\
                                }");

 font-family : Manrope;
            border-radius: 5px;
            border-width: 1px;
            margin: 0px;
            padding: 0px;
            font-size: %1px;
            color: rgba(255,255,255,0.9);
            background: rgb(78,78,78);
            outline: none;

设置默认按钮和状态
 m_okButton->setDefault(true);
    m_okButton->setFocus();
QPushButton:Focus{
                    outline: none;
                    background: #4C88FF;
                    color: white;


鼠标点击事件有可能被其他控件吃了


//设置抗锯齿,反走样。如果为false会有锯齿
    painter.setRenderHint(QPainter::Antialiasing, true);

self.setWindowOpacity(0.93) # 设置窗口透明度
self.setAttribute(QtCore.Qt.WA_TranslucentBackground) # 设置窗口背景透明
self.setWindowFlag(QtCore.Qt.FramelessWindowHint)# 隐藏边框

qreal lod = QStyleOptionGraphicsItem::levelOfDetailFromTransform(painter->worldTransform());

void EditMarcoDialog::mousePressEvent(QMouseEvent *event)
{
    QWidget *child=nullptr;
    child = childAt(event->pos());
    if(child)
    {
        Pattern *patternTemp=nullptr;
        patternTemp=qobject_cast<Pattern*>(child);// 这个函数转换成功返回指针,失败返回0
        if(patternTemp){
            qDebug()<<"void EditMarcoDialog::mousePressEvent(QMouseEvent *event)  pattern";
            m_selectedPixelType=patternTemp->getpixelType();
        }
        QLabel *color=nullptr;
        color=qobject_cast<QLabel*>(child);
        if(color){
            m_selectedColor=QColor(color->objectName());
        }
    }
    return QDialog::mousePressEvent(event);
}


加载字体文件
   int fontId = QFontDatabase::addApplicationFont(":/font/Manrope-Bold.ttf");
    if(fontId >= 0){
        QString boldFont = QFontDatabase::applicationFontFamilies(fontId).at(0);
        QFont font(boldFont);
    }
    else{
        qDebug() << "fontId:" << fontId << "加载失败";
    }


void EditMarcoDialog::mousePressEvent(QMouseEvent *event)
{
    m_isMove = true;//移动之前xian
    m_lastPos = event->globalPos()-pos();
    QWidget *child=nullptr;
    child = childAt(event->pos());
    if(child)
    {
        Pattern *patternTemp=nullptr;
        patternTemp = qobject_cast<Pattern*>(child);
        if(patternTemp){
            m_selectedPixelType=patternTemp->getPixelType();
        } else {
            QLabel *color = nullptr;
            color = qobject_cast<QLabel*>(child);
            if(color&&color->objectName()!= nullptr){
                m_selectedColor = QColor(color->objectName());
            }
        }

    }
    return QDialog::mousePressEvent(event);
}
void EditMarcoDialog::mouseMoveEvent(QMouseEvent *event) {
    if(m_isMove && (event->buttons() & Qt::LeftButton) && (event->globalPos() - m_lastPos).manhattanLength() > QApplication::startDragDistance())
    {
        move(event->globalPos() - m_lastPos);
        m_lastPos = event->globalPos() - pos();
    }
    return QDialog::mouseMoveEvent(event);
}

void EditMarcoDialog::mouseReleaseEvent(QMouseEvent *event) {
    Q_UNUSED(event)
    m_isMove= false;
}

git 学习进程
git pull origin master  
git add .
git status
git commit -m
git push origin test


c创建版本库  
mkdir test 
cd  test
pwd 
git init //将目录变成git可管理的仓库,执行后提示创建空的仓库


git diff  查看修改的内容
$ git log  //查看版本库中日志,查看都有哪些版本信息

git  reset  --hard HEAD^  回退到上一个版本  HEAD 表示当前版本
git reset  HEAD <file>  可以把暂存区的修改撤销掉(unstage),重新放回工作区:
git reflog  记实录输入的命令
要查看远程库的信息,用git remote:


Git鼓励大量使用分支:

查看分支:git branch

创建分支:git branch <name>

切换分支:git checkout <name>或者git switch <name>

创建+切换分支:git checkout -b <name>或者git switch -c <name>

合并某分支到当前分支:git merge <name>

删除分支:git branch -d <name>


setAutoExclusive(true);  QPushButton 同组排他属性
   color1->setChecked(true);
    color1->setDefault(true);
  color1->setFocus();
color1    setCheckable()

const std::map<StyleType, std::pair<QString, Qt::BrushStyle>> StyleNameMap = {

    { StyleType::PIXEL_NO_TYPE,        std::make_pair(QString("Null"),      Qt::NoBrush) },
    { StyleType::PIXEL_DOT_CROSS,     std::make_pair(QString("Dense"),     Qt::Dense7Pattern) },
    { StyleType::PIXEL_DOT_HERRING_BONE,       std::make_pair(QString("Hor"),Qt::HorPattern) },
    { StyleType::PIXEL_GRID_MAX,       std::make_pair(QString("Ver"),       Qt::VerPattern) },
    { StyleType::PIXEL_GRID_MEDIUM,     std::make_pair(QString("Corss"),     Qt::CrossPattern) },
    { StyleType::PIXEL_GRID_MIN,     std::make_pair(QString("BDiag"),     Qt::BDiagPattern) },
    { StyleType::PIXEL_LINE30_MAX,     std::make_pair(QString("FDiag"),     Qt::FDiagPattern) },
    { StyleType::PIXEL_LINE30_MEDIUM, std::make_pair(QString("DiagCross"), Qt::DiagCrossPattern) },
    { StyleType::PIXEL_LINE30_MIN, std::make_pair(QString("DiagCross"), Qt::DiagCrossPattern) }
};

typedef std::map<QString, QString> ColorMap;
const ColorMap ColorNameMap = []() {
    static ColorMap colorMap;
    if (colorMap.empty()) {
        for (const auto &name : QColor::colorNames()) {
            auto c = QColor(name);
            colorMap[c.name()] = name;
        }
    }
    return colorMap;
}();

 this->setStyleSheet("QPushButton{background-color: " + m_color.name() + ";} " + buttonColorStyle);

connect只写类型不写变量名字
 connect(dlg, SIGNAL(applyClick(StyleType, QColor)),this, SLOT(marcoChanged(StyleType, QColor)));

1、要想实现mouseMoveEvent,则需要在构造函数中添加setMouseTrack(true),直接得到监听事件。若是setMouseTrack(false),只有鼠标按下才会有mouseMove监听事件响应。

2、使用setMouseTracking(true)对鼠标进行监控(mouseMoveEvent(QMouseEvent event)),如果WidgetA有个子窗体WidgetB会占据WidgetA的绝大部分空间,那么当鼠标移动到WidgetB上时,WidgetA就会失去对鼠标的监控。

3、使用setAttribute( Qt::WA_Hover,true)也可以实现对鼠标的监控,相对于setMouseTracking(true)来说,它可以弥补鼠标事件被子窗体获取的问题:

 auto patterArray = new PushButton*[tempVector->size()];创建动态数组

void Stuff::paint(QPainter *painter, const QStyleOptionGraphicsItem *option, QWidget *widget) {
    Q_UNUSED(option);
    Q_UNUSED(widget);
    qreal lod = QStyleOptionGraphicsItem::levelOfDetailFromTransform(painter->worldTransform());
    QTransform tf;
    qreal fixLod = 1.0;
    if (lod > 1.0) {
        fixLod = 1.0 / lod;
    }
    tf.scale(fixLod, fixLod);
    m_brush.setTransform(tf);
    painter->setPen(QPen(Qt::magenta, 1));
    painter->setBrush(m_brush);
    painter->drawRect(boundingRect());
}

    
setFocusPolicy ( Qt::FocusPolicy policy )设置获取焦点事件的方式(tab 键,点击)


超前定义解决方法
在头文件w中声明超前定义的类   class a ;  在。cpp文件中引用头文件;

// m_selectedPixelType = DialogArgs.at(m_type).first.at(0);
   // m_selectedColor = DialogArgs.at(m_type).second.at(0);

explicit  防止隐式自动转换


QPushButton {
    padding: 8px;    //根据自己需求修改
    text-align: right;
    background-position: left;
    background-image: url(:/icon.png);
    background-repeat: repeat-no-repeat;
    background-origin:content;
}
方法二
QPushButton {
    text-align: left;
    qproperty-icon: url(:/icon.png);
    qproperty-iconSize: 24px 24px;
}
图标右文字左
QPushButton {
    padding: 8px;
    text-align: left;
    background-position: right;
    background-image: url(:/icon.png);
    background-repeat: repeat-no-repeat;
    background-origin:content;
}
图标上文字下
QPushButton {
    padding: 5px;
    min-height: 40px;
    text-align: bottom;
    background-position: top;
    background-image: url(:/icon.png);
    background-repeat: repeat-no-repeat;
    background-origin:content;
}
图标下文字上

QPushButton {
    padding: 5px;
    min-height: 40px;
    text-align: top;
    background-position: bottom;
    background-image: url(:/icon.png);
    background-repeat: repeat-no-repeat;
    background-origin:content;
}

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值