我很难搜索相关主题,所以这是我的问题。我两天前开始使用 Qt,因此我不知道如何让它工作(在代码端)。
[题外话] 这是一些历史:起初我考虑将我的应用程序的逻辑与其外观分开。我有一些核心类,另一个用于 GUI(显示和控制),以及之间的某种“桥梁”,例如,将数据从具有 std::list 成员的 A 类移动到 B 类:public QAbstractListView,它具有QString列表。但是当我不得不使用越来越多的 Qt 代码(HTTP 请求、磁盘 I/O、正则表达式)时,我放弃了。我的代码开始看起来一团糟,因为我考虑重构我的代码。
(无论如何,将这两个东西——应用程序逻辑合并到 Qt(子)类中是个好主意吗?) [/题外话]
我遇到了另一个问题,它最终与主题中的问题相关:是否更好(例如,Qt 方式),例如,拥有一个具有私有(private)成员 QWebPage 和一些公共(public)方法、插槽和信号的类来操作在它上面还是简单地在 QWebPage 的子类中添加我的功能?
最佳答案
如果使用得当,继承是 OOP 中最伟大的东西之一。
在所有好的 OO 设计中,一个“子类”必须遵守一个简单的规则: child 是某种父类吗?在 OOP 文献中,这通常称为"is"关系。 更重要的是: child 总是要做两件事:专门化一般行为,或者扩展父亲的功能。当子类两者都没有时,我认为这是一种代码味道。
也就是说,您的决定与 Qt 无关,也与编程的好坏无关。它应该是有道理的。
一个例子:如果你有一个 QLabel 必须显示一场比赛的得分,而且仅此而已,那么做一些类似的事情可能是个好主意
class MyScoreBoard : public QLabel
{
private:
int scoreP1;
int scoreP2;
Game *_g;
public:
MyScoreBoard(QWidget *parent = 0) :
QLabel(parent)
{
scoreP1 = 0;
scoreP2 = 0;
connect(_g, SIGNAL(scoreChanged(int,int)), this, SLOT(updateScore(int,int)));
}
public slot:
updateScore(int a, int b) {
scoreP1 = a;
scoreP2 = b;
this->setText(QString::number(scoreP1) + "x" + QString::number(scoreP2));
};
};
另一方面,如果你的记分牌上面有一些灯,每当分数改变时它应该闪烁,如果它有一个标签给每个球员,它必须根据分数改变它的颜色,那么它最好创建一个具有两个标签、两个灯的记分板类,然后实现预期的行为。
底线是:如果对您的设计有意义则继承
关于c++ - Qt - 应用程序代码的正确设计,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9964431/