【找方法/信号,会正确传参/新建/初始化对象】

  • 【&】 用匿名对象传参
  • 【*】用new返回指针传参
  • 触发动作找信号,信号带参数,lamba保持参数一致
  • 找到所在类的方法/信号,没有就往上找

容器布局

qt 容器 线程安全_List


动起来

  • 【找控件的信号】
  • 【看函数的返回值】
connect(ui->pushButton,&QPushButton::clicked,[=](){
        //获取用户户名
       QString user= ui->lineEdit->text();
       QString pwd=ui->lineEditPwd->text();
       qDebug()<<user<<","<<pwd<<endl;
    });

组容器【Group Box】

设置默认值

qt 容器 线程安全_c++_02

//设置单选框
    ui->radioButtonNan->setChecked(true);

    connect(ui->radioButtonNan,&QRadioButton::clicked,
            [=](){
        qDebug()<<"选中了男"<<endl;
    });

列表控件【QListWidget】

  • QStringList 字符串初始化"<<"操作符重载
  • void QListWidget::addItem(QListWidgetItem * item)初始化参数
  • QListWidgetItem*Item=new QListWidgetItem(“静夜思”);初始化QListWidgetItem,构造函数
  • 触发动作,找信号和槽,保持参数一致
QListWidgetItem*Item=new QListWidgetItem("静夜思");
    ui->listWidget->addItem(Item);
    //添加:静夜思后四句
    QStringList list;//链表容器,存放字符串【QStringList重载运算符】
   list<<"窗前明月光"<<"举头望明月"<<"低头思故选个";
    ui->listWidget->addItems(list);
    //【触发动作,找信号和槽】【信号有参数】【lamba保持一致】
    connect(ui->listWidget,&QListWidget::itemClicked,[](QListWidgetItem*item){
       qDebug()<<item->text()<<endl;
    });

树控件【QTreeWidget】

  • 直接在ui上编辑,程序运行后不能更改
  • 写代码完成
    1.设置树控件头信息
    2.添加顶层控件
    3.添加子控件
    4.动起来
