实验目的
1. 掌握GUI应用程序的基本框架和信号与槽机制的工作原理; 2. 掌握Qt窗口部件的使用; 3. 掌握Linux下GUI程序的开发的流程。 4. 掌握Qt设计器的使用。
实验内容
1. 实现一个简单计算器:可以实现整数的加减运算,要求控件的布局采用布局管理器来管理。(在实现运算的时候要注意QString类型与int类型数值之间的转换)
2. 创建一用户注册登录对话框模拟用户注册登录过程。要求验证用户名密码是否正确,验证失败信息用消息对话框提示。验证成功则重新打开一个新的对话框,该对话框上显示当前用户的姓名、学号、班级、地址等信息。
3. 实现一个简单的文本编辑器。要求:
(1) 该窗口有标题栏、菜单栏和工具栏,请使用setwindowtittle()方法设置标题。
(2) 菜单栏有file和edit两个下拉菜单。File菜单下有新建、打开、退出三个action;Edit菜单下有复制、粘贴、剪切三个action。
(3) 创建一个edit工具栏,该工具栏包含保存、剪切、粘贴三个action。
实验过程(请用简单的文字描述)
实验一,
1)创建一个qt设计师界面类
2)在视图界面添加计算器按钮,局部采用格栅布局总体采用垂直布局
3)定义每个按钮的槽函数,实现简单加减逻辑
实验二,
1)创建一个qt设计师界面类
2) 在视图界面添加控件
3)实现登陆验证,和跳转页面
实验三,
1)创建一个qt设计师界面类
2)用setwindowtittle()方法设置标题
3)添加菜单栏和工具栏
4)实现文件的读取
实验详细操作步骤或程序清单
实验一
#include "widget.h"
#include "ui_widget.h"
#include <QDebug>
Widget::Widget(QWidget *parent)
: QWidget(parent)
, ui(new Ui::Widget)
{
ui->setupUi(this);
}
Widget::~Widget()
{
delete ui;
}
void Widget::on_pushButton_deng_clicked()
{
int z;
if(k == 1){
z = x+y;
}else if (k == -1){
z = x-y;
}
ui->label->setText(QString::number(z));
x = z;
k = 0;
}
void Widget::on_pushButton_jia_clicked()
{
k = 1;
QString s = ui->label->text()+ui->pushButton_jia->text();
ui->label->setText(s);
}
void Widget::on_pushButton_jian_clicked()
{
k = -1;
QString s = ui->label->text()+ui->pushButton_jian->text();
ui->label->setText(s);
}
void Widget::on_pushButton_clicked()
{
//7
QString s = ui->label->text()+ui->pushButton->text();
ui->label->setText(s);
int t = ui->pushButton->text().toInt();
if (k == 0){
x = t;
}else{
y = t;
}
}
void Widget::on_pushButton_14_clicked()
{
// 8
QString s = ui->label->text()+ui->pushButton_14->text();
ui->label->setText(s);
int t = ui->pushButton_14->text().toInt();
if (k == 0){
x = t;
}else{
y = t;
}
}
void Widget::on_pushButton_9_clicked()
{
QString s = ui->label->text()+ui->pushButton_9->text();
ui->label->setText(s);
int t = ui->pushButton_9->text().toInt();
if (k == 0){
x = t;
}else{
y = t;
}
}
void Widget::on_pushButton_0_clicked()
{
QString s = ui->label->text()+ui->pushButton_0->text();
ui->label->setText(s);
int t = ui->pushButton_0->text().toInt();
if (k == 0){
x = t;
}else{
y = t;
}
}
void Widget::on_pushButton_6_clicked()
{
QString s = ui->label->text()+ui->pushButton_6->text();
ui->label->setText(s);
int t = ui->pushButton_6->text().toInt();
if (k == 0){
x = t;
}else{
y = t;
}
}
void Widget::on_pushButton_5_clicked()
{
QString s = ui->label->text()+ui->pushButton_5->text();
ui->label->setText(s);
int t = ui->pushButton_5->text().toInt();
if (k == 0){
x = t;
}else{
y = t;
}
}
void Widget::on_pushButton_4_clicked()
{
QString s = ui->label->text()+ui->pushButton_4->text();
ui->label->setText(s);
int t = ui->pushButton_4->text().toInt();
if (k == 0){
x = t;
}else{
y = t;
}
}
void Widget::on_pushButton_3_clicked()
{
QString s = ui->label->text()+ui->pushButton_3->text();
ui->label->setText(s);
int t = ui->pushButton_3->text().toInt();
if (k == 0){
x = t;
}else{
y = t;
}
}
void Widget::on_pushButton_2_clicked()
{
QString s = ui->label->text()+ui->pushButton_2->text();
ui->label->setText(s);
int t = ui->pushButton_2->text().toInt();
if (k == 0){
x = t;
}else{
y = t;
}
}
void Widget::on_pushButton_1_clicked()
{
QString s = ui->label->text()+ui->pushButton_1->text();
ui->label->setText(s);
int t = ui->pushButton_1->text().toInt();
if (k == 0){
x = t;
}else{
y = t;
}
}
实验二
#include "widget.h"
#include "ui_widget.h"
#include <QMessageBox>
#include <form_log.h>
#include <QWidget>
Widget::Widget(QWidget *parent)
: QWidget(parent)
, ui(new Ui::Widget)
{
ui->setupUi(this);
QImage *img_mainicon;//主图标显示在右上角lable中
img_mainicon =new QImage;//新建一个image对象
img_mainicon->load(":/Img/屏幕截图 2022-04-29 173103.png"); //载入图片到img对象中
img_mainicon->scaled(ui->label->size(),Qt::KeepAspectRatio);//把图片
ui->label->setScaledContents(true);
ui->label->setPixmap(QPixmap::fromImage(*img_mainicon)); //将图片放入label,使用setPixmap,注意指针*img
//ui->label_mainicon->setAlignment(Qt::AlignCenter); //将图片放在label中心,用缩放了就不需要了
}
Widget::~Widget()
{
delete ui;
}
void Widget::on_pb_ok_clicked()
{
QString s_1 = ui->lineEdit->text();
QString s = ui->lineEdit_2->text();
if (s_1 == s_user && s ==s_password)
{
QMessageBox *box = new QMessageBox;
box->setText("登陆成功");
box->show();
this->close();
Form_log *k = new Form_log();
k->show();
}
else{
QMessageBox *box = new QMessageBox;
box->setText("登陆失败");
box->show();
}
}
实验三
#include "mainwindow.h"
#include "ui_mainwindow.h"
#include <QFileDialog>
#include <QFile>
#include <QToolBar>
MainWindow::MainWindow(QWidget *parent)
: QMainWindow(parent)
, ui(new Ui::MainWindow)
{
ui->setupUi(this);
this->setWindowTitle("自定义文件处理");
QMenu *m1 = new QMenu;
m1->setTitle("file");
QAction *a0 = new QAction("新建");
m1->addAction(a0);
QAction *a1 = new QAction("打开");
m1->addAction(a1);
QAction *a2 = new QAction("退出");
m1->addAction(a2);
ui->menubar->addMenu(m1);
QMenu *m2 = new QMenu;
m2->setTitle("edit");
QAction *b0 = new QAction("复制");
m2->addAction(b0);
QAction *b1 = new QAction("粘贴");
m2->addAction(b1);
QAction *b2 = new QAction("剪切");
m2->addAction(b2);
ui->menubar->addMenu(m2);
QToolBar *tool_bar = new QToolBar(this);
this->addToolBar(tool_bar);
QAction *new_action = new QAction("保存");
QAction *open_action = new QAction("剪切");
QAction *save_action = new QAction("粘贴");
tool_bar->addAction(new_action);
tool_bar->addAction(open_action);
tool_bar->addAction(save_action);
connect(a1,&QAction::triggered,[=](){
QString s = QFileDialog::getOpenFileName(this,"打开目录","./","");
ui->lineEdit->setText(s);
QFile f1(s);
if (!f1.open(QIODevice::ReadOnly))
return ;
QByteArray arr;
while (!f1.atEnd()){
arr += f1.readLine();
}
ui->textEdit->setText(arr);
});
connect(a2,&QAction::triggered,[=](){
QString filename = QFileDialog::getSaveFileName(this, "另存为", "./");
QFile file(filename);
if(!file.open(QIODevice::WriteOnly))
return ;
QString s = ui->textEdit->toPlainText();
file.write(s.toUtf8());
file.close();
});
}
MainWindow::~MainWindow()
{
delete ui;
}