qt学习 实训第三天,第四天

原创 2016年08月29日 23:18:01

第三天:

1、简单的QMessageBox界面设计

按照之前的步骤建立一个新的工程Camera工程,之后在左边栏界面文件dialog.ui中双击,把Push Button拖拉到中间去,修改它的objectname,如BT_MSG,然后在Dialog.cpp中添加一个头文件QMessagebox,如下面:include ,然后在新出现的void Dialog::on_BT_MSG_clicked函数中填写QMessageBox::warning( this,”hehe”,”haha”);然后出现一个窗口中间有一个框,名字叫Push Button,点击这个按钮,就会出现一个窗口,窗口名字叫hehe,内容是haha,左边还有出现一个感叹号的标志。
然后可以试试QMessageBox的另外三个方法question,critical,information.

2.点击一个按钮,然后出现Save & Open两个按钮,分别出现出现两个不同的内容

在上一个代码中把BT_MSG的代码改一下,用if语句

if( QMessageBox::information(this,"Tips","Are you ok?",QMessageBox::Save,QMessageBox::Open) == QMessageBox::Save)
            QMessageBox::information(this,"heh","eah");
   else
       QMessageBox::warning(this,"tian","bushi");

ps:注意括号。

3.试试,把另一个按钮设置成把一个图片变成黑白色的。
把上方代码的else的内容改成第二天学习的相对应的内容。

4.点击一个按钮,在窗口上出现一个新的按钮

用QPushButton定义一个新的对象BT_TEST和一个新的函数,然后在cpp文件中去定义,因为不知道这个按钮有多大,先在构造函数中定义这个对象BT_TEST为空,在析构函数中去删除,因为占内存,不删除,会出错。如果new了一个按钮,就必须在析构函数中去删除这个按钮。

private slots:
    void Picture();

private:
    Ui::Dialog *ui;

    QPushButton* BT_TEST;



----------
Dialog::Dialog(QWidget *parent) :
    QDialog(parent),
    ui(new Ui::Dialog)
{
    ui->setupUi(this);
    BT_TEST = NULL;
    connect(ui->BT_MSG,SIGNAL(clicked( )),this,SLOT(Picture()));
}

Dialog::~Dialog()
{
    delete ui;
    if(BT_TEST)
        delete BT_TEST;
}

void Dialog::Picture()
{
       if( ! BT_TEST )
       {
           BT_TEST = new QPushButton( this );
           BT_TEST->setText( "hee" );
           BT_TEST->move(10,10);
           BT_TEST->show();
       }
       ui->BT_MSG->setText("sdfsadf");//这个基本没用,改变原来按钮的文本
}
connect(ui->BT_MSG,SIGNAL(clicked( )),this,SLOT(Picture()));

connect函数我认为第一个可认为为发射源,按钮BT_MSG点击它可以发射出一个信息,通过clicked信号再到picture函数中,用来连接两个按钮。具体的百度。

void Dialog::Picture()

新建立的函数这样定义。

5.让新出现的按钮也会出现提醒

在原函数下用connect与新的函数连接。connect(BT_TEST,SIGNAL(clicked() ),this,SLOT(testhehe()));

6.用label和lineedit以以上的代码同样建立方法,输入用户名和密码,再显示出来

void Dialog::on_BT_MSG_clicked()
{
    connect(ui->BT_MSG,SIGNAL(clicked()),this,SLOT(testhehe()));
    QMessageBox::information(this,"User Name",ui->LE_USERNAME->text() );
    QMessageBox::information(this,"User passwd",ui->LE_PWD->text() );
}
void Dialog::testhehe()
{
    QMessageBox::information(this,"sfa","sdfa");
}

7.`Dialog::Dialog(QWidget *parent) :
QDialog(parent),
ui(new Ui::Dialog)
{
ui->setupUi(this);
ui->LE_USERNAME->setText(“请输入用户名”);
}

Dialog::~Dialog()
{
delete ui;

}
void Dialog::on_BT_MSG_clicked()
{
connect(ui->BT_MSG,SIGNAL(clicked()),this,SLOT(testhehe()));
QMessageBox::information(this,”User Name”,ui->LE_USERNAME->text() );
QMessageBox::information(this,”User passwd”,ui->LE_PWD->text() );
}
void Dialog::testhehe()
{
QMessageBox::information(this,”sfa”,”sdfa”);
}`

8.建立一个QLineEdit的文本框

在头文件需要添加新的头文件#include <QLineEdit>,这样才能正确的建立对象指针QLineEdit* LE_YEAR; 然后在构造函数中建立LE_YEAR的属性// 创建一个文本框对象
LE_YEAR = new QLineEdit( this );
// 调整文本框位置
LE_YEAR->move( 20, 0 );
// 设置文本框上显示的文本
LE_YEAR->setText( "2016" );
// 设置文本框的显示模式
LE_YEAR->setEchoMode( QLineEdit::NoEcho );
// 获取文本框的文本
QMessageBox::question( this, "info", LE_YEAR->text() );

之后在析构函数中删除这个对象delete LE_YEAR;

9.在板子上不能支持中文,所以在QT上需要添加如下代码:
首先在cpp文件中添加头文件#include <QTextCodec>,在构造函数中添加`QTextCodec* code = QTextCodec::codecForName( “UTF-8” );

QTextCodec::setCodecForTr( code );
QTextCodec::setCodecForLocale( QTextCodec::codecForLocale() );
QTextCodec::setCodecForCStrings( QTextCodec::codecForLocale() );

connect( ui->BT_SHOWIMAGE, SIGNAL( clicked() ), this, SLOT( ShowImage() ) );`

第四天:
1.简单的显示图片(没有设置大小和压缩,只是显示一张照片)

先拉取一个label定义为LB_IMAGE,在头文件dialog.h中定义一个对象指针QImage m_BKImage,然后在cpp文件中添加图片路径m_BKImage.load(**);和ui->LB_IMAGE->setPixmap(QPixmap::fromImage(m_BKImage));

m_BKImage.load( "E:\\google download\\haha.jpg");
ui->LB_IMAGE->setPixmap( QPixmap::fromImage( m_BKImage));

然后可以简单的实现显示图片

2.通过一个按钮来实现显示图片

在头文件中添加一个函数ShowImage()和按钮PushButton的objectname:BT_SHOWIMAGE和显示图片的按钮label:LB_IMAGE;

在构造函数中使用connect连接按钮BT_SHOWIMAGE和函数ShowImage和函数ShowImage的实现。

Dialog::Dialog(QWidget *parent) :
    QDialog(parent),
    ui(new Ui::Dialog)
{
    ui->setupUi(this);
    connect(ui->BT_SHOWIMAGE,SIGNAL(clicked() ),this,SLOT( ShowImage() ));
    //因为在connect中ShowImage被设置为SLOT槽函数,所以在头文件中就必须定义为private slot:  (public slot也可以),必须为slot,其他的不行,比如public,无法识别为slot

}
void Dialog::ShowImage()
{
    if( ! m_BKImage.load( "E:\\google download\\haha.jpg"))
    {
        QMessageBox::question( this," Error","Load Picture Failed");
        return;   //不用返回0
    }
    ui->LB_IMAGE->resize( m_BKImage.width(),m_BKImage.height());//设置宽高
    ui->LB_IMAGE->setPixmap( QPixmap::fromImage( m_BKImage));   //加载图片
    //然后改变一下标点,MOVE一下
    ui->LB_IMAGE->move( 0,0 );
    //到这里能显示图片了,但因为图片上还有lineedit显示,所以使用hide函数去取消;
    ui->BT_SHOWIMAGE->hide();
    ui->lineEdit->hide();
    }

为了自己自动设置路径,不能一直确定路径,所以在ShowImage函数中更改一下变量m_BKImage的路径:

if( ! m_BKImage.load( ui->lineEdit->text() ))      //在lineedit中把Windows的路径放到其中,可以放粗来。
    {
        QMessageBox::information(this,"sdf","gfdg");
    }
    ui->LB_IMAGE->resize( m_BKImage.width(),m_BKImage.height());//设置宽高
    ui->LB_IMAGE->setPixmap( QPixmap::fromImage( m_BKImage));   //加载图片
    //然后改变一下标点,MOVE一下
    ui->LB_IMAGE->move( 0,0 );
    ui->BT_SHOWIMAGE->hide();
    ui->lineEdit->hide();

3.自己添加路径,点开按钮可以弹出自动搜索路径,第二个只是自己知道路径,这个是搜索路径,然后放到lineedit中(并压缩图片)

用QString,首先添加头文件QFileDialog,定义一个变量fileName

压缩图片是在设置显示图片的时候resize和setPixmap中更改一下代码

void Dialog::ShowImage()
{
      QString fileName = QFileDialog ::getOpenFileName(this,tr("Open File"),        
                                                     "",
                                                     tr("Images (*.png *.bmp *.jpg)"));
   //这个方法是打开相应的路径,变量名为fileName
    if( !  m_BKImage.load( fileName ))      //在lineedit中把Windows的路径放到其中,可以放粗来。
        {
            QMessageBox::information(this,"sdf","gfdg");
            return;
        }
        ui->LB_IMAGE->resize( this->geometry().width(),this->geometry().height());//设置宽高
        ui->LB_IMAGE->setPixmap( QPixmap::fromImage(m_BKImage.scaled(this->geometry().width(),this->geometry().height(),Qt::KeepAspectRatio)));   //加载图片
        //然后改变一下标点,MOVE一下
        ui->LB_IMAGE->move( 0,0 );
        ui->BT_SHOWIMAGE->hide();
        ui->lineEdit->hide();
}

4.让图片随客户框的大小的改变而改变

dialog.h:
#ifndef DIALOG_H
#define DIALOG_H

#include <QDialog>

namespace Ui {
class Dialog;
}

class Dialog : public QDialog
{
    Q_OBJECT

public:
    explicit Dialog(QWidget *parent = 0);
    ~Dialog();

    void resizeEvent(QResizeEvent* size);
private:
    Ui::Dialog *ui;

    QImage m_BKImage;

private slots:
    void ShowImage();
};

#endif // DIALOG_H
dialog.cpp:
#include "dialog.h"
#include "ui_dialog.h"
#include <QMessageBox>
#include <QFileDialog>
Dialog::Dialog(QWidget *parent) :
    QDialog(parent),
    ui(new Ui::Dialog)
{
    ui->setupUi(this);

    connect(ui->BT_SHOWIMAGE,SIGNAL(clicked() ),this,SLOT( ShowImage() ));
}

Dialog::~Dialog()
{
    delete ui;
}
void Dialog::ShowImage()
{
QString fileName = QFileDialog ::getOpenFileName(this,tr("Open File"),        
                                                     "",
                                                     tr("Images (*.png *.bmp *.jpg)"));
    if( !  m_BKImage.load( fileName ))      //在lineedit中把Windows的路径放到其中,可以放粗来。
        {
            QMessageBox::information(this,"sdf","gfdg");
            return;
        }
        ui->LB_IMAGE->resize( this->geometry().width(),this->geometry().height());//设置宽高
        ui->LB_IMAGE->setPixmap( QPixmap::fromImage(m_BKImage.scaled(this->geometry().width(),this->geometry().height(),Qt::KeepAspectRatio)));   //加载图片
        ui->LB_IMAGE->move( 0,0 );
        ui->BT_SHOWIMAGE->hide();
        ui->lineEdit->hide();
}
void Dialog::resizeEvent(QResizeEvent* size)
{
    QString position;
    position = QString("%1 %2").arg(this->geometry().width()).arg(this->geometry().height());
    ui->lineEdit->setText(position);
    ui->LB_IMAGE->resize( this->geometry().width(),this->geometry().height());//设置宽高
    ui->LB_IMAGE->setPixmap( QPixmap::fromImage(m_BKImage.scaled(this->geometry().width(),this->geometry().height(),Qt::KeepAspectRatio)));   //加载图片
}

QStringQString(“%1 %2”).arg(this->geometry().width()).arg(this->geometry().height());其中的%1%2是指代在arg后的指针,%1是第一个,%2是第二个。

相关文章推荐

qt学习 实训第五天 第六天

第五天: 1.表示时间延迟添加头文件QTimer,槽函数OnTimeOut,还有对象指针QTimer m_TimerFlush,Dialog::Dialog(QWidget *parent) : ...

嵌入式开发之C语言基础第三天&第四天学习笔记

c语言(三)---运算符与分支语句 单字符接收与输出 getchar() 如果接收单个字符,可以使用getchar()函数 char ch = getchar(); 就会从键盘接收一个字符,...

Android学习(第三天、第四天)

Activity应用的基本组件介绍 1、

[记录]学习<<QT学习之路2>>第四天

今天学习内容对应>第18到23部分,主要是有关于QT事件这一部分的内容(=_=真是看到我快吐了,感觉这本书不适合我这种初学者). 先放出思维导图 难点总结 一,什么是事件,它和信号槽...

Qt学习第四天

头文件: #ifndef DIALOG_H #define DIALOG_H #include //前置申明了一些将要用到的类 class QGridLayout; //网格布局 class ...

《JAVA课程设计》实训第四天——《猜猜看》游戏

第四天,本来想进一步去改进《猜猜看》游戏的,但是很多问题都不理解,也不熟悉怎么去弄到连接数据库,统计猜对次数,所以并没有进行再多的修改。 基本上就是这样的运行结果了 import java.awt...

第四天实训课感悟

今天是实训课的最后一天了,讲了好多东西,有点难以消化,最后还布置了制作“我的网页”的任务,感觉有点小难度。不过为了检验自己四天实训的效果,我还是回好好完成老师布置的作业的。总结一下4天的实训,还是有着...
  • wjygsy
  • wjygsy
  • 2011年12月20日 14:02
  • 369

《JAVA程序设计》实训第四天——《猜猜看》游戏

package caicaikan; import javax.imageio.ImageIO; import javax.swing.JFrame; import javax.swi...

东软实训第四天

Servlet生命周期面试题 实例化 Web容器维护servlet生命周期 init destroy只有一次 Service每次都调用 doget dopost方法   中文乱码问题 ...

hibernate学习笔记第四天的源码

  • 2017年03月21日 18:53
  • 7.82MB
  • 下载
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:qt学习 实训第三天,第四天
举报原因:
原因补充:

(最多只允许输入30个字)