我正在使用Qt5,我创建了一个类"外部"与"内部"类。 "内部" class有两个QComboBox" cb1"和" cb2"对象作为私有变量。
原则上,第二个QComboBox" cb2"的显示文本取决于第一个QComboBox" cb1"的当前文本。事实上,通过写入适当的插槽,可以很容易地在这两者之间实现连接,使用信号和插槽。
问题是Qt不支持在内部类中编写插槽。这让我很困惑。
如何处理"内部"中的这两个QComboBox之间的连接?类?
对于某些代码,
class Outer : public QDialog
{
Q_OBJECT
// private variables;
class Inner : public QWidget
{
QComboBox *cb1, *cb2;
// Other variables;
public:
// Public methods
public slots:
void setIndex(int i);
};
// Other things;
};
内部实施
Outer::Inner::Inner()
{
// Useless things;
connect(cb1, SIGNAL(currentIndexChanged(int)), this, SLOT(setIndex(int)));
}
Outer::Inner::setIndex(int i)
{
// Some stuff to retrieve the correct index in cb2;
}
答案 0 :(得分:0)
在Qt 5中,任何方法都可以连接到一个信号,无论是否标记为一个插槽,所以你所描述的是一个非问题。
您需要使用现代connect
语法,它才能正常工作:
connect(cb1, &QComboBox::currentIndexChanged, this, &Outer::Inner::setIndex);
当然,没有其他方法可以正常工作:qobject_cast
机制不起作用,元数据会出错等等。
内部类不能是QObject
。我完全没有看到它的重点。使其成为.cpp
文件中的本地类,而不是内部类。
答案 1 :(得分:0)
从你的代码中我根本没有理由要求内部类。
如果您只是想避免在其他地方使用Class的可能性,我建议将其放在匿名命名空间中。
namespace {
class YourAnonymousClass{
...
}
}
class TheOtherClass {
...
}