//设置树控件头信息
    QStringList list;
    list<<"英雄"<<"英雄介绍";
    ui->treeWidget->setHeaderLabels(list);//【参数是引用】
    //添加顶层控件
    //【匿名对象传参】
    QTreeWidgetItem*item1=new QTreeWidgetItem(QStringList()<<"德玛");
    ui->treeWidget->addTopLevelItem(item1);
    item1->addChild(new QTreeWidgetItem(QStringList()<<"上单"<<"坦克,功高防厚"));

    QTreeWidgetItem*item2=new QTreeWidgetItem(QStringList()<<"盲僧");
    ui->treeWidget->addTopLevelItem(item2);
     item2->addChild(new QTreeWidgetItem(QStringList()<<"上单"<<"坦克,功高防厚"));

    QTreeWidgetItem*item3=new QTreeWidgetItem(QStringList()<<"提莫");
    ui->treeWidget->addTopLevelItem(item3);
     item3->addChild(new QTreeWidgetItem(QStringList()<<"上单"<<"法师,玩到"));
    //添加子控件,【QTreeWidgetItem的函数,不是treeWidget的函数】
     //动起来【了解信号】
     connect(ui->treeWidget,&QTreeWidget::itemClicked,[](QTreeWidgetItem*item,int column){
         qDebug()<<item->text(column)<<endl;

表格控件【QTableWidget】

  • QStringList()<<“英雄”<<“性别”<<“年龄”【字符串容器,用<<重载】
  • ui->tableWidget->setItem(0,0,new QTableWidgetItem(QString(“张飞”))):传指针,用new实例化一个对象,构造函数初始化此对象
  • QStringList name【字符串容器】
  • name[i]【字符串】
  • 看信号,信号传的参数决定了功能,关键是找谁的信号
#include "mainwindow.h"
#include "ui_mainwindow.h"
#include<QTableWidget>
#include<QDebug>
MainWindow::MainWindow(QWidget *parent) :
    QMainWindow(parent),
    ui(new Ui::MainWindow)
{
    ui->setupUi(this);
    //设置行数列数
    ui->tableWidget->setColumnCount(3);
    ui->tableWidget->setRowCount(5);
    //设置表头信息 水平 垂直
    ui->tableWidget->setHorizontalHeaderLabels(QStringList()<<"英雄"<<"性别"<<"年龄");

   // ui->tableWidget->setVerticalHeaderLabels();
    //向表中添加控件
    ui->tableWidget->setItem(0,0,new QTableWidgetItem(QString("张飞")));
    QStringList name;
    QStringList sex;
    name<<"guan"<<"zhang"<<"liu"<<"zhao"<<"于";
    sex<<"nan"<<"nv"<<"nan"<<"nan"<<"mam";
    for(int i=0;i<5;i++)
    {
        ui->tableWidget->setItem(i,0,new QTableWidgetItem(name[i]));//这不是匿名对象了,这咋不是呢
        ui->tableWidget->setItem(i,1, new QTableWidgetItem(sex[i]));
        ui->tableWidget->setItem(i,2,new QTableWidgetItem(QString::number(i+20)));//【静态方法】数字转字符
    }
    //动起来【看信号】【信号传的参数决定了功能】
    connect(ui->tableWidget,&QTableWidget::itemClicked,
            [](QTableWidgetItem*item){
        qDebug()<<item->text()<<endl;
    });
    connect(ui->tableWidget,&QTableWidget::cellClicked,[](int row,int col){
        qDebug()<<"row"<<row<<"col"<<col<<endl;
    });

下拉列表框【QComboBox】

  • 信号重载:返回值 (指针类型)(参数)=&函数
  • 槽函数可以当普通函数使用
  • 槽函数可以使用信号传递的参数,也可以使用别的函数
//添加选项
    QStringList list;
    list<<"bao"<<"bne"<<"hah"<<"whu";
    ui->comboBox->addItems(list);
    //设置默认选项【槽函数可以当普通函数使用】
    ui->comboBox->setCurrentIndex(2);
    //动起来【找信号】【信号重载】【用函数指针匹配,有形参,具体地匹配了地址】
    void(QComboBox::*p)(int)=&QComboBox::currentIndexChanged;
    connect(ui->comboBox,p,[=](int index){
       qDebug()<<index<<endl;//利用信号给的参数
       qDebug()<<ui->comboBox->currentText()<<endl;//【直接调用他的函数】
    });

qt 容器 线程安全_控件_03

QLabel控件的使用

  • 加载路径格式
pix.load(":/myheart.png")

1.创建QPixmap对象pix,并用load加载
2.直接匿名构造QPixmap

QPixmap pix;
      pix.load(":/myheart.png");//【路径格式】
    ui->label_2->setPixmap(pix);//不是传构造函数,而是公共函数【引用】
    ui->label_3->setPixmap(QPixmap(":/myheart.png"));//【其实两种都行】

3.参数是指针,所以new一个新对象

QMovie*move=new QMovie(":/mario.gif");
    ui->label_4->setMovie(move);//【指针】

动画的播放,具体实现就需要了解过才知道要用start

ui->label->setText("hehhe");//【ui是hello代码是hehhe】

      qDebug()<<ui->label->text();
      //设置图片
      QPixmap pix;
      pix.load(":/myheart.png");//【路径格式】
    ui->label_2->setPixmap(pix);//不是传构造函数,而是公共函数【引用】
    ui->label_3->setPixmap(QPixmap(":/myheart.png"));//【其实两种都行】
      //设置动画
    QMovie*move=new QMovie(":/mario.gif");
    ui->label_4->setMovie(move);//【指针】
   // ui->label_4->setMovie(new QMovie(":/mario.gif"))
    move->setScaledSize(QSize(400,300));//【指针】
    connect(ui->pushButton,&QPushButton::clicked,[=](){
        move->start();//设置播放才能动
    });
    connect(ui->pushButton_2,&QPushButton::clicked,[=](){
       move->stop();
    });
}

qt 容器 线程安全_c++_04