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;
}
相关推荐
普通人64 分钟前
WebGL与WebGPU入门指南
开发语言·webgl·1024程序员节
꧁细听勿语情꧂19 分钟前
直接选择排序,堆排序,冒泡排序,递归快速排序、hoare版本、挖坑法、lomuto前后指针,非递归快速排序
c语言·开发语言·数据结构·算法
SomeOtherTime22 分钟前
Rust集合(AI回答)
开发语言·后端·rust
曦樂~41 分钟前
【Web Development】03JavaScript 基础和事件
开发语言·前端·javascript
郝学胜-神的一滴1 小时前
LangChain Skill 实现(渐进披露 On-Demand Skill,LangChain 官方 Deep Agent Skill 模式)
开发语言·python·langchain·numpy
程序员Query1 小时前
day01-认识Go语言 + golang环境的安装
开发语言·后端·golang
§ꦿCFོ༉11 小时前
嵌入式八股文—C语言入门学习(四)
c语言·开发语言·学习
投图匠11 小时前
十种不同风格的 CTP接口 框架
开发语言·python
爱笑的k1115 小时前
nano-vllm 源码剖析:千行 Python 手写离线推理引擎的调度、显存与并行时序
开发语言·python·vllm
X1A0RAN16 小时前
PPT 图片批量处理教程:导出全部幻灯片 · 提取全部素材
开发语言·javascript·powerpoint