首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >将QPolygon转换为QPushbutton

将QPolygon转换为QPushbutton
EN

Stack Overflow用户
提问于 2019-10-01 22:35:38
回答 1查看 117关注 0票数 0

我想在我的窗口上绘制一个QPolygon,并能够将其用作QPushbutton。有没有办法做到这一点?(最好不要使用QMousePressEvent检查鼠标的位置与多边形的位置)

在Ton的建议之后:

MainWindow.cpp:

代码语言:javascript
复制
#include "mainwindow.h"
#include "ui_mainwindow.h"

MainWindow::MainWindow(QWidget *parent)
    : QMainWindow(parent)
    , ui(new Ui::MainWindow)
{
    qv_point = {QPoint(10,20), QPoint(20,30), QPoint(50,30)};
    ui->pushButton = new QPolygonPushButton(qv_point);
    ui->setupUi(this);
    ui->pushButton->update();
}

MainWindow::~MainWindow()
{
    delete ui;
}

qpolygonpusbutton.cpp:

代码语言:javascript
复制
#include "qpolygonpushbutton.h"

QPolygonPushButton::QPolygonPushButton(QVector<QPoint> qv_points)
{
    this->polygon << qv_points;
}

void QPolygonPushButton::paintEvent(QPaintEvent *e)
{
    QPainter painter(this);
    painter.setViewport(e->rect());
    painter.setPen(QPen(Qt::black, 1, Qt::SolidLine, Qt::RoundCap, Qt::RoundJoin));
    painter.drawPolygon(this->polygon);
}
EN

回答 1

Stack Overflow用户

发布于 2019-10-01 23:33:49

这可以通过声明您自己的按钮类型来完成,比如从QPushButton派生的QPolygonPushButton,然后重新实现它的paintEvent成员函数。

以下内容(未经过测试):

代码语言:javascript
复制
class QPolygonPushButton : public QPushButton
{
public:
  using QPushButton::QPushButton;

private:
  void paintEvent(QPaintEvent* e) override
  {
     QPainter painter(this);
     painter.setViewport(e->rect());
     painter.drawPolygon(...);
  }
};

更新;完整的工作示例。它使用的是矩形而不是多边形,但除此之外,你会明白它的意思。该按钮最初是一个红色矩形,单击它会将其颜色更改为蓝色。

代码语言:javascript
复制
#include <QtCore/QObject>
#include <QtGui/QApplication>
#include <QtGui/QMainWindow>
#include <QtGui/QPainter>
#include <QtGui/QPushButton>

namespace
{
  QColor buttonColor{Qt::red};
}

class QRectButton : public QPushButton
{
public:
  using QPushButton::QPushButton;

  void paintEvent(QPaintEvent* e) override
  {
    QPainter painter(this);
    painter.setPen(buttonColor);
    painter.setBrush(buttonColor);
    painter.drawRect(painter.window());
  }
};

class MainWindow : public QMainWindow
{
  Q_OBJECT

public:
  MainWindow() : QMainWindow(nullptr)
  {
    QPushButton* button{new QRectButton(this)};
    QObject::connect(button, SIGNAL(clicked()), this, SLOT(onButtonClicked()));
  }

private slots:
  void onButtonClicked()
  {
    buttonColor = Qt::blue;
    update();
  }
};

int main(int argc, char** argv)
{
  QApplication app(argc, argv);
  MainWindow window;
  window.show();
  return app.exec();
}

#include "moc_polygon_button.cpp"
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/58187137

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档