【问题标题】:QLineedit disabling/re-enabling.QLineedit 禁用/重新启用。
【发布时间】:2015-03-24 13:38:07
【问题描述】:

我有一个包含四个变量的方程,程序运行只需要定义 3 个。当定义了 3 个参数时(通过我的 GUI 中的 lineedits),我希望第四个参数变灰。我现在只知道如何通过在编辑另一个 lineedit 时禁用一个 lineedit 来链接两个参数。例如

void WaveformGen::on_samples_textEdited(const QString &arg1)
{
    ui->cycles->setDisabled(true);
}

因此,当编辑样本时,我会禁用另一个名为循环的行编辑

【问题讨论】:

    标签: qt qtgui qlineedit


    【解决方案1】:

    使用单个插槽:

    class WaveformGen {
    private:
        QList<QLineEdit *> m_lineEdits;
    private slots:
        void lineEditTextEdited(const QString &text);
        ...
    };
    
    WaveformGen::WaveformGen()
    {
        ...
        // create an ordered list of line edits:
        m_lineEdits << ui->lineEdit1 << ui->lineEdit2 << ui->lineEdit3 << ui->lineEdit4;
        // connect all to same slot:
        foreach(QLineEdit *lineEdit, m_lineEdits) {
            connect(lineEdit, SIGNAL(textEdited(const QString &)), this, SLOT(lineEditTextEdited(const QString &)));
        }
    }
    
    void WaveformGen::lineEditTextEdited(const QString &str)
    {
        // iterate over all lineEdits:
        for (int i = 0; i < m_lineEdits.count() - 1; ++i) {
            // enable the next lineEdit if the previous one has some text and not disabled
            m_lineEdits.at(i+1)->setEnabled(!m_lineEdits.at(i)->text().isEmpty() && m_lineEdits.at(i)->isEnabled());
        }
    }
    

    【讨论】:

    • 这是更好的方法@SageDO
    • 我能否得到更多关于代码中发生了什么的解释?我没有完全遵循。
    • @SageDO 我添加了一些 cmets。
    • @svlasov 谢谢,我一直在试图了解启用 lineedits 的条件。
    【解决方案2】:

    制作一个插槽,根据需要从不同的 lineEdits 连接尽可能多的textEdited(const QString &amp;arg1),然后在插槽的主体中使用QObject::sender() 方法检索信号发送器

    【讨论】:

    • 您如何建议使用sender() 找到未编辑的 edut 行?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-09-20
    • 2014-09-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-09-23
    • 1970-01-01
    相关资源
    最近更新 更多