Qt编程 (二)

一、自定义信号和槽
    1、信号和槽必须定义在类中
    2、自定义信号和槽必须继承QObject
    3、在类的开头写上  Q_OBJECT  没有分号,此标识必须写在项目构建之前,如果是后加上的,必须重新构建项目
    4、信号定义signals: 关键字下面。
    5、通过emit 发送信号
    6、一个信号可以连接多个槽,当该信号发射会触发多个槽函数
    7、多个信号可同时连接一个槽,只要有一个信号发射就会触发槽函数
    注意:如果正确使用信号与槽机制,同时没有语法错误;但是编译时仍然报错,这时可以尝试把编译出的build*文件整个删除,然后再次编译。(有时是编译过的build文件对信号与槽机制有影响)

MainWindow::MainWindow(QWidget *parent)
    : QMainWindow(parent)
{
    btn = new QPushButton(this);
    btn->setText("单击");
    btn->resize(80,40);
    btn->move(200,200);
    connect(btn,SIGNAL(clicked()),this,SLOT(slots_func()));     //按钮单击,触发槽函数
    connect(this,SIGNAL(signal_func(int)),this,SLOT(slots_func(int))); //绑定自定义信号和槽函数
    connect(this,SIGNAL(signal_func(int)),this,SLOT(close()));
}

MainWindow::~MainWindow()
{
    delete btn;
}

void MainWindow::slots_func(void)
{
    qDebug("我被触发了");
    emit signal_func(100);     //发射信号
}

void MainWindow::slots_func(int signum)
{
    qDebug("%d",signum);
}

二、界面布局
    1、在设计界面一般不建议直接设计窗口或控件的大小(像素点数),除非容器固定大小,否则界面改变大小时布局会乱
    2、如果不固定窗口的大小,一般使用自动布局,前提是在窗口添加一个布局器,然后设置窗口为自动布局(在窗口的空白位置右击->布局->水平、垂直、栅格)
    3、在窗口内部想让某些控件自动排列,可以选择使用布局器:
        水平布局:   QHBoxLayout
        垂直布局:QVBoxLayout
        栅格布局:  QGridlayout
        布局器中的控件会根据布局器的大小自动排列控件,自动设置控件的大小
    4、设置窗口自动布局,控件会随着窗口的大小而变化,可以使用"弹簧”来约束控件的位置

三、项目资源
    1、项目的资源一般指的是项目中使用到的图标、图片、音频、视频等
    2、使用资源文件有两种方式:
        1、使用QPainter或QImage类读取资源文件,然后绘制在窗口或控件上  (画板)
        2、创建Qt资源文件,统一管理图片等资源文件
    3、在窗口或控件上绘制图片:
        1、由于QPainter只能工作在paintEvent函数中,因此必须覆盖此函数
        2、QImage控制图片文件的路径即可,创建QImage对象
        3、QPainter创建时需要提供在窗口的地址
        4、QPainter对象调用drawImage成员函数绘制图片
        5、paintEvent会被update自动调用
        注意:不建议使用此方法显示图片,更多的是进行绘制图形
    4、Qt资源文件
        1、选中项目右击->添加新文件->Qt->Qt资源文件->填写资源文件名
        2、双击打开创建好的资源文件->添加->添加前缀->添加文件->选择要添加的文件
        3、可以在设计师中使用资源文件,选择控件右击->改变样式表->添加资源->border-image
        4、也可以在代码中调用setStyleSheet函数,为控件设计样式

    5、设置控件样式表的技巧
        1、在为窗口设置样式表后,窗口中的控件也会继承这个样式,解决方法是为控件也设置样式表,覆盖窗口的样式表

QWidget
{
     background-color:rgb(255,255,255);
}

QPushButton
{    
     background-color:rgb(255,245,66);
     # 设置按钮的边框
     border: 1px solid rgb(124,124,124);
     # 设置按钮的圆角弧度
     border-radius:5px;  
}

        2、设置控件的悬停样式  

QPushButton:hover
{
    background-color: qconicalgradient(cx:0.5, cy:0.522909, angle:179.9, stop:0.494318 rgba(181, 225, 250, 255), stop:0.5 rgba(222, 242, 251, 255));
    border-radius:5px;
    border: 1px solid #3C80B1;
}

      3、设置控件按下时的效果

QPushButton:pressed
{
      background-color: qconicalgradient(cx:0.5, cy:0.522909, angle:179.9, stop:0.494318 rgba(134, 198, 233, 255), stop:0.5 rgba(206, 234, 248, 255));
      border-radius:5px;
      border: 1px solid #5F92B2;  
}

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值