[Qt学习]day2:Mainwindow对话框等操作

1.基本使用:

今天创建一个Mainwindow,
然后在mainwindow.cpp中写如下:

菜单栏和工具栏

#include "mainwindow.h"
#include<QMenuBar>
#include<QMenu>
#include<QToolBar>
#include<QAction>
#include<QPushButton>
MainWindow::MainWindow(QWidget *parent)
    : QMainWindow(parent)
{
    //重置窗口大小
    resize(600,400);

    //菜单栏最多只能有一个
    //菜单栏创建    已经放在对象树了,不用传对象树
    QMenuBar *bar=menuBar();
    //将菜单栏放到窗口
    setMenuBar(bar);

    //创建菜单
    QMenu * fileMenu = bar->addMenu("文件");
    QMenu * editMenu = bar->addMenu("编辑");
    //创建菜单项
    QAction * neww = fileMenu->addAction("新建");
    //添加分隔线
    fileMenu->addSeparator();
    QAction * open = fileMenu->addAction("打开");
    QAction * langu = editMenu->addAction("设置语言");

    //工具栏可以有多个   放在对象树,用add...
    QToolBar * toolbar = new QToolBar(this);
    addToolBar(Qt::LeftToolBarArea,toolbar);//把工具栏放在左边

    //后期设置允许左右停靠,好像不管用了,影响不大!
    toolbar->setAllowedAreas(Qt::LeftToolBarArea|Qt::RightToolBarArea);
    //设置不能浮动,这感觉都不重要
    toolbar->setFloatable(false);
    //设置移动(总开关)
    toolbar->setMovable(false);

    //工具栏中设置内容   和之前菜单实现同样的功能,里面传入的是QAction
    toolbar->addAction(neww);
    //添加分割线
    toolbar->addSeparator();
    toolbar->addAction(open);
    toolbar->addSeparator();
    toolbar->addAction(langu);

    //工具栏中添加kong控件
    QPushButton *btn = new QPushButton("控件",this);
    toolbar->addWidget(btn);
}

MainWindow::~MainWindow()
{

}

实现如下:
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
2.状态栏,铆接部件,核心部件
在mainwindow.cpp中t添加写入如下:

    //状态栏,最多一个
    QStatusBar * stBar = statusBar();
    //设置到窗口中
    setStatusBar(stBar);
    //放标签控件
    QLabel * label1=new QLabel("提示信息",this);
    stBar->addWidget(label1);
    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);
    //总结:可以有多个的是add ,只能一个的是set开头的。

运行如图:
在这里插入图片描述

3.资源文件添加

首先把图片存在同文件下,
然后新建Qt在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
就可以如下添加了!

    //使用添加Qt资源   ": + 前缀名 + 文件名 "
    ui->actionnew->setIcon(QIcon(":/imag/1.jpg"));
    ui->actionopen->setIcon(QIcon(":/imag/hi.png"));

如图:
在这里插入图片描述
或者直接绝对路径:[我试了不成功,按理可以的]

  ui->actionnew->setIcon(QIcon("C:\python38\newpro\bq1\icon"));

4 模态和非模态对话框

直接看代码和注释!

//对话框 分类


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

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

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

在这里插入图片描述
以上代码均写在 Mainwindow.cpp

5.消息对话框

示例:
把对点击事件的连接利用信号和槽实现,使用lambda表达式写槽函数
在这里插入图片描述
在这里插入图片描述

connect(ui->actionnew,&QAction::triggered,[=](){ //消息对话框
//    QMessageBox::critical(this,"critical","错误");

    //信息对话框
    QMessageBox::information(this,"info","信息");

    //提问对话框
     //参数1: 父亲  参数2:标题  参数3:提示内容  参数四:按键内容  参数5:默认关联回车按键
    QMessageBox::question(this,"ques","提问",QMessageBox::Save|QMessageBox::Cancel,QMessageBox::Cancel);
//    //使用方法:
    if(QMessageBox::Save==QMessageBox::question(this,"ques","提问",QMessageBox::Save|QMessageBox::Cancel,QMessageBox::Cancel))
    {
        qDebug()<<"选择的是保持";
    }
    else{
        qDebug()<<"选择的是取消";
    }
    //警告对话框
     QMessageBox::warning(this,"warning","警告");
    });

6 其他标准对话框

在这里插入图片描述
在这里插入图片描述
代码如下:

    //其他标准对话框
    //颜色对话框
    QColor color = QColorDialog::getColor(QColor(255,0,0));
    qDebug()<<"r="<<color.red()<<"g:"<<color.green()<<"b:"<<color.blue();
    //文件对话框,
    //参数1  父亲  ,参数2:标题,  参数3:默认打开路径  参数4:过滤文件格式
    //返回值是 选取的路径
    QString str=QFileDialog::getOpenFileName(this,"打开文件","C:\\python38\\newpro\\bq1");
    qDebug()<<str;//但是返回是空啊,不过问题不大

    //字体对话框
    bool flag;
    QFont font QFontDialog::getFont(&flag,QFont("华文彩云",36))qDebug()<<font.family().toUtf8().data()<<font.pointSize()<<font.bold()<<font.italic();

    });

UI–登录框布局

今天学习登录框布局,拖拽代码真的好舒服!!!
效果图:

在这里插入图片描述
更改密码不可见:
在这里插入图片描述
在这里插入图片描述
这些代码都可写,但是直接拖拽很舒服方便!@!!

UI–控件和QListWidget

在这里插入图片描述

#include "widget.h"
#include "ui_widget.h"
#include<QDebug>
Widget::Widget(QWidget *parent) :
    QWidget(parent),
    ui(new Ui::Widget)
{
    ui->setupUi(this);
    //设置女默认选中,设置已婚默认选中
    ui->wombtm->setChecked(true);
    ui->readyhun->setChecked(true);

    //选中男后,打印信息
    connect(ui->manbtm,&QRadioButton::clicked,[=](){
        qDebug()<<"选中了男";
    });
    //多选按钮,2是选中,0是没选中。1是半选中。
    connect(ui->cBox,&QCheckBox::stateChanged,[=](int state){
        qDebug()<<state;
    });

//    //利用listWidget写诗
//    QListWidgetItem *item = new QListWidgetItem("床前明月光");
//    //将一行诗放在listwidget中
//    ui->listWidget->addItem(item);
//    item->setTextAlignment(Qt::AlignCenter);//设置水平居中

    //QStringList      QList<string>
    QStringList list;
    list<<"床前明月"<<"疑是地上"<<"举头望明"<<"低头思故";
    ui->listWidget->addItems(list);

}

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

Tree Widget(一个树形框)

在这里插入图片描述

程序如下:

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

MainWindow::MainWindow(QWidget *parent) :
    QMainWindow(parent),
    ui(new Ui::MainWindow)
{
    ui->setupUi(this);
    //treeWidget树控件的使用

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

    QTreeWidgetItem *liItem = new QTreeWidgetItem(QStringList()<<"力量");
    QTreeWidgetItem *minItem = new QTreeWidgetItem(QStringList()<<"敏捷");
    QTreeWidgetItem *zhiItem = new QTreeWidgetItem(QStringList()<<"智力");
    //加载顶层的节点
    ui->treeWidget->addTopLevelItem(liItem);
    ui->treeWidget->addTopLevelItem(minItem);
    ui->treeWidget->addTopLevelItem(zhiItem);
    //追加子节点
    QStringList heroL1;
    heroL1<<"李白"<<"千里不留行,十步杀一人";
    QTreeWidgetItem *l1=new QTreeWidgetItem(heroL1);
    liItem->addChild(l1);

    QStringList heroL2;
    heroL2<<"诸葛亮"<<"亮,有一技";
    QTreeWidgetItem *l2=new QTreeWidgetItem(heroL2);
    minItem->addChild(l2);

    QStringList heroL3;
    heroL3<<"刘备"<<"汉室可兴";
    QTreeWidgetItem *l3=new QTreeWidgetItem(heroL3);
    zhiItem->addChild(l3);

}

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

在这里插入图片描述

Table Widget(表格)

在这里插入图片描述

widget.cpp:

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

Widget::Widget(QWidget *parent) :
    QWidget(parent),
    ui(new Ui::Widget)
{
    ui->setupUi(this);
    //TabWidget控件
    //设置列数
    ui->tableWidget->setColumnCount(3);

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

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

    //设置正文
//    ui->tableWidget->setItem(0,0,new QTableWidgetItem("李白"));
    QStringList nameList;
    nameList<<"李白"<<"刘备"<<"赵云"<<"朱雀"<<"貂蝉";

    QList<QString> sex;
    sex<<"男"<<"男"<<"男"<<"女"<<"女";
    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(sex.at(i)));   //用at出错时抛出异常
        ui->tableWidget->setItem(i,col++,new QTableWidgetItem(QString::number(i+19)));
    };
}

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

其他常用控件

在这里插入图片描述
以下代码,设置stack widget

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

Widget::Widget(QWidget *parent) :
    QWidget(parent),
    ui(new Ui::Widget)
{
    ui->setupUi(this);
    //操作stack widget栈控件

    //设置默认定位:
    ui->stackedWidget->setCurrentIndex(0);
    connect(ui->btn_scrollarea,&QPushButton::clicked,[=](){
       ui->stackedWidget->setCurrentIndex(0);
    });
    connect(ui->btn_toobox,QPushButton::clicked,[=](){
       ui->stackedWidget->setCurrentIndex(2);
    });
    connect(ui->btn_wiget,QPushButton::clicked,[=](){
       ui->stackedWidget->setCurrentIndex(1);
    });
}

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

如下:
在这里插入图片描述

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值