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
,您应该执行以下操作:
- 在
MainWindow
定义的开头写入 Q_OBJECT
宏(class 包含一个插槽)
- 在 class 的
private slots:
部分(而不是正常的 private:
部分)写入 on_pushButton_clicked
- 使用以下语法在某处(可能在构造函数中)编写对
QObject::connect
的调用:connect (button, SIGNAL(clicked ()), this, SLOT(on_pushButton_clicked ()));
,阅读 Qt 手册了解哪些信号可用。
- 如果您正在使用 Visual Studio,请重新运行 qmake。
具体来说,为了根据您的情况执行您想要的操作,您可能需要创建一些将在 on_pushButton_clicked
函数中设置的标志,并在 paintEvent
.
中检查此标志
Qt 文档中有关信号和槽的其他信息:http://doc.qt.io/qt-5/signalsandslots.html
我有一个带有两个按钮的 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
,您应该执行以下操作:
- 在
MainWindow
定义的开头写入Q_OBJECT
宏(class 包含一个插槽) - 在 class 的
private slots:
部分(而不是正常的private:
部分)写入on_pushButton_clicked
- 使用以下语法在某处(可能在构造函数中)编写对
QObject::connect
的调用:connect (button, SIGNAL(clicked ()), this, SLOT(on_pushButton_clicked ()));
,阅读 Qt 手册了解哪些信号可用。 - 如果您正在使用 Visual Studio,请重新运行 qmake。
具体来说,为了根据您的情况执行您想要的操作,您可能需要创建一些将在 on_pushButton_clicked
函数中设置的标志,并在 paintEvent
.
Qt 文档中有关信号和槽的其他信息:http://doc.qt.io/qt-5/signalsandslots.html