前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >【QT】Qt窗口(上)

【QT】Qt窗口(上)

作者头像
s-little-monster
发布2024-10-29 08:20:03
810
发布2024-10-29 08:20:03
举报
文章被收录于专栏:乐意学点小编程
Qt窗口是通过QMainWindow类来实现的,我们之前的学习是通过QWidget类实现的

QMainWindow包含一个菜单栏Menu Bar②,多个工具栏Tool Bars③,多个浮动窗口Dock Widgets,一个状态栏Status Bar⑤和一个中心部件Central Widget④ ①是Window Title

一、菜单栏

代码语言:javascript
复制
MainWindow::MainWindow(QWidget *parent)
    : QMainWindow(parent)
    , ui(new Ui::MainWindow)
{
    ui->setupUi(this);
    //设置窗口名
    this->setWindowTitle("我的word文件");
	//创建菜单栏,将菜单栏设置到窗口当中
    QMenuBar* mb = new QMenuBar(this);
    this->setMenuBar(mb);
	//设置菜单名,将菜单设置到菜单栏中
    QMenu* m = new QMenu("文件");
    mb->addMenu(m);
	//设置菜单项,将菜单项设置到菜单当中
    QAction* a1 = new QAction("打开");
    QAction* a2 = new QAction("保存");
    QAction* a3 = new QAction("关闭");
    m->addAction(a1);
    m->addAction(a2);
    m->addAction(a3);
	//设置中心部件
    QTextEdit* te = new QTextEdit(this);
    this->setCentralWidget(te);
    te->setPlaceholderText("请输入");
}

menubar

让我们加上对应的功能

代码语言:javascript
复制
    connect(a1,&QAction::triggered,this,&MainWindow::load);
    connect(a2,&QAction::triggered,this,&MainWindow::save);
    connect(a3,&QAction::triggered,this,&MainWindow::quit);
代码语言:javascript
复制
void MainWindow::save()
{
	//创建文件对话框
    QFileDialog* dg = new QFileDialog(this);
	//根据文件名创建文本文件
    QString filename = dg->getSaveFileName(this,"保存文件","C:/Users/14725/Desktop");
    qDebug() << filename;
    //将filename转换成一个标准C字符串,然后使用这个路径来创建一个std::ofstream对象file,以便打开并写入文件
    std::ofstream file(filename.toStdString().c_str());
    if(!file.is_open())
    {
        qDebug() << "文件保存失败";
        return;
    }
    //将textedit中的内容通过普通文本存放在text中
    const QString& text = te->toPlainText();
    //通过流输入到file文件
    file << text.toStdString();
    //关闭文件
    file.close();
}

void MainWindow::load()
{
	//创建文件对话框
    QFileDialog* d = new QFileDialog(this);
    //获取到指定位置的文件名
    QString filename = d->getOpenFileName(this,"加载文件","C:/Users/14725/Desktop");
    //将filename转换成一个标准C字符串,然后使用这个路径来创建一个std::ifstream对象file,以便加载文件
    std::ifstream file(filename.toStdString().c_str());
    if(!file.is_open())
    {
        qDebug() << "文件加载失败";
        return;
    }
    //创建两个字符串
    std::string content;
    std::string line;
    //一行一行从文件中扫描输入到content
    while (std::getline(file, line))
    {
        content += line;
        content += "\n";
    }
    //关闭文件
    file.close();
    //获取到content内容,呈现到textedit当中
    QString text = QString::fromStdString(content);
    te->setPlainText(text);
}

menubar_2

二、工具栏

代码语言:javascript
复制
MainWindow::MainWindow(QWidget *parent)
    : QMainWindow(parent)
    , ui(new Ui::MainWindow)
{
    ui->setupUi(this);
	//创建工具栏,将其添加到右侧区域
    QToolBar* tb = new QToolBar(this);
    addToolBar(Qt::RightToolBarArea,tb);
	//设置工具栏停留的位置只能为最左侧和最右侧
    tb->setAllowedAreas(Qt::LeftToolBarArea|Qt::RightToolBarArea);
	//设置是否可以作为一个独立的窗口被拖拽
    tb->setFloatable(false);
	//设置是否可以移动工具栏
    tb->setMovable(true);
	//设置工具栏内容
    QAction* openAction = new QAction("open",this);
    QAction* newAction = new QAction("new",this);
	
    tb->addAction(openAction);
    tb->addSeparator();
    tb->addAction(newAction);
	//在工具栏中添加控件
    QLabel* label = new QLabel("super little monster",this);
    tb->addWidget(label);
}

toolbar

三、状态栏

代码语言:javascript
复制
MainWindow::MainWindow(QWidget *parent)
    : QMainWindow(parent)
    , ui(new Ui::MainWindow)
{
    ui->setupUi(this);
	//创建和设置状态栏,因为一个窗口创建默认有状态栏,
	//这里是直接把新创建的状态栏参数设置到已有的状态栏当中
    QStatusBar* sb = statusBar();
    setStatusBar(sb);
	//状态栏的显示内容和时间
    sb->showMessage("super_little_monster",2000);
	//设置一个label设置到右下角永久显示,左下角永久显示就是用addWidget
    QLabel* label = new QLabel("我在右下角",this);
    sb->addPermanentWidget(label);
}

statusbar

四、浮动窗口

代码语言:javascript
复制
MainWindow::MainWindow(QWidget *parent)
    : QMainWindow(parent)
    , ui(new Ui::MainWindow)
{
    ui->setupUi(this);
	//创建浮动窗口并将其设置在当前窗口中
    QDockWidget* dw = new QDockWidget("浮动窗口",this);
    addDockWidget(Qt::BottomDockWidgetArea,dw);
	//设置浮动窗口四个位置都可停靠,还有四个选项,分别是上下左右:
	//Qt::TopDockWidgetArea
	//Qt::BottomDockWidgetArea
	//Qt::LeftDockWidgetArea
	//Qt::RightDockWidgetArea
    dw->setAllowedAreas(Qt::AllDockWidgetAreas);
}

dockwidget


今日分享到此结束~

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2024-10-28,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 一、菜单栏
  • 二、工具栏
  • 三、状态栏
  • 四、浮动窗口
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档