【问题标题】:Proper way to pass QColor object into Qdialog subclass将 QColor 对象传递给 Qdialog 子类的正确方法
【发布时间】: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).

标签: qt c++11


【解决方案1】:

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

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

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-09-09
    • 1970-01-01
    • 1970-01-01
    • 2021-04-28
    • 2011-09-04
    • 1970-01-01
    相关资源
    最近更新 更多