Qt学习记录(C++)——Day 2

目录

一、作业

要求:

实现:

1.创建新的窗口类

2. 主窗口中实现

二、 窗口菜单设计

效果展示图 

 三、图片资源的导入

步骤:

举例:

四、 对话框

1.模拟对话框

2. 非模态对话框

3.错误对话框

4.信息对话框

5.提问对话框

 6.警告对话框

7. 其他标准对话框

7.1颜色对话框(获取颜色RGB值)

7.2文件对话框(过滤)

7.3 字体对话框

五、创建简单登录界面 

 六、控件

效果展示图

源码:

推荐看视频(两个):

七、树控件(TreeWidget)

效果展示图

具体代码:

源码:

 八、表格控件(TableWidget)

效果展示图

具体代码

 源码:

九、其他常用控件

效果展示图

具体代码:

 源码:

视频:


一、作业

要求:

设计一个窗口,窗口内有一名为open的按钮。点击open按钮,重新生成一个新窗口,并且open按钮名变为close,此时再点击按钮新窗口关闭,原先窗口保持不变。

实现:

1.创建新的窗口类

my_liuwindow.h

#ifndef MY_LIUWINDOW_H
#define MY_LIUWINDOW_H
#include <QMainWindow>
class My_liuWindow: public QMainWindow
{
    Q_OBJECT;
public:
    My_liuWindow(QWidget *parent = nullptr);
    ~My_liuWindow();
};

#endif // MY_LIUWINDOW_H

my_liuwindow.cpp

#include "my_liuwindow.h"
#include<QPushButton>
My_liuWindow::My_liuWindow(QWidget *parent):QMainWindow(parent)
{
    setWindowTitle("My Custom Window");
    this->resize(600,600);
    QPushButton *btn = new QPushButton();
    btn->resize(100,50);

    btn->setParent(this);//设置按钮的父部件为当前窗口部件
    btn->show();//show以顶层方式弹出窗口控件
    btn->setText("关闭");
}
My_liuWindow::~My_liuWindow()
{

}

2. 主窗口中实现

#include "mainwindow.h"
#include "ui_mainwindow.h"
#include "my_liuwindow.h"
MainWindow::MainWindow(QWidget *parent)
    : QMainWindow(parent)
    , ui(new Ui::MainWindow)
{
    ui->setupUi(this);

    this->resize(600,600);//设置主窗口大小
    QPushButton *btn = new QPushButton();//创建新按钮
    btn->resize(100,50);//设置按钮大小
    btn->setParent(this);//设置按钮的父部件为当前窗口部件
    btn->show();//show以顶层方式弹出窗口控件
    btn->setText("Open");//按钮命名
    connect(btn,&QPushButton::clicked,this,&MainWindow::Openliuwindow);
    //做信号和槽的连接
}

void MainWindow:: Openliuwindow()
{
    My_liuWindow *SecondWindow = new My_liuWindow(this);//创建新窗口指针
    SecondWindow->move(100,100);//移动新窗口显示位置,避免遮挡旧窗口
    SecondWindow->show();//显示新窗口
    QPushButton *btn = qobject_cast<QPushButton *>(sender());
    //用于在槽函数中处理多个按钮或其他类型的信号源,
    //以便能够区分是哪一个按钮或对象触发了槽函数。
    btn->setText("close");//改名
    disconnect(btn,&QPushButton::clicked,this,&MainWindow::Openliuwindow);
    //断开原有的连接
    connect(btn,&QPushButton::clicked,this,[=](){
    //创立新连接
        SecondWindow->close();
    });
}

源码:

https://gitee.com/liu-wei-hao123/green_C/tree/master/03MyWindow

二、 窗口菜单设计

