⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 6.10 实例:符合图形绘画.txt

📁 qt的源代码
💻 TXT
字号:
 class Window : public QWidget
 {
     Q_OBJECT
 public:
     Window();
 private slots:
     void fillRuleChanged();
     void fillGradientChanged();
     void penColorChanged();
private:
     void populateWithColors(QComboBox *comboBox);
     QVariant currentItemData(QComboBox *comboBox);
enum { NumRenderAreas = 9 };
     RenderArea *renderAreas[NumRenderAreas];
     QLabel *fillRuleLabel;
     QLabel *fillGradientLabel;
     QLabel *fillToLabel;
     QLabel *penWidthLabel;
     QLabel *penColorLabel;
     QLabel *rotationAngleLabel;
     QComboBox *fillRuleComboBox;
     QComboBox *fillColor1ComboBox;
     QComboBox *fillColor2ComboBox;
     QSpinBox *penWidthSpinBox;
     QComboBox *penColorComboBox;
     QSpinBox *rotationAngleSpinBox;
 };
Window::Window()
 {
     QPainterPath rectPath;
     rectPath.moveTo(20.0, 30.0);
     rectPath.lineTo(80.0, 30.0);
     rectPath.lineTo(80.0, 70.0);
     rectPath.lineTo(20.0, 70.0);
     rectPath.closeSubpath();
QPainterPath roundRectPath;
     roundRectPath.moveTo(80.0, 35.0);
     roundRectPath.arcTo(70.0, 30.0, 10.0, 10.0, 0.0, 90.0);
     roundRectPath.lineTo(25.0, 30.0);
     roundRectPath.arcTo(20.0, 30.0, 10.0, 10.0, 90.0, 90.0);
     roundRectPath.lineTo(20.0, 65.0);
     roundRectPath.arcTo(20.0, 60.0, 10.0, 10.0, 180.0, 90.0);
     roundRectPath.lineTo(75.0, 70.0);
     roundRectPath.arcTo(70.0, 60.0, 10.0, 10.0, 270.0, 90.0);
     roundRectPath.closeSubpath();
 QPainterPath ellipsePath;
     ellipsePath.moveTo(80.0, 50.0);
     ellipsePath.arcTo(20.0, 30.0, 60.0, 40.0, 0.0, 360.0);
QPainterPath piePath;
     piePath.moveTo(50.0, 50.0);
     piePath.arcTo(20.0, 30.0, 60.0, 40.0, 60.0, 240.0);
     piePath.closeSubpath();
  QPainterPath polygonPath;
     polygonPath.moveTo(10.0, 80.0);
 polygonPath.lineTo(20.0, 10.0);
     polygonPath.lineTo(80.0, 30.0);
     polygonPath.lineTo(90.0, 70.0);
     polygonPath.closeSubpath();
QPainterPath groupPath;
     groupPath.moveTo(60.0, 40.0);
     groupPath.arcTo(20.0, 20.0, 40.0, 40.0, 0.0, 360.0);
     groupPath.moveTo(40.0, 40.0);
     groupPath.lineTo(40.0, 80.0);
     groupPath.lineTo(80.0, 80.0);
     groupPath.lineTo(80.0, 40.0);
     groupPath.closeSubpath();
 QPainterPath textPath;
     QFont timesFont("Times", 50);
     timesFont.setStyleStrategy(QFont::ForceOutline);
     textPath.addText(10, 70, timesFont, tr("Qt"));
class RenderArea : public QWidget
 {
     Q_OBJECT
 public:
     RenderArea(const QPainterPath &path, QWidget *parent = 0);
     QSize minimumSizeHint() const;
     QSize sizeHint() const;
 public slots:
     void setFillRule(Qt::FillRule rule);
     void setFillGradient(const QColor &color1, const QColor &color2);
     void setPenWidth(int width);
     void setPenColor(const QColor &color);
     void setRotationAngle(int degrees);
 protected:
 void paintEvent(QPaintEvent *event);
 private:
     QPainterPath path;
     QColor fillColor1;
     QColor fillColor2;
     int penWidth;
     QColor penColor;
     int rotationAngle;
 };
 RenderArea::RenderArea(const QPainterPath &path, QWidget *parent)
     : QWidget(parent), path(path)
 {
     penWidth = 1;
     rotationAngle = 0;
     setBackgroundRole(QPalette::Base);
 }
  QSize RenderArea::minimumSizeHint() const
 {
     return QSize(50, 50);
 }
 QSize RenderArea::sizeHint() const
 {
     return QSize(100, 100);
 }
 void RenderArea::setFillRule(Qt::FillRule rule)
 {
     path.setFillRule(rule);
     update();
 }
 void RenderArea::setFillGradient(const QColor &color1, const QColor &color2)
 {
 fillColor1 = color1;
     fillColor2 = color2;
     update();
 }
 void RenderArea::setPenWidth(int width)
 {
     penWidth = width;
     update();
 }
 void RenderArea::setPenColor(const QColor &color)
 {
    penColor = color;
     update();
 }
 void RenderArea::setRotationAngle(int degrees)
 {
     rotationAngle = degrees;
     update();
 }
 void RenderArea::paintEvent(QPaintEvent *)
 {
     QPainter painter(this);
     painter.setRenderHint(QPainter::Antialiasing)  
 painter.scale(width() / 100.0, height() / 100.0);
     painter.translate(50.0, 50.0);
     painter.rotate(-rotationAngle);
     painter.translate(-50.0, -50.0);

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -