锐单电子商城 , 一站式电子元器件采购平台!
  • 电话:400-990-0325

QT学习日记

时间:2023-01-19 04:00:00 ha重载矩形连接器

QT学习日记

一.QWidget

版本选择:win下选择MINGW (编码UTF-8)

选择Qwidget之后勾选mingw不然会报错

初识main.cpp

详解:

#include "widget.h" #include  //main程序入口 int main(int argc, char *argv[]) { 
              ///应用程序对象,只有一个        QApplication a(argc, argv);     //窗户对象Widgt继承父类QWidget     Widget w;     //show方法     w.show();     ///消息循环不会结束     return a.exec(); }  

pro文件解释

 //QT的核心模块  QT        = core gui //大于4以上才有widgets版本 greaterThan(QT_MAJOR_VERSION, 4): QT  = widgets //目标文件 TARGET = Demo01 //模板--application TEMPLATE = app   DEFINES  = QT_DEPRECATED_WARNINGS   CONFIG  = c  11  //源文件 SOURCES  = \         main.cpp \         widget.cpp //头文件 HEADERS  = \         widget.h  FORMS  = \         widget.ui  # Default rules for deployment. qnx: target.path = /tmp/$${TARGET}/bin else: unix:!android: target.path = /opt/$${TARGET}/bin !android: target.path = /opt/$${TARGET}/bin !isEmpty(target.path): INSTALLS  = target  

命名规范

类名:首字母大写,单词和单词直接首字母大写

函数名:首字母小写、单词和首字母大写[外链图片存储失败,源站可能有防盗链机制,建议保存图片直接上传(img-2wMnlWjO-1617466776739)(Lily_Screenshot_1608472881.png)]

查找ctrl f

自动对齐Ctrl i

同名.h和.cpp切换f4

写代码了

QPushButton *button =new QPushButton(); //以顶层弹出 //button->show(); //让button依赖在Widget中显示,setParent设置父窗 button->setParent(this); ///这个设置应该在下面,这是底层的问题 ui->setupUi(this); 

带参数构造

发现与原按钮重叠

[外链图片存储失败,源站可能有防盗链机制,建议保存图片直接上传(img-u7SEwuVW-1617466776741)(Lily_Screenshot_1608474766.png)]

//窗户固定大小 setFixedSize(600,400); 

指定父类将子类添加到对象树中,以便在分析时释放象树

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-bRrEnGG9-1617466776745)(image-20201220232553431.png)]

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-tpybSAjz-1617466776747)(image-20201220235015356.png)]

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-tNcLMhHi-1617466776749)(image-20201220234957297.png)]

坐标体系

左上角向下y向右x

信号和槽

信号的处理(槽函数)

优点:接受和发送没有关联

1.实现功能点击按钮关闭窗口

按钮名字,&类名地址::信号,窗口名字,&类名地址::槽函数

//设置按钮button2关闭窗口
connect(button2,& QPushButton::clicked , this , & QWidget::close);

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-8r3KG4v6-1617466776750)(image-20201221123927942.png)]

自定义信号

信号在建立类之后会有,默认继承Qobject类不用释放

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-HZltgUkY-1617466776752)(image-20201221131238328.png)]

signals:
    //只要声明不用实现
    //返回一个void就行
    void classover();

自定义槽

打印函数

头文件定义槽

cpp重写槽函数

#include "student.h"
#include

Student::Student(QObject *parent) : QObject(parent)
{ 
        

}

 void Student::Food()
 { 
        
     qDebug()<<"下课吃饭了";
 }

在widget的头文件里面写入private的对象

#ifndef WIDGET_H
#define WIDGET_H

#include 
#include"teacher.h";
#include"student.h";

namespace Ui { 
        
class Widget;
}

class Widget : public QWidget
{ 
        
    Q_OBJECT

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

private:
    Ui::Widget *ui;
    
    Teacher *teacher;
    Student *student;
        connect(zyq,&Teacher::classover,lpy,&Student::Food);

