Qt学习笔记

这篇博客详细介绍了Qt库在创建窗口、按钮、菜单栏、状态栏和布局方面的应用。通过实例展示了如何生成和定制QPushButton、自定义信号槽、使用QMenuBar、QToolBar和QStatusBar,并演示了常用控件如QDialog、QMessageBox、QColorDialog和QFileDialog的使用。此外,还涵盖了信号与槽的连接、断开以及lambda表达式的运用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

窗口 widget.cpp

#include "widget.h"
#include "ui_widget.h"
#include <qpushbutton>
#include <mypushbutton.h>
#include <QtDebug>
Widget::Widget(QWidget *parent)
    : QWidget(parent)
    , ui(new Ui::Widget)
{
    ui->setupUi(this);
    //按钮生成方法一
    QPushButton * btn1=new QPushButton;
    //Sets the parent of the widget to parent, and resets the window flags.
    //The widget is moved to position (0, 0) in its new parent.
    btn1->setParent(this);
    //This property holds the text shown on the button
    btn1->setText("Button");

    //按钮生成方法二
    QPushButton * btn2=new QPushButton("Second",this);//窗口大小由控件大小决定
    btn2->move(100,100);
    resize(600,400);


    //设置窗口标题
    setWindowTitle("firset windos");
    //固定窗口大小
    setFixedSize(600,400);

    //新按键
    MyPushButton *myBtn=new MyPushButton;
    myBtn->setText("close");
    myBtn->setParent(this);
    myBtn->move(200,200);

    //信号与处理(槽)
    connect(myBtn,&MyPushButton::clicked,this,&Widget::close);  //发送者是对象本身
    connect(myBtn,&QPushButton::clicked,this,&Widget::close);  //发送者是父类

    //自定义信号与槽,1.定义对象 2.创建链接 3.调用触发函数
    this->zt=new Teacher(this);  //创建老师对象
    this->st=new Student(this);
    void(Teacher::*teachersignal1)(void)=&Teacher::hungry;
    void(Student::*Studentslot1)(void)=&Student::treat;
    connect(zt,teachersignal1,st,Studentslot1);
    Singal_incur();

    //槽函数中发生重载
    void(Teacher::*teachersignal2)(QString)=&Teacher::hungry;
    void(Student::*Studentslot2)(QString)=&Student::treat;
    connect(zt,teachersignal2,st,Studentslot2);

    //用按钮触发信号
    QPushButton * btn3=new QPushButton("Class begin",this);//窗口大小由控件大小决定
    btn2->move(300,300);
    this->resize(600,400);
    connect(btn3,&QPushButton::clicked,this,&Widget::Singal_incur);

    //断开信号
    disconnect(zt,teachersignal2,st,Studentslot2);

    //信号可以连接多个槽函数,有ros发布消息的味道,信号和槽函数双向多映射
    //信号对应的槽函数必须类型一一对应
    //信号和槽函数的参数,应该前者大于后者

    //lamda表达式
    [=](){
      btn3->setText("aaaa");
    }();



}

void Widget::Singal_incur()   //信号发送
{
    //emit zt->hungry();
    emit zt->hungry("egg");
}

Widget::~Widget()
{
    delete ui;
    qDebug()<<"widget的析构调用";  //对象树从上之下构造,从下至上析构,但打印输出的结果却相反
}


菜单栏、状态栏 mainwindow.cpp

#include "mainwindow.h"
#include<QMenuBar>
#include<QToolBar>
#include<QDebug>
#include<QPushButton>
#include<QStatusBar>

MainWindow::MainWindow(QWidget *parent) : QMainWindow(parent)
{
    this->resize(600,400);
    //创建菜单栏,只能由一个
    QMenuBar *bar = menuBar();
    setMenuBar(bar);  //设置父对象
    //菜单栏内容
    QMenu *fileMenu= bar->addMenu("文件");
    //QMenu *editMenu= bar->addMenu("编辑");
    //子菜单
    QAction * newAction = fileMenu->addAction("新建");
    QAction * openAction = fileMenu->addAction("打开");
    //添加分割线
    fileMenu->addSeparator();
    fileMenu->addAction("close");

     //工具栏,默认在上面,可以有多个
    QToolBar *toolbar=new QToolBar(this);
    addToolBar(Qt::LeftToolBarArea,toolbar);

    //限制左右停靠
    toolbar->setAllowedAreas(Qt::LeftToolBarArea|Qt::RightToolBarArea);
    //限制浮动
    toolbar->setFloatable(false);
    toolbar->setMovable(false);

    toolbar->addAction(newAction);
    toolbar->addSeparator();
    toolbar->addAction(openAction);
    
    QPushButton * btn=new QPushButton("Delete",this);
    toolbar->addWidget(btn);
    
    //状态栏
    QStatusBar * stbar = statusBar();
    setStatusBar(stbar);
    
}

常用控件布局

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

    connect(ui->actionnew,&QAction::triggered,[=](){  //若【】中无等号则不能使用this
        //弹出对话框,分为模态对话框和非模态对话框
    QDialog dlg(this);
    dlg.exec();//模态对话框,断点
    dlg.resize(200,100);
    qDebug()<<"弹出模态对话框";
    });

    connect(ui->actionopen,&QAction::triggered,[=](){
        QDialog *dlg1=new QDialog (this);   //非模态不能直接show,会被释放,放堆上就行
        dlg1->resize(300,200);
        dlg1->show();
        dlg1->setAttribute(Qt::WA_DeleteOnClose);//55号,防止对象无限创建
    });

    connect(ui->actionmessage,&QAction::triggered,[=](){
        QMessageBox::critical(this,"Critial","warning");//错误对话框,非法提示,模态
    });

    connect(ui->actionInformation,&QAction::triggered,[=](){
        QMessageBox::information(this,"info","信息");//信息对话框,非法提示,模态
    });
    connect(ui->actionquestion,&QAction::triggered,[=](){
        if(QMessageBox::Save == QMessageBox::question(this,"que","提问",QMessageBox::Ok|QMessageBox::Save,QMessageBox::Save))
        {
            qDebug()<<"保存";
        }
        else
        {
            qDebug()<<"ok";
        }
       //提问对话框,非法提示,模态
    });
    connect(ui->actionwarning,&QAction::triggered,[=](){
        QMessageBox::warning(this,"warning","警告");//非法提示,模态
    });

    connect(ui->actioncolor,&QAction::triggered,[=](){//颜色对话框
       QColor color = QColorDialog::getColor(QColor(255,0,0));
       qDebug()<<"r="<<color.red();
    });

    connect(ui->actionfile,&QAction::triggered,[=](){//文件对话框
       QString str = QFileDialog::getOpenFileName(this,"桌面","C:\\Users\\10751\\Desktop","(*.txt)");
       //参数  :父亲,标题、默认打开路径、过滤文件格式
       qDebug()<<str;
    });

    connect(ui->pushButton_2,&QPushButton::clicked,this,&QWidget::close);

    //设置单选按钮默认
    ui->radioButton->setChecked(true);
    //获取信息
    connect(ui->radioButton,&QRadioButton::clicked,[=](){
        qDebug()<<"nv";
    });
    //多选按钮  2选中  0未选中
    connect(ui->checkBox,&QCheckBox::stateChanged,[=](int state){
        qDebug()<<state;
    });

    //
    QListWidgetItem * item=new QListWidgetItem("锄禾日当午");
    ui->listWidget->addItem(item);
    item->setTextAlignment(Qt::AlignHCenter);

    //利用容器实现list的内容
    QStringList list;
    list<<"锄禾日当午"<<"sdasdasd"<<"sdasdasfg";
    ui->listWidget->addItems(list);

    //TableWidget控件,设置列数、设置水平表头
    ui->tableWidget->setColumnCount(3);
    ui->tableWidget->setHorizontalHeaderLabels(QStringList()<<"Name"<<"sex"<<"age");
    //设置行数、设置表头
    ui->tableWidget->setRowCount(5);
    //添加数据
    QStringList name;
    name<<"A"<<"B"<<"C"<<"D";
    QList<QString> sex;
    sex<<"A"<<"B";
    ui->tableWidget->setItem(0,0,new QTableWidgetItem(name[0]));
//    for(int i=0;i<5;i++)
//    {
//        int j=0;
//        ui->tableWidget->setItem(i,j++,new QTableWidgetItem(name[i]));
//    }

    //栈控件
    ui->stackedWidget->setCurrentIndex(2);//设置默认初始页面
    connect(ui->pushButton_6,&QPushButton::clicked,[=](){
        ui->stackedWidget->setCurrentIndex(1);
    });
    connect(ui->pushButton_7,&QPushButton::clicked,[=](){
        ui->stackedWidget->setCurrentIndex(2);
    });
    connect(ui->pushButton_8,&QPushButton::clicked,[=](){
        ui->stackedWidget->setCurrentIndex(0);
    });

    //下拉框
    ui->comboBox->addItem("hh");
    ui->comboBox->addItem("h2");
    ui->comboBox->addItem("h3");

    connect(ui->pushButton_6,&QPushButton::clicked,[=](){
        ui->comboBox->setCurrentIndex(2);
        //ui->comboBox->setCurrentText("h3");
    });

}

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值