我应该使用什么类通过Qt创建绘画应用程序?

我应该使用什么类通过Qt创建绘画应用程序?,qt,pyqt,pyside,Qt,Pyqt,Pyside,这是第二次发布这个问题。因为第一个没有表现出任何努力 我想创建一个简单的绘画应用程序,其中只包括黑/白笔和画布。所以,要创建我的绘画应用程序,我想知道我应该使用什么类。还是有开源的、由Qt创建的绘画软件 我知道有一门油漆课。所以使用QPainter是正确的方法?我听说它是低级的图形工具。那么还有更有用的吗?我认为下面的源代码是painter应用程序的实现之一。但这是正确的方式吗?我认为还有更好的方法 我的代码: 谢谢 另外,我正在使用PySide,但任何其他Qt都可以。QPainter基本上是

这是第二次发布这个问题。因为第一个没有表现出任何努力

我想创建一个简单的绘画应用程序,其中只包括黑/白笔和画布。所以,要创建我的绘画应用程序,我想知道我应该使用什么类。还是有开源的、由Qt创建的绘画软件

我知道有一门油漆课。所以使用QPainter是正确的方法?我听说它是低级的图形工具。那么还有更有用的吗?我认为下面的源代码是painter应用程序的实现之一。但这是正确的方式吗?我认为还有更好的方法

我的代码:

谢谢


另外,我正在使用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_()