之前我们学过QWidget,QMainWindow会在ui界面多一个菜单
先实现ui界面
1.添加文本编辑,实现可以写多行
2.将文本编辑放大,拖动即可
3.编辑菜单栏
4.然后我们要实现对应子列表的功能,但是在这里不能转到槽,所以我们只能通过connect来联系功能和对应按键,我们先给我们的子列表对象重命名一下
代码部分
1.实现新建文件
定义一个槽函数实现新建文件的槽函数,然后在构造函数中connect,联系点击新建,执行槽函数,
槽函数中要做的功能是将标题设置为无标题,然后文本内容清空
2.实现打开文件,同样是声明槽函数,实现关联connect,实现槽函数
槽函数中要做的是使用QFileDialog类中一个函数getOpenFileName,来打开一个文件,返回打开文件的路径字符串,如果为空的话,就显示一个消息盒子警告没有选择上,也就是按了取消以后会提醒,如果选择的话,创建一个文件用读方式打开他,使用readAll函数读取该文件内容到QByteArray 中,你可以把他当做vector, 然后写入到ui界面的文本编辑中,向文本编辑中写入时,必须是QString,QString中有个构造函数直接将QByteArray转为QString,然后关闭文件
3.实现保存功能
完成保存文件槽函数声明,实现槽函数和保存按键关联connect,实现槽函数
槽函数的实现需要QFileDialog类中的函数getSaveFileName函数来获取要保存文件的地方,返回值为要保存在哪个地方的字符串,如果字符串为空,说明没有选择保存路径,如果有的话,打开该文件,以读的方式,将文本编辑内容读到QByteArray (vector)中,然后从vector中读取内容到文件中去,关闭文件
槽函数实现:
源码分享
mainwindow.h
c
#ifndef MAINWINDOW_H
#define MAINWINDOW_H
#include <QMainWindow>
#include<QString>
#include<QFileDialog>
#include<QMessageBox>
QT_BEGIN_NAMESPACE
namespace Ui { class MainWindow; }
QT_END_NAMESPACE
class MainWindow : public QMainWindow
{
Q_OBJECT
public:
MainWindow(QWidget *parent = nullptr);
~MainWindow();
private slots:
void Newfilespots();
void Openfilespots();
void Savefilespots();
private:
Ui::MainWindow *ui;
};
#endif // MAINWINDOW_H
mainwindow.cpp
c
#include "mainwindow.h"
#include "ui_mainwindow.h"
MainWindow::MainWindow(QWidget *parent)
: QMainWindow(parent)
, ui(new Ui::MainWindow)
{
ui->setupUi(this);
connect(ui->Newfile,&QAction::triggered,this,&MainWindow::Newfilespots);
connect(ui->Openfile,&QAction::triggered,this,&MainWindow::Openfilespots);
connect(ui->Savefile,&QAction::triggered,this,&MainWindow::Savefilespots);
}
MainWindow::~MainWindow()
{
delete ui;
}
void MainWindow::Newfilespots()
{
ui->textEdit->clear();
this->setWindowTitle("无标题");
}
void MainWindow::Openfilespots()
{
QString filename=QFileDialog::getOpenFileName(this,"选择一个文件",QCoreApplication::applicationFilePath(),".txt");
if(filename.isEmpty())
{
QMessageBox::warning(this,"警告","请选择一个文件");
}
else
{
QFile file(filename);
file.open(QIODevice::ReadOnly);
QByteArray ba=file.readAll();
ui->textEdit->setText(QString(ba));
file.close();
}
}
void MainWindow::Savefilespots()
{
QString filename=QFileDialog::getSaveFileName(this,"选择一个文件",QCoreApplication::applicationFilePath(),".txt");
if(filename.isEmpty())
{
QMessageBox::warning(this,"警告","请选择一个文件");
}
else
{
QFile file(filename);
file.open(QIODevice::WriteOnly);
QByteArray ba;
ba.append(ui->textEdit->toPlainText());
file.write(ba);
file.close();
}
}
效果演示
记事本
事件
在qt中我们还可以捕捉键盘信息和鼠标信息,我们可以重写虚函数实现对应键盘信息,鼠标信息做出我们自己的需求.
我们基于上节课代码我们要实现Ctrl
事件