• Qt5开发从入门到精通——第五篇二节( 文本编辑器 Easy Word 开发 V1.1 详解 )


    欢迎小伙伴的点评✨✨,相互学习、互关必回、全天在线🍳🍳🍳
    博主🧑🧑 本着开源的精神交流Qt开发的经验、将持续更新续章,为社区贡献博主自身的开源精神👩‍🚀


    前言

    本章节会给大家带来基于文本编辑器 Easy Word V1.0框架开发升级到Easy Word V1.1框架触发信号调用槽函数开发的解析。


    一、文本编辑器 Easy Word V1.1 槽函数与框架连接解析

    1.1、新建文件

    (1) 打开 “mainwindow.h” 头文件,添加 "private slots: "变量:

    private slots:
    void ShowNewFile();  
    
    • 1
    • 2

    (2) 在 createActions() 函数的”“新建“动作“最后添加事件关联:

    connect(NewFileAction, SIGNAL (triggered()) , this, SLOT (ShowNewFile())) ;
    
    • 1

    (3) 实现新建文件功能的函数 ShowNewFile()如下:

    void MainWindow::ShowNewFile()                  //新建文件的槽
    {
        MainWindow *newMainWindow =new MainWindow;
        newMainWindow->show();
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5

    1.2、打开文件

    利用标准文件对话框 QFileDialog 打开一个已经存在的文件。若当前中央窗体中已有打开的文件,则在一个新的窗口中打开选定的文件;若当前中央窗体是空白的,则在当前中央窗体中打开。
    (1)在mainwindow.h中添加如下头文件

    #include 
    #include 
    #include 
    
    • 1
    • 2
    • 3

    (2)在 “mainwindow.h” 头文件中添加 "private slots: "变量:

    void ShowOpenFile(); 
    
    • 1

    (3)在 createActions() 函数的”“打开“动作“最后添加事件关联:

    connect(openFileAction,SIGNAL(triggered()),this,SLOT(ShowOpenFile()));
    
    • 1

    (4)实现打开文件功能的函数 ShowOpenFile()如下:

    void MainWindow::ShowOpenFile()                  //读取文件的槽
    {
        fileName =QFileDialog::getOpenFileName(this);
        if(!fileName.isEmpty())
        {
            if(showWidget->text->document()->isEmpty())
            {
                loadFile(fileName);
            }else
            {
                MainWindow *newMainWindows = new MainWindow;
                newMainWindows->show();
                newMainWindows->loadFile(fileName);
            }
    
    
        }
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18

    其中,loadFile()函数的实现如下,该函数利用 QFile 和 QTextStream 完成具体读取文件内容的工作
    注意读取文本时文本格式应该是ANSI格式否则会出现乱码

    void MainWindow::loadFile(QString filename)
    {
    
         QFile  file(filename);
    
        if(file.open(QIODevice::ReadOnly|QIODevice::Text))
        {
             QTextStream textStream(&file);
            while(!textStream.atEnd())
            {
    
    
                showWidget->text->append(textStream.readLine());
    
    
            }
    
    
        }
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20

    在此仅详细说明标准文件对话框 QFileDialog 的 getOpenFileName()静态函数各个参数的作用,其他文件对话框类中相关的静态函数的参数有与其类似之处。

    QString QFileDialog::getOpenFileName
    (
    	QWidget* parent=O,               //定义标准文件对话框的父窗口
    	const QString & caption=QString(), //定义标准文件对话框的标题名
    	const QString & dir=QString (),  //指定了默认的目录,若此参数带有文件名,
    	                                //则文件将是默认选中的文件。
    	const QString & filter=QString (), // 此参数对文件类型进行过滤,只有与过滤器匹配的文件
                                          // 类型才显示,可以同时指定多种过滤方式供用户选择,
                                          //多种过滤器之间用";;"隔开。
    	QString * selectedFilter=0,      //用户选择过滤器通过此参数返回
    	Options options=O
    	
    	
    );
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14

    1.3、打印文件

    QPrintDialog 是 Qt 提供的标准打印对话框,为打印机的使用提供了一种方便、规范的方法。QPrintDialog 标准打印对话框提供了打印机的选择、配置功能,并允许用户改变文档有关的设置,如页面范围、打印份数等。
    (1)在mainwindow.h中添加如下头文件

    #include   //打印文本
    #include 
    #include    
    
    • 1
    • 2
    • 3

    (2)在ImageProcessor.pro中添加

    #打印功能需要添加QT += printsupport
    QT += printsupport
    
    • 1
    • 2

    (3)在" mainwindow.h" 头文件中添加 "private slots: "变量:

    void ShowPrintText();
    
    • 1

    (4)在 createActions() 函数的”“打印文本“动作“最后添加事件关联:

     connect (PrintTextAction, SIGNAL (triggered()), this, SLOT (ShowPrintText ()));
    
    • 1

    (5)实现打印文本功能的函数 ShowPrintText ()如下:

    void MainWindow::ShowPrintText()             //文本打印
    {
        QPrinter printer;                      //新建一个 QPrinter 对象
        QPrintDialog printDialog(&printer,this); //创建一个 QPrintDialog 对象,
                                                //参数为 QPrinter对象。
        if(printDialog.exec())//判断标准打印对话框显示后用户是否单击“打印”按钮。若单击
                              //“打印”按钮,则相关打印属性将可以通过创建 QPrintDialog 对象时使用的                                           
                              //QPrinter 对象获得;若用户单击“取消”按钮,则不执行后续的打印操作。
        {
            //获得QTextEdit对象的文档
            QTextDocument *doc =showWidget->text->document();
            doc->print(&printer); //打印
        }
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14

    1.4、图像打印

    打印图像实际上是在一个 QPaintDevice 中画图,与平常在 QWidget 、 QPixmap 和 Qlmage中画图相同,都是创建一个 QPainter 对象进行画图,只是打印使用的是 QPrinter, QPrinter 本质上也是一个绘图设备 QPaintDevice。
    (1)在mainwindow.h中添加如下头文件

    #include                //打印图片
    
    • 1

    (2)在" mainwindow.h" 头文件中添加 "private slots: "变量:

     void ShowPrintImage();
    
    • 1

    (3)在 createActions()函数的”“打印图像“动作“最后添加事件关联:

    connect(PrintImageAction, SIGNAL (triggered()), this, SLOT (ShowPrintImage()));
    
    • 1

    (4)实现打印图像功能的函数 ShowPrintImage()如下:

    void MainWindow::ShowPrintImage()           //图像打印
    {
        QPrinter printer;                    //新建一个 QPrinter 对象
        QPrintDialog printDialog(&printer,this);  //创建一个 QPrintDialog 对象,
                                                 // 参数为 QPrinter对象。
        if(printDialog.exec())   // 判断打印对话框显示后用户是否单击
        {
            QPainter painter(&printer);     //创建一个 QPainter 对象,并指定绘图设备为
                                            //一个QPrinte对象。
            QRect rect =painter.viewport();   //获得QPainter对象的视图矩形区域
            QSize size = img.size();          //获得图像的大小
            /*按照图形的比例大小重新设置视图矩形区域*/
            size.scale(rect.size(), Qt::KeepAspectRatio);
            painter.setViewport(rect.x(),rect.y(),size.width(),size.height());
            ///设置 QPainter 窗口大小为图像的大小
            painter.setWindow(img.rect());
            ///打印图像
            painter.drawImage(0,0,img);
    
        }
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21

    二、效果实例

    图一
    在这里插入图片描述
    图二
    图标和图片放到新建的Resources中
    在这里插入图片描述

    三、原码解析

    工程文件(包含图标)已经上传GitHub,通过git直接拉取即可

    git clone https://github.com/dhn111/EasyWord.git
    
    • 1

    mainwindow.h

    #ifndef MAINWINDOW_H
    #define MAINWINDOW_H
    
    #include 
    #include 
    #include 
    #include 
    #include 
    #include 
    #include 
    #include 
    #include 
    #include 
    #include 
    #include 
    #include "showwidget.h"
    #include 
    #include 
    #include 
    #include 
    #include   //打印文本
    #include 
    #include 
    #include                //打印图片
    
    class MainWindow : public QMainWindow
    {
        Q_OBJECT
    
    public:
        MainWindow(QWidget *parent = 0);
        ~MainWindow();
        void createActions();       //创建动作
        void createMenus();         //创建菜单
        void createToolBars ();     //创建工具栏
        void loadFile(QString filename);
        void mergeFormat(QTextCharFormat);
    
    private:
        QMenu *fileMenu;                     //各项菜单栏
        QMenu *zoomMenu;
        QMenu *rotateMenu;
        QMenu *mirrorMenu;
        QImage img;
        QString fileName;
        ShowWidget *showWidget;
        QAction *openFileAction;          //文件菜单项
        QAction *NewFileAction;
        QAction *PrintTextAction;
        QAction *PrintImageAction;
        QAction *exitAction;
        QAction *copyAction;           //编辑菜单项
        QAction *cutAction;
        QAction *pasteAction;
        QAction *aboutAction;
        QAction *zoomInAction;
        QAction *zoomOutAction;
        QAction *rotate90Action;       //旋转菜单项
        QAction *rotate180Action;
        QAction *rotate270Action;
        QAction *mirrorVerticalAction;     //镜像菜单项
        QAction *mirrorHorizontalAction;
        QAction *undoAction;
        QAction *redoAction;
        QToolBar *fileTool;              //工具栏
        QToolBar *zoomTool;
        QToolBar *rotateTool;
        QToolBar *mirrorTool;
        QToolBar *doToolBar;
    private slots:
    void ShowNewFile();
    void ShowOpenFile();
    void ShowPrintText();
    void ShowPrintImage();
    
    };
    
    #endif // MAINWINDOW_H
    
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41
    • 42
    • 43
    • 44
    • 45
    • 46
    • 47
    • 48
    • 49
    • 50
    • 51
    • 52
    • 53
    • 54
    • 55
    • 56
    • 57
    • 58
    • 59
    • 60
    • 61
    • 62
    • 63
    • 64
    • 65
    • 66
    • 67
    • 68
    • 69
    • 70
    • 71
    • 72
    • 73
    • 74
    • 75
    • 76
    • 77
    • 78
    • 79
    • 80

    showwidget.h

    #ifndef SHOWWIDGET_H
    #define SHOWWIDGET_H
    
    #include 
    #include 
    #include 
    #include 
    #include 
    class ShowWidget : public QWidget
    {
        Q_OBJECT
    public:
        explicit ShowWidget(QWidget *parent = nullptr);
    
        QImage img;
        QLabel *imageLabel;
        QTextEdit *text;
    
    
    signals:
    
    public slots:
    };
    
    #endif // SHOWWIDGET_H
    
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27

    main.cpp

    #include "mainwindow.h"
    #include 
    
    int main(int argc, char *argv[])
    {
        QApplication a(argc, argv);
        MainWindow w;
        w.show();
    
        return a.exec();
    }
    
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13

    mainwindow.cpp

    #include "mainwindow.h"
    
    MainWindow::MainWindow(QWidget *parent)
        : QMainWindow(parent)
    {
    
        //各项菜单栏
        fileMenu = new QMenu;
        zoomMenu = new QMenu;
        rotateMenu = new QMenu;
        mirrorMenu = new QMenu;
        showWidget = new ShowWidget;
    
    
        //文件菜单
        openFileAction =new QAction;
        NewFileAction  =new QAction;
        PrintTextAction =new QAction;
        PrintImageAction =new QAction;
        exitAction       = new QAction;
    
         //缩放菜单
         copyAction   =new QAction;
         cutAction    =new QAction;
         pasteAction  =new QAction;
         aboutAction  =new QAction;
         zoomInAction =new QAction;
         zoomOutAction=new QAction;
    
         //旋转菜单项
         rotate90Action =new QAction;
         rotate180Action=new QAction;
         rotate270Action=new QAction;
    
         //镜像菜单项
         mirrorVerticalAction  =new QAction;
         mirrorHorizontalAction=new QAction;
         undoAction  =new QAction;
         redoAction  =new QAction;
    
         //工具栏
         fileTool = new  QToolBar;
         zoomTool = new  QToolBar;
         rotateTool = new  QToolBar;
         mirrorTool = new  QToolBar;
         doToolBar = new  QToolBar;
    
        setWindowTitle(tr("Easy Word"));  //设置窗体标题
        showWidget =new ShowWidget(this); //(a)
        setCentralWidget(showWidget);
        /*创建动作、菜单、工具栏的函数*/
        createActions() ;
        createMenus();
        createToolBars();
        if(img.load(":/src/PKQ.png"))
        {
            //在 imageLabel 对象中放置图片
            showWidget->imageLabel->setPixmap(QPixmap::fromImage(img));
        }
    }
    
    MainWindow::~MainWindow()
    {
    
    }
    
    void MainWindow::createActions()
    {
        //“打开”动作
        openFileAction =new QAction(QIcon(":/src/open.png"),tr("打开"),this);  //(a)
        openFileAction->setShortcut (tr ("Ctrl+O"));                      //(b)
        openFileAction->setStatusTip(tr("打开一个文件 "));                 //(c)
        connect(openFileAction,SIGNAL(triggered()),this,SLOT(ShowOpenFile()));
    
        //"新建“动作
        NewFileAction =new QAction(QIcon(":/src/new.png"),tr("新建"),this);
        NewFileAction->setShortcut(tr("Ctrl+N"));
        NewFileAction->setStatusTip(tr("新建一个文件"));
        connect(NewFileAction, SIGNAL (triggered()) , this, SLOT (ShowNewFile())) ;
    
        // "退出“动作
        exitAction =new QAction(tr("退出"),this);
        exitAction->setShortcut(tr("Ctrl+Q"));
        exitAction->setStatusTip(tr("退出程序")) ;
        connect (exitAction, SIGNAL (triggered()), this, SLOT (close()));
        // "复制”动作
        copyAction =new QAction(QIcon(":/src/copy.png"),tr("复制"),this);
        copyAction->setShortcut(tr("Ctrl+C"));
        copyAction->setStatusTip(tr(" 复制文件")) ;
        connect(copyAction,SIGNAL( triggered ()), showWidget->text, SLOT(copy()));
        //"剪切“动作
        cutAction =new QAction(QIcon(":/src/cut.png"),tr("剪切"),this);
        cutAction->setShortcut(tr("Ctrl+X"));
        cutAction->setStatusTip(tr("剪切文件")) ;
        connect(cutAction,SIGNAL( triggered ()), showWidget->text, SLOT (cut()));
        //"粘贴“动作
        pasteAction =new QAction(QIcon(":/src/paste.png"),tr("粘贴"),this);
        pasteAction->setShortcut(tr("Ctrl+V"));
        pasteAction->setStatusTip(tr("粘贴文件")) ;
        connect(pasteAction,SIGNAL(triggered()),showWidget->text,SLOT (paste()));
        //"关于“动作
        aboutAction =new QAction(tr("关于"),this);
        connect(aboutAction,SIGNAL(triggered()),this,SLOT(QApplication::aboutQt()));
        //"打印文本“动作
        PrintTextAction =new QAction(QIcon(":/src/printText.png"),tr(" 打印文本"), this);
        PrintTextAction->setStatusTip(tr("打印一个文本"));
        connect (PrintTextAction, SIGNAL (triggered()), this, SLOT (ShowPrintText ()));
    
        //"打印图片“动作
        PrintImageAction =new QAction(QIcon (":/src/printimage.png" ), tr("打印图片"), this);
        PrintImageAction->setStatusTip(tr("打印一幅图片"));
        connect(PrintImageAction, SIGNAL (triggered()), this, SLOT (ShowPrintImage()));
    
        //"放大“动作
        zoomInAction =new QAction (QIcon(":/src/zoomin.png"),tr(" 放大 "),this);
        zoomInAction->setStatusTip(tr("放大一幅图片"));
        //"缩小“动作
        zoomOutAction =new QAction(QIcon(":/src/zoomout.png"),tr("缩小 "),this);
        zoomOutAction->setStatusTip(tr("缩小一幅图片 "));
        //实现图片旋转的动作 (Action)
        //旋转 90°
        rotate90Action =new QAction (QIcon (":/src/rotate90.png"), tr("旋转 90°") ,this);
        rotate90Action->setStatusTip(tr("将一幅图旋转90°"));
        //旋转180°
        rotate180Action =new QAction (QIcon(":/src/rotate180.png"), tr("旋转 180°"), this);
        rotate180Action->setStatusTip(tr("将一幅图旋转180°"));
        //旋转270°
        rotate270Action =new QAction(QIcon (":/src/rotate270.png"), tr("旋转 270°"), this);
        rotate270Action->setStatusTip(tr("将一幅图旋转 270°"));
        //实现图片镜像的动作(Action)
        //纵向镜像
        mirrorVerticalAction =new QAction(QIcon(":/src/mirrorVertical.png"),tr("纵向镜像"), this);
        //横向镜像
        mirrorHorizontalAction =new QAction(QIcon(":/src/mirrorHorizontal.png"),tr("横向镜像 "),this);
        mirrorHorizontalAction->setStatusTip( tr(" 对一幅图做横向镜像")) ;
        //实现撤销和重做的动作(ACtion)
        //撤销和重做
        undoAction =new QAction (QIcon(":/src/undo.png"),"撤销",this);
        connect(undoAction,SIGNAL(triggered()),showWidget->text,SLOT(undo()));
        redoAction =new QAction(QIcon(":/src/redo.png"),"重做",this);
        connect(redoAction, SIGNAL(triggered()),showWidget->text,SLOT(redo()));
    
    
    
    
    }
    
    void MainWindow::createMenus()
    {
        //文件菜单
    
        fileMenu =menuBar()->addMenu(tr("文件")) ;
        fileMenu->addAction(openFileAction);
        fileMenu->addAction(NewFileAction);
        fileMenu->addAction(PrintTextAction);
        fileMenu->addAction(PrintImageAction);
        fileMenu->addSeparator();
        fileMenu->addAction(exitAction);
        //缩放菜单
    
        zoomMenu =menuBar()->addMenu(tr("编辑")) ;
        zoomMenu->addAction(copyAction);
        zoomMenu->addAction(cutAction);
        zoomMenu->addAction(pasteAction);
        zoomMenu->addAction(aboutAction);
        zoomMenu->addSeparator();
        zoomMenu->addAction(zoomInAction);
        zoomMenu->addAction(zoomOutAction);
        //旋转菜单
        rotateMenu =menuBar ()->addMenu(tr("旋转")) ;
        rotateMenu->addAction(rotate90Action);
        rotateMenu->addAction(rotate180Action);
        rotateMenu->addAction(rotate270Action);
        //镜像菜单
        mirrorMenu =menuBar()->addMenu(tr(" 镜像")) ;
        mirrorMenu->addAction(mirrorVerticalAction);
        mirrorMenu->addAction(mirrorHorizontalAction);
    }
    
    
    void MainWindow::createToolBars()
    {
        //文件工具条
        fileTool =addToolBar("File");
        fileTool->addAction(openFileAction);
        fileTool->addAction(NewFileAction);
        fileTool->addAction(PrintTextAction);
        fileTool->addAction(PrintImageAction);
        //编辑工具条
        zoomTool =addToolBar("Edit");
        zoomTool->addAction(copyAction);
        zoomTool->addAction(cutAction);
        zoomTool->addAction(pasteAction);
        zoomTool->addSeparator();
        zoomTool->addAction(zoomInAction);
        zoomTool->addAction(zoomOutAction);
        //旋转工具条
        rotateTool =addToolBar("rotate");
        rotateTool->addAction(rotate90Action);
        rotateTool->addAction(rotate180Action);
        rotateTool->addAction(rotate270Action);
        //撤销和重做工具条
        doToolBar =addToolBar("doEdit");
        doToolBar->addAction(undoAction);
        doToolBar->addAction(redoAction);
    
    }
    
    void MainWindow::ShowNewFile()                  //新建文件的槽
    {
        MainWindow *newMainWindow =new MainWindow;
        newMainWindow->show();
    }
    void MainWindow::ShowOpenFile()                  //读取文件的槽
    {
        fileName =QFileDialog::getOpenFileName(this);
        if(!fileName.isEmpty())
        {
            if(showWidget->text->document()->isEmpty())
            {
                loadFile(fileName);
            }else
            {
                MainWindow *newMainWindows = new MainWindow;
                newMainWindows->show();
                newMainWindows->loadFile(fileName);
            }
    
    
        }
    }
    void MainWindow::loadFile(QString filename)
    {
    
         QFile  file(filename);
    
        if(file.open(QIODevice::ReadOnly|QIODevice::Text))
        {
             QTextStream textStream(&file);
            while(!textStream.atEnd())
            {
    
    
                showWidget->text->append(textStream.readLine());
    
    
            }
    
    
        }
    }
    void MainWindow::ShowPrintText()             //文本打印
    {
        QPrinter printer;                      //新建一个 QPrinter 对象
        QPrintDialog printDialog(&printer,this); //创建一个 QPrintDialog 对象,
                                                //参数为 QPrinter对象。
        if(printDialog.exec())//判断标准打印对话框显示后用户是否单击“打印”按钮。若单击
                              //“打印”按钮,则相关打印属性将可以通过创建 QPrintDialog 对象时使用的
                              //QPrinter 对象获得;若用户单击“取消”按钮,则不执行后续的打印操作。
        {
            //获得QTextEdit对象的文档
            QTextDocument *doc =showWidget->text->document();
            doc->print(&printer); //打印
        }
    }
    
    void MainWindow::ShowPrintImage()           //图像打印
    {
        QPrinter printer;                    //新建一个 QPrinter 对象
        QPrintDialog printDialog(&printer,this);  //创建一个 QPrintDialog 对象,
                                                 // 参数为 QPrinter对象。
        if(printDialog.exec())   // 判断打印对话框显示后用户是否单击
        {
            QPainter painter(&printer);     //创建一个 QPainter 对象,并指定绘图设备为
                                            //一个QPrinte对象。
            QRect rect =painter.viewport();   //获得QPainter对象的视图矩形区域
            QSize size = img.size();          //获得图像的大小
            /*按照图形的比例大小重新设置视图矩形区域*/
            size.scale(rect.size(), Qt::KeepAspectRatio);
            painter.setViewport(rect.x(),rect.y(),size.width(),size.height());
            ///设置 QPainter 窗口大小为图像的大小
            painter.setWindow(img.rect());
            ///打印图像
            painter.drawImage(0,0,img);
    
        }
    }
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41
    • 42
    • 43
    • 44
    • 45
    • 46
    • 47
    • 48
    • 49
    • 50
    • 51
    • 52
    • 53
    • 54
    • 55
    • 56
    • 57
    • 58
    • 59
    • 60
    • 61
    • 62
    • 63
    • 64
    • 65
    • 66
    • 67
    • 68
    • 69
    • 70
    • 71
    • 72
    • 73
    • 74
    • 75
    • 76
    • 77
    • 78
    • 79
    • 80
    • 81
    • 82
    • 83
    • 84
    • 85
    • 86
    • 87
    • 88
    • 89
    • 90
    • 91
    • 92
    • 93
    • 94
    • 95
    • 96
    • 97
    • 98
    • 99
    • 100
    • 101
    • 102
    • 103
    • 104
    • 105
    • 106
    • 107
    • 108
    • 109
    • 110
    • 111
    • 112
    • 113
    • 114
    • 115
    • 116
    • 117
    • 118
    • 119
    • 120
    • 121
    • 122
    • 123
    • 124
    • 125
    • 126
    • 127
    • 128
    • 129
    • 130
    • 131
    • 132
    • 133
    • 134
    • 135
    • 136
    • 137
    • 138
    • 139
    • 140
    • 141
    • 142
    • 143
    • 144
    • 145
    • 146
    • 147
    • 148
    • 149
    • 150
    • 151
    • 152
    • 153
    • 154
    • 155
    • 156
    • 157
    • 158
    • 159
    • 160
    • 161
    • 162
    • 163
    • 164
    • 165
    • 166
    • 167
    • 168
    • 169
    • 170
    • 171
    • 172
    • 173
    • 174
    • 175
    • 176
    • 177
    • 178
    • 179
    • 180
    • 181
    • 182
    • 183
    • 184
    • 185
    • 186
    • 187
    • 188
    • 189
    • 190
    • 191
    • 192
    • 193
    • 194
    • 195
    • 196
    • 197
    • 198
    • 199
    • 200
    • 201
    • 202
    • 203
    • 204
    • 205
    • 206
    • 207
    • 208
    • 209
    • 210
    • 211
    • 212
    • 213
    • 214
    • 215
    • 216
    • 217
    • 218
    • 219
    • 220
    • 221
    • 222
    • 223
    • 224
    • 225
    • 226
    • 227
    • 228
    • 229
    • 230
    • 231
    • 232
    • 233
    • 234
    • 235
    • 236
    • 237
    • 238
    • 239
    • 240
    • 241
    • 242
    • 243
    • 244
    • 245
    • 246
    • 247
    • 248
    • 249
    • 250
    • 251
    • 252
    • 253
    • 254
    • 255
    • 256
    • 257
    • 258
    • 259
    • 260
    • 261
    • 262
    • 263
    • 264
    • 265
    • 266
    • 267
    • 268
    • 269
    • 270
    • 271
    • 272
    • 273
    • 274
    • 275
    • 276
    • 277
    • 278
    • 279
    • 280
    • 281
    • 282
    • 283
    • 284
    • 285
    • 286
    • 287
    • 288

    showwidget.cpp

    #include "showwidget.h"
    
    ShowWidget::ShowWidget(QWidget *parent) : QWidget(parent)
    {
        imageLabel =new QLabel;
        imageLabel->setScaledContents( true);
        text =new QTextEdit;
        QHBoxLayout *mainLayout =new QHBoxLayout(this);
        mainLayout->addWidget(imageLabel);
        mainLayout->addWidget(text);
    }
    
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13

    四、总结

    窗口构成会在应用程序开发中经常用到的

  • 相关阅读:
    《深度学习进阶 自然语言处理》第七章:seq2seq介绍
    Flink 集群部署
    WEB基础及http协议(Apache)
    【C语言经典100题#4】判断三角形
    【JAVA进阶篇教学】第三篇:JDK8中Stream API使用
    CC++——map的基本操作总结
    Redis-企业级解决方案
    c语言进制的转换10进制转换16进制
    【NLP学习记录】One-Hot编码
    全链路性能测试:Nginx 负载均衡的性能分析和调优
  • 原文地址:https://blog.csdn.net/weixin_44759598/article/details/126704029