Qt核心

QWidget w://窗口
setWindowTitle("")//设置标题
=========================================
坐标机制
setGeometry(x,y,width,height)
========================================================
connect//信号槽函数
(
,//信号发出者
,//处理信号,&发送者的类型::信号
,信号接收者
,&接受者类型::信号
)
//自定义槽
槽函数要与信号一样,没有返回值


=========================================================================================
//自定义信号
声明时要加signals关键字
列如:
在窗口类a中
void sendsignal();
signals:
void mysignal();
void mysignal(int);
构造函数中
QPushButton b;
connect(b,&QPushButton::clicked,this,&sendsignal);
sendsignal()
{
emit mysignal();
emit mysignal(1);
}
//接收类
class Widget : public QWidget
{
    Q_OBJECT

public:
   QPushButton *b2=new QPushButton(this);
    son *sonchild=new son();
    Widget(QWidget *parent = 0);
    ~Widget();
    void showaa();
    void showaaa(int);

};
Widget::Widget(QWidget *parent)
    : QWidget(parent)
{
    this->resize(600,600);
    this->move(200,100);
    this->setWindowTitle("你好");
   sonchild->show();
//如果存在信号重载的话,可以将信号转化为指针函数
     void (son::*func)()=&son::backSignal;
    connect(sonchild,func,this,&Widget::showaa);
    void(son::*func)(int )=&son::backSignal;
    connect(sonchild,func2,this,&Widget::showaa);
}
void Widget::showaa()
{
    this->show();
}
void Widget::showaaa(1)
{
    qDebug()<<"heiheihei";
}
============================================================

lamda处理信号
connect(&b,&QPushButton::clicked,
//方括号可以把外部变量传进来,
如果方阔号内是"=",则代表把外部所有的局部变量,类中所有成员以值传递
如果方括号内是"this",则代表将类中所有成员以值传递
如果方括号内是"&",则代表把外部所有局部变量引用进来
    []()
    {
    }
}

QGirdLayout layout(this);//网格布局
layout.addwidget();
或者:
setLayout(layout)
============================
样式表,语法与css类似
// 对单个控件;
ui->pushButton->setStyleSheet("QPushButton{border-radius:5px;background:rgb(150, 190, 60);color:red;font-size:15px;}")

// 对整个界面(包括界面上所有的控件)
this->setStyleSheet("QPushButton{border-radius:5px;background:rgb(150, 190, 60);color:red;font-size:15px; }
QToolButton{border-radius:5px;background:rgb(34, 231, 131);color:brown;font-size:15px;}")

===============================================
事件是被保护的方法
//鼠标按下抬起事件
void Widget::mousePressEvent(QMouseEvent *ev)
{
    int x=ev->x();
    int y=ev->y();//

    ev->button()==Qt::LeftButton;
    ev->button()==Qt::MidButton;

 

}
void Widget::dragMoveEvent(QDragMoveEvent *event)
{

}
void Widget::mouseMoveEvent(QMouseEvent *ev)
{
    qDebug()<<ev->x()<<" "<<ev->y();

   //不会一进来就有效,需要先点击一下.如果想一进来就有效,需要加上this->setMouseTracking(true);
}
//进入离开事件
//void Widget::enterEvent(QEvent *event)
//
//void Widget::leaveEvent(QEvent *event)
//{}
void Widget::keyPressEvent(QKeyEvent *event)
{
    int value=event->key();
    qDebug()<<(char)value;
   value==Qt::Key_F1;//匹配
}

计时器事件
int id=this->startTimer(1000);
void Widget::timerEvent(QTimerEvent *event)
{
this->killTimer(id);//关闭定时器
}


void closeEvent(QCloseEvent *e)
{
    int ret=QMessageBox::question(this,"question","are you sure to close?");
    if(ret==Qt::yes)
    {
        e->ignore();//忽略这个事件,把它交给父窗口关闭    
    }
    if(ret==Qt::No)
    {
        e->accept();//接收这个事件,不会再往下传递
    }
}
=================================================
重写绘图事件
void paintEvent(QPaintEvent* paint);


void Widget::paintEvent(QPaintEvent* paint)
{

QPainter *p=new QPainter(this);
p->drawLine(10,10,50,50);//线
p->drawRect(10,10,50,50);//正方形
p->drawPixmap(0,0,QBitmap("E:\\source\\33.jpg"));//画图
}

在构造函数中重绘
this->update();
============================================
绘图设备
Qpixmap:针对屏幕进行优化,和平台相关
QImage:和平台无关,可以对 图片进行修改,在线程中绘图
QPicture:保存绘图的状态(二进制文件)
==============================================
捕获组合键

void MyWidget::keyPressEvent(QKeyEvent *event)
{
    // 捕捉 Ctrl + Alt + A 组合键;先ctrl+alt
    if (event->key() == Qt::Key_A  &&  event->modifiers() == (Qt::AltModifier | Qt::ControlModifier))
    {}
}
按键+鼠标组合,例如ctrl+左击(先ctrl后左击触发,先左击后ctrl不可触发):
void MyAPP::mousePressEvent(QMouseEvent *event)
{
    if ((QApplication::keyboardModifiers() == Qt::ControlModifier) && (event->button() == Qt::LeftButton))
    {
        QMessageBox::aboutQt(NULL, "aboutQt");
    }
}

按键+鼠标组合方法2,例如A+左击(先A后左击,先左击后A均可触发):
void MyAPP::keyPressEvent(QKeyEvent *event)
{
    if ((event->key() == Qt::Key_A) && (QApplication::mouseButtons() == Qt::LeftButton))
    {
        QMessageBox::aboutQt(NULL, "aboutQt");
    }
}

 


 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值