我应该使用什么类通过Qt创建绘画应用程序?
这是第二次发布这个问题。因为第一个没有表现出任何努力 我想创建一个简单的绘画应用程序,其中只包括黑/白笔和画布。所以,要创建我的绘画应用程序,我想知道我应该使用什么类。还是有开源的、由Qt创建的绘画软件 我知道有一门油漆课。所以使用QPainter是正确的方法?我听说它是低级的图形工具。那么还有更有用的吗?我认为下面的源代码是painter应用程序的实现之一。但这是正确的方式吗?我认为还有更好的方法 我的代码: 谢谢我应该使用什么类通过Qt创建绘画应用程序?,qt,pyqt,pyside,Qt,Pyqt,Pyside,这是第二次发布这个问题。因为第一个没有表现出任何努力 我想创建一个简单的绘画应用程序,其中只包括黑/白笔和画布。所以,要创建我的绘画应用程序,我想知道我应该使用什么类。还是有开源的、由Qt创建的绘画软件 我知道有一门油漆课。所以使用QPainter是正确的方法?我听说它是低级的图形工具。那么还有更有用的吗?我认为下面的源代码是painter应用程序的实现之一。但这是正确的方式吗?我认为还有更好的方法 我的代码: 谢谢 另外,我正在使用PySide,但任何其他Qt都可以。QPainter基本上是
另外,我正在使用PySide,但任何其他Qt都可以。
QPainter
基本上是唯一的方法,除了在QImage
中操作单个像素,或者使用OpenGL在Qt中绘制某些东西之外。因此,它的用途不言而喻,如果您在Qt中绘制,则必须使用QPainter
。绘画就是这样做的。但这与人类可能用来“绘画”的应用程序无关。我们正在讨论的绘画是应用程序必须做的事情,以便向用户显示某些东西,无论用户在做什么
您要问的是,Qt中是否有特定于应用程序的东西可以帮助实现“绘图”应用程序。如果您正在使用矢量绘图应用程序,那么图形场景框架可能会有用。否则,就没有什么可以帮助你了。您必须从一个普通的
QWidget
开始,并实现您需要的行为。谢谢。我知道有非矢量绘图和矢量绘图应用。我想创建之前的一个,比如win95 mspaint。
from PySide.QtGui import QApplication, QMainWindow, QAction, QActionGroup, QWidget, QCursor, QPainter
from PySide.QtCore import QTimer
import PySide.QtCore as QtCore
class W(QWidget):
def __init__(self):
QWidget.__init__(self)
self.resize(400,400)
self.myIsMousePressing = False
self.p = QPainter(self)
self.autoFillBackground()
self.x = 0
self.y = 0
self.r = dict()#{(x,Y,49, 49):rect}
self.penColor = 1
def mousePressEvent(self, event):
self.myIsMousePressing = True
def mouseReleaseEvent(self, event):
self.myIsMousePressing = False
def myTimeOut(self):
if self.myIsMousePressing:
pos = self.mapFromGlobal(QCursor.pos())
self.x = pos.x()/50
self.y = pos.y()/50
self.r[(self.x*50, self.y*50, 49, 49)] = self.penColor
def paintEvent(self, event):
self.p.begin(self)
for k in self.r.keys():
if self.r[k] == 1:
self.p.setPen(QtCore.Qt.black)
self.p.setBrush(QtCore.Qt.black)
else:
self.p.setPen(QtCore.Qt.white)
self.p.setBrush(QtCore.Qt.white)
self.p.drawRect(*k)
self.p.end()
self.update()
class MyWidget(QMainWindow):
def __init__(self):
QMainWindow.__init__(self)
self.setMinimumSize(400, 400)
self.initMenu()
self.w = W()
self.setCentralWidget(self.w)
self.t = QTimer(self.w)
self.t.timeout.connect(self.w.myTimeOut)
self.t.start(1)
def initMenu(self):
self.fileMenu = self.menuBar().addMenu("&File")
self.editMenu = self.menuBar().addMenu("&Edit")
self.helpMenu = self.menuBar().addMenu("&Help")
self.fileMenuAction = QAction("&New", self)
self.editMenuAction1 = QAction("&Black", self)
self.editMenuAction2 = QAction("&White", self)
self.helpMenuAction = QAction("&About", self)
actGroup = QActionGroup(self)
actGroup.addAction(self.editMenuAction1)
actGroup.addAction(self.editMenuAction2)
self.editMenuAction1.setCheckable(True)
self.editMenuAction2.setCheckable(True)
self.editMenuAction1.setChecked(True)
self.fileMenu.addAction(self.fileMenuAction)
self.editMenu.addAction(self.editMenuAction1)
self.editMenu.addAction(self.editMenuAction2)
self.helpMenu.addAction(self.helpMenuAction)
self.editMenuAction1.triggered.connect(self.action1)
self.editMenuAction2.triggered.connect(self.action2)
def action1(self):
self.w.penColor = 1
def action2(self):
self.w.penColor = 2
app = QApplication([])
mainWin = MyWidget()
mainWin.show()
app.exec_()