    Classover();
}

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


void Widget::Classover(){ 
        
    //触发下课的信号
    emit zyq->classover();

}
};

先创建对象,再建立连接,最后调用函数触发信号( emit zyq->classover();)。

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-WrSjy6vg-1617466776753)(image-20201221234232202.png)]

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-2zMirtRv-1617466776754)(image-20201221234547927.png)]

qDebug()<<“XXX is sb”

    //重载函数后,连接会不明确指向的是哪个函数,需要手动void 一个地址
void (Teacher::*tea)(QString)=&Teacher::classover;
 void (Student:: *stu)(QString)=&Student::Food;

    connect(zyq,tea,lpy,stu);
    Classover();

string转换为 char * (utf-8.data)

  qDebug()<<"老师要吃"<<FoodName.toUtf8().data();

信号连接信号

//无参信号和槽连接
void (Teacher:: *teaSignal(void)=&Teacher::classover;
void (Student:: *stuSlot)(void)=&Student::Food;
connect(zyq,teaSignal,lpy,stuSlot);

//信号连接信号
connect(button,&QPushButton::clicked,zyq,teaSignal);
//断开连接
    disconnect(zyq,teaSignal,lpy,stuSlot);

拓展

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-udkJ10Xs-1617466776755)(image-20201222151936461.png)]

Lambda表达式

[button](){ 
        
    button->setText("aaaaa");
}();

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-dplr0Dpd-1617466776756)(image-20201222154708320.png)]

mutable声明修改只读状态,并且只修改拷贝的值

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-nnTw6jhb-1617466776757)(image-20201222160024268.png)]

建立连接

    void (Teacher:: *tea)(QString)=&Teacher::classover;
    void (Student:: *stu)(QString)=&Student::Food;

        connect(zyq,tea,lpy,stu);
    //使用lambda表达式关闭窗口
    QPushButton *btn=new QPushButton("close",this);

    connect(btn, &QPushButton::clicked, this, [this](){ 
         this->close(); }
                   emit zyq->classover("cc");
);

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-YJOfsYOT-1617466776758)(image-20201222185244348.png)]

二.QMainWindow

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-gaJeOM8z-1617466776759)(image-20201222183411211.png)]

1.菜单项目

//创建菜单MenuBar
    QMenuBar *bar= menuBar();
    //放入窗口
    //包含头文件 #include
    setMenuBar(bar);

    //创建菜单
   QMenu *menu01= bar->addMenu("病人名单");
   QMenu *menu02= bar->addMenu("医生名单");
   QMenu *menu03= bar->addMenu("病例记录");
   QMenu *menu04= bar->addMenu("太平间记录");

   //创建菜单项
   menu01->addAction("许音");
   menu01->addAction("张雅");
   //分隔符
   menu01->addSeparator();
   menu01->addAction("红衣");
   menu01->addAction("高枝");

2.添加工具栏

//Location
Constant
Value
Qt::LeftToolBarArea
0x1
Qt::RightToolBarArea
0x2
Qt::TopToolBarArea
0x4
Qt::BottomToolBarArea
0x8
Qt::AllToolBarAreas
ToolBarArea_Mask
Qt::NoToolBarArea
0

   //添加工具栏
   QToolBar *toolbar=new QToolBar(this);
   addToolBar(Qt::RightToolBarArea,toolbar);
    //只允许左右停靠
   toolbar->setAllowedAreas(Qt::RightToolBarArea | Qt::LeftToolBarArea);
    //设置浮动
   toolbar->setFloatable(true);
    //设置移动(权值大于前面)
   toolbar->setMovable(false);
  // 设置action
   toolbar->addAction(xuyin);
   toolbar->addAction(zhangya);
    toolbar->addSeparator();
    QPushButton *btn=new QPushButton("destroy",this);
    toolbar->addWidget(btn);

addWidget添加按钮

addAction添加QAction