#include "mainwindow.h"
#include<QMenuBar>
#include<QToolBar>
#include<QPushButton>
#include<QStatusBar>
#include <QLabel>
#include <QDockWidget>
#include <QTextEdit>
MainWindow::MainWindow(QWidget *parent)
    : QMainWindow(parent)
{
    resize(600,400);

    //菜单栏最多只能有一个
    //菜单创建
    QMenuBar *bar = menuBar();
    //将菜单栏放入窗口中
    setMenuBar(bar);

    //创建菜单
    QMenu *fileMenu = bar->addMenu("文件");
    QMenu *editMenu = bar->addMenu("编辑");

    //创建菜单项目
    QAction * newAction = fileMenu->addAction("新建");
    //添加分割线
    fileMenu->addSeparator();
    QAction * openAction = fileMenu->addAction("打开");

    //工具栏可以有多个
    QToolBar * toolBar = new QToolBar(this);
    addToolBar(Qt::LeftToolBarArea,toolBar);

    //后期设置 只允许 左右停靠
    toolBar->setAllowedAreas(Qt::LeftToolBarArea|Qt::RightToolBarArea);
    //设置浮动
    toolBar->setFloatable(false);
    //设置移动(总开关)
    toolBar->setMovable(true);
    //工具栏中可以设置内容
    toolBar->addAction(newAction);
    //添加分割线
    toolBar->addSeparator();
    toolBar->addAction(openAction);
    //工具栏中添加控件
    QPushButton * btn = new QPushButton("a",this);
    toolBar->addWidget(btn);

    //状态栏最多有一个
    QStatusBar * stBar = statusBar();
    //设置到窗口中
    setStatusBar(stBar);
    //放标签控件
    QLabel * label = new QLabel("提示信息",this);
    stBar->addWidget(label);

    QLabel * label2 = new QLabel("右侧提示信息",this);
    stBar->addPermanentWidget(label2);

    //铆接部件 (浮动窗口) 可以有多个
    QDockWidget * dockWidget = new QDockWidget("浮动",this);
    addDockWidget(Qt::BottomDockWidgetArea,dockWidget);
    //设置后期停靠区域,只允许上下
    dockWidget->setAllowedAreas( Qt::TopDockWidgetArea | Qt::BottomDockWidgetArea );

    //设置中心部件 只能一个
    QTextEdit * edit = new QTextEdit(this);
    setCentralWidget(edit);
}

MainWindow::~MainWindow()
{
}

效果展示图 

源码:

https://gitee.com/liu-wei-hao123/green_C/tree/master/04MainWindow

 三、图片资源的导入

步骤:

1.将存放图片的文件夹复制到项目文件夹中

2.右击项目,新建文件,选择Qt->Qt Resource File,命名。

3.新建成功,显示该页面

4.点击Add Prefix,添加文件前缀名

5.点击Add Files,找到刚才放入项目中的图片文件夹,选中全部图片加入即可。

举例:

#include "mainwindow.h"
#include "ui_mainwindow.h"

MainWindow::MainWindow(QWidget *parent)
    : QMainWindow(parent)
    , ui(new Ui::MainWindow)
{
    ui->setupUi(this);
    //ui->actionnew->setIcon(QIcon("D:/word/功课/Qt学习/anniu/1.png"));

    //添加Qt资源  “ : + 前缀名 + 文件名 ”
    ui->actionnew->setIcon(QIcon(":/new/anniu/1.png"));
    ui->actionopen->setIcon(QIcon(":/new/anniu/2.png"));
}

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

很明显,在UI界面创建的新建和打开以及被图片替换掉了。 

源码:

https://gitee.com/liu-wei-hao123/green_C/tree/master/05_QtSource

四、 对话框

1.模拟对话框

(不可以对其他窗口进行操作)

#include "mainwindow.h"
#include "ui_mainwindow.h"
#include <QDialog>
#include <QDebug>
#include <QMessageBox>
#include <QColorDialog>
#include <QFileDialog>
#include <QFontDialog>
MainWindow::MainWindow(QWidget *parent)
    : QMainWindow(parent)
    , ui(new Ui::MainWindow)
{
    ui->setupUi(this);

    //点击新建按钮 弹出一个对话框
       connect(ui->actionnew,&QAction::triggered,[=](){
           //对话框 分类
           //模态对话框 (不可以对其他窗口进行操作)
           //模态创建 阻塞
           QDialog dlg(this);
           dlg.resize(200,100);
           dlg.exec();

           qDebug() << "模态对话框弹出了";
               });
}

2. 非模态对话框

(可以对其他窗口进行操作)

             //非模态对话框
             QDialog * dlg2 = new QDialog (this);
             dlg2->resize(200,100);
             dlg2->show();
             dlg2->setAttribute(Qt::WA_DeleteOnClose); //55号 属性
             qDebug() << "非模态对话框弹出了";

