У меня проблема с подклассом QDialog, который я использую для передачи двух объектов QT в: QColor и QFont. Если я перейду по ссылке, приложение неожиданно выйдет из строя, прежде чем оно сможет запуститься, даже если оно скомпилировано без ошибок.
Мне удалось заставить его работать с помощью указателей, но оно выглядит некрасиво и испортит остальную часть кода . Я хочу заставить его работать по ссылке и воздерживаться от использования ключевого слова New для создания экземпляров классов QFont или QColor. Итак, в основном мой рабочий конструктор подкласса с использованием указателей выглядит так:
HEADER:
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 был объявлен таким образом, программа вылетает:
НЕ РАБОТАЕТ:
HEADER
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);
}
Mainwindow:
MySettingsDialog (systemColor, systemFont, this);
Что я делаю не так?
Спасибо