您现在的位置是:网站首页> C/C++

Qt6 C++基础入门3 对话框与MainWindow

  • C/C++
  • 2023-07-22
  • 696人已阅读
摘要

对话框

目前的对话框主要有以下几大类


文件对话框( QFile Dialog)

消息对话框( QMessageBox)

输入对话框( QInputDialog)

颜色对话框( QColorDialog)

字体对话框( QFontDialog)


这是七大对话框及其基本用法的实例参考,所有代码都写在槽函数里面了


#include "Widget.h"

#include "ui_Widget.h"


Widget::Widget(QWidget *parent)

    : QWidget(parent)

    , ui(new Ui::Widget)

{

    ui->setupUi(this);


    te = ui->textEdit;

}


Widget::~Widget()

{

    delete ui;

}



// 打开文件对话框

void Widget::on_fileBtn_clicked()

{

    // 打开多个文件并获取文件完整路径

    // 如果你想打开单个文件,请使用getOpenFileName方法

    QStringList filenames = QFileDialog::getOpenFileNames(

                this,

                "打开图片", ".", "Images (*.png *.jpg)");

            for(int i=0; i<filenames.length(); i++)

                te->append(filenames[i]);

}



// 颜色选择对话框

void Widget::on_colorBtn_clicked()

{

    QColor color = QColorDialog::getColor();

            te->setTextColor(color);

}



// 字体选择对话框

void Widget::on_fontBtn_clicked()

{

    bool ok;

            QFont font = QFontDialog::getFont(&ok);


            if(ok)  //用户选择了字体

                te->setCurrentFont(font);

}



void Widget::on_inputBtn_clicked()

{

    QString str = QInputDialog::getText(this, "xxxx", "yyyy");

            te->setText(str);

}



void Widget::on_errorBtn_clicked()

{

    QErrorMessage *x;

            x->showMessage("error message show");

}



void Widget::on_messageBtn_clicked()

{

    QMessageBox::warning(this, "xxxx", "yyyyyyy", QMessageBox::Open, QMessageBox::Apply);

}



void Widget::on_processBtn_clicked()

{

    QProgressDialog x;

            x.setValue(88);

            x.exec();

}


MainWindow


菜单

使用代码的方式添加(不推荐,不方便管理)


#include "MainWindow.h"

#include "ui_MainWindow.h"


MainWindow::MainWindow(QWidget *parent)

    : QMainWindow(parent)

    , ui(new Ui::MainWindow)

{

    ui->setupUi(this);


    // 创建菜单项,名称为“打开文件”

    QAction *a1 = new QAction("打开文件");

    a1->setIcon(QIcon("xxx.png")); // 设置菜单项图标

    a1->setShortcut(QKeySequence("Ctrl+O")); // 设置菜单项右侧简介


    // 创建主菜单,名称为“文件”

    QMenu *menu = menuBar()->addMenu("文件");

    menu->addAction(a1); // 把菜单项插入到主菜单里面

}


MainWindow::~MainWindow()

{

    delete ui;

}


使用 Designer 直接设计


进入 UI 编辑界面,双击顶部即可创建新的主菜单;

进入主菜单后,继续双击即可创建菜单项;


下图创建一个使用快捷键 ctrl+f 触发的菜单项,我们在创建时应该输出: new (&F)


其中 &F 表示以&后面的第一个字母作为 ctrl 的辅助键,例如 &X 就表示 ctrl+x


1.png



如何触发菜单项点击事件?


新建一个主菜单以及对应菜单项后,我们会在设计页面的右侧预览中找到对应的组件


如下图


menuBar 表示默认的菜单组件

menu 表示新添加的主菜单“文件”

actionFile 表示先添加的菜单项“new”

1.png


之后直接回到 MainWindow.cpp,添加对应 connect 即可!


MainWindow::MainWindow(QWidget *parent)

    : QMainWindow(parent)

    , ui(new Ui::MainWindow)

{

    ui->setupUi(this);


    connect(ui->actionNew,&QAction::triggered,this,&MainWindow::newFile);

}


工具栏

在 designer 界面,右键点击 mainwindow,弹出窗口选择添加工具栏即可!


由于无法直接在 designer 里面添加工具栏项,我们只能借用菜单栏内的菜单项(即 action)

下方代码我们先使用变量获取 toolbar 以及对应的 actionnew,然后使用 addAction 把对应的菜单项添加到工具栏即可!


MainWindow::MainWindow(QWidget *parent)

    : QMainWindow(parent)

    , ui(new Ui::MainWindow)

{

    ui->setupUi(this);


    toolBar = ui->toolBar;      // 获取工具栏实例

    actionNew = ui->actionNew;  // 获取欲添加的菜单项实例


    // 先绑定菜单项action对应的信号和槽

    connect(actionNew,&QAction::triggered,this,&MainWindow::newFile);


    // 然后把菜单项插入到工具栏

    toolBar->addAction(actionNew);


}


Top