3.错误对话框

           QMessageBox::critical(this,"critical","错误");

4.信息对话框

           QMessageBox::information(this,"info","信息");

 

5.提问对话框

           //提问对话框
           //参数1  父亲  参数2  标题  参数3  提示内容  参数4 按键类型  参数5 默认关联回车按键
           if (QMessageBox::Save  ==  QMessageBox::question(this,"ques","提问",QMessageBox::Save|QMessageBox::Cancel,QMessageBox::Cancel))
           {
               qDebug() << "选择的是保存";

           }
           else
           {
               qDebug() << "选择的是取消";
           }

 6.警告对话框

           QMessageBox::warning(this,"warning","警告");

7. 其他标准对话框

7.1颜色对话框(获取颜色RGB值)

           //颜色对话框
           QColor color =  QColorDialog::getColor(QColor(255,0,0));
           qDebug() << "r = " << color.red() 
                    << " g = " << color.green() 
                    << " b  = " << color.blue() ;

7.2文件对话框(过滤)

           //文件对话框  参数 1  父亲  参数2  标题   
                        参数3  默认打开路径  参数4  过滤文件格式
           //返回值是 选取的路径
            QString str = QFileDialog::getOpenFileName(this,"打开文 
            件","D:\\下载\\aaa","(*.txt)");
            qDebug() << str;

 

7.3 字体对话框

            //字体对话框
           bool flag;
           QFont font = QFontDialog::getFont(&flag,QFont("华文彩云",36));
           qDebug() << "字体:" << font.family().toUtf8().data()
                    //.ToUtf8() 转为 QByteArray,.data() 转为 char*
                    << " 字号 "<< font.pointSize()
                    << " 是否加粗"<< font.bold()
                    << " 是否倾斜"<<font.italic();

 

源码:

https://gitee.com/liu-wei-hao123/green_C/tree/master/06_QDialog

五、创建简单登录界面 

源码:

https://gitee.com/liu-wei-hao123/green_C/tree/master/07_layout

推荐看视频:

登录界面icon-default.png?t=N7T8https://www.bilibili.com/video/BV1g4411H78N?p=23&vd_source=0c3415ec4f238d01f925a8521c722882

 六、控件

效果展示图

源码:

https://gitee.com/liu-wei-hao123/green_C/tree/master/08_Qt_control

推荐看视频(两个):

https://www.bilibili.com/video/BV1g4411H78N?p=24&vd_source=0c3415ec4f238d01f925a8521c722882

https://www.bilibili.com/video/BV1g4411H78N?p=25&vd_source=0c3415ec4f238d01f925a8521c722882

七、树控件(TreeWidget)

效果展示图

具体代码:

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

Widget::Widget(QWidget *parent)
    : QWidget(parent)
    , ui(new Ui::Widget)
{
    ui->setupUi(this);

    //treeWidget树控件

    //设置水平头
   ui->treeWidget->setHeaderLabels(QStringList()<<"英雄"<<"英雄介绍");

   QTreeWidgetItem * liItem = new QTreeWidgetItem(QStringList()<<"力量");
   QTreeWidgetItem * liItem1 = new QTreeWidgetItem(QStringList()<<"敏捷");
   QTreeWidgetItem * liItem2 = new QTreeWidgetItem(QStringList()<<"智力");
   //加载顶层节点
   ui->treeWidget->addTopLevelItem(liItem);
   ui->treeWidget->addTopLevelItem(liItem1);
   ui->treeWidget->addTopLevelItem(liItem2);
     //追加子节点
     QStringList heroL1;
     heroL1<<"钢被🐖"<<"前排坦克,能在吸收伤害的同时造成可观的范围输出";
     QTreeWidgetItem * l1 = new QTreeWidgetItem(heroL1);
     liItem->addChild(l1);
     QStringList heroL2;
     heroL2<<"斯比克"<<"前排坦克,能在吸收伤害的同时反弹所受伤害的50%";
     QTreeWidgetItem * l2 = new QTreeWidgetItem(heroL2);
     liItem->addChild(l2);

     QStringList heroM1;
     heroM1<<"小丑🤡"<<"游走刺客,拥有伤害高可投掷的小丑炸弹和珍贵的稻草人保命技能";
     QTreeWidgetItem * M1 = new QTreeWidgetItem(heroM1);
     liItem1->addChild(M1);

     QStringList heroM2;
     heroM2<<"小丑皇🎃"<<"隐身刺客,拥有伤害高可投掷的小丑夺命连环手里剑和多重影分身";
     QTreeWidgetItem * M2 = new QTreeWidgetItem(heroM2);
     liItem1->addChild(M2);

     QStringList heroZ1;
     heroZ1<<"猪角量"<<"分析法师,能快速对当前战场情况进行分析并做出判断";
     QTreeWidgetItem * Z1 = new QTreeWidgetItem(heroZ1);
     liItem2->addChild(Z1);

     QStringList heroZ2;
     heroZ2<<"骤雨"<<"爆发法师,短时间内对当前区域造成大量冰锥穿刺";
     QTreeWidgetItem * Z2 = new QTreeWidgetItem(heroZ2);
     liItem2->addChild(Z2);

}

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

源码:

 https://gitee.com/liu-wei-hao123/green_C/tree/master/09_TreeWidget

 八、表格控件(TableWidget)

效果展示图

具体代码

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

Widget::Widget(QWidget *parent)
    : QWidget(parent)
    , ui(new Ui::Widget)
{
    ui->setupUi(this);

    //TableWidget控件
    //设置列数
    ui->tableWidget->setColumnCount(3);

        //设置水平表头
        ui->tableWidget->setHorizontalHeaderLabels(QStringList()
                                                   <<"姓名"
                                                   << "性别"
                                                   << "年龄");

        //设置行数
        ui->tableWidget->setRowCount(5);

        //设置正文
        //ui->tableWidget->setItem(0,0, new QTableWidgetItem("亚瑟"));
        QStringList nameList;
        nameList<< "亚瑟"<< "赵云"<< "张飞"<< "关羽" << "花木兰";

        QList<QString> sexList;
        sexList << "男"<< "男"<< "男"<< "男"<< "女";

        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(sexList.at(i)));
              //int 转 QString
              ui->tableWidget->setItem(i,col++, new QTableWidgetItem( QString::number(i+18)));
          }

}

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

 源码:

https://gitee.com/liu-wei-hao123/green_C/tree/master/

九、其他常用控件

效果展示图

具体代码:

#include "widget.h"
#include "ui_widget.h"
#include<QMovie>
#include<QImage>
#include<QPixmap>
Widget::Widget(QWidget *parent)
    : QWidget(parent)
    , ui(new Ui::Widget)
{
    ui->setupUi(this);
    //栈控件使用
        //设置默认定位 scrollArea
        ui->stackedWidget->setCurrentIndex(0);

        //scrollArea按钮
        connect(ui->btn_scrollArea,&QPushButton::clicked,[=](){
            ui->stackedWidget->setCurrentIndex(0);
        });

        //toolBox按钮
        connect(ui->btn_ToolBox,&QPushButton::clicked,[=](){
            ui->stackedWidget->setCurrentIndex(1);
        });

        //TabWidget按钮
        connect(ui->btn_TabWidget,&QPushButton::clicked,[=](){
            ui->stackedWidget->setCurrentIndex(2);
        });

        //下拉框
        ui->comboBox->addItem("奔驰");
        ui->comboBox->addItem("宝马");
        ui->comboBox->addItem("拖拉机");

        //点击按钮 选中拖拉机选项
        connect(ui->btn_select,&QPushButton::clicked,[=](){
            //ui->comboBox->setCurrentIndex(2);
            ui->comboBox->setCurrentText("拖拉机");
        });

        ui->lbl_Image->setPixmap(QPixmap(":/anniu/1.png"));

        //利用QLabel显示 gif动态图片
        QMovie * movie = new QMovie(":/anniu/5.gif");
        ui->lbl_movie->setMovie(movie);
        //播放动图
        movie->start();
}

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

 源码:

https://gitee.com/liu-wei-hao123/green_C/tree/master/11_OthorControl

视频:

https://www.bilibili.com/video/BV1g4411H78N?p=28&vd_source=0c3415ec4f238d01f925a8521c722882

  第二天的学习记录分享完毕,关注我,带你了解更多的编程知识。

看到这里,不妨点个攒,关注一下吧!

最后,谢谢你的观看!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值