📄 kognition.cpp
字号:
slotStatusMsg(i18n("Opening file...")); if(!doc->saveModified()) { } else { KURL url=KFileDialog::getOpenURL( CurrentDir, i18n("*|All files"), this, i18n("Open File...")); if(!url.isEmpty()) { CurrentDir=url.path(); doc->openDocument(url); setCaption(url.fileName(), false); fileOpenRecent->addURL( url ); } } slotStatusMsg(i18n("Ready."));}void KognitionApp::slotFileCreateNewDatabase(){ slotStatusMsg(i18n("Create new database from image ...")); if(!doc->saveModified()) { } else { KURL url=KFileDialog::getOpenURL(QString::null, i18n("*|All files"), this, i18n("Open image for new database definition ...")); if(!url.isEmpty()) { char_db.clear(); bool ok; QString str=KLineEditDlg::getText( QString( i18n("Characters to define:") ), CharDBString, &ok, this ); if( ok ) { doc->openDocument(url,str); setCaption(url.fileName(), false); fileOpenRecent->addURL( url ); } } } slotStatusMsg(i18n("Ready."));}void KognitionApp::slotFileAppendToDatabase(){ slotStatusMsg(i18n("Append character data from image to database ...")); if(!doc->saveModified()) { } else { KURL url=KFileDialog::getOpenURL(QString::null, i18n("*|All files"), this, i18n("Open image for integration into database ...")); if(!url.isEmpty()) { bool ok; QString str=KLineEditDlg::getText( QString( i18n("Characters to define:") ), CharDBString, &ok, this ); if( ok ) { doc->openDocument(url,str); setCaption(url.fileName(), false); fileOpenRecent->addURL( url ); } } } slotStatusMsg(i18n("Ready."));}void KognitionApp::slotFileSaveDatabaseAs(){ slotStatusMsg(i18n("Save database As ...")); QString db_file = KFileDialog::getSaveFileName(QString::null, i18n("*|All files"), this, i18n("Save database As ...")); if(!db_file.isEmpty()) char_db.write(db_file); slotStatusMsg(i18n("Ready."));}void KognitionApp::slotEditReplaceChar(){ doc->img->replace_char();}void KognitionApp::slotEditVariantChar(){ doc->img->append_variant_char();}void KognitionApp::slotFileOpenRecent(const KURL& url){ slotStatusMsg(i18n("Opening file...")); if(!doc->saveModified()) { } else { doc->openDocument(url); setCaption(url.fileName(), false); } slotStatusMsg(i18n("Ready."));}void KognitionApp::slotFileSave(){ slotStatusMsg(i18n("Saving file...")); doc->saveDocument(doc->URL()); slotStatusMsg(i18n("Ready."));}void KognitionApp::slotFileSaveAs(){ slotStatusMsg(i18n("Saving file with a new filename...")); KURL url=KFileDialog::getSaveURL(QDir::currentDirPath(), i18n("*|All files"), this, i18n("Save as...")); if(!url.isEmpty()) { doc->saveDocument(url); fileOpenRecent->addURL(url); setCaption(url.fileName(),doc->isModified()); } slotStatusMsg(i18n("Ready."));}void KognitionApp::slotFileClose(){ slotStatusMsg(i18n("Closing file...")); close(); slotStatusMsg(i18n("Ready."));}void KognitionApp::slotFilePrint(){ slotStatusMsg(i18n("Printing...")); QPrinter printer; if (printer.setup(this)) { } slotStatusMsg(i18n("Ready."));}void KognitionApp::slotFileQuit(){ slotFileClose();}void KognitionApp::slotEditCut(){ slotStatusMsg(i18n("Cutting selection...")); slotStatusMsg(i18n("Ready."));}void KognitionApp::slotEditCopy(){ slotStatusMsg(i18n("Copying selection to clipboard...")); slotStatusMsg(i18n("Ready."));}void KognitionApp::slotEditPaste(){ slotStatusMsg(i18n("Inserting clipboard contents...")); slotStatusMsg(i18n("Ready."));}void KognitionApp::slotViewToolBar(){ slotStatusMsg(i18n("Toggling toolbar...")); if(!viewToolBar->isChecked()) toolBar("mainToolBar")->hide(); else toolBar("mainToolBar")->show(); slotStatusMsg(i18n("Ready."));}void KognitionApp::slotViewStatusBar(){ slotStatusMsg(i18n("Toggle the statusbar...")); if(!viewStatusBar->isChecked()) statusBar()->hide(); else statusBar()->show(); slotStatusMsg(i18n("Ready."));}void KognitionApp::slotStatusMsg(const QString &text){ statusBar()->clear(); statusBar()->changeItem(text, ID_STATUS_MSG);}void KognitionApp::slotDebugImage(){ bool show = debugImage->isChecked(); if ( show ) doc->img->show(); else doc->img->hide(); debugBorderLists->setEnabled( show ); debugBorderAngles->setEnabled( show ); debugCrossSections->setEnabled( show ); debugSingularRegions->setEnabled( show ); debugSkeleton->setEnabled( show ); debugDirections->setEnabled( show ); debugPolySkeleton->setEnabled( show ); debugAbstractChar->setEnabled( show ); debugMatchingState->setEnabled( show ); debugGrid->setEnabled( show ); debugBorderAnglesSmooth->setEnabled( show ); debugGuessedLines->setEnabled( show );}void KognitionApp::slotDebugHistogram(){ if( debugHistogram->isChecked() ) doc->hist->show(); else doc->hist->hide();}void KognitionApp::slotDebugBorderLists(){ doc->img->set_draw_flag(Image::draw_border_lists, debugBorderLists->isChecked());}void KognitionApp::slotDebugBorderAngles(){ doc->img->set_draw_flag(Image::draw_border_angles, debugBorderAngles->isChecked());}void KognitionApp::slotDebugCrossSections(){ doc->img->set_draw_flag(Image::draw_cross_sections, debugCrossSections->isChecked());}void KognitionApp::slotDebugSingularRegions(){ doc->img->set_draw_flag(Image::draw_singular_regions, debugSingularRegions->isChecked());}void KognitionApp::slotDebugSkeleton(){ doc->img->set_draw_flag(Image::draw_skeleton, debugSkeleton->isChecked());}void KognitionApp::slotDebugDirections(){ doc->img->set_draw_flag(Image::draw_directions, debugDirections->isChecked());}void KognitionApp::slotDebugPolySkeleton(){ doc->img->set_draw_flag(Image::draw_polygon_skeleton, debugPolySkeleton->isChecked());}void KognitionApp::slotDebugAbstractChar(){ doc->img->set_draw_flag(Image::draw_abstract_char, debugAbstractChar->isChecked());}void KognitionApp::slotDebugMatchingState(){ doc->img->set_draw_flag(Image::draw_abstract_matching, debugMatchingState->isChecked());}void KognitionApp::slotDebugGrid(){ doc->img->set_draw_flag(Image::draw_grid, debugGrid->isChecked());}void KognitionApp::slotDebugBW(){ doc->set_draw_flag(Page::draw_bw, debugBW->isChecked()); doc->img->set_draw_flag(Image::draw_bw, debugBW->isChecked());}void KognitionApp::slotDebugBorderAnglesSmooth(){ doc->img->set_draw_flag(Image::draw_border_angles_smooth, debugBorderAnglesSmooth->isChecked());}void KognitionApp::slotDebugGuessedLines(){ doc->img->set_draw_flag(Image::draw_guessed_lines, debugGuessedLines->isChecked());}void KognitionApp::slotDebugBoundingboxes(){ doc->set_draw_flag(Page::draw_boundingboxes, debugBoundingboxes->isChecked());}void KognitionApp::slotDebugMetaboxes(){ doc->set_draw_flag(Page::draw_metaboxes, debugMetaboxes->isChecked());}void KognitionApp::slotDebugBaseline(){ doc->set_draw_flag(Page::draw_baseline, debugBaseline->isChecked());}void KognitionApp::slotDebugBasepoints(){ doc->set_draw_flag(Page::draw_basepoints, debugBasepoints->isChecked());}void KognitionApp::slotDebugMaxPart(){ doc->set_draw_flag(Page::draw_maxpart, debugMaxPart->isChecked());}void KognitionApp::keyPressEvent(QKeyEvent *e){ switch (e->key()) { case Key_PageDown: doc->img->next_border_list(false); // 显示上一个边界列表 break; case Key_PageUp: doc->img->next_border_list(true); // 显示下一个边界列表 break; case Key_Less: doc->img->change_line_thickness(false); // 让线条瘦一点 doc->change_line_thickness(false); break; case Key_Greater: doc->img->change_line_thickness(true); // 让线条粗一点 doc->change_line_thickness(true); break; case Key_Asterisk: switch ( static_cast<int>( doc->getScale( false ) ) ) { case -1: doc->setScale( -2 ); // 切换到宽度自动匹配 break; case -2: doc->setScale( -3 ); // 切换到高度自动匹配 break; case -3: doc->setScale( -4 ); // 切换到比例因子1 break; case -4: doc->setScale( -1 ); // 切换到高度宽度自动调整 break; default: doc->setScale( -1 ); // 同上 } break; case Key_Plus: { // 放大 float scale = doc->getScale(); scale = scale < 1 ? 1 / ( 1 / scale - 1 ) : scale + 1; doc->setScale( scale ); break; } case Key_Minus: { // 缩小 float scale = doc->getScale(); scale = scale <= 1 ? 1 / ( 1 / scale + 1 ) : scale - 1; doc->setScale( scale ); break; } case Key_Left: doc->setXPos( qRound(doc->getXPos() - 50 * doc->getScale()) ); // 左移页 break; case Key_Right: doc->setXPos( qRound(doc->getXPos() + 50 * doc->getScale()) ); // 右移页 break; case Key_Up: doc->setYPos( qRound(doc->getYPos() - 50 * doc->getScale()) ); // 上移页 break; case Key_Down: doc->setYPos( qRound(doc->getYPos() + 50 * doc->getScale()) ); // 下移页 break; case Key_Print: doc->makeSnapshot(); // 当前页的快照 break; case Key_Comma: doc->img->mark_next_cs( false ); // 标记上一个cs break; case Key_Period: doc->img->mark_next_cs( true ); // 标记下一个cs break; default: e->ignore(); }}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -