Qt探索篇:2

在这里我们只是对个别控件展开介绍,下面这一篇使用代码实现空空间的布置,在后面我们将先使用ui布局好空间,再用代码实现控件和代码的连接

 

//QT_7_26_01
MainWindow::MainWindow(QWidget *parent)
    : QMainWindow(parent)
{
    this->resize(600,400);
    //包含菜单栏,只能有一个
    QMenuBar * bar = menuBar();  //一般这里不接受返回值也可以创建成功只是之后要使用,这个东西来做一些操作必须借助其返回值,所以一般这里都是指定好返回值
    //将菜单栏放到窗口中
    this->setMenuBar(bar);//这里不写this也可以默认就在本窗口下
    //菜单栏没有东西则不显示
    QMenu *fileMenu = bar->addMenu("文件");
    QMenu *editMenu = bar->addMenu("编辑");
    //添加菜单项
    QAction * newAction1 = fileMenu->addAction("新建");
   //添加分割线,添加分割线要借助上一行的文件
    fileMenu->addSeparator();
    QAction * newAction2 = fileMenu->addAction("打开");
    QAction * newAction3 = fileMenu->addAction("属性");

    //添加工具栏,工具栏可以有多个
    QToolBar * toolBar = new QToolBar(this);//指定父亲
    addToolBar(Qt::LeftToolBarArea,toolBar);//Qt::LeftToolBarArea默认停靠范围,这个是靠左,其他的 可以通过查帮助文档晓得
    //只允许左右侧停靠
    toolBar->setAllowedAreas(Qt::LeftToolBarArea | Qt::RightToolBarArea);
    //设置不允许浮动,参数是布尔值,不让动就设置false
    toolBar->setFloatable(false);
    //设置移动(设置之后上面的设置都失效)
    toolBar->setMovable(false);
    //工具栏添加菜单项
    toolBar->addAction(newAction1);  //把新建添加到工具栏
    toolBar->addSeparator();//添加分割线
    toolBar->addAction(newAction2);  //把打开添加到工具栏

    //状态栏,只能有一个
    QStatusBar * stBar = statusBar();
    setStatusBar(stBar);//将状态栏放到当前窗口
    //
    QLabel * label1 = new QLabel("提示信息",this);
    stBar->addWidget(label1);//将提示信息放到状态栏位置
    QLabel * label2 = new QLabel("右侧提示信息",this);
    stBar->addPermanentWidget((label2));

    //铆接部件也叫浮动窗口
    QDockWidget * dock = new QDockWidget;
    //添加铆接部件到窗口中
    addDockWidget(Qt::BottomDockWidgetArea,dock);
    //api
    //设置停靠范围,默认是上下左右都可以停靠,设置完之后只有设置的位置可以停靠
    dock->setAllowedAreas(Qt::BottomDockWidgetArea | Qt::TopDockWidgetArea);


    //铆接部件会围着核心部件
    //文本编辑器,核心部件只能有一个
    QTextEdit *edit = new QTextEdit;
    setCentralWidget(edit);


}

效果展示

添加资源文件,使得有图片效果

//QT_7_26_02
MainWindow::MainWindow(QWidget *parent) :
    QMainWindow(parent),
    ui(new Ui::MainWindow)
{
    ui->setupUi(this);

    //通过ui寻找控件
    //ui->actionnew->setIcon(QIcon("C:/Users/董晨辉/Pictures/Saved Pictures/TIM图片20190704230405.jpg")); //添加图片
    //但是本地资源却不能够被共享,也就是路径下不一定有你所有的东西,所以要添加资源文件,到项目中
    //使用资源文件": + 前缀名+文件名"
    ui->actionnew->setIcon(QIcon(":/picture/untitled.png"));
    ui->actionOpen->setIcon(QIcon(":/picture/TIM图片20190704230405.jpg"));
}

步骤如下:

1.首先随便点击左侧窗口(如下),选择”在Explorer中打开“。

2.打开文件之后将你要添加的文件夹放入此目录,我们放入的是picture文件夹

3.左侧点击下图,选择“添加新文件”按钮。

4.选择Qt的Qt Resource From 点击确定,随便起个名字,然后

5.点击添加前缀,一般填/,完了之后,点击添加文件,将你加入的文件夹打开将你添加的照片打开即可,完了之后先编译一遍

6.右侧弹出,你加入的图片,然后再代码中根据图片名加入就可以

 

上面那段代码的效果如下所示:

已将图片插入。

 

下面这段代码因为按钮冲突,所以边写边注销,如需尝试请在QT打开

