pos機(jī)業(yè)務(wù)開發(fā)

 新聞資訊3  |   2023-08-20 14:35  |  投稿人:pos機(jī)之家

網(wǎng)上有很多關(guān)于pos機(jī)業(yè)務(wù)開發(fā),Qt開發(fā)——NotePad實(shí)例開發(fā)的知識,也有很多人為大家解答關(guān)于pos機(jī)業(yè)務(wù)開發(fā)的問題,今天pos機(jī)之家(www.bulldancerbisonranch.com)為大家整理了關(guān)于這方面的知識,讓我們一起來看下吧!

本文目錄一覽:

1、pos機(jī)業(yè)務(wù)開發(fā)

pos機(jī)業(yè)務(wù)開發(fā)

一、界面開發(fā)

NotePad使用主窗口作為頂層窗口組件,使用QMainWindow作為基類,QMainWindow內(nèi)部封裝了菜單欄、工具欄、中央組件、停靠組件、狀態(tài)欄等。QMainWindow內(nèi)置了布局管理器,基本的組件布局如下:

使用二階構(gòu)造模式構(gòu)建NotePad界面。

MainWindow::MainWindow(){resize(800, 600);}MainWindow::~MainWindow(){}MainWindow* MainWindow::newInstance(){MainWindow* ret = new MainWindow();if((ret == NULL) || (!ret->construct())){delete ret;ret = NULL;}return ret;}bool MainWindow::construct(){bool ret = true;ret = ret && initMenuBar();//菜單欄構(gòu)建ret = ret && initToolBar();//工具欄構(gòu)建ret = ret && initStatusBar();//狀態(tài)欄構(gòu)建ret = ret && initMainEditor();//中央組件構(gòu)建return ret;}

1、菜單欄

QT中提供了預(yù)定義的與菜單相關(guān)的類組件,菜單欄QMenuBar,下拉菜單QMenu,菜單項(xiàng)QAction。

    QMenuBar* mb = menuBar();    QMenu* menu = new QMenu("File(&F)");    QAction *action = new QAction(text, NULL);    menu->addAction(action);    mb->addMenu(menu);

快捷鍵設(shè)置

action->setShortcut(QKeySequence(KEY));

QKeySequence是QT中與快捷鍵相關(guān)的類,KEY是QT中代表鍵值的常量。

NotePad菜單欄共有文件、編輯、格式、查看、幫助五組下拉菜單,每組下拉菜單使用一個函數(shù)構(gòu)建。

bool MainWindow::initMenuBar(){bool ret = true;QMenuBar *mb = menuBar();ret = ret && initFileMenu(mb);ret = ret && initEditMenu(mb);ret = ret && initFormatMenu(mb);ret = ret && initViewMenu(mb);ret = ret && initHelpMenu(mb);return ret;}bool MainWindow::initFileMenu(QMenuBar *mb){QMenu *menu = new QMenu("File(&F)");bool ret = (menu != NULL);if(ret){QAction *action = NULL;ret = ret && makeAction(action, "New(&N)", Qt::CTRL + Qt::Key_N);if(ret){menu->addAction(action);}ret = ret && makeAction(action, "Open(&O)", Qt::CTRL + Qt::Key_O);if(ret){menu->addAction(action);}ret = ret && makeAction(action, "Save(&S)", Qt::CTRL + Qt::Key_S);if(ret){menu->addAction(action);}ret = ret && makeAction(action, "Save As(&A)", 0);if(ret){menu->addAction(action);}menu->addSeparator();ret = ret && makeAction(action, "Page Setting(&U)", 0);if(ret){menu->addAction(action);}ret = ret && makeAction(action, "Print(&P)", Qt::CTRL + Qt::Key_P);if(ret){menu->addAction(action);}menu->addSeparator();ret = ret && makeAction(action, "Exit(&X)", 0);if(ret){menu->addAction(action);}}if(ret){mb->addMenu(menu);}else{delete menu;}return ret;}bool MainWindow::makeAction(QAction *&action, QString text, int key){bool ret = true;action = new QAction(text, NULL);if(action != NULL){action->setShortcut(QKeySequence(key));}else{ret = false;}return ret;}bool MainWindow::initEditMenu(QMenuBar *mb){QMenu *menu = new QMenu("Edit(&E)", NULL);bool ret = (menu != NULL);if(ret){QAction *action = NULL;ret = ret && makeAction(action, "Undo(&U)", Qt::CTRL + Qt::Key_Z);if(ret){menu->addAction(action);}menu->addSeparator();ret = ret && makeAction(action, "Cut(&T)", Qt::CTRL + Qt::Key_X);if(ret){menu->addAction(action);}ret = ret && makeAction(action, "copy(&C)", Qt::CTRL + Qt::Key_C);if(ret){menu->addAction(action);}ret = ret && makeAction(action, "Paste(&P)", Qt::CTRL + Qt::Key_V);if(ret){menu->addAction(action);}ret = ret && makeAction(action, "Delete(&L)", Qt::Key_Delete);if(ret){menu->addAction(action);}menu->addSeparator();ret = ret && makeAction(action, "Find(&F)", Qt::CTRL + Qt::Key_F);if(ret){menu->addAction(action);}ret = ret && makeAction(action, "Find Next(&N)", Qt::Key_F3);if(ret){menu->addAction(action);}ret = ret && makeAction(action, "Replace(&R)", Qt::CTRL + Qt::Key_H);if(ret){menu->addAction(action);}ret = ret && makeAction(action, "Goto(&G)", Qt::CTRL + Qt::Key_G);if(ret){menu->addAction(action);}menu->addSeparator();ret = ret && makeAction(action, "All(&A)", Qt::CTRL + Qt::Key_A);if(ret){menu->addAction(action);}ret = ret && makeAction(action, "Time/Date(&D)", Qt::Key_F5);if(ret){menu->addAction(action);}}if(ret){mb->addMenu(menu);}else{delete menu;}return ret;}bool MainWindow::initFormatMenu(QMenuBar *mb){QMenu *menu = new QMenu("Format(&O)", NULL);bool ret = (menu != NULL);if(ret){QAction *action = NULL;ret = ret && makeAction(action, "Auto Wrap(&W)", 0);if(ret){menu->addAction(action);}menu->addSeparator();ret = ret && makeAction(action, "Font(&F)", 0);if(ret){menu->addAction(action);}}if(ret){mb->addMenu(menu);}else{delete menu;}return ret;}bool MainWindow::initViewMenu(QMenuBar *mb){QMenu *menu = new QMenu("View(&V)", NULL);bool ret = (menu != NULL);if(ret){QAction *action = NULL;ret = ret && makeAction(action, "Status(&S)", 0);if(ret){menu->addAction(action);}}if(ret){mb->addMenu(menu);}else{delete menu;}return ret;}bool MainWindow::initHelpMenu(QMenuBar *mb){QMenu *menu = new QMenu("Help(&H)", NULL);bool ret = (menu != NULL);if(ret){QAction *action = NULL;ret = ret && makeAction(action, "Help(&H)", 0);if(ret){menu->addAction(action);}menu->addSeparator();ret = ret && makeAction(action, "About NotePad(&A)", 0);if(ret){menu->addAction(action);}}if(ret){mb->addMenu(menu);}else{delete menu;}return ret;}

2、工具欄

工具欄是應(yīng)用程序中集成各種功能使用快捷方式的區(qū)域,不是應(yīng)用程序必須存在的組件,工具欄的元素可以是各種窗口組件,但通常以圖標(biāo)按鈕的方式存在。

QT中提供了預(yù)定義的工具欄相關(guān)組件,工具欄QToolBar和快捷項(xiàng)QAction。

    //創(chuàng)建工具欄    QToolBar *tb = addToolBar("ToolBar");        //創(chuàng)建工具欄選項(xiàng)        QAction *action = new QAction("", NULL);    action->setToolTip(“Open”);    action->setIcon(QIcon(“/res/pic/open.png”));        //將工具欄選項(xiàng)加入工具欄    tb->addAction(action);    void setFloatable(bool floatable)設(shè)置工具欄為浮動    void setMovable(bool movable)設(shè)置工具欄為可移動    void setIconSize(const QSize & iconSize)設(shè)置工具欄的圖標(biāo)大小    QTollBar組件中可以加入QT中的任意QWidget組件。    將菜單欄中的主要常用功能添加到工具欄中,按照功能所屬的菜單欄進(jìn)行分組創(chuàng)建。bool MainWindow::initToolBar(){bool ret = true;QToolBar *tb = addToolBar("ToolBar");tb->setMovable(false);tb->setIconSize(QSize(16, 16));ret = ret && initFileToolItem(tb);//創(chuàng)建文件菜單欄的功能到工具欄ret = ret && initEditToolItem(tb);//創(chuàng)建編輯菜單欄到工具欄ret = ret && initFormatToolItem(tb);//創(chuàng)建格式菜單欄到工具欄ret = ret && initViewToolItem(tb);//創(chuàng)建查看菜單欄到工具欄return ret;}bool MainWindow::initFileToolItem(QToolBar *tb){bool ret = true;QAction *action = NULL;ret = ret && makeAction(action, "New", ":/res/pic/new.png");if( ret ){tb->addAction(action);}ret = ret && makeAction(action, "Open", ":/res/pic/open.png");if( ret ){tb->addAction(action);}ret = ret && makeAction(action, "Save", ":/res/pic/save.png");if( ret ){tb->addAction(action);}ret = ret && makeAction(action, "SaveAs", ":/res/pic/saveas.png");if( ret ){tb->addAction(action);}ret = ret && makeAction(action, "Print", ":/res/pic/print.png");if( ret ){tb->addAction(action);}tb->addSeparator();return ret;}bool MainWindow::initEditToolItem(QToolBar* tb){bool ret = true;QAction *action = NULL;ret = ret && makeAction(action, "Undo", ":/res/pic/undo.png");if( ret ){tb->addAction(action);}ret = ret && makeAction(action, "Redo", ":/res/pic/redo.png");if( ret ){tb->addAction(action);}ret = ret && makeAction(action, "Cut", ":/res/pic/cut.png");if( ret ){tb->addAction(action);}ret = ret && makeAction(action, "Copy", ":/res/pic/copy.png");if( ret ){tb->addAction(action);}ret = ret && makeAction(action, "Paste", ":/res/pic/paste.png");if( ret ){tb->addAction(action);}ret = ret && makeAction(action, "Find", ":/res/pic/find.png");if( ret ){tb->addAction(action);}ret = ret && makeAction(action, "Replace", ":/res/pic/replace.png");if( ret ){tb->addAction(action);}ret = ret && makeAction(action, "Goto", ":/res/pic/goto.png");if( ret ){tb->addAction(action);}tb->addSeparator();return ret;}bool MainWindow::initFormatToolItem(QToolBar* tb){bool ret = true;QAction *action = NULL;ret = ret && makeAction(action, "Auto Wrap", ":/res/pic/wrap.png");if( ret ){tb->addAction(action);}ret = ret && makeAction(action, "Font", ":/res/pic/font.png");if( ret ){tb->addAction(action);}tb->addSeparator();return ret;}bool MainWindow::initViewToolItem(QToolBar* tb){bool ret = true;QAction *action = NULL;ret = ret && makeAction(action, "ToolBar", ":/res/pic/tool.png");if( ret ){tb->addAction(action);}ret = ret && makeAction(action, "Status", ":/res/pic/status.png");if( ret ){tb->addAction(action);}return ret;}bool MainWindow::makeAction(QAction*& action, QString tip, QString icon){bool ret = true;action = new QAction("", NULL);if( action != NULL ){action->setToolTip(tip);action->setIcon(QIcon(icon));}else{ret = false;}return ret;}

3、狀態(tài)欄

狀態(tài)欄是應(yīng)用程序中輸出簡要信息的區(qū)域,一般位于窗口的底部。狀態(tài)欄顯示的消息類型如下:

A、實(shí)時消息,如當(dāng)前程序狀態(tài)

B、永久消息,如程序版本,開發(fā)機(jī)構(gòu)

C、進(jìn)度消息,進(jìn)度顯示

QT中提供了預(yù)定義的狀態(tài)欄相關(guān)組件狀態(tài)欄QStatusBar,QStatusBar是容器型組件,可以是任意組件QWidget的父組件。

QT狀態(tài)欄的一般設(shè)計(jì)原則:

A、狀態(tài)欄左邊區(qū)域用于輸出實(shí)時消息

B、狀態(tài)欄右邊區(qū)域用于輸出永久消息

因此,addWidget函數(shù)用于在狀態(tài)欄左邊區(qū)域添加組件,addPermanentWidget函數(shù)用于在狀態(tài)欄右邊區(qū)域添加組件。

bool MainWindow::initStatusBar(){bool ret = true;QStatusBar *sb = statusBar();QLabel *label = new QLabel("CopyRight @Scorpio Studio");if(label != NULL){label->setMinimumwidth="360px",height="auto" />

4、中央組件

中央組件是多行文本編組件,使用QPlainTextEdit組件。

bool MainWindow::initMainEditor(){bool ret = true;//設(shè)置mainEditor的父組件mainEditor.setParent(this);//設(shè)置中央組件為mainEditorsetCentralWidget(&mainEditor);//設(shè)置mainEditor的背景色為豆沙綠QPalette p = mainEditor.palette();p.setColor(QPalette::Base, QColor(204, 232, 207));mainEditor.setPalette(p);return ret;}

二、核心功能開發(fā)

1、信號與槽函數(shù)

考慮到用戶界面與業(yè)務(wù)邏輯代碼的分離,槽函數(shù)實(shí)現(xiàn)需要與界面實(shí)現(xiàn)向分離,槽函數(shù)在新建MainwWindowSlots.cpp文件中實(shí)現(xiàn),界面文件名稱改為MainWindowUI.cpp。

菜單欄與工具欄中的QAction對象在鼠標(biāo)點(diǎn)擊后會發(fā)送triggered()信號,通過信號與槽機(jī)制可以實(shí)現(xiàn)對QAction對象的操作的處理。

connect(action, SIGNAL(triggered()), this, SLOT(slotfunction));

在QAction對象創(chuàng)建的時候連接信號與槽函數(shù)。

2、文件的存取操作

創(chuàng)建文件對話框:

QString MainWindow::createFileDialog(QFileDialog::AcceptMode mode, QString title){QString ret = "";QFileDialog filedialog(this);QStringList filter;filter.append("Text Files (*.txt)");filter.append("All Files (*.*)");filedialog.setWindowTitle(title);filedialog.setAcceptMode(mode);filedialog.setNameFilters(filter);if(mode == QFileDialog::AcceptOpen){filedialog.setFileMode(QFileDialog::ExistingFile);}if(filedialog.exec() == QFileDialog::Accepted){ret = filedialog.selectedFiles()[0];}return ret;}

錯誤消息提示框:

void MainWindow::showErrorMessage(const QString& title, const QString & text, QMessageBox::StandardButtons buttons){QMessageBox::critical(this, title, text, buttons);}

打開文件:

void MainWindow::onFileOpen(){QString path = createFileDialog(QFileDialog::AcceptOpen, "Open");if(path != ""){QFile file(path);if(file.open(QIODevice::ReadOnly | QIODevice::Text)){mainEditor.setPlainText(QString(file.readAll()));file.close();m_filepath = path;setWindowTitle("NotePad - [" + m_filepath + "]");}else{showErrorMessage(QString("Error"), QString("Open file error: " + m_filepath), QMessageBox::Ok);}}}

保存文件:

void MainWindow::onFileSave(){if(m_filepath == ""){m_filepath = createFileDialog(QFileDialog::AcceptSave, "Save");}if(m_filepath != ""){QFile file(m_filepath);if(file.open(QIODevice::WriteOnly | QIODevice::Text)){QTextStream out(&file);out << mainEditor.toPlainText();file.close();setWindowTitle("NotePad - [ " + m_filepath + " ]");}else{showErrorMessage(QString("Error"), QString("Save file error: " + m_filepath), QMessageBox::Ok);m_filepath = "";}}}

另存文件:

void MainWindow::onFileSaveAs(){QString path = createFileDialog(QFileDialog::AcceptSave, "Save As");if(path != ""){QFile file(path);if(file.open(QIODevice::WriteOnly | QIODevice::Text)){QTextStream out(&file);out << mainEditor.toPlainText();file.close();m_filepath = path;setWindowTitle("NotePad - [ " + m_filepath + " ]");}else{showErrorMessage(QString("Error"), QString("Save as error: " + m_filepath), QMessageBox::Ok);}}}

創(chuàng)建新文件:

void MainWindow::onFileNew(){preTextChanged();if(!m_isTextChanged){mainEditor.clear();setWindowTitle("NotePad - [New ]");m_filepath = "";m_isTextChanged = false;}}

3、編輯區(qū)的數(shù)據(jù)交互

    QPlainTextEdit編輯器組件提供了編輯交互功能接口。    QPlainTextEdit內(nèi)置的信號如下:    void textChanged()    void copyAvailable(bool yes)    void redoAvailable(bool available)    void undoAvailable(bool available)    void cursorPositionChanged()        void modificationChanged(bool changed)    QPlainTextEdit內(nèi)置的槽函數(shù)如下:    void copy()    void cut()    void paste()    void redo()    void selectAll()    void undo()

將菜單欄、工具欄中的copy、cut、paste、redo、undo等編輯操作QAction對象的triggered()信號連接到QPlainTextEdit對象的相應(yīng)操作的槽函數(shù),即可實(shí)現(xiàn)編輯操作。

    connect(action, SIGNAL(triggered(bool)), &mainEditor, SLOT(undo());    connect(action, SIGNAL(triggered()), &mainEditor, SLOT(cut()));    connect(action, SIGNAL(triggered()), &mainEditor, SLOT(copy()));    connect(action, SIGNAL(triggered()), &mainEditor, SLOT(paste());

工具欄QAction對象的界面狀態(tài)的設(shè)置

在創(chuàng)建Copy、Undo、Redo的QAction對象時設(shè)置為不可用狀態(tài)。

將QPlainTextEdit對象的copyAvailable、undoAvailable、redoAvailable信號連接到自定義槽函數(shù)。

   connect(&mainEditor, SIGNAL(copyAvailable(bool)), this, SLOT(onCopyAvailable(bool)));   connect(&mainEditor, SIGNAL(undoAvailable(bool)), this, SLOT(onUndoAvailable(bool)));   connect(&mainEditor, SIGNAL(redoAvailable(bool)), this, SLOT(onRedoAvailable(bool)));

在自定義槽函數(shù)中根據(jù)信號的參數(shù)available設(shè)置QAction對象的狀態(tài)

void MainWindow::onCopyAvailable(bool available){findMenuBarItem("Copy")->setEnabled(available);findMenuBarItem("Cut")->setEnabled(available);findToolBarItem("Copy")->setEnabled(available);findToolBarItem("Cut")->setEnabled(available);}void MainWindow::onUndoAvailable(bool available){findMenuBarItem("Undo")->setEnabled(available);findToolBarItem("Undo")->setEnabled(available);}void MainWindow::onRedoAvailable(bool available){findToolBarItem("Redo")->setEnabled(available);}

4、拖放支持

拖放一個文件進(jìn)入窗口時將觸發(fā)拖放事件,QWidget對象都能處理拖放事件。

設(shè)置窗口支持拖放事件:

在構(gòu)造函數(shù)調(diào)用setAcceptDrops(true);

重寫拖放事件的處理函數(shù):

void dragEnterEvent(QDragEnterEvent *event);

void dropEvent(QDropEvent *event);

默認(rèn)情況下,QPlainTextEdit接受來自其他應(yīng)用程序拖拽來的文本,把文件名顯示出來。由于DropEvent是由子組件向父組件傳播的,通過禁止QPlainTextEdit的DropEvent,主窗口可以獲取DropEvent,MainWindow中就可以處理DropEvent。

在MainWwindow構(gòu)造函數(shù)中需要禁止QPlainTextEdit接受DropEvent,允許MainWindow接受DropEvent。

mainEditor.setAcceptDrops(false);

setAcceptDrops(true);

重寫事件處理函數(shù):

void MainWindow::dragEnterEvent(QDragEnterEvent *event){if(event->mimeData()->hasFormat("text/uri-list")){event->acceptProposedAction();}else{event->ignore();}}void MainWindow::dropEvent(QDropEvent *event){if(event->mimeData()->hasUrls()){QList<QUrl> list = event->mimeData()->urls();QString path = list[0].toLocalFile();QFileInfo fi(path);if( fi.isFile() ){preTextChanged();if(!m_isTextChanged){loadFile(path);}}else{showMessage(this, QMessageBox::Critical, "Error", "Open file error", QMessageBox::Ok);}}else{event->ignore();}}

5、打印支持

QTextDocument是表示文本及文本屬性的數(shù)據(jù)類。可以設(shè)置文本屬性如:排版、字體、標(biāo)題;獲取文本參數(shù)如:行數(shù)、文本寬度、文本信息;實(shí)現(xiàn)標(biāo)準(zhǔn)操作如:撤銷、重做、查找、打印。

打印功能實(shí)現(xiàn)如下:

A、連接打印功能的QAction對象到打印功能槽函數(shù)

B、在打印槽函數(shù)中定義打印對話框

C、根據(jù)用戶選擇獲取QPrinter對象

D、使用QTextDocument對象進(jìn)行打印

void MainWindow::onPrint(){QPrintDialog printdialog(this);printdialog.setWindowTitle("Print");if(printdialog.exec() == QPrintDialog::Accepted){QPrinter *printer = printdialog.printer();mainEditor.document()->print(printer);}}

6、光標(biāo)定位

QPlainTextEdit編輯框內(nèi)部包含QTextCursor對象。

    [signal] void QPlainTextEdit::cursorPositionChanged()    QTextCursor QPlainTextEdit::textCursor() const    int QTextCursor::position() const void MainWindow::onCursorChanged(){int pos = mainEditor.textCursor().position();QString text = mainEditor.toPlainText();int colum = 0;int row = 0;int flag = -1;for(int i = 0; i < pos; i++){if( text[i] == '\' ){row++;flag = i;}}flag++;colum = pos - flag;m_status.setText("Line: " + QString::number(row + 1) + " Colum: " + QString::number(colum + 1));}

7、查找功能

1)查找對話框的功能:

A、可復(fù)用的組件

B、查找文本框中的指定字符串

C、能夠指定查找方向

D、支持大小寫敏感查找

(2)查找對話框架構(gòu)設(shè)計(jì)如下:

(3)查找對話框的界面布局:

4)查找功能的實(shí)現(xiàn):

A、獲取當(dāng)前光標(biāo)的位置作為起始點(diǎn)

B、查找目標(biāo)第一次出現(xiàn)的位置

C、通過目標(biāo)位置和目標(biāo)長度在文本框內(nèi)進(jìn)行標(biāo)記

QString類提供了字符串中查找子串的函數(shù):

int QString::indexOf(const QString &str, int from = 0, Qt::CaseSensitivity cs = Qt::CaseSensitive) const

從指定位置向后查找子串的下標(biāo)位置

int QString::lastIndexOf(const QString &str, int from = -1, Qt::CaseSensitivity cs = Qt::CaseSensitive) const

從指定位置向前查找子串的下標(biāo)位置

QPlainTextEdit文本框中選中子串的標(biāo)記

QTextCursor cursor = m_textedit->textCursor();//獲取當(dāng)前光標(biāo)

cursor.setPosition(index);//設(shè)置光標(biāo)到下標(biāo)index

cursor.setPosition(index + target.length(), QTextCursor::KeepAnchor);//設(shè)置文本選擇范圍

m_textedit->setTextCursor(cursor);//設(shè)置光標(biāo)信息到文本

(5)FindDailog類與MainWindow類的弱耦合關(guān)系

通過setPlainTextEdit(pText)設(shè)置FindDailog查找對話框指向的文本框,確立了FindDailog類與MainWindow類的弱耦合關(guān)系。

8、調(diào)色板設(shè)置

 //設(shè)置mainEditor的背景色為豆沙綠    QPalette p = mainEditor.palette();    p.setColor(QPalette::Base, QColor(204, 232, 207));    p.setColor(QPalette::Inactive, QPalette::Highlight, p.color(QPalette::Active, QPalette::Highlight));    p.setColor(QPalette::Inactive, QPalette::HighlightedText, p.color(QPalette::Active, QPalette::HighlightedText));    mainEditor.setPalette(p);

9、替換功能

替換對話框的功能:

A、可復(fù)用的組件

B、查找文本框中的字符串

C、替換當(dāng)前查找到的字符串

D、替換所有的字符串

E、點(diǎn)擊關(guān)閉按鈕后隱藏

替換對話框的架構(gòu)設(shè)計(jì):

考慮到FindDialog類代碼復(fù)用,RepalceDialog類繼承自FindDialog。

替換對話框界面設(shè)計(jì):

m_replacelabel.setText("Replace To:");m_replacebutton.setText("Replace");m_replaceallbutton.setText("Replace All");m_layout.removeWidget(&m_check);m_layout.removeWidget(&m_radiogroup);m_layout.removeWidget(&m_cancelbutton);m_layout.addWidget(&m_replacelabel, 1, 0);m_layout.addWidget(&m_replaceedit, 1, 1);m_layout.addWidget(&m_replacebutton, 1, 2);m_layout.addWidget(&m_check, 2, 0);m_layout.addWidget(&m_radiogroup, 2, 1);m_layout.addWidget(&m_replaceallbutton, 2, 2);m_layout.addWidget(&m_cancelbutton, 3, 2);

替換功能的實(shí)現(xiàn):

要實(shí)現(xiàn)替換操作,首先需要查找文本框中是否存在的字符串。如果存在字符串,則將鼠標(biāo)標(biāo)記的字符串替換。

void ReplaceDialog::onReplace(){QString target = m_edit.text();QString to = m_replaceedit.text();if((m_textedit != NULL) && (target != NULL) && (to != NULL)){QString select = m_textedit->textCursor().selectedText();if(select == target){m_textedit->insertPlainText(to);}onFind();}}void ReplaceDialog::onRepalceAll(){QString target = m_edit.text();QString to = m_replaceedit.text();if((m_textedit != NULL) && (target != NULL) && (to != NULL)){QString text = m_textedit->toPlainText();text.replace(target, to, m_check.isChecked() ? Qt::CaseSensitive : Qt::CaseInsensitive);m_textedit->clear();m_textedit->insertPlainText(text);}}

10、工具欄、狀態(tài)欄的顯示隱藏

在構(gòu)建菜單欄、工具欄中ToolBar、StatusBar的QAction對象時,設(shè)置QAction對象的屬性。

        action->setCheckable(true);        action->setChecked(true);        connect(action, SIGNAL(triggered()), this, SLOT(onViewToolBar()));

槽函數(shù)如下:

void MainWindow::onViewStatusBar(){QStatusBar *sb = statusBar();bool visible = sb->isVisible();sb->setVisible(!visible);findToolBarItem("Status Bar")->setChecked(!visible);findMenuBarItem("Status Bar")->setChecked(!visible);}void MainWindow::onViewToolBar(){const QObjectList& list = children();for(int i = 0; i < list.count(); i++){QToolBar *tb = dynamic_cast<QToolBar*>(list[i]);if(tb != NULL){bool visible = tb->isVisible();tb->setVisible(!visible);findMenuBarItem("Tool Bar")->setChecked(!visible);findToolBarItem("Tool Bar")->setChecked(!visible);break;}}}

11、關(guān)于對話框

關(guān)于對話框用于標(biāo)識軟件的信息,如:Logo、版本號、開發(fā)者信息、版權(quán)、聯(lián)系方式、項(xiàng)目信息等。

經(jīng)典的關(guān)于對話框界面設(shè)計(jì):

AboutDialog::AboutDialog(QWidget* parent):QDialog(parent, Qt::WindowCloseButtonHint), m_logo(this), m_info(this), m_close(this){QPixmap pm(":/res/pic/dt.png");pm = pm.scaled(120,120, Qt::KeepAspectRatio);m_logo.setPixmap(pm);m_logo.move(20, 20);m_logo.resize(120, 120);QPalette p = m_info.palette();p.setColor(QPalette::Active, QPalette::Base, palette().color(QPalette::Active, QPalette::Background));p.setColor(QPalette::Inactive, QPalette::Base, palette().color(QPalette::Inactive, QPalette::Background));m_info.setPalette(p);m_info.move(200, 30);m_info.resize(180, 130);m_info.setFrameStyle(QPlainTextEdit::NoFrame);m_info.setReadOnly(true);m_info.insertPlainText("NotePad Project\\Platform: Qt 5.6.2\\Version: 1.0.0\\Author: Scorpio");m_close.setText("Close");m_close.move(273, 175);m_close.resize(100, 30);setWindowTitle("About NotePad");setFixedSize(395, 230);connect(&m_close, SIGNAL(clicked()), this, SLOT(onClose()));}

12、字體設(shè)置

設(shè)置文本框中的字體的屬性。

字體設(shè)置通過QFontDialog對話框?qū)崿F(xiàn)

槽函數(shù)如下:

void MainWindow::onFormatFont(){bool ok = false;QFont font = QFontDialog::getFont(&ok, mainEditor.font(), this);if(ok){mainEditor.setFont(font);}}

13、換行

QPlainTextEdit支持換行操作。在菜單欄、工具欄創(chuàng)建QAction對象時設(shè)置屬性。

       action->setCheckable(true);        action->setChecked(true);        connect(action, SIGNAL(triggered()), this, SLOT(onFormatWrap()));槽函數(shù)如下:void MainWindow::onFormatWrap(){QPlainTextEdit::LineWrapMode mode = mainEditor.lineWrapMode();if(mode == QPlainTextEdit::NoWrap){mainEditor.setLineWrapMode(QPlainTextEdit::Widgetwidth="360px",height="auto" />

14、幫助文檔

QDesktopServices提供了一系列桌面開發(fā)的服務(wù)接口。

通過QDesktopServices的成員函數(shù)打開幫助文檔。

[static] bool QDesktopServices::openUrl(const QUrl &url)

打開網(wǎng)頁:

QDesktopServices::openUrl(QUrl("http://9291927.blog.51cto.com/"));

打開文檔:

QDesktopServices::openUrl(QUrl("file:///C:/Documents and Settings/All Users/Desktop/help.pdf"));

15、程序配置文件

程序狀態(tài)的保存可以通過在程序退出前保存程序狀態(tài)參數(shù)到文件(數(shù)據(jù)庫),程序啟動時從配置文件讀出狀態(tài)參數(shù)并恢復(fù)。

程序狀態(tài)參數(shù)的存儲方式:

A、文本文件格式(XML、Json等)

B、輕量級數(shù)據(jù)庫(Access、SQLite等)

C、二進(jìn)制文件格式

通過二進(jìn)制數(shù)據(jù)流將狀態(tài)參數(shù)直接存儲帶文件中。

Appconfig.h文件:

#ifndef APPCONFIG_H#define APPCONFIG_H#include <QObject>#include <QFont>#include <QFile>#include <QDataStream>#include <QApplication>class AppConfig : public QObject{Q_OBJECTpublic:explicit AppConfig(QObject *parent = 0);explicit AppConfig(QFont editorfont, bool isautowrap, bool istoolbarvisible, bool isstatusbarvisible, QObject *parent = 0);bool store();QFont editorFont();bool isAutoWrap();bool isToolBarVisible();bool isStatusBarVisible();bool isValid();private:bool restore();private:QFont m_editorFont;bool m_isAutoWrap;bool m_isToolBarVisible;bool m_isStatusBarVisible;bool m_isValid;};#endif // APPCONFIG_H

Appconfig.cpp文件:

#include "AppConfig.h"AppConfig::AppConfig(QObject *parent) : QObject(parent){m_isValid = restore();}AppConfig::AppConfig(QFont editorfont, bool isautowrap, bool istoolbarvisible, bool isstatusbarvisible, QObject *parent){m_editorFont = editorfont;m_isAutoWrap = isautowrap;m_isToolBarVisible = istoolbarvisible;m_isStatusBarVisible = isstatusbarvisible;m_isValid = true;}QFont AppConfig::editorFont(){return m_editorFont;}bool AppConfig::isAutoWrap(){return m_isAutoWrap;}bool AppConfig::isStatusBarVisible(){return m_isStatusBarVisible;}bool AppConfig::isToolBarVisible(){return m_isToolBarVisible;}bool AppConfig::isValid(){return m_isValid;}bool AppConfig::store(){bool ret = true;QFile file(QApplication::applicationDirPath() + "/config.dat");if(file.open(QIODevice::WriteOnly)){QDataStream out(&file);out.setVersion(QDataStream::Qt_5_6);out << m_editorFont;out << m_isAutoWrap;out << m_isToolBarVisible;out << m_isStatusBarVisible;file.close();}else{ret = false;}return ret;}bool AppConfig::restore(){bool ret = true;QFile file(QApplication::applicationDirPath() + "/config.dat");if(file.open(QIODevice::ReadOnly)){QDataStream in(&file);in.setVersion(QDataStream::Qt_5_6);in >> m_editorFont;in >> m_isAutoWrap;in >> m_isToolBarVisible;in >> m_isStatusBarVisible;file.close();}else{ret = false;}return ret;}

從配置文件的讀取狀態(tài)參數(shù)恢復(fù)程序狀態(tài)在構(gòu)造函數(shù)中:

bool MainWindow::construct(){bool ret = true;AppConfig config;ret = ret && initMenuBar();ret = ret && initToolBar();ret = ret && initStatusBar();ret = ret && initMainEditor();if(config.isValid()){mainEditor.setFont(config.editorFont());if(!config.isAutoWrap()){mainEditor.setLineWrapMode(QPlainTextEdit::NoWrap);findToolBarItem("Auto Wrap")->setCheckable(false);findMenuBarItem("Auto Wrap")->setChecked(false);}if(!config.isToolBarVisible()){toolBar()->setVisible(false);findMenuBarItem("Tool Bar")->setChecked(false);findToolBarItem("Tool Bar")->setChecked(false);}if(!config.isStatusBarVisible()){statusBar()->setVisible(false);findMenuBarItem("Status Bar")->setChecked(false);findToolBarItem("Status Bar")->setChecked(false);}}return ret;}

狀態(tài)參數(shù)保存到配置文件在析構(gòu)函數(shù)中:

MainWindow::~MainWindow(){QFont font = mainEditor.font();bool isautowrap = (mainEditor.lineWrapMode() == QPlainTextEdit::Widgetwidth="360px",height="auto" />

【領(lǐng)QT開發(fā)教程學(xué)習(xí)資料,點(diǎn)擊下方鏈接莬費(fèi)領(lǐng)取↓↓,先碼住不迷路~】

「鏈接」

以上就是關(guān)于pos機(jī)業(yè)務(wù)開發(fā),Qt開發(fā)——NotePad實(shí)例開發(fā)的知識,后面我們會繼續(xù)為大家整理關(guān)于pos機(jī)業(yè)務(wù)開發(fā)的知識,希望能夠幫助到大家!

轉(zhuǎn)發(fā)請帶上網(wǎng)址:http://www.bulldancerbisonranch.com/newstwo/101611.html

你可能會喜歡:

版權(quán)聲明:本文內(nèi)容由互聯(lián)網(wǎng)用戶自發(fā)貢獻(xiàn),該文觀點(diǎn)僅代表作者本人。本站僅提供信息存儲空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如發(fā)現(xiàn)本站有涉嫌抄襲侵權(quán)/違法違規(guī)的內(nèi)容, 請發(fā)送郵件至 babsan@163.com 舉報,一經(jīng)查實(shí),本站將立刻刪除。