qt - 将 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);
我究竟做错了什么?
谢谢
解决方案
事情变得越来越奇怪,但我终于弄明白了。似乎您无法QDialog
在函数子例程中实例化子类。我有一个init()
例程并且运行此代码不起作用:
void MyProgram::init() { systemColor = QColor("red"); systemFont = QFont("Consolas", zoomFactor);
settingsDialog = new UefiSettingsDialog(systemColor, systemFont, this); ...... ... ... }
但是在代码开头调用的相同代码可以正常工作而不会启动失败。可能是范围问题,但我不知道为什么。
推荐阅读
- vba - 转到 B 列中的下一个空单元格
- java - 如何在 HarmonyOS 中使用资源 ID 加载颜色资源?
- javascript - 如何将js文件导入svelte
- c# - libgit2sharp 创建没有本地仓库的新分支
- node.js - 如何防止并发操作产生相同的ID?
- java - 如何在 Android 11 中将文件从资产复制到内部存储?
- c++ - 将 const 发送到获取非 const 参数的函数是否会被视为错误?
- firebase - 无法从隔离区初始化 Firebase 应用实例
- java - Harmonyos 中 TypedValue.applyDimension(int unit, float value, android.util.DisplayMetrics metrics) 的替代方案是什么?
- reactjs - 在 React 中将状态从子组件传递到父组件?