QColorDialog在Qt5.7和macOS中的段错误

Segfault with QColorDialog in Qt5.7 and macOS

本文关键字:段错误 错误 Qt5 macOS QColorDialog      更新时间:2023-10-16

我是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();
}

这是一个简短的回答,解释了一些事情,因为问题本身似乎是当前最新发布版本中的Qt错误,因此不能直接在so中回答。

正如评论中所说,你的代码至少在Win10 Qt 5.7和Debian测试Qt 5.6.1下工作。另外,上面提到的问题只发生在QColorDialog上,OP测试的其他对话框都可以工作。所以结论是,这是Mac OSX和QColorDialog特有的问题。它可能是Qt中的一个bug(最有可能),但是理论上也可能是操作系统或编译器工具链中的bug。

待办事项:

  • 学习如何调试到Qt源代码。
  • 搜索是否已经报告了相关的bug,如果没有,考虑写一个bug报告,包括你的例子,以及确切的平台信息。这将是有帮助的,如果你能得到一个良好的堆栈跟踪,包括Qt库(见上面的要点如何)。