【发布时间】:2016-09-29 15:41:33
【问题描述】:
我是 Qt 新手,并试图在用户单击按钮时显示 QColorDialog。
当我运行我的程序并单击按钮时,我会出现颜色对话框。我可以随意打开和关闭它,但是当我退出应用程序时会出现段错误。
但是,如果我运行我的应用程序并且不单击按钮(这样颜色对话框就不会出现),我可以在没有段错误的情况下退出它。
下面的代码是如何触发崩溃的最小示例。
我正在运行 macOS 10.12 和 Qt5.7。
你们中有人知道如何解决这个问题吗?
mainwindow.h:
#ifndef MAINWINDOW_H
#define MAINWINDOW_H
#include <QMainWindow>
#include <QtWidgets>
class MainWindow : public QMainWindow
{
Q_OBJECT
QPushButton *button;
public:
MainWindow(QWidget *parent = 0);
private slots:
void getUserColor();
};
#endif // MAINWINDOW_H
mainwindow.cpp:
#include "mainwindow.h"
MainWindow::MainWindow(QWidget *parent): QMainWindow(parent)
{
button = new QPushButton("Choose your color");
setCentralWidget(button);
connect(button, SIGNAL(clicked(bool)),
this, SLOT(getUserColor()));
}
void MainWindow::getUserColor()
{
QColorDialog::getColor();
}
main.cpp:
#include "mainwindow.h"
#include <QApplication>
int main(int argc, char *argv[])
{
QApplication a(argc, argv);
MainWindow w;
w.show();
return a.exec();
}
【问题讨论】:
-
调试器是解决此类问题的正确工具。 在询问 Stack Overflow 之前,您应该逐行逐行检查您的代码。如需更多帮助,请阅读How to debug small programs (by Eric Lippert)。至少,您应该 [编辑] 您的问题,以包含一个重现您的问题的 Minimal, Complete, and Verifiable 示例,以及您在调试器中所做的观察。
-
@πάνταῥεῖ 这不是您的一个链接的标题所建议的“小程序”。它在后台拥有整个 Qt 框架。并且崩溃发生在框架中(因为它发生在退出时,并且代码中没有退出处理程序或带有析构函数的自定义类型,因此没有实际的应用程序代码在退出时运行)。
-
我在 Win 10、Qt 5.7 上测试了确切的问题代码(创建了一个没有 .ui 表单的新 QWidget 项目,将您的 3 个文件复制粘贴到新项目的生成文件中)。在这里完美地工作。您可能需要提交错误报告。
-
...或者,如果您喜欢冒险并想学习新事物,请弄清楚如何调试 Qt 源代码。如果您实际上可以在 Qt 代码中找到错误(如果它是 Qt 错误,但这可能比编译器或 Mac OS 错误更有可能),它更有可能得到修复(特别是如果您可以实际上提交一个修复补丁......):)
-
它似乎是特定于平台的;我没有设法在 Debian 测试的 Qt 5.6.1 上让它崩溃。您将需要附加调试器并了解回溯。
标签: c++ qt segmentation-fault