Pergunta

Estou tentando acompanhar o sinal textChanged () para um punhado de qtextedits. Quero fazer a mesma coisa, independentemente da edição de texto emitindo o sinal: desmarque sua caixa de seleção associada em um QLISTWIdget se estiver vazio e deixá -lo verificado de outra forma. A função que eu tenho assim é a seguinte:

void MainWindow::changed()
{
    QString tempStr = ui->hNMRedit->toPlainText();
    if(tempStr != "")
    {
       ui->checkList->item(0)->setCheckState(Qt::Checked);
    }
    else
    {
       ui->checkList->item(0)->setCheckState(Qt::Unchecked);
    }
}

Com a abordagem atual, eu teria que fazer uma função como essa para cada qtextedit; cada função contendo código praticamente idêntico. Se eu armazenasse cada uma das edições de texto em uma matriz (para que eu pudesse encontrar o índice associado no QlistWidget), seria possível para mim ter um slot como esse?

void MainWindow::changed(QWidget *sender)   // for whichever text edit emits the
                                            // textChanged() signal
{
    QString tempStr = sender->toPlainText();
    if(tempStr != "")
    {
       // I would potentially use some sort of indexOf(sender) function on the array I 
       // mentioned earlier here... a little new to Qt, sorry
       ui->checkList->item(array.indexOf(sender))->setCheckState(Qt::Checked);
    }
    else
    {
       // same as above...
       ui->checkList->item(array.indexOf(sender))->setCheckState(Qt::Unchecked);
    }
}

Isso é possível ou devo apenas criar um slot separado para cada edição de texto? Por favor, deixe -me saber se for necessário mais um esclarecimento!

Por fim, sinto que a única diferença significativa entre Qlineedits e Qtextedits é o tamanho padrão. Em favor de manter as coisas consistentes, devo usar um desses objetos em toda a minha interface do usuário?

Obrigado!!!

Foi útil?

Solução

Eu acho que você está perdendo o ponto de slots e sinais. Como você está criando as conexões? Você está tentando verificar uma caixa quando alguma das caixas de texto mudar? Se assim for, use um Qsignalmapper Para mapear o textChanged() sinais para enviar um valor de verdadeiro e conectá -lo ao Qcheckbox setChecked(bool) slot.

Se isso for muito complicado, qcheckbox e criar um conjunto de funções checkBox() uncheckBox() para que você possa alternar os estados sem uma variável. Em seguida, conecte o qtextedit textChanged() para sua subclasse checkBox()

Se não é isso que você está procurando, pelo menos a subclasse qtexteditto tira em um Qcheckbox que ele pode mudar quando o texto muda em vez de duplicar o código para cada qtextedit

Outras dicas

Tudo que você precisa é um hash de QAbstractButton*, digitado por QTextEdit*. No slot, você olha para o sender() No hash, se descobriu que você tem o botão de que precisa. Isso é precisamente o que é feito pelo QSignalMapper: você pode mapear de um remetente QWidget* para o seu botão QWidget*. Usar qobject_cast para lançar QAbstractButton*.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top