Qt 的核心机制

cpp 复制代码
#ifndef WIDGET_H
#define WIDGET_H
#include<stdio.h>
#include<iostream>
#include<QIcon>
#include <QPushButton>
#include<QLabel>
#include<QLineEdit>
#include<QMovie>
#include<QDebug>
#include <QWidget>

QT_BEGIN_NAMESPACE
namespace Ui { class Widget; }
QT_END_NAMESPACE

class Widget : public QWidget
{
    Q_OBJECT

public:
    Widget(QWidget *parent = nullptr);
    ~Widget();



private:
    QPushButton *btn1;
    QPushButton *btn2;
    QLineEdit *edit1;
    QLineEdit *edit2;
    QLabel *first;
    Ui::Widget *ui;
};
#endif // WIDGET_H




#include "widget.h"
#include "ui_widget.h"

Widget::Widget(QWidget *parent)
    : QWidget(parent)
    , ui(new Ui::Widget)
{
    ui->setupUi(this);
    this->setWindowIcon(QIcon("C:\\Users\\lenovo\\Desktop\\7.png"));
    this->setFixedSize(600,400);
     this->setWindowTitle("qq");
 //   this->setWindowFlag(Qt::FramelessWindowHint);
    this->move(500,400);
    QLabel *lab1 =new QLabel(this);
    lab1->resize(600,125);
    QMovie *moive=new QMovie("C:\\Users\\lenovo\\Desktop\\1.gif");
    lab1->setMovie(moive);
    moive->start();
    lab1->setScaledContents(true);
    QLabel *lab2 =new QLabel(this);
    lab2->resize(30,30);
    lab2->move(150,lab1->y()+lab1->height()+50);
    lab2->setPixmap(QPixmap("C:\\Users\\lenovo\\Desktop\\2.png"));
    lab2->setScaledContents(true);
     this->edit1=new QLineEdit(this);
     edit1->resize(300,30);
     edit1->move(lab2->x()+lab2->width(),lab2->y());
     edit1->clear();//清空内容
     edit1->setPlaceholderText("请输入QQ账号");

     QLabel *lab3 =new QLabel(this);
     lab3->resize(30,30);
     lab3->move(lab2->x(),lab2->y()+lab2->height()+10);
     lab3->setPixmap(QPixmap("C:\\Users\\lenovo\\Desktop\\6.png"));
     lab3->setScaledContents(true);

      this->edit2=new QLineEdit(this);
      edit2->resize(300,30);
      edit2->move(edit1->x(),edit1->y()+edit1->height()+10);
      edit2->clear();//清空内容
      edit2->setPlaceholderText("请输入QQ密码");
      edit2->setEchoMode(QLineEdit::Password);

      this->btn1=new QPushButton("登录",this);
      btn1->resize(330,45);
      btn1->move(lab2->x(),lab3->y()+lab3->height()+50);
    //  btn1->setStyleSheet("background-color:orange;border-radius:10;");
     // btn1->setIcon(QIcon("C:\\Users\\lenovo\\Desktop\\jo.jpg"));

      this->first =new QLabel(this);
      first->resize(300,200);
      first->move(150,100);
      first->setStyleSheet("background-color:gray");
      QLabel*two=new QLabel(first);
      two->resize(30,80);
      two->move(150,50);


      this->btn2=new QPushButton("确认",first);
      btn2->resize(150,40);
      btn2->move(80,150);
      this->first->hide();

      connect(this->btn1,&QPushButton::clicked,[&](){

          first->show();
          if(this->edit1->text()==this->edit2->text())
          {
              first->setText("          登陆成功");
          }
          else
          {
              first->setText("    账号或密码错误");
          }
      });
      connect(this->btn2,&QPushButton::clicked,[&](){
          if(this->edit1->text()==this->edit2->text())
          {
              close();
          }
          else
          {
              this->first->hide();
          }
      });

}

Widget::~Widget()
{
    delete ui;
}


智能指针
#include <iostream>

using namespace std;
template <typename T>
class unique_ptr
{
public:

    explicit unique_ptr(T* p):ptr(p){};
    ~unique_ptr() noexcept{

        cout<<"智能析构"<<endl;
    };
    T & operator*()const noexcept
    {
        return *ptr;
    }
    T * operator->()const noexcept
    {
        return ptr;
    }
    unique_ptr(const unique_ptr &) = delete; // 禁用拷贝构造函数
    unique_ptr& operator=(const unique_ptr &) = delete; // 禁用赋值函数
    unique_ptr& operator+=(const unique_ptr &&other) noexcept // 右值引用
    {
        this->ptr=other.ptr;
        return *this;
    }
    unique_ptr& operator+=(const unique_ptr &other) noexcept // 右值引用
    {
        this->ptr=other.ptr;
        return *this;
    }

private:
       T *ptr;
};
class A
{

public:
     string name;
    A(){cout<<"无参"<<endl;}
    A(string a):name(a){cout<<"有参"<<endl;}
    ~A(){cout<<"析构"<<endl;}
};
int main()
{
    A *p1=new A("占山");
    unique_ptr<A>up(p1);
    cout<<up->name<<endl;
    return 0;
}
相关推荐
Le1Yu13 分钟前
消息队列以及RabbitMQ的使用
java·开发语言
羚羊角uou24 分钟前
【Linux】线程池
java·开发语言
Fcy6481 小时前
C++ vector容器的解析和使用
开发语言·c++·vector
无限进步_1 小时前
C语言文件操作全面解析:从基础概念到高级应用
c语言·开发语言·c++·后端·visual studio
_OP_CHEN1 小时前
C++基础:(十五)queue的深度解析和模拟实现
开发语言·c++·stl·bfs·queue·容器适配器·queue模拟实现
起床气2331 小时前
C++海战棋开发日记(序)
开发语言·c++
APItesterCris1 小时前
TypeScript 与淘宝 API:构建类型安全的商品数据查询前端 / Node.js 服务
开发语言·php
ftpeak1 小时前
《Cargo 参考手册》第二十一章:Cargo 包命令
开发语言·rust
陈一Tender2 小时前
JavaWeb后端实战(登录认证 & 令牌技术 & 拦截器 & 过滤器)
java·开发语言·spring boot·mysql