3.状态栏

 //状态栏
    QStatusBar *Qsta=new QStatusBar();
    //加入窗口
    setStatusBar(Qsta);
    //设置左侧提示
    QLabel *x=new QLabel("恐怖屋");
    Qsta->addWidget(x);
    //设置右侧提示
    QLabel *y=new QLabel("第三病栋");
    Qsta->addPermanentWidget(y);

qt太多要记的了5555

4.浮动窗口

 //floatWidget
    QDockWidget *dock=new QDockWidget("show memory",this);
    addDockWidget(Qt::TopDockWidgetArea,dock);
    dock->setAllowedAreas(Qt::BottomDockWidgetArea | Qt::TopDockWidgetArea);

5.设置核心部件

//设置central widget(有且只有一个)
    QTextEdit *textedit=new QTextEdit(this);
    setCentralWidget(textedit);

6.总结

只有一个的用set,能有多个的是add

三。图形化学习

3.1.设置图标

1.设置icon的绝对路径

 ui->setupUi(this);
    ui->actionnew->setIcon(QIcon("D:\\QTimage\\zhangya.jpg"));

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-5rgM0ZHu-1617466776760)(image-20201223221328068.png)]

2.设置icon的相对路径

添加文件夹到mainWindows的文件下,然后addnew QT resources,添加前缀,添加文件

有手就行

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-U2BcF4yO-1617466776761)(image-20201223222355484.png)]

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-EZ8AR6tZ-1617466776762)(image-20201223223251227.png)]

新版只需要去图片那里复制路径即可

perfect

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-akUrQTQw-1617466776763)(image-20201223223610985.png)]

3.2 对话框 (模态与非模态)

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-kQFDsd0G-1617466776764)(image-20201223233707116.png)]

     //阻塞的模态,非模态(可对其他窗口操作)
    connect(ui->actionnew,& QAction::triggered,[=](){ 
        
        // QDialog dia(this);
        // dia.resize(200,200);
        // dia.exec();
        // qDebug()<<"dialog finished";

        //非模态(可对其他窗口操作)
        QDialog *dia2=new QDialog(this);
         //这个如果不释放主窗口就不会释放,会不停的泄露内存
        dia2->show();//只是闪一下
        dia2->resize(200,200);
        qDebug()<<"dialog finished";


    });

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-dgpBnQuZ-1617466776765)(image-20201224000248780.png)]

//这个如果不释放主窗口就不会释放,会不停的泄露内存需要删除时候释放

   dia2->setAttribute(Qt::WA_DeleteOnClose);//55号属性

3.3标准对话框(重点)

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-yTHLdDPm-1617466776766)(image-20201224151059674.png)]

  //标准对话框
  // QMessageBox::critical(this,"critical","error404");
  //参数一:父亲窗口,参数二:标题,参数三:提示内容 参数四 按键类型 参数五:默认关联回车按钮
  QMessageBox::question(this,"请问要保存吗","该操作不可逆转",QMessageBox::Save |QMessageBox::Cancel,QMessageBox::Cancel );


//按下save保存
  if(QMessageBox::Save==QMessageBox::question(this,"请问要保存吗","该操作不可逆转",QMessageBox::Save |QMessageBox::Cancel,QMessageBox::Cancel ))
        { 
        
            qDebug()<<"save";
        }
        else { 
        
            qDebug()<<"cancel";
        }


 //颜色对话框
        QColorDialog::getColor(QColor(255,0,0));

文件对话框

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-YPLEtmEO-1617466776767)(image-20201224153951175.png)]

字体对话框

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-Jdc7heUe-1617466776768)(image-20201224154253938.png)]

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-b1HNgr3K-1617466776769)(image-20201224154424246.png)]

图形化界面:弹簧,widget的栅栏布局,widget要选垂直策略 fixed

3.4 Toolbar实现早期qq的聊天好友

设置按钮默认选中

    ui->sexbtnman->setChecked(true);

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-Z3qCrtpX-1617466776770)(image-20201224235043761.png)]

checkbox默认值

半选状态(tristate)

