• QT


    1  界面布局

    • 实现登录窗口
    • 利用布局方式,给窗口类化
    • 选取Widget进行布局,水平布局,垂直布局,栅格布局
    • 给用户名、密码、登录、退出按钮进行布局
    • 默认窗口和控件之间有9间隙,可以调整layoutLeftMargin
    • 利用弹簧进行布局

    2  控件

    • 按钮组

              1)      QPushButton 常用按钮

              2)      QToolButton  工具按钮  用于显示图片 文字  修改风格等等

              3)      toolButtonStyle 凸起风格   autoRaise

              4)      radioButton 单选按钮, 设为默认

              5)      checkbox 多选按钮 监听状态 2 选中 1半选 0 未选

              6)      

    #include "widget.h"
    #include "ui_widget.h"
    #include <QDebug>
    #include <QRadioButton>
    #include <QListWidgetItem>
    
    Widget::Widget(QWidget *parent)
        : QWidget(parent)
        , ui(new Ui::Widget)
    {
        ui->setupUi(this);
    
        //设置单选按钮, 默认选择男
        ui->rbtman->setChecked(true);
        //选择女,打印信息
        connect(ui->rbtwomen,&QRadioButton::clicked,[=](){
            qDebug()<<"选择女";
        });
    
        //多选按钮
        connect(ui->ck_1,&QCheckBox::stateChanged,[=](int state){
             qDebug()<<state;
        });
    
    
    }

    • QListWidget  列表容器

              1)      QListWigetItem *Item  一行内容

              2)      ui->listWidget->additem(item)

              3)      设置居中方式 item->setTextAlignment(Qt::AlignHCenter);

              4)      可以利用 additems 一次性添加所有内容

              5)      

    //    ListWidget
    //    QListWidgetItem *Item = new QListWidgetItem("锄头日当午");
    //    ui->listWidget->addItem(Item);
    //    Item->setTextAlignment(Qt::AlignHCenter);
    
        QStringList list;
        list<<"锄禾日当午"<<"汗滴禾下土"<<"谁知盘中餐"<<"粒粒皆辛苦";
        ui->listWidget->addItems(list);
    • 其他控件介绍

              1)      stackedWidget  栈控件

                       ui->stackedWidget->setCurrentIndex(1);

              2)      下拉框

                       ui->comboxBox->additem(“ABC”);

              3)      QLabel 显示图片

                       ui->lbl_Image->setPixmap(QPixmap(“:/Image/panda.png”));

              4)      QLabel 显示动图

                        ui->lbl_movie->setMovie(movie);

                        movie->start();

              5)      TableWidget控件的代码使用         

        //设置列数
        ui->tableWidget->setColumnCount(3);
        //设置行数
        ui->tableWidget->setRowCount(5);
        //设置水平表头
        ui->tableWidget->setHorizontalHeaderLabels(QStringList()<<"姓名"<<"性别"<<"年龄");
        //设置正文
        //   ui->tableWidget->setItem(0,0,new QTableWidgetItem("亚瑟"));
        QStringList nameList;
        nameList<<"亚瑟"<<"张飞"<<"关羽"<<"刘备"<<"花木兰";
        QList<QString> setList;
        setList<<""<<""<<""<<""<<"";
    
        for(int i=0;i<5;i++)
        {
            int col = 0;
            ui->tableWidget->setItem(i,col++,new QTableWidgetItem(nameList[i]));
            ui->tableWidget->setItem(i,col++,new QTableWidgetItem(setList.at(i)));
            ui->tableWidget->setItem(i,col++,new QTableWidgetItem(QString::number(i+18)));
    
        }

    效果:

    3. 自定义控件

    • 添加新文件 – Qt – 设计师界面类 (.h .cpp .ui)
    • ui中设计 QSpinBox和 QSlider 两个控件
    • Widget中使用自定义控件, 拖着一个Widget,点击提升为, 点击添加,点击提升
    • 实现功能,改变数字,滑动条跟着移动,信号槽监听
    • 提供getNum和setNum 对外接口
    • 测试接口
    SmallWidget.cpp
    #include "smallwidget.h"
    #include "ui_smallwidget.h"
    #include <QSpinBox>
    #include <QSlider>
    
    SmallWidget::SmallWidget(QWidget *parent) :
        QWidget(parent),
        ui(new Ui::SmallWidget)
    {
        ui->setupUi(this);
        //QSpinBox 移动  QSlider移动
    
        void (QSpinBox:: *spSignal)(int) = &QSpinBox::valueChanged;
        connect(ui->spinBox, spSignal,ui->horizontalSlider, &QSlider::setValue);
    
        //QSlider滑动  QSpinBox数字跟着改变
        connect(ui->horizontalSlider, &QSlider::valueChanged, ui->spinBox, &QSpinBox::setValue);
    
    }
    
    SmallWidget::~SmallWidget()
    {
        delete ui;
    }
    
    int SmallWidget::getnum()
    {
        return ui->spinBox->value();
    }
    
    void SmallWidget::setnum(int num)
    {
        ui->spinBox->setValue(num);
    }
    SmallWidget.h
    #ifndef SMALLWIDGET_H
    #define SMALLWIDGET_H
    
    #include <QWidget>
    
    namespace Ui {
    class SmallWidget;
    }
    
    class SmallWidget : public QWidget
    {
        Q_OBJECT
    
    public:
        explicit SmallWidget(QWidget *parent = nullptr);
        ~SmallWidget();
    
        void setnum(int num);
        int getnum();
    
    private:
        Ui::SmallWidget *ui;
    };
    
    #endif // SMALLWIDGET_H

    widget.cpp

    #include "widget.h"
    #include "ui_widget.h"
    #include <QDebug>
    Widget::Widget(QWidget *parent)
        : QWidget(parent)
        , ui(new Ui::Widget)
    {
        ui->setupUi(this);
    
        //获取值
        connect(ui->btn_1,&QPushButton::clicked,[=](){
            qDebug()<<ui->widget->getnum();
        });
    
        //设置值
        connect(ui->btn_2,&QPushButton::clicked,[=](){
            ui->widget->setnum(50);
        });
    }
    
    Widget::~Widget()
    {
        delete ui;
    }

    4. Qt中的事件

    • 鼠标事件
    • 鼠标进入事件  enterEvent
    • 鼠标离开事件  leaveEvent
    • 鼠标按下  mousePressEvent(QMouseEvent *ev)
    • 鼠标释放  mouseReleaseEvent
    • 鼠标移动  mouseMoveEvent
    • ev->x()  x坐标  ev->y()  y坐标
    • ev->button() 判断鼠标左右按键  Qt::LeftButton  Qt::RightButton
    • ev->buttons() 判断组合按键 判断move时候的左右键 结合 & 操作符
    • 格式化字符串 QString(“%1  %2”).arg(111).arg(222)

    myLabel.cpp

    #include "mylabel.h"
    #include <QDebug>
    #include <QMouseEvent>
    
    MyLabel::MyLabel(QWidget *parent) : QLabel(parent)
    {
        //设置鼠标追踪状态
        setMouseTracking(true);  //没有这个api的话,鼠标移动时将不会触发mousemoveEvent事件
    }
    
    void MyLabel::enterEvent(QEvent *event)
    {
        qDebug()<<"鼠标进入";
    }
    
    void MyLabel::leaveEvent(QEvent *)
    {
        qDebug()<<"鼠标离开";
    }
    
    void MyLabel::mousePressEvent(QMouseEvent *ev)
    {
        if(ev->button() == Qt::LeftButton)
        {
            QString str = QString("鼠标按下了 x = %1  y = %2 globalX = %3  globalY = %4").arg(ev->x()).arg(ev->y()).arg(ev->globalX()).arg(ev->globalY());
            qDebug() << str;
        }
    }
    
    void MyLabel::mouseMoveEvent(QMouseEvent *ev)
    {
     //   if(ev->buttons() &Qt::LeftButton)
     //   {
            QString str = QString("鼠标移动了 x = %1  y = %2 globalX = %3  globalY = %4").arg(ev->x()).arg(ev->y()).arg(ev->globalX()).arg(ev->globalY());
            qDebug() << str;
     //   }
    
    }

    myLabel.h

    #ifndef MYLABEL_H
    #define MYLABEL_H
    
    #include <QLabel>
    
    class MyLabel : public QLabel
    {
        Q_OBJECT
    public:
        explicit MyLabel(QWidget *parent = nullptr);
    
        //鼠标进入
        void enterEvent(QEvent*event);
    
        //鼠标离开
        void leaveEvent(QEvent*);
    
        //鼠标按下
        void mousePressEvent(QMouseEvent *);
    
        //鼠标移动
        void mouseMoveEvent(QMouseEvent *ev);
    
    signals:
    
    };
    
    #endif // MYLABEL_H

    5. 定时器1

    • 利用事件 void timerEvent(QTimerEvent *ev)
    • 启动定时器  startTimer(1000) 毫秒单位
    • timerEvent 的返回值是定时器的唯一标志 可以和ev->timerid 来做比较

    6. 定时器2

    • 利用定时器类 QTimer
    • 创建定时器对象 QTimer *timer = new QTimer(this);
    • 启动定时器 timer->start(毫秒)
    • 每隔一定毫秒,发送信号 timeout,进行监听
    • 暂停 timer->stop()

    widget.cpp

    #include "widget.h"
    #include "ui_widget.h"
    #include <QTimer>
    
    Widget::Widget(QWidget *parent)
        : QWidget(parent)
        , ui(new Ui::Widget)
    {
        ui->setupUi(this);
    
        id1= startTimer(1000);
        id2 = startTimer(2000);
    
        //第二种定时器的方法
        QTimer *timer = new QTimer();
        timer->start(500);
        connect(timer,&QTimer::timeout,[=](){
            static int num2 = 1;
            ui->label_4->setText(QString::number(num2++));
        });
    
        connect(ui->btn, &QPushButton::clicked,[=](){
            timer->stop();
        });
    }
    
    Widget::~Widget()
    {
        delete ui;
    }
    
    void Widget::timerEvent(QTimerEvent *ev)
    {
        static int num = 1;
        static int num1 = 1;
        if(ev->timerId() == id1)
        {
            ui->label_2->setText(QString::number(num++));
        }
        if(ev->timerId() == id2)
        {
            ui->label_3->setText(QString::number(num1++));
        }
    }

    widget.h

    #ifndef WIDGET_H
    #define WIDGET_H
    
    #include <QWidget>
    
    QT_BEGIN_NAMESPACE
    namespace Ui { class Widget; }
    QT_END_NAMESPACE
    
    class Widget : public QWidget
    {
        Q_OBJECT
    
    public:
        Widget(QWidget *parent = nullptr);
        ~Widget();
    
        void timerEvent(QTimerEvent *);
        int id1;
        int id2;
    
    private:
        Ui::Widget *ui;
    };
    #endif // WIDGET_H

    效果:

  • 相关阅读:
    JAVA NIO
    Spider、xmlSpider、FeedSpider、CrawlSpider、RedisSpider分别作用
    Scrapy中xpath用到中文报错
    xpath无法匹配tbody标签
    读书-《不凶不吼教出好孩子》-管教孩子应该先管好自己
    Markdown基本语法
    读书-《刻意练习》天才与庸才的距离
    读书-《第一次买保险就买对》保险我们这样买
    读书-《断舍离》做减法来生活
    读书-《富爸爸穷爸爸》的财商教育经
  • 原文地址:https://www.cnblogs.com/strive-sun/p/14579482.html
Copyright © 2020-2023  润新知