监视小部件以更新按钮状态

时间:2014-03-05 12:45:02

标签: qt

有一种情况:例如我在复杂对话框中有一个按钮。我需要禁用此按钮,直到其他小部件(QLineEdit)为空。

我认为监视窗口小部件状态的最佳方法是使用QTimer和特殊功能来更改按钮状态:

void foo()
{
    if( !lineEdit1->text().isEmpty() && !lineEdit2->text().isEmpty() )
        btn->setEnabled( true )
    else
        btn->setEnabled( false );
} 

还有其他方法可以解决这个问题吗? 可能是使用QAction更好,还是会有开销?

PS:我不能使用信号和插槽,因为观察窗口小部件(带有窗口小部件的面板)是在单独的模块中创建的,他们不知道对话框的插槽。

1 个答案:

答案 0 :(得分:3)

最好的方法是使用信号/插槽机制触发QLineEdit中的更改。例如:

将行编辑的textChanged信号连接到相应的插槽

connect(lineEdit1, SIGNAL(textChanged(const QString &)), this, SLOT(onTextChanged(const QString &));

插槽实施。

void onTextChanged(const QString &text)
{
    if( !text.isEmpty() )
        btn->setEnabled( true )
    else
        btn->setEnabled( false );
}