3.4QListWidget

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-XEgwb3rS-1617466776771)(image-20201225171203913.png)]

字符串方法

QStringList string;
string<<"aaa"<<"ksk";
ui->list->addItems(string);

3.4QTreeWidget

    ui->tree->setHeaderLabels(QStringList()<<"ghost"<<"ability");

    //父节点
    QTreeWidgetItem *zy=new QTreeWidgetItem(QStringList()<<"张雅");
    QTreeWidgetItem *zw=new QTreeWidgetItem(QStringList()<<"张雅");
    QTreeWidgetItem *zi=new QTreeWidgetItem(QStringList()<<"张雅");
    QTreeWidgetItem *zo=new QTreeWidgetItem(QStringList()<<"张雅");

    //加入treewidget
    ui->tree->addTopLevelItem(zy);
    ui->tree->addTopLevelItem(zi);
    ui->tree->addTopLevelItem(zw);
    ui->tree->addTopLevelItem(zo);

    //子节点的加入
    QTreeWidgetItem *ch=new QTreeWidgetItem(QStringList()<<"张雅");
    zy->addChild(ch);

3.5Qtablewidget

    //表单窗体
    ui->table->setColumnCount(3);
    ui->table->setRowCount(3);
    ui->table->setHorizontalHeaderLabels(QStringList()<<"ghost"<<"sex"<<"age");

    QStringList ghost;
    ghost<<"zy"<<"xy"<<"xx";
    QStringList sex;
    sex<<"xx"<<"xy"<<"xx";
    QStringList age;
    age<<"zy"<<"xy"<<"xx";



    for (int i=0;i<3;i++) { 
        
        for (int j=0;j<3;j++)
        { 
        
            if(j==0)
            ui->table->setItem(i,j,new QTableWidgetItem(ghost[i]));
            else if(j==1)
             ui->table->setItem(i,j,new QTableWidgetItem(sex[i]));
            else
            ui->table->setItem(i,j,new QTableWidgetItem(age[i]));
        }
    }

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-zZbfm0M0-1617466776772)(image-20201225182435210.png)]

3.6.。jpg和gif添加

  //textlabal,jpg,添加
    ui->pic->setPixmap(QPixmap(":/QTimage/tank.jpg"));
    QMovie *mo=new QMovie(":/QTimage/sisi.gif");
    //gif添加
    ui->gif->setMovie(mo);
    mo->start();

3.7自定义组件

设计师界面加好,然后主界面添加那个类然后提升为那个类

自己写函数实现功能

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-bHSHdsKQ-1617466776773)(image-20201226004745735.png)]

qt的占位符号

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-LW5aycf0-1617466776773)(Lily_Screenshot_1608916724.png)]

还有个global是基于屏幕的x,y

左右键和滚轮的自定义函数

还有buttons的组合键位操作,,,不重要,用位操作实现

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-pxR5Tj9v-1617466776774)(image-20201226012422798.png)]

#include


void myLabel::enterEvent( QEvent *event)
{ 
        
    qDebug()<<"enter";
}
void myLabel::leaveEvent( QEvent *)
{ 
        
    qDebug()<<"leave";
}
void myLabel::mouseMoveEvent( QMouseEvent *event)
{ 
        
    QString str=QString("move to x :%1 y : %2 Global x: %3 y:%4").arg(event->x()).arg(event->y()).arg(event->globalX()).arg(event->globalY());

    qDebug()<<str;
}

//设置鼠标追踪
setMouseTracking(true);

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-xHavrNFb-1617466776775)(image-20201226014355595.png)]

3.8TIMEevent

方法一:重写一个timerevent,然后在函数里面调用一下

void Widget::timerEvent(QTimerEvent *)
{ 
        
    static int num=1;
    ui->lablel2->setText(QString::number(num++));
}

    if (ev->timerId()==id1){ 
        
        static int num=1;
        ui->lablel2->setText(QString::number元器件数据手册IC替代型号,打造电子元器件IC百科大全!
          

相关文章