gpt4 book ai didi

c++ - 单击 Push 按钮应该使用 Qt C++ 在不同的窗口中显示绘图

转载 作者:太空宇宙 更新时间:2023-11-04 12:32:15 25 4
gpt4 key购买 nike

我正在尝试编写一个 Qt C++ 代码,它应该通过单击“按钮”在单独的窗口中绘制图表。

我创建了两种形式 1:主窗口,2:对话框。单击“按钮”后,绘图立即出现在不同的窗口中,接下来会出现另一个对话框形式的窗口,覆盖我的绘图窗口。

总结是点击按钮会生成两个不希望出现的窗口。

我做了以下事情:

  1. 使用 Qt Widgets Applications 创建新项目,生成 mainwindow.cpp 和 mainwindow.h 文件以及 main.cpp 文件

  2. 使用表单在 mainwindow.cpp 文件上创建按钮

  3. 通过右键单击项目使用“添加新”创建新对话框

  4. 然后在 mainwindow.cpp 文件的 on_pushButton_clicked() 中编写代码生成绘图(使用 Chart)

  5. 然后运行代码。最终按钮窗口出现。然后我点击 Push 按钮,然后它生成两个单独的窗口 1:绘图窗口,2:空白对话框窗口

一共有三个*.cpp文件,两个*.h文件

这是mainwindow.cpp代码:

#include "mainwindow.h"
#include "ui_mainwindow.h"

#include"dialog.h"

#include <QtWidgets/QApplication>
#include <QtWidgets/QMainWindow>
#include <QtCharts/QChartView>
#include <QtCharts/QLineSeries>

QT_CHARTS_USE_NAMESPACE

MainWindow::MainWindow(QWidget *parent)
: QMainWindow(parent)
, ui(new Ui::MainWindow)
{
ui->setupUi(this);
}

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


void MainWindow::on_pushButton_clicked()
{
Dialog aa;
aa.setDisabled(false);

//aa.display();
//![1]
QLineSeries *series = new QLineSeries();
//![1]

//![2]
series->append(0, 6);
series->append(2, 4);
series->append(3, 8);
series->append(7, 4);
series->append(10, 5);
*series << QPointF(11, 1) << QPointF(13, 3) << QPointF(17, 6) << QPointF(18, 3) << QPointF(20, 2);
//![2]

//![3]
QChart *chart = new QChart();
chart->legend()->hide();
chart->addSeries(series);
chart->createDefaultAxes();
chart->setTitle("Simple line chart example");
//![3]

//![4]
QChartView *chartView = new QChartView(chart);
chartView->setRenderHint(QPainter::Antialiasing);
//![4]


//![5]
QMainWindow window;
window.setCentralWidget(chartView);
window.resize(400, 300);
window.show();
//![5]

aa.exec();
}

实际结果:点击PushButton产生两个独立的窗口1:绘图窗口,2:空白窗口

预期结果:点击 PushButton 应该只生成 PlotWindow

最佳答案

您创建并显示 2 个窗口:aa 作为模态对话框(QDialog 上的 exec() 将对话框显示为模态)和 window.

要修复它,您可以在对话框中显示绘图,您需要为对话框创建布局并将 chartView 添加到该布局中:

    //...
//comment the other main window creation, we will setup the plot inside aa
//![5]
//QMainWindow window;
//window.setCentralWidget(chartView);
//window.resize(400, 300);
//window.show();
//
//create a layout for the dialog (most likely you'll need to #include <QVBoxLayout>)
aa.setLayout(new QVBoxLayout());
//add chartView into the layout
aa.layout()->addWidget(chartView);
//...

注意:如果你想要一个非模态对话框(或窗口),你需要在堆上分配小部件(如果在堆栈上分配,窗口将只显示并立即关闭,因为析构函数取消分配小部件)。

关于c++ - 单击 Push 按钮应该使用 Qt C++ 在不同的窗口中显示绘图,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58204473/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com