Hello,Qt4(1)

前言

因为项目用的是Qt4.8.3,所以特意学习了一下Qt4

现在Qt最新的版本是Qt6,公司的开发也多以Qt5为主,可能大家会感觉没有必要学习Qt4。但是我在学习的过程中,发现Qt4和Qt5的差别并不大,所以大家也可以学习一下Qt4,这样学习后面的版本也会容易很多

另外Hello,Qt5学习记录是以Qt的界面设计为主,而Hello,Qt4学习记录则是全面的记录了Qt4整个库的使用

环境搭建

Win10+Qt4.8.3+QtCreator2.4.1

考虑到学习成本,就不在vs平台上开发了,想在vs上开发的可以参考Hello,Qt5

理论上QtCreator可以用最新版本,但是适配性最好的还是同时期的版本

  1. 先装QtCreator2.4.1,然后安装Qt库4.8.3,在选择mingw目录时,设置为QtCreator2.4.1目录下的mingw目录

  1. 打开菜单栏中的工具->选项,打开构建和运行->Qt版本,选择添加,将4.8.3\bin中的qmake添加进去,选择应用、确定

  1. 在环境变量path中添加Qt4.8.3的bin目录路径

第一个QtCreator项目

  1. 打开QtCreator创建项目,选择Qt控件项目中的QtGUI应用,设置名称、路径,下一步直到完成

  1. 生成项目后,双击界面文件中ui文件进入Qt设计师界面

  1. 拖动QLabel控件到界面上,双击将其文本改为hello,点击左侧菜单栏的绿色运行箭头

demo:多窗口程序

目标

程序开始出现一个对话框,按下按钮后,对话框消失进入主窗口

如果直接关闭这个对话框,便不能进入主窗口,整个程序也将退出

当进入主窗口后,我们按下按钮,会弹出另一个窗口,主窗口不消失

实现

  1. 新建基类为QMainWindow的项目,进入ui设计界面,添加一个按钮,命名为“按钮”

  1. 在main.cpp中设置编码

#include <QTextCodec>

 QTextCodec::setCodecForTr(QTextCodec::codecForLocale()); //自动选择适合的编码
 QTextCodec::setCodecForTr(QTextCodec::codecForName("GB2312")); //指定编码
  1. 在构造函数中添加代码

ui->pushButton->setText("新窗口");
  1. 右击项目添加新文件选择Qt设计器界面类中Dialog without Buttons,创建完成后,会自动进入ui界面,拖入一个QPushButton,设置内容为“登录到主界面”,然后进入编辑信号/槽模式(双击为选中信号对象,双击后不要送开鼠标,会拖出一条线,连接到槽对象即完成信号槽的绑定),将QPushButton的clicked()信号和QDialog的accept()槽绑定

  1. main.cpp

#include <QtGui/QApplication>
#include <QTextCodec>
#include <QDialog>
#include "mainwindow.h"
#include "logindialog.h"

int main(int argc, char *argv[])
{
    QApplication a(argc, argv);
    QTextCodec::setCodecForTr(QTextCodec::codecForLocale());
    //QTextCodec::setCodecForTr(QTextCodec::codecForName("GB2312"));
    MainWindow w;
    LoginDialog dlg;
    if(dlg.exec() == QDialog::Accepted)
    {
        w.show();
        return a.exec();
    }
    else return 0;
}
  1. 进入mainwindow界面,右击QPushButton选择转到槽,选择clicked()信号

void MainWindow::on_pushButton_clicked()
{
    QDialog *dlg = new QDialog(this);
    dlg->show();
}

总结

我们实现了两类窗口打开的方式,一个是自身消失后打开一个窗口,一个是打开另一个窗口自身也不消失

demo:登录对话框

目标

在弹出对话框中填写用户名和密码,按下登录按钮,如果用户名和密码均正确则进入主窗口,如果有错则弹出警告对话框

实现

  1. 新建基类为QMainWindow的项目

  1. 右击项目添加Qt设计师类,选择Dialog with Buttons模板,类名为LoginDialog

  1. 在界面上放两个QLabel、QLineEdit、QPushButton,QLabel的文本分别设置为用户名、密码,QPushButton的文本设置为登录、退出,对象名设置为loginBtn、exitBtn,QLineEdit的对象名设置为usrLineEdit、pwdLineEdit

  1. 将loginBtn的clicked()信号与LoginDialog的close()槽绑定

将exitBtn的clicked()信号与LoginDialog的accept()槽绑定

  1. mian.cpp

#include "mainwindow.h"
#include "logindialog.h"
#include <QtGui/QApplication>
#include <QTextCodec>

int main(int argc, char *argv[])
{
    QApplication a(argc, argv);
    QTextCodec::setCodecForTr(QTextCodec::codecForLocale());
    MainWindow w;
    LoginDialog dlg;
    if(dlg.exec() == QDialog::Accepted)
    {
        w.show();
        return a.exec();
    }
    else return 0;
}
  1. logindialog.h

#ifndef LOGINDIALOG_H
#define LOGINDIALOG_H

#include <QDialog>
#include <QMessageBox>

namespace Ui {
class LoginDialog;
}

class LoginDialog : public QDialog
{
    Q_OBJECT
    
public:
    explicit LoginDialog(QWidget *parent = 0);
    ~LoginDialog();
    
private slots:
    void on_loginBtn_clicked();

private:
    Ui::LoginDialog *ui;
};

#endif // LOGINDIALOG_H
  1. logindialog.cpp

#include "logindialog.h"
#include "ui_logindialog.h"

LoginDialog::LoginDialog(QWidget *parent) :
    QDialog(parent),
    ui(new Ui::LoginDialog)
{
    ui->setupUi(this);
    ui->usrLineEdit->setPlaceholderText(tr("请输入用户名"));
    ui->pwdLineEdit->setPlaceholderText(tr("请输入密码"));
    ui->pwdLineEdit->setEchoMode(QLineEdit::Password);
}

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

void LoginDialog::on_loginBtn_clicked()
{
    if(ui->usrLineEdit->text().trimmed() == tr("yi") &&
            ui->pwdLineEdit->text() == tr("123456"))
    {
        accept();
    }
    else
    {
        QMessageBox::warning(this,
                             tr("Warning"),
                             tr("usr or pwd error!"),
                             QMessageBox::Yes,
                             QMessageBox::No);
        ui->usrLineEdit->clear();
        ui->pwdLineEdit->clear();
        ui->usrLineEdit->setFocus();
    }
}

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值