2010-02-01 2 views
1

У меня есть серия QTextEdits и QLineEdits, подключенных к слоту через QSignalMapper (который испускает сигнал textChanged (QWidget *)). Когда вызываемый подключенный слот вызывается (вставлен ниже), мне нужно иметь возможность различать два, чтобы я знал, следует ли вызывать функцию text() или toPlainText(). Каков самый простой способ определить тип подкласса QWidget?Определение типов объектов в Qt

void MainWindow::changed(QWidget *sender) 
{     
    QTextEdit *temp = qobject_cast<QTextEdit *>(sender); 
    QString currentText = temp->toPlainText(); // or temp->text() if its 
               // a QLineEdit... 
    if(currentText.compare("")) 
    { 
     ... 
    } 
    else 
    { 
     ... 
    } 
} 

Я рассматриваю возможность использования Try-улова, но Qt не кажется, имеет очень широкую поддержку исключений ... Есть идеи?

ответ

4

На самом деле, ваше решение уже существует. Фактически, qobject_cast вернет NULL, если он не может выполнить трансляцию. Так что попробуйте его на одном из классов, если это NULL, попробовать его на другой:

QString text; 
QTextEdit *textEdit = qobject_cast<QTextEdit*>(sender); 
QLineEdit *lineEdit = qobject_cast<QLineEdit*>(sender); 
if (textEdit) { 
    text = textEdit->toPlainText(); 
} else if (lineEdit) { 
    text = lineEdit->text(); 
} else { 
    // Return an error 
} 
+0

Спасибо, отлично работает! –

4

Вы также можете использовать Sender-> метаобъект() -> имя класса(), так что вы не будете делать unnecesary слепки. Специально, если у вас есть много классов для тестирования. Код будет выглядеть следующим образом:

QString text; 
QString senderClass = sender->metaObject()->className(); 

if (senderClass == "QTextEdit") { 
    QTextEdit *textEdit = qobject_cast<QTextEdit*>(sender); 
    text = textEdit->toPlainText(); 
} else if (senderClass == "QLineEdit") { 
    QLineEdit *lineEdit = qobject_cast<QLineEdit*>(sender); 
    text = lineEdit->text(); 
} else { 
    // Return an error 
} 

Я знаю, что это старый вопрос, но я оставляю этот ответ только в случае, если это было бы полезно для кого-то ...

 Смежные вопросы

  • Нет связанных вопросов^_^