首页 > 解决方案 > 将 QColor 对象传递给 Qdialog 子类的正确方法

问题描述

我在使用 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;

 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);

我究竟做错了什么?

谢谢

标签: qtc++11

解决方案


事情变得越来越奇怪,但我终于弄明白了。似乎您无法QDialog在函数子例程中实例化子类。我有一个init()例程并且运行此代码不起作用:

void MyProgram::init() { systemColor = QColor("red"); systemFont = QFont("Consolas", zoomFactor);

settingsDialog = new UefiSettingsDialog(systemColor, systemFont, this);
......  ...  ...  }

但是在代码开头调用的相同代码可以正常工作而不会启动失败。可能是范围问题,但我不知道为什么。


推荐阅读