Frage

Ich versuche, den Überblick über die Textchanged () Signal zu behalten für Handvoll QTextEdits. Ich mag unabhängig von dem Text bearbeiten, das Gleiche tun, das Signal emittierenden: uncheck der zugehörigen Kontrollkästchen in einem QListWidget, wenn es leer ist und lassen Sie sich sonst überprüft. Die Funktion Ich habe so für sich wie folgt:

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);
    }
}

Mit dem aktuellen Ansatz, würde ich eine Funktion wie diese für jeden QTextEdit machen muß; Jede Funktion praktisch identischen Code enthält. Wenn ich jeden der Textänderungen in einem Array gespeichert (so dass ich ihren zugehörigen Index in der QListWidget finden konnte), wäre es möglich, für mich einen Schlitz wie diese haben?

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);
    }
}

Ist das möglich oder soll ich nur über einen separaten Slot für jeden Text bearbeiten erstellen? Bitte lassen Sie mich wissen, ob eine weitere Klarstellung erforderlich ist!

Schließlich, ich fühle mich wie der einzige sinnvolle Unterschied zwischen QLineEdits und QTextEdits ist die Standardgröße. Zugunsten der Dinge in Einklang zu halten, sollte ich in meinem UI nur eines dieser Objekte verwenden?

Danke !!!

War es hilfreich?

Lösung

ich glaube, Sie den Punkt der Slots und Signale fehlen. Wie schaffen Sie die Verbindungen? Versuchen Sie, eine Box, wenn eine der Textfelder ändern zu überprüfen? Wenn dies der Fall verwenden Sie einen QSignalMapper textChanged() Signale zur Karte den Wert true zu senden und zu verbinden daß an den QCheckBox setChecked(bool) Schlitz.

Wenn das zu kompliziert ist Unterklasse QCheckBox und eine Reihe von Funktionen checkBox() uncheckBox() erstellen, damit Sie Zustände ohne variable umschalten. Dann schließen Sie das QTextEdit textChanged() zu Ihrer Unterklasse checkBox()

Wenn dies nicht das, was Sie suchen, zumindest Unterklasse QTextEditto nimmt in einem QCheckBox, dass es ändern kann, wenn der Text ändert, anstatt Code zu duplizieren für jeden QTextEdit

Andere Tipps

Alles, was Sie brauchen, ist ein Hash von QAbstractButton*, verkeilt durch QTextEdit*. In dem Schlitz, sehen Sie die sender() in der Hash-up, wenn haben Sie den Knopf haben Sie benötigen. Dies ist genau das, was durch die QSignalMapper getan wird: Sie von einem Sender QWidget* auf Ihre Schaltfläche QWidget* zuordnen. Verwenden qobject_cast zu cast QAbstractButton*.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top