如何处理内部 类 中的 QComboBox 信号
How to handle QComboBox signals in inner classes
我正在使用 Qt5,我创建了一个 class "outer" 和一个 "inner" class。 "inner" class 有两个 QComboBox "cb1" 和 "cb2" 对象作为私有变量。
原则上,第二个QComboBox显示的文字"cb2"取决于第一个QComboBox的当前文字"cb1"。事实上,很容易实现这两者之间的连接,通过编写适当的槽来使用信号和槽。
问题是 Qt 不支持在内部 class 中写入槽。这让我很困惑。
如何处理 "inner" class 中这两个 QComboBoxes 之间的连接?
对于某些代码,
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;
}
在 Qt 5 中,任何方法都可以连接到信号,无论是否标记为插槽,所以您所描述的不是问题。
您需要使用现代 connect
语法,它会很好地工作:
connect(cb1, &QComboBox::currentIndexChanged, this, &Outer::Inner::setIndex);
当然,没有其他方法可以正常工作:qobject_cast
机制将无法工作,元数据会出错,等等。
内部 class 不能是 QObject
。我完全看不到它的意义。将其设为 .cpp
文件中的本地 class 而不是内部 class.
从你的代码中,我根本不明白为什么你需要一个内部 class。
如果您只是想避免在其他地方使用 Class 的可能性,我建议将其放在匿名命名空间中。
namespace {
class YourAnonymousClass{
...
}
}
class TheOtherClass {
...
}
我正在使用 Qt5,我创建了一个 class "outer" 和一个 "inner" class。 "inner" class 有两个 QComboBox "cb1" 和 "cb2" 对象作为私有变量。
原则上,第二个QComboBox显示的文字"cb2"取决于第一个QComboBox的当前文字"cb1"。事实上,很容易实现这两者之间的连接,通过编写适当的槽来使用信号和槽。
问题是 Qt 不支持在内部 class 中写入槽。这让我很困惑。
如何处理 "inner" class 中这两个 QComboBoxes 之间的连接?
对于某些代码,
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;
}
在 Qt 5 中,任何方法都可以连接到信号,无论是否标记为插槽,所以您所描述的不是问题。
您需要使用现代 connect
语法,它会很好地工作:
connect(cb1, &QComboBox::currentIndexChanged, this, &Outer::Inner::setIndex);
当然,没有其他方法可以正常工作:qobject_cast
机制将无法工作,元数据会出错,等等。
内部 class 不能是 QObject
。我完全看不到它的意义。将其设为 .cpp
文件中的本地 class 而不是内部 class.
从你的代码中,我根本不明白为什么你需要一个内部 class。
如果您只是想避免在其他地方使用 Class 的可能性,我建议将其放在匿名命名空间中。
namespace {
class YourAnonymousClass{
...
}
}
class TheOtherClass {
...
}