📄 qt_spec.cpp
字号:
}}OutputQT::OutputQT(DlgWidget *wi):BitMapQT(0L, wi){ //assume fixed size (dialog) widget widget = wi; HScroll = VScroll = 0L; BaseObj = 0L; wi->OutputClass = this; wi->mempic = mempic; wi->setBackgroundMode(QWidget::NoBackground); xAxis.flags = 0L; yAxis.flags = AXIS_INVERT; //drawing origin upper left corner}OutputQT::~OutputQT(){ if(BaseObj) {
BaseObj->Command(CMD_CAN_DELETE, 0L, 0L);
} if(qPainter.isActive()) qPainter.end(); if(widget) delete widget; widget = 0L; HideTextCursorObj(this); if(mempic) delete mempic; mempic = 0L; if(hgo) delete hgo; hgo = 0L; if(image) delete image; image = 0L;}boolOutputQT::ActualSize(RECT *rc){ if(rc) { rc->left = rc->top = 0; rc->bottom = widget->height() - MenuHeight-6; rc->right = widget->width(); return true; } return false;}voidOutputQT::Caption(char *txt){ QString cap(txt); widget->setCaption(cap);}unsigned char hand_bits[] = { //hand cursor bitmap 0x80, 0x01, 0x58, 0x0e, 0x64, 0x12, 0x64, 0x52, 0x48, 0xb2, 0x48, 0x92, 0x16, 0x90, 0x19, 0x80, 0x11, 0x40, 0x02, 0x40, 0x02, 0x40, 0x04, 0x20, 0x08, 0x20, 0x10, 0x10, 0x20, 0x10, 0x20, 0x10};unsigned char hand_mask[] = { //hand cursor mask 0x80, 0x01, 0xd8, 0x0f, 0xfc, 0x1f, 0xfc, 0x5f, 0xf8, 0xbf, 0xf8, 0xff, 0xfe, 0xff, 0xff, 0xff, 0xff, 0x7f, 0xfe, 0x7f, 0xfe, 0x7f, 0xfc, 0x3f, 0xf8, 0x3f, 0xf0, 0x1f, 0xe0, 0x1f, 0xe0, 0x1f};unsigned char zoom_bits[] = { //zoom cursor bitmap 0x00, 0x00, 0x00, 0x00, 0x80, 0x03, 0x60, 0x0a, 0x10, 0x10, 0x08, 0x21, 0x08, 0x21, 0x04, 0x40, 0x64, 0x4c, 0x04, 0x40, 0x08, 0x21, 0x08, 0x21, 0x10, 0x10, 0x60, 0x0a, 0x80, 0x03, 0x00, 0x00};unsigned char zoom_mask[] = { //zoom cursor mask 0x00, 0x00, 0x00, 0x00, 0x80, 0x03, 0xe0, 0x0f, 0xf0, 0x1f, 0xf8, 0x3f, 0xf8, 0x3f, 0xf4, 0x7e, 0x7c, 0x7c, 0xfc, 0x7e, 0xf8, 0x3f, 0xf8, 0x3f, 0xf0, 0x1f, 0xe0, 0x0f, 0x80, 0x03, 0x00, 0x00};voidOutputQT::MouseCursor(int cid, bool force){ if(cid == cCursor && !force) return; if(cid == MC_LAST) cid = cCursor; QBitmap cb(16, 16, hand_bits, TRUE); QBitmap cm(16, 16, hand_mask, TRUE); QBitmap zb(16, 16, zoom_bits, TRUE); QBitmap zm(16, 16, zoom_mask, TRUE); switch(cid) {#ifdef Q_CHECK_PTR //Qt version 3 case MC_ARROW: widget->setCursor(QCursor(Qt::ArrowCursor)); break; case MC_CROSS: widget->setCursor(QCursor(Qt::CrossCursor)); break; case MC_WAIT: widget->setCursor(QCursor(Qt::WaitCursor)); break; case MC_TEXT: widget->setCursor(QCursor(Qt::IbeamCursor)); break; case MC_NORTH: widget->setCursor(QCursor(Qt::SizeVerCursor)); break; case MC_NE: widget->setCursor(QCursor(Qt::SizeBDiagCursor));break; case MC_EAST: widget->setCursor(QCursor(Qt::SizeHorCursor)); break; case MC_SE: widget->setCursor(QCursor(Qt::SizeFDiagCursor));break; case MC_SALL: widget->setCursor(QCursor(Qt::SizeAllCursor)); break;#else //Qt version 2 case MC_ARROW: widget->setCursor(QCursor(ArrowCursor)); break; case MC_CROSS: widget->setCursor(QCursor(CrossCursor)); break; case MC_WAIT: widget->setCursor(QCursor(WaitCursor)); break; case MC_TEXT: widget->setCursor(QCursor(IbeamCursor)); break; case MC_NORTH: widget->setCursor(QCursor(SizeVerCursor)); break; case MC_NE: widget->setCursor(QCursor(SizeBDiagCursor));break; case MC_EAST: widget->setCursor(QCursor(SizeHorCursor)); break; case MC_SE: widget->setCursor(QCursor(SizeFDiagCursor));break; case MC_SALL: widget->setCursor(QCursor(SizeAllCursor)); break;#endif case MC_MOVE: widget->setCursor(QCursor(cb, cm)); break; case MC_ZOOM: widget->setCursor(QCursor(zb, zm)); break; default: return; } cCursor = cid;}boolOutputQT::SetScroll(bool isVert, int iMin, int iMax, int iPSize, int iPos){ QScrollBar *sb; if(isVert) { if(!(sb = VScroll))return false; } else if(!(sb = HScroll)) return false; if(iPos < sb->minValue()) return false; sb->setRange(iMin, iMax); sb->setPageStep(iPSize); if(BaseObj && BaseObj->Id == GO_GRAPH) sb->setLineStep(8); else sb->setLineStep(1); sb->setValue(iPos); return true;}boolOutputQT::EndPage(){ if(widget)widget->repaint(); return true;}boolOutputQT::UpdateRect(RECT *rc, bool invert){ int x1, x2, y1, y2; if(!widget || !mempic)return false; if(rc->right > rc->left) { x1 = rc->left; x2 = rc->right; } else { x1 = rc->right; x2 = rc->left; } if(rc->bottom > rc->top) { y1 = rc->top; y2 = rc->bottom; } else { y1 = rc->bottom; y2 = rc->top; }
if(x2 > DeskRect.right) x2 = DeskRect.right; if(y2 > DeskRect.bottom) y2 = DeskRect.right;
bitBlt(widget, x1, y1, mempic, x1, y1, x2 - x1, y2 - y1, invert ? Qt::NotCopyROP : Qt::CopyROP); return true;}voidOutputQT::ShowBitmap(int x, int y, anyOutput* src){ BitMapQT *sr; RECT *rc; if(!widget || !mempic || !src)return; sr = (BitMapQT*) src; rc = &sr->DeskRect; bitBlt(widget, x, y, sr->mempic, 0, 0, abs(rc->right-rc->left), abs(rc->bottom-rc->top), Qt::CopyROP);}voidOutputQT::ShowLine(POINT * pts, int cp, DWORD color){ int i; QPen qp; QPainter paint(widget); qp.setColor(SwapRB(color)); qp.setWidth(1); qp.setStyle(Qt::SolidLine); paint.setPen(qp); paint.moveTo(pts[0].x, pts[0].y); for (i = 1; i < cp; i++) paint.lineTo(pts[i].x, pts[i].y); paint.flush();}voidOutputQT::ShowEllipse(POINT p1, POINT p2, DWORD color){ int i; QPen qp; QPainter paint(widget); qp.setColor(SwapRB(color)); qp.setWidth(1); qp.setStyle(Qt::SolidLine); paint.setPen(qp); paint.drawArc(p1.x, p1.y, p2.x-p1.x, p2.y-p1.y, 0, 5760); paint.flush();}boolOutputQT::SetMenu(int type){ if(type == MENU_SPREAD){ QPopupMenu *file = new QPopupMenu(widget); file->insertItem("&Open", widget, SLOT(cmOpen())); file->insertItem("Save &as", widget, SLOT(cmSaveDataAs())); file->insertSeparator(); file->insertItem("&Print", widget, SLOT(cmPrint())); file->insertSeparator(); file->insertItem("E&xit", widget, SLOT(cmExit())); file->insertSeparator(); file->insertItem("n.a.", widget, SLOT(cmFile1()), 0, CM_FILE1); file->insertItem("n.a.", widget, SLOT(cmFile2()), 0, CM_FILE2); file->insertItem("n.a.", widget, SLOT(cmFile3()), 0, CM_FILE3); file->insertItem("n.a.", widget, SLOT(cmFile4()), 0, CM_FILE4); file->insertItem("n.a.", widget, SLOT(cmFile5()), 0, CM_FILE5); file->insertItem("n.a.", widget, SLOT(cmFile6()), 0, CM_FILE6);
QPopupMenu *insert = new QPopupMenu(widget);
insert->insertItem("&Rows", widget, SLOT(cmInsRow()));
insert->insertItem("&Columns", widget, SLOT(cmInsCol()));
QPopupMenu *Delete = new QPopupMenu(widget);
Delete->insertItem("&Rows", widget, SLOT(cmDelRow()));
Delete->insertItem("&Columns", widget, SLOT(cmDelCol()));
QPopupMenu *edit = new QPopupMenu(widget); edit->insertItem("&Undo", widget, SLOT(cmUndo()), Qt::CTRL + Qt::Key_Z);
edit->insertSeparator();
edit->insertItem("&Rows/Cols", widget, SLOT(cmAddRowCol())); edit->insertItem("&Insert", insert);
edit->insertItem("&Delete", Delete);
edit->insertSeparator(); edit->insertItem("&Copy", widget, SLOT(cmCopy()), Qt::CTRL + Qt::Key_C); edit->insertItem("C&ut", widget, SLOT(cmCut()), Qt::CTRL + Qt::Key_X); edit->insertItem("&Paste", widget, SLOT(cmPaste()), Qt::CTRL + Qt::Key_V); edit->insertSeparator(); edit->insertItem("&Fill Range", widget, SLOT(cmFillRange())); QPopupMenu *graph = new QPopupMenu(widget); graph->insertItem("Create &Graph", widget, SLOT(cmNewGraph())); graph->insertItem("Create &Page", widget, SLOT(cmNewPage())); graph->insertItem("&Flush Graph(s)", widget, SLOT(cmDelGraph())); graph->insertSeparator(); graph->insertItem("&Settings", widget, SLOT(cmDefaults())); QPopupMenu *about = new QPopupMenu(widget); about->insertItem("&About ...", widget, SLOT(cmAbout())); menu = new QMenuBar(widget); menu->insertItem("&File", file); menu->insertItem("&Edit", edit); menu->insertItem("&Graph", graph); menu->insertItem("&?", about);#ifdef Q_CHECK_PTR //Qt version 3, n.a. in version 2 menu->setItemVisible(CM_FILE1, false); menu->setItemVisible(CM_FILE2, false); menu->setItemVisible(CM_FILE3, false); menu->setItemVisible(CM_FILE4, false); menu->setItemVisible(CM_FILE5, false); menu->setItemVisible(CM_FILE6, false);#endif } else if(type == MENU_GRAPH) { QPopupMenu *file = new QPopupMenu(widget); file->insertItem("&Open", widget, SLOT(cmOpen())); file->insertItem("Save &as", widget, SLOT(cmSaveGraphAs())); file->insertItem("&Copy", widget, SLOT(cmCopyGraph())); file->insertSeparator(); file->insertItem("&Print", widget, SLOT(cmPrint())); file->insertItem("&Export", widget, SLOT(cmExport())); file->insertSeparator(); file->insertItem(widget == MainWidget ? "E&xit" : "&Close", widget, SLOT(cmExit())); QPopupMenu *edit = new QPopupMenu(widget); edit->insertItem("&Undo", widget, SLOT(cmUndo()), Qt::CTRL + Qt::Key_Z); edit->insertSeparator(); edit->insertItem("&Copy", widget, SLOT(cmCopyGraph()), Qt::CTRL + Qt::Key_C); edit->insertItem("&Paste", widget, SLOT(cmPaste()), Qt::CTRL + Qt::Key_V); edit->insertSeparator(); edit->insertItem("&UpdateValues", widget, SLOT(cmUpdate())); edit->insertSeparator(); edit->insertItem("&Delete Object", widget, SLOT(cmDelObj())); QPopupMenu *zoom = new QPopupMenu(widget); zoom->insertTearOffHandle(); zoom->insertItem("zoom &in", widget, SLOT(cmZoomIn()), Qt::CTRL + Qt::Key_Plus); zoom->insertItem("zoom &out", widget, SLOT(cmZoomOut()), Qt::CTRL + Qt::Key_Minus); zoom->insertItem("&fit to widget", widget, SLOT(cmZoomFit()), Qt::CTRL + Qt::Key_F); zoom->insertSeparator(); zoom->insertItem("25%", widget, SLOT(cmZoom25())); zoom->insertItem("50%", widget, SLOT(cmZoom50())); zoom->insertItem("100%", widget, SLOT(cmZoom100())); zoom->insertItem("200%", widget, SLOT(cmZoom200())); zoom->insertItem("400%", widget, SLOT(cmZoom400())); QPopupMenu *displ = new QPopupMenu(widget); displ->insertItem("&Redraw", widget, SLOT(cmRedraw())); displ->insertItem("&Zoom", zoom); displ->insertItem("&Layers", widget, SLOT(cmLayers()));
QPopupMenu *tools = new QPopupMenu(widget); tools->insertTearOffHandle(); tools->insertItem("&Standard", widget, SLOT(cmtStandard()), Qt::Key_Escape, CM_T_STANDARD); tools->insertSeparator(); tools->insertItem("&Draw", widget, SLOT(cmtDraw()), 0, CM_T_DRAW); tools->insertItem("Poly&line", widget, SLOT(cmtPolyline()), 0, CM_T_POLYLINE); tools->insertItem("Poly&gon", widget, SLOT(cmtPolygon()), 0, CM_T_POLYGON); tools->insertItem("&Rectangle", widget, SLOT(cmtRectangle()), 0, CM_T_RECTANGLE); tools->insertItem("&r&ound Rect.", widget, SLOT(cmtRoundrect()), 0, CM_T_ROUNDREC); tools->insertItem("&Ellipse", widget, SLOT(cmtEllipse()), 0, CM_T_ELLIPSE); tools->insertItem("&Arrow", widget, SLOT(cmtArrow()), 0, CM_T_ARROW); tools->insertItem("&Text", widget, SLOT(cmtText()), 0, CM_T_TEXT); tools->setCheckable(true); QPopupMenu *plots = new QPopupMenu(widget); plots->insertItem("Add &Plot", widget, SLOT(cmAddPlot())); plots->insertItem("Add &Axis", widget, SLOT(cmAddAxis())); plots->insertItem("Add &Legend", widget, SLOT(cmAddLegend())); plots->insertSeparator(); plots->insertItem("&Configure", widget, SLOT(cmDefaults())); QPopupMenu *about = new QPopupMenu(widget); about->insertItem("&About ...", widget, SLOT(cmAbout())); menu = new QMenuBar(widget); menu->insertItem("&File", file); menu->insertItem("&Edit", edit); menu->insertItem("&Display", displ); menu->insertItem("&Tools", tools); menu->insertItem("&Plots", plots); menu->insertItem("&?", about); } else if(type == MENU_PAGE) { QPopupMenu *file = new QPopupMenu(widget); file->insertItem("&Open", widget, SLOT(cmOpen())); file->insertItem("Save &as", widget, SLOT(cmSaveGraphAs())); file->insertSeparator(); file->insertItem("&Print", widget, SLOT(cmPrint())); file->insertItem("&Export", widget, SLOT(cmExport())); file->insertSeparator(); file->insertItem(widget == MainWidget ? "E&xit" : "&Close", widget, SLOT(cmExit())); QPopupMenu *edit = new QPopupMenu(widget); edit->insertItem("&Undo", widget, SLOT(cmUndo()), Qt::CTRL + Qt::Key_Z); edit->insertSeparator(); edit->insertItem("&Copy", widget, SLOT(cmCopyGraph()), Qt::CTRL + Qt::Key_C); edit->insertItem("&Paste", widget, SLOT(cmPaste()), Qt::CTRL + Qt::Key_V); edit->insertSeparator(); edit->insertItem("&UpdateValues", widget, SLOT(cmUpdate())); edit->insertSeparator(); edit->insertItem("&Delete Object", widget, SLOT(cmDelObj())); QPopupMenu *zoom = new QPopupMenu(widget); zoom->insertTearOffHandle(); zoom->insertItem("zoom &in", widget, SLOT(cmZoomIn()), Qt::CTRL + Qt::Key_Plus); zoom->insertItem("zoom &out", widget, SLOT(cmZoomOut()), Qt::CTRL + Qt::Key_Minus); zoom->insertItem("&fit to widget", widget, SLOT(cmZoomFit()), Qt::CTRL + Qt::Key_F); zoom->insertSeparator(); zoom->insertItem("25%", widget, SLOT(cmZoom25())); zoom->insertItem("50%", widget, SLOT(cmZoom50())); zoom->insertItem("100%", widget, SLOT(cmZoom100())); zoom->insertItem("200%", widget, SLOT(cmZoom200())); zoom->insertItem("400%", widget, SLOT(cmZoom400())); QPopupMenu *displ = new QPopupMenu(widget); displ->insertItem("&Redraw", widget, SLOT(cmRedraw())); displ->insertItem("&Zoom", zoom);
displ->insertItem("&Layers", widget, SLOT(cmLayers())); QPopupMenu *tools = new QPopupMenu(widget); tools->insertTearOffHandle(); tools->insertItem("&Standard", widget, SLOT(cmtStandard()), Qt::Key_Escape, CM_T_STANDARD); tools->insertSeparator(); tools->insertItem("&Draw", widget, SLOT(cmtDraw()), 0, CM_T_DRAW); tools->insertItem("Poly&line", widget, SLOT(cmtPolyline()), 0, CM_T_POLYLINE); tools->insertItem("Poly&gon", widget, SLOT(cmtPolygon()), 0, CM_T_POLYGON); tools->insertItem("&Rectangle", widget, SLOT(cmtRectangle()), 0, CM_T_RECTANGLE); tools->insertItem("&r&ound Rect.", widget, SLOT(cmtRoundrect()), 0, CM_T_ROUNDREC); tools->insertItem("&Ellipse", widget, SLOT(cmtEllipse()), 0, CM_T_ELLIPSE); tools->insertItem("&Arrow", widget, SLOT(cmtArrow()), 0, CM_T_ARROW); tools->insertItem("&Text", widget, SLOT(cmtText()), 0, CM_T_TEXT); tools->setCheckable(true); QPopupMenu *plots = new QPopupMenu(widget); plots->insertItem("Add &Graph", widget, SLOT(cmNewGraph())); plots->insertItem("Add &Plot", widget, SLOT(cmAddPlot())); plots->insertItem("Add &Axis", widget, SLOT(cmAddAxis()));
plots->insertItem("Add &Legend", widget, SLOT(cmAddLegend())); plots->insertSeparator(); plots->insertItem("Page &Settings", widget, SLOT(cmDefaults())); QPopupMenu *about = new QPopupMenu(widget); about->insertItem("&About ...", widget, SLOT(cmAbout())); menu = new QMenuBar(widget); menu->insertItem("&File", file); menu->insertItem("&Edit", edit); menu->insertItem("&Display", displ); menu->insertItem("&Tools", tools); menu->insertItem("&Plots", plots); menu->insertItem("&?", about); } else return false; menu->show(); MenuHeight = menu->height(); widget->resize(widget->width()+8, widget->height()+8); return true;}voidOutputQT::CheckMenu(int mid, bool check){ if(mid < CM_T_STANDARD) switch(mid){ //tool mode identifier case TM_STANDARD: mid = CM_T_STANDARD; break; case TM_DRAW: mid = CM_T_DRAW; break; case TM_POLYLINE: mid = CM_T_POLYLINE; break; case TM_POLYGON: mid = CM_T_POLYGON; break; case TM_RECTANGLE: mid = CM_T_RECTANGLE; break; case TM_ROUNDREC: mid = CM_T_ROUNDREC; break; case TM_ELLIPSE: mid = CM_T_ELLIPSE; break; case TM_ARROW: mid = CM_T_ARROW; break; case TM_TEXT: mid = CM_T_TEXT; break; default: return; } if(menu) menu->setItemChecked(mid, check);}voidOutputQT::FileHistory(){ char **history[] = {&defs.File1, &defs.File2, &defs.File3, &defs.File4, &defs.File5, &defs.File6}; int i, j, k; if(!hasHistMenu || !defs.File1 || !menu) return; for(i = 0; i < 6 && *history[i]; i++) { k = strlen(*history[i]); for (j = 0; j < k && defs.currPath[j] == (*history[i])[j]; j++); if((*history[i])[j] == '\\' || (*history[i])[j] == '/') j++; menu->changeItem(CM_FILE1+i, *history[i]+j);#ifdef Q_CHECK_PTR //Qt version 3, n.a. in version 2 menu->setItemVisible(CM_FILE1+i, true);#endif } HistMenuSize = i;}voidOutputQT::CreateNewWindow(GraphObj *g){ int w, h; GetDesktopSize(&w, &h); if(widget = new RLPwidget(0, 0, this, g)) { widget->setCaption("OutputQT::CreateNewWindow"); widget->setGeometry(0, 0, (int)(w*.7f), (int)(h*.7f)); HScroll = ((RLPwidget*)widget)->HScroll; VScroll = ((RLPwidget*)widget)->VScroll; }}//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~// Common widget support//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~RLPwidget::RLPwidget(QWidget *par, const char *name, anyOutput *o, GraphObj *g) : QWidget(par, name){ int w, h; GetDesktopSize(&w, &h); mempic = new QPixmap(w, h); parent = par;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -