Qt 将QColor对象传递到Qdialog子类的正确方法

Qt 将QColor对象传递到Qdialog子类的正确方法,qt,c++11,Qt,C++11,我使用QDialog子类将两个QT对象传递到:QColor和QFont,但该子类有问题。如果我通过引用传递,应用程序在运行之前意外崩溃,即使它编译出来没有错误 我能够使用指针让它工作,但它看起来很难看,并且把代码的其余部分弄乱了。我希望通过引用使其工作,并避免使用“New”关键字来实例化QFont或QColor类。因此,我使用指针的工作子类构造函数基本上如下所示: 标题: class MySettingsDialog : public QDialog { Q_OBJECT public: ex

我使用QDialog子类将两个QT对象传递到:QColor和QFont,但该子类有问题。如果我通过引用传递,应用程序在运行之前意外崩溃,即使它编译出来没有错误

我能够使用指针让它工作,但它看起来很难看,并且把代码的其余部分弄乱了。我希望通过引用使其工作,并避免使用“New”关键字来实例化QFont或QColor类。因此,我使用指针的工作子类构造函数基本上如下所示:

标题:

class MySettingsDialog : public QDialog
{
Q_OBJECT

public:
explicit MySettingsDialog(QColor *acolor, QFont *afont, QWidget *parent=0);

CLASS FILE:
MySettingsDialog::MySettingsDialog(QColor *acolor, QFont *afont, QWidget *parent) :
QDialog(parent, Qt::WindowCloseButtonHint), m_color(*acolor),     m_font(*afont),
ui(new Ui::MySettingsDialog)
{

ui->setupUi(this);
}
这种方法可行,但我必须在MainWindow.cpp文件中声明,例如:

QFont*系统字体

 systemFont = New QFont("myfont whatever");
在任何我想使用这种字体的地方,我都必须像这样拆开伪装: ui->mylabel->setfont(*systemFont)

在此之前,我没有使用“new”来实例化我的systemFont变量,并且systemFont没有在头文件中声明为指针。这样,如果Mydialog是这样声明的,程序就会崩溃:

不起作用:

标题

 explicit MySettingsDialog(const QColor &acolor, const QFont &afont, QWidget *parent=0);

CLASS FILE:
 MySettingsDialog::MySettingsDialog(const QColor &acolor, const QFont &afont, QWidget      *parent) :
 QDialog(parent, Qt::WindowCloseButtonHint), m_color(acolor), m_font(afont),
 ui(new Ui::MySettingsDialog)
{

ui->setupUi(this);
 }
主窗口:

MySettingsDialog(systemColor、systemFont、this)

我做错了什么


谢谢

事情变得越来越奇怪,但我终于明白了。似乎无法在函数子例程中实例化
QDialog
子类。我有一个
init()

void MyProgram::init(){ systemColor=QColor(“红色”); systemFont=QFont(“控制台”,zoomFactor)


但是,在代码开始时调用的同一代码可以正常工作,不会出现任何启动失败。可能是范围问题,尽管我不知道原因。

不要滥用指针。使用
QFont systemFont;
ui->mylabel->setfont(systemFont)。
settingsDialog = new UefiSettingsDialog(systemColor, systemFont, this);
......  ...  ...  }