Qt按钮处理建议
Qt Button Handling Advice
我已经到了我厌倦了如何在Qt中处理用户输入(即QPushButton
按压)的地步,我正在寻找处理这些事件的最佳方法的建议。
下面是我正在做的一个例子:
MyClass.h
class MyClass : public QMainWindow
{
Q_OBJECT
public:
...
QPushButton* getButtonA( );
QPushButton* getButtonB( );
public slots:
void buttonAPressed( );
void buttonBPressed( );
private:
...
};
main.cpp
int main( int argc, char* argv[ ] )
{
QApplication a( argc, argv );
MyClass w;
w.show( );
QObject::connect( w.getButtonA( ), SIGNAL( clicked( ) ), &w, SLOT( buttonAPressed( ) ) );
QObject::connect( w.getButtonB( ), SIGNAL( clicked( ) ), &w, SLOT ( buttonBPressed( ) ) );
return a.exec( );
}
它工作得很好,但我只是觉得一定有比这更好/更优雅的方式,对吗?
我猜你正在用Designer设计UI。假设您的MyClass
类有一个名为pushButtonStart
的按钮。然后,您可以将连接放置在MyClass
的构造函数中,如Matt Rogers所述:
MyClass::MyClass()
{
connect(ui->pushButtonStart, SIGNAL(clicked()), this, SLOT(startPressed());
}
但是,您可以进一步简化这种处理UI控件发出的信号的技术。如果您使用以下特定方式定义函数,则不需要上述connect()
调用:
MyClass.h
MyClass
{
...
public slots:
void on_pushButtonStart_clicked();
...
};
MyClass.cpp
MyClass::on_pushButtonStart_clicked()
{
// code goes for pushButtonStart's clicked signal
}
函数名必须非常具体:
- 必须以
on_
开头 然后应该有控件的名称: - 这里应该有一个下划线,后面跟着信号的名称:
_clicked
.
pushButtonStart
。 Qt魔法。Qt自动将pushButtonStart
的clicked
信号与on_pushButtonStart_clicked
插槽连接。您不需要单独指定连接
您实际上使用的是Qt中处理按钮按下的标准方式。我所知道的唯一另一种方式是通过将MyClass
作为按钮的事件过滤器,在这种情况下,这似乎是多余的。
我对你的代码所做的唯一改变是将信号->插槽连接放在MyClass
本身。在本例中,我假设您希望在构造函数中设置它们,如下所示:
MyClass::MyClass()
{
QObject::connect( w.getButtonA( ), SIGNAL( clicked( ) ), &w, SLOT( buttonAPressed( ) ) );
QObject::connect( w.getButtonB( ), SIGNAL( clicked( ) ), &w, SLOT( buttonBPressed( ) ) );
}
这将使连接远离主方法,并将它们分组在它们应该在的地方,这是在包含发出信号的按钮的类中。
相关文章:
- 如何在winApi上正确创建按钮以及处理其消息
- 如何在 android 中将C++回调作为按钮的点击处理程序传递
- 如何单击wxwidgets处理程序中的按钮
- MFC单选按钮组消息处理程序
- 如何添加C++/WinRT按钮单击处理程序
- 将事件处理程序添加到C 中的按钮
- Win32 工具栏下拉按钮消息处理
- 如何在mfc中处理单击和双击同一按钮
- 如何在从主窗口事件处理程序调用后在子窗口中创建按钮
- 如何在单选按钮分组框中获取用户的选择以进行进一步处理
- 检查在ON_COMMAND_RANGE处理程序函数上单击了哪个按钮
- WinAPI 创建窗口 + 子窗口,处理一个按钮按下
- 如何处理塞班C++中的绿键(呼叫按钮)事件
- 如何处理笔记本上的电源关闭按钮
- 如何处理QDialogButtonBox RestoreDefaults按钮
- 如何处理非客户端区域的按钮事件
- 按钮事件处理程序
- 为什么快板自动处理最小化按钮,而不是关闭按钮
- Qt按钮处理建议
- 处理按钮点击按钮程序