//QT_7_26_03
MainWindow::MainWindow(QWidget *parent) :
    QMainWindow(parent),
    ui(new Ui::MainWindow)
{
    resize(600,400);
    ui->setupUi(this);
    //点击新建菜单项弹出对话框
    connect(ui->actionNew,QAction::triggered,this,[=](){
        //对话框有两种对对话框
        //模态对话框,非模态对话框
        //QDialog dlg(this);
        //dlg.resize(300,200);
        //启动模态对话框
        //dlg.exec();//阻塞
        //qDebug()<<"垃圾你好";

        //非模态对话框
        //QDialog dlg2(this);
        //QDialog * dlg2 = new QDialog(this);
        //dlg2->resize(300,200);
        //dlg2->show();

        //为了防止内存泄漏,设置属性
        //dlg2->setAttribute(Qt::WA_DeleteOnClose);//在点击对话框的叉子的时候,就把创建的内存释放

        //上面都是我们自定义的对话框,实际上系统还为我们创建了好多多对话框
        //使标准的对话框,因为是静态成员变量可以直接使用类来访问,也可以通过对象来访问但是没有必要
        //QMessageBox::critical(this,"错误","critical");//这个是最简单的三个参数的模态对话框
        //QMessageBox::information(this,"信息","information");
        //询问对话框,第四个参数属于询问,有很多默认选项可以从帮助手册中去查找,我们这里选择的是询问 ,保存还是取消,关于第五个参数是一个默认的选项,如果没有第五个参数那么,第四个参数谁在前谁就是默认选项,有了第五个参数,第五个参数肯定得是第四个参数中的其中一个就变成了默认的参数
        //QMessageBox::question(this,"问题","question",QMessageBox::Save | QMessageBox::Cancel,QMessageBox::Cancel);
        //参数1父亲,2标题,3提示内容4按键内省5.关联回车
//        if(QMessageBox::Save == QMessageBox::question(this,"问题","question",QMessageBox::Save | QMessageBox::Cancel,QMessageBox::Cancel))
//        {
//            qDebug()<<"保存";
//        }
//        else
//        {
//            qDebug()<<"取消";
//        }
        //QMessageBox::warning(this,"警告","waring");

        //QColor color =  QColorDialog::getColor(QColor(255,0,0));
        //可以通过返回值获取用户所选择的红,绿,蓝,的分量
        //qDebug()<<color.red()<<color.green()<<color.blue();

        //文件对话框QFileDialog,
        //QString path = QFileDialog::getOpenFileName(this,"打开文件","C:/Users/董晨辉/Pictures/Saved Pictures","(*.jpg)");//打开文件后会返回文件的路径
        //qDebug()<<path;

    });

}

 

 

下图已经涉及代码和ui交互的控制,下图是ui(弹簧可以在右侧设置高度和宽度,但是设置之前要先设置弹簧状态为不能伸缩)


//QT_7_26_04
Widget::Widget(QWidget *parent) :
    QWidget(parent),
    ui(new Ui::Widget)
{
    ui->setupUi(this);
    setFixedSize(400,300);
    setWindowTitle("用户登陆");
}

效果如图:

 

下面则主要是对一些控件的测试,以及用代码对按钮实行的监控

//QT_7_26_05

Widget::Widget(QWidget *parent) :
    QWidget(parent),
    ui(new Ui::Widget)
{
    ui->setupUi(this);
    //默认选中,我们默认选中单选按钮性别中的男
    ui->man->setChecked(true);
    //点击女的就打印一行话
    connect(ui->woman,&QRadioButton::clicked,[](){
        qDebug()<<"新年快乐";
    });
    //在多选框进行监听选中状况,选中就打印1
    connect(ui->checkBox_3,&QCheckBox::clicked,[](){
    qDebug()<<"1";
    });
    //另外一种有关监听的独特的用法,选中就打印2,未选中就打印0
    connect(ui->checkBox_3,&QCheckBox::stateChanged,[](int val){
    qDebug()<<val;
    });

    //利用listwidget写诗
    QListWidgetItem * item = new QListWidgetItem("锄禾日当午");
    //使诗默认排版在中间,设置对齐方式,可以去帮助文档查看
    item->setTextAlignment(Qt::AlignHCenter);

    ui->listWidget->addItem(item);
    //第二种添加文字的方式
    //一次性添加很多,利用list容器,但是无法设置剧中
    QStringList list;
    list<<"锄禾日当午"<<"汗滴禾下土"<<"谁之盘中餐"<<"粒粒皆辛苦";
    ui->listWidget->addItems(list);

}

ui图 

效果图:

点击按钮便可以根据代码中给出的返回值进行监控打印

 

 

下面我们只是为了测试一个控件:

在ui中进行添加,然后就可以在代码中实现控制

//QT_7_26_06

Widget::Widget(QWidget *parent) :
    QWidget(parent),
    ui(new Ui::Widget)
{

    ui->setupUi(this);
    //添加头
    ui->treeWidget->setHeaderLabels(QStringList()<<"英雄姓名"<<"英雄介绍");
    //添加项目
    QTreeWidgetItem * list1 = new QTreeWidgetItem(QStringList()<<"力量");
    ui->treeWidget->addTopLevelItem(list1);
    QTreeWidgetItem * list2 = new QTreeWidgetItem(QStringList()<<"敏捷");
    ui->treeWidget->addTopLevelItem(list2);
    QTreeWidgetItem * list3 = new QTreeWidgetItem(QStringList()<<"智力");
    ui->treeWidget->addTopLevelItem(list3);
    //追加子项目
    QStringList hero1;
    QStringList hero2;
    QStringList hero3;
    QStringList hero4;
    QStringList hero5;
    QStringList hero6;
    hero1<<"刚被猪"<<"前排坦克,能在吸收伤害的同时造成客观的范围输出";
    hero2<<"船长"<<"前排坦克,能肉能输出能控场的全能英雄";
    hero3<<"月骑"<<"中排物理输出,可以使用分裂利刃攻击多个目标";
    hero4<<"小鱼人"<<"前排战士,擅长偷取敌人的属性来增加自身的战斗力";
    hero5<<"死灵法师"<<"前排法师坦克,魔法抗性较高,拥有治疗技能";
    hero6<<"巫医"<<"后排辅助法师,可以使用奇特的巫术诅咒敌人与治疗队友";
    QTreeWidgetItem * li1 = new QTreeWidgetItem(hero1);
    list1->addChild(li1);
    QTreeWidgetItem * li2 = new QTreeWidgetItem(hero2);
    list1->addChild(li2);
    QTreeWidgetItem * li3 = new QTreeWidgetItem(hero3);
    list2->addChild(li3);
    QTreeWidgetItem * li4 = new QTreeWidgetItem(hero4);
    list2->addChild(li4);
    QTreeWidgetItem * li5 = new QTreeWidgetItem(hero5);
    list3->addChild(li5);
    QTreeWidgetItem * li6 = new QTreeWidgetItem(hero6);
    list3->addChild(li6);
}

效果如图:

利用小箭头实现缩放

 

下面我们学习控件,用代码实现控制

在ui中添件以及两个按钮pushbutton

//QT_7_26_07

idget::Widget(QWidget *parent) :
    QWidget(parent),
    ui(new Ui::Widget)
{
    ui->setupUi(this);
    //QTableWidegt控件使用
    //告诉控件一共有多少列
    QStringList list;
    list<<"姓名"<<"性别"<<"年龄";
    ui->tableWidget->setColumnCount(list.size());
    //设置水平方向的头
    ui->tableWidget->setHorizontalHeaderLabels(list);


     //准备数据
    QStringList namelist;
    namelist<<"李白"<<"安琪拉"<<"东皇太一"<<"小旋风"<<"李旭";
    //设置行数
    ui->tableWidget->setRowCount(namelist.size());
    //设置正文
    //ui->tableWidget->setItem(0,0,QTableWidgetItem("亚瑟"));
    //准备性别
    QStringList sexlist;
    sexlist<<"男"<<"女"<<"男"<<"女"<<"男";
    //准备年龄
    QStringList nianling;
    nianling<<"20"<<"22"<<"44"<<"60"<<"5";
    //使用循环添加信息
    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[i]));
        //添加年龄
        ui->tableWidget->setItem(i,col++,new QTableWidgetItem(nianling[i]));
        //int 转 string
        //QString::number(int);

    }
    //点击按钮添加信息
    connect(ui->btn1,&QPushButton::clicked,[=](){
       //先判断有没有赵云,有的话就不添加了
        bool ifempty = ui->tableWidget->findItems("赵云",Qt::MatchExactly).empty();
        if(ifempty)
        {
            ui->tableWidget->insertRow(0);  //这一行做的是插入操作,没有这一行的话就是替换操作
            ui->tableWidget->setItem(0,0,new QTableWidgetItem("赵云"));
            ui->tableWidget->setItem(0,1,new QTableWidgetItem("男"));
            ui->tableWidget->setItem(0,2,new QTableWidgetItem("28"));
        }
        else  //打印警告信息
        {
            QMessageBox::warning(this,"警告","已经添加过了");
        }

    //点击按钮删除赵云
        connect(ui->btn2,&QPushButton::clicked,[=](){
            bool ifempty = ui->tableWidget->findItems("赵云",Qt::MatchExactly).empty();
            if(ifempty)
            {
                QMessageBox::warning(this,"警告","已经删除过了");
            }
            else
            {
                //找到所要删除的行
                int row = ui->tableWidget->findItems("赵云",Qt::MatchExactly).first()->row();
                //ui->tableWidget->findItems("赵云",Qt::MatchExactly)返回一个链表
                //.first()从链表中找第一个出现赵云的位置
                //->row();返回其所在行
                //按行删除
                ui->tableWidget->removeRow(row);
            }

        });

    });

}

效果如下:

可点击按钮进行增加和删除

添加或者删除之后如果重复添加或者删除会有提示模态窗口

 

 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值