【发布时间】:2020-11-03 06:49:45
【问题描述】:
我在使用 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);
我做错了什么?
谢谢
【问题讨论】:
-
不要滥用指针。使用
QFont systemFont;ui->mylabel->setfont(systemFont).