在代码中的哪个位置连接 Qt SIGNALS 和 SLOTS 以获得最佳代码可读性?
Posted
技术标签:
【中文标题】在代码中的哪个位置连接 Qt SIGNALS 和 SLOTS 以获得最佳代码可读性?【英文标题】:In which place in the code to connect Qt SIGNALS and SLOTS for best code readability? 【发布时间】:2013-10-17 06:24:39 【问题描述】:我开始在 Qt 中编程,并正在寻找关于在代码中何处编写 connect
语句的最佳实践,以便代码更具可读性。
从目前的角度来看,似乎在任意位置定义connect
(假设任意位置并不意味着功能差异)会导致代码非常难以阅读。
目前,我找到了在包含 SLOTS 的类的构造函数中定义 connect
语句的最直观方法。
是否有标准或推荐的最佳实践?
【问题讨论】:
对于您的主 UI,您通常会有一个初始化所有小部件的函数,不是吗?那不是最好的地方吗? 我不知道有什么推荐的方式。在我的实践中,我安装对象的连接soon after they are defined
。
@paulsm4 我不知道。从当前的角度来看,我想将connect
定义为尽可能接近 SLOTS,以便我可以轻松查看执行操作的信号。所以问题的答案是,是的,但仅适用于 gui 上的 SLOTS。但是,我仍然没有发现这种方法的坏处。
我通常将它们包含在单独的函数中。像setupSignalsSlots()
来设置默认值,对于动态连接,我使用disconnectSignalsSlotsFor<whatever>()
之类的东西来确保所有设备都断开连接,setupSignalsSlotsFor<whatever>()
以我需要的方式再次连接它们......在使用小部件而不是模型/视图并在整个应用程序中使用相同的小部件
【参考方案1】:
我喜欢为我的布局的每个“主要”部分设置一个函数来进行初始化。下面是一个构造函数的例子。每个create
函数都返回一个组框小部件。
MissionConfiguration::MissionConfiguration(QWidget* parent) : QWidget(parent)
QVBoxLayout *layout = new QVBoxLayout;
layout->addWidget(createMissionConfigurationGroupBox());
layout->addWidget(createNetAcquireGroupBox());
layout->addWidget(createSystemStatus());
layout->addWidget(createStatusButtons());
setLayout(layout);
在这些“创建”功能中的每一个中,都连接了适当的信号/插槽。如果小部件很复杂,它可以帮助我保持井井有条。
这是createStatusButtons
函数的示例:
QGroupBox* MissionConfiguration::createStatusButtons()
// on the qbutton status
QGroupBox *runModes = new QGroupBox(tr("Run Modes"));
QHBoxLayout *runModeLayout = new QHBoxLayout;
live = new QRadioButton(tr("Live"));
playback = new QRadioButton(tr("Playback"));
simulation = new QRadioButton(tr("Simulation"));
QPushButton *logout = new QPushButton("Logout");
simulation->setChecked(true);
connect(recorder, SIGNAL(isConnected(bool)), live, SLOT(setEnabled(bool)));
connect(recorder, SIGNAL(isConnected(bool)), playback, SLOT(setEnabled(bool)));
connect(logout, SIGNAL(clicked()), this, SLOT(logout()));
runModeLayout->addWidget(live);
runModeLayout->addWidget(playback);
runModeLayout->addWidget(simulation);
runModeLayout->addWidget(logout);
runModes->setLayout(runModeLayout);
return runModes;
真的,“最好”的做法是你喜欢它的方式以及你容易记住的方式。我建议你想出一个你可以理解的习语,这样以后如果你必须编辑你的代码,你就会知道去哪里找。
【讨论】:
以上是关于在代码中的哪个位置连接 Qt SIGNALS 和 SLOTS 以获得最佳代码可读性?的主要内容,如果未能解决你的问题,请参考以下文章