在QT子窗口中画图的简要总结

我还是个小白,现在在写这篇博客只是害怕我会忘记,但时候又要重新开始再来一遍是很浪费时间的,所以就简单的总结一下我今天学到的东西吧。

今天要解决的问题主要是怎么样使得在QT上好像是在java上画图一样呢?其实是可以的。

首先,创建一个新的子窗口,是要是QWidget类型的窗口

新建一个窗口的头文件:

#ifndef BP_H
#define BP_H

#include "mainwindow.h"
#include <QMainWindow>
#include <QDialog>
#include <iostream>
#include <vector>
#include <queue>

namespace Ui {
    class bp;
}

class bp : public QWidget{
    Q_OBJECT
public:
    explicit bp(QWidget *parent = 0);
    ~bp();
    void paint_line(QPaintEvent *event);
private:
    Ui::bp *ui;
    int draw=1;
    void paintEvent(QPaintEvent *);
public slots:
    void start();

};

#endif // BP_H

承上一篇使用ui的文章,这里我放出这个文件的cpp实现

#include "bp.h"
#include "ui_bp.h"
#include <iostream>
#include <QPainter>
bp::bp(QWidget *parent) :
    QWidget(parent),
    ui(new Ui::bp)
{
    ui->setupUi(this);
    setWindowTitle("BP神经网络");
    connect(ui->start,SIGNAL(clicked()),this,SLOT(start()));
    connect(ui->close,SIGNAL(clicked()),this,SLOT(close()));
}

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

void bp::paintEvent(QPaintEvent *event)
{
    Q_UNUSED(event);

    QPainter painter(this);

    // 反走样
    painter.setRenderHint(QPainter::Antialiasing, true);
    // 设置画笔颜色
    painter.setPen(QColor(0, 160, 230));
    // 绘制直线
    painter.drawLine(QPointF(0, height()/draw), QPointF(width() /draw, height() /draw));

}

void bp::start()
{
    std::cout<<"hello"<<std::endl;
//    QPainter p;
//    p.drawLine(QPointF(0,height()),QPointF(width()/2,height()/2));
    draw += 1;
    update();
}

接下来就是说说里面的东西了。虽然还不知道现在这样的实现符不符合我将来项目的需求,但是这是一个前进的方向。

start是一个按钮的槽函数,在子窗口打开的时候,程序就会自动的执行paintEvent里面的语句,一开始我运行的时候就崩溃掉了,想了一下以后发现,我在初始化draw的时候初始化为0了,导致在计算的时候,除0,所以崩溃哦

所以我把draw初始化成1,在每一次按下start的时候,会执行update()函数,重新画图,为了显示出有运行,我的分分母发生了变化,实验结果显示,在我每一次按下了start以后,paintEvent就会重新画图。也就是说将来只需要在别的地方准备好数据以后,在paintEvent里面使用的话,在数据处理好了以后,直接update()就可以更新了


不知道是不是符合项目要求,将来会更新

  • 0
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: 在Qt设置窗口非常简单,只需要调用 QWidget::setParent() 函数即可。你可以使用QWidget::setWindowFlags() 函数来设置窗口的属性,例如设置它是否可见、是否可以被移动或者调整大小等。 ### 回答2: 在Qt,可以使用QMainWindow作为主窗口,然后在主窗口添加窗口。 首先,在主窗口定义窗口的指针,并在构造函数进行初始化。例如: ``` class MainWindow : public QMainWindow { Q_OBJECT public: MainWindow(QWidget *parent = nullptr); private: QDialog *childWindow; }; ``` 然后,在构造函数创建窗口并设置相关属性,例如窗口标题、大小以及窗口模式: ``` MainWindow::MainWindow(QWidget *parent) : QMainWindow(parent) { // 创建窗口对象 childWindow = new QDialog(this); // 设置窗口的标题 childWindow->setWindowTitle("窗口"); // 设置窗口的大小(可选) childWindow->resize(400, 300); // 设置窗口窗口模式(可选) childWindow->setWindowFlags(Qt::Dialog); } ``` 接下来,可以在主窗口添加一个按钮,并在按钮的槽函数显示窗口: ``` QPushButton *button = new QPushButton("打开窗口", this); connect(button, &QPushButton::clicked, this, [this]() { childWindow->show(); }); ``` 当点击该按钮时,窗口将会显示在主窗口。 需要注意的是,在Qt窗口的具体实现可以是QDialog、QWidget或其他继承自QWidget的类,根据实际需求进行选择。同时,还可以根据具体需求设置窗口的属性和样式,例如窗口模式、背景颜色等。 总结起来,通过在主窗口创建窗口的指针,并在构造函数设置窗口的相关属性,最后在需要显示窗口的地方调用show()函数即可在Qt设置窗口。 ### 回答3: 在Qt设置窗口可以通过以下步骤实现: 1. 创建一个新的QWidget对象作为窗口,可以使用QWidget类或其派生类(如QDialog)来创建。例如: ``` QDialog *childWindow = new QDialog(this); ``` 2. 设置窗口的属性和样式,例如设置窗口标题、大小和位置等。可以使用setWindowTitle()、setFixedSize()和move()等窗口对象的方法来设置。例如: ``` childWindow->setWindowTitle("窗口"); childWindow->setFixedSize(400, 300); childWindow->move(100, 100); ``` 3. 将窗口显示出来。可以使用show()方法来显示窗口,或者使用exec()方法以模态方式显示窗口。例如: ``` childWindow->show(); // 以非模态方式显示窗口 // 或者 childWindow->exec(); // 以模态方式显示窗口 ``` 以上是创建并显示窗口的基本步骤。但实际上,还有其他一些设置窗口的方法和属性,如设置窗口的布局、添加窗口的控件、连接窗口的信号和槽等,这些都可以根据具体的需求进行进一步设置和操作。例如,可以使用QVBoxLayout或QGridLayout设置窗口的布局,使用addWidget()将控件添加到布局,使用connect()连接控件的信号和槽等。 总之,在Qt设置窗口需要创建一个QWidget对象或其派生类的实例,设置其属性和样式,然后显示出来。根据具体需求,还可以进一步设置窗口的布局和控件等。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值