单击"推送"按钮应使用Qt C++在不同的窗口中显示绘图
Clicking on Push button should show the plot in different window using Qt C++
>我正在尝试编写一个Qt C++代码,该代码应该通过单击按钮在单独的窗口中绘制绘图。
我通过创建两个表单 1:主窗口、2:对话框来做到这一点。单击按钮后,绘图立即出现在不同的窗口中,接下来另一个对话框窗体窗口将覆盖我的绘图窗口。
总结一下,单击按钮会生成两个不希望的窗口。
我做了以下工作:
-
使用Qt小部件应用程序创建新项目,该应用程序生成主窗口.cpp和主窗口.h文件以及main.cpp文件
-
使用表单在主窗口上创建按钮.cpp文件
通过 右键单击项目,使用"添加新"创建新的对话框表单
然后编写代码在主窗口.cpp文件中的on_pushButton_clicked((内生成绘图(使用图表(
然后运行代码。最终出现按钮窗口。然后我点击按钮,然后它会生成两个单独的窗口 1:绘图窗口, 2:空白对话框窗口
总共有三个 *.cpp 文件,两个 *.h 文件
这是主窗口.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();
}
实际结果:单击按钮生成两个单独的窗口 1:绘图窗口,2:空白窗口
预期结果: 单击按钮应仅生成绘图窗口
您创建并显示 2 个窗口:aa
作为模态对话框(exec()
QDialog 上的对话框显示为模态对话框(和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);
//...
注意:如果你想要一个非模态对话框(或窗口(,你需要在堆上分配小部件(如果在堆栈上分配,窗口只会显示并立即关闭,因为析构函数取消分配小部件(。
相关文章:
- 如何在Qt窗口小部件中使用QStringView(或QStringRef)
- 问:如何使用C++中的按钮从窗口打开窗口
- SDL 窗口不会弹出
- 在createdialog创建的窗口中捕获用于编辑控件的OnMouseMove消息
- 如何在cpp文件之间切换窗口?在Qt中
- QuadTree只在窗口的右上角绘制
- VS Code "command":"make"与终端窗口中的命令行"make"不同
- 如何在C++中找到active directory中禁用和锁定的窗口帐户
- 处理闪烁窗口事件
- 如何通过按下第三个窗口中的按钮,将QString从一个窗口获取到另一个窗口
- C++win32 API创建多个类似视口的窗口
- SFML RenderWindow打开窗口需要很长时间
- 如何将不同的可执行文件合并到一个窗口框架中进行编码?像浏览器一样
- 获取 SFML 窗口的 HWND 和高可用性?
- 如何获取 GLFW 窗口 ID?
- GLEW/GLUT:调用init并创建一个窗口后,取消初始化并重新初始化?
- 用于窗口的 HID 终端
- SFML 文本未绘制在窗口上
- 如何为窗口截屏
- 由于无效的 ValidateRgn() 子窗口不会收到WM_PAINT消息