繁体   English   中英

在 QWidget 中包装 QLabel 以使其像带有图像的枚举一样

[英]Wrapping up a QLabel in a QWidget to make it act like an enum with an image

我的 MainWindow 上有一个 label,我将 RichText 设置为来自我的资源文件的 static 图像。 这很好用,但我想抽象出这是一个 label 并公开一个名为SetImage(std::string path);的方法。 所以我可以让这项工作更像是图像的枚举。

考虑一下,如果我想做这样的事情而不考虑框架或图像,我的感觉是在 class 中包含一个 label 以抽象出我以这种方式使用 ZD304BA20E96D870E341588EEABAC8 的事实。

所以,我会在 QT 中有这样的东西:

class QMyWidget : public QWidget {
public:
  explicit QMyWidget(QWidget* parent = nullptr);
  virtual ~QMyWidget();
  SetImage(const std::string& path);
private:
   QLabel* m_label;
};

然后调用 SetImage 会做类似的事情

QMyWidget::SetImage(const std::string& path){
   //setup label for rich text;
   std::string richText("//format rich text string here to load the image resource");
   m_label->SetText(richText);
};

这是 go 关于这个问题的正确方法,还是有更好、更“QT”的方法来解决这个问题? 我试图避免在设计师中做大量繁重的工作或类似的事情。

这是隐藏实现细节的有效解决方案。

您也可以考虑使用 QImage 或至少一个图像类而不是 QLabel。

此外,该方法拼写为setText ,而不是SetText

此外,还有一点挑剔,但在 Qt 项目中,如果名称不是 ascii 而是 utf,您可能需要使用 QString 而不是 std::string。

另一个挑剔,用override标记你的析构函数并使其= default

此外,使用比QMyWidget更有意义的名称。

作为我的偏好,我也不会将Q_OBJECT留在 class 中。 现在可能不需要它,但它总是可以帮助调试,当你添加信号和插槽等时,然后它会让人头疼,为什么事情不工作。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM