QT/c++ 类 class 带按钮的函数

QT/c++ call class function with pushbutton

我有一个带有两个按钮的 UI。我的第一个按钮读取了一个 xml 文件。第二个按钮应该创建一个 window 并显示一个圆圈。

我有一个 mainwindow.h 和一个 circle.h。现在我想通过单击按钮启动我的圈子功能。

我的圈子功能:

void circle::paintEvent(QPaintEvent *e)
{

 Q_UNUSED(e);
 QPainter painter(this);

 painter.setRenderHint(QPainter::Antialiasing);
 painter.setPen(QPen(QBrush("#888"), 1));
 painter.setBrush(QBrush(QColor("#888")));

 qDebug() << "\r\nxarray : " <<"test";
 for(int z = 0; z < 50; z++)
 {
  painter.drawEllipse(10, 10, 100, 100);
 }
 }

Atm 我开始:

circle::circle(QWidget *parent)
: QWidget(parent)
{}

但我想开始:

void MainWindow::on_pushButton_clicked(
 {}

如何使用按钮启动我的功能?

[我刚开始学习qt/c++所以我是初学者]

问候

在插槽 on_pushButton_clicked() 中创建 class circle 的实例并通过该实例调用所需的方法。

编辑:

不知圈内你打算调用什么方法class。但假设您有一个名为 myFunc() 的函数,代码将类似于:

void MainWindow::on_pushButton_clicked()
{
    circle* circleObj = new circle(this); // instance created
    circleObj->myFunct(); // the necessary  actions are done in this function
    // connect the signals from the circle class if any to the required slots in MainWindow
    connect(circle, SIGNAL(mySignal()), this, SLOT(mySlot());
}

由于您看起来对 Qt 完全陌生,所以我强烈建议您在继续之前阅读 VoidRealms YouTube channel 上的文档和很棒的教程。

Qt 使用信号和槽系统来指定用户触发的动作。因此,如果您指定函数 on_pushButton_clicked,您应该执行以下操作:

  1. MainWindow 定义的开头写入 Q_OBJECT 宏(class 包含一个插槽)
  2. 在 class 的 private slots: 部分(而不是正常的 private: 部分)写入 on_pushButton_clicked
  3. 使用以下语法在某处(可能在构造函数中)编写对 QObject::connect 的调用:connect (button, SIGNAL(clicked ()), this, SLOT(on_pushButton_clicked ()));,阅读 Qt 手册了解哪些信号可用。
  4. 如果您正在使用 Visual Studio,请重新运行 qmake。

具体来说,为了根据您的情况执行您想要的操作,您可能需要创建一些将在 on_pushButton_clicked 函数中设置的标志,并在 paintEvent.

中检查此标志

Qt 文档中有关信号和槽的其他信息:http://doc.qt.io/qt-5/signalsandslots.html