Russian Qt Forum

Qt => Пользовательский интерфейс (GUI) => Тема начата: BagmutA от Февраль 16, 2012, 11:11



Название: Выделение текста в QInputDialog
Отправлено: BagmutA от Февраль 16, 2012, 11:11
Можно ли в QInputDialog (в режиме InputDialog::TextInput) после предварительной установки текста
Код
C++ (Qt)
setTextValue ( const QString & text )
выделить какую-либо его часть?


Название: Re: Выделение текста в QInputDialog
Отправлено: Пантер от Февраль 16, 2012, 11:15
Можно. Я не против. http://doc.qt.nokia.com/4.8-snapshot/qobject.html#findChildren


Название: Re: Выделение текста в QInputDialog
Отправлено: BagmutA от Февраль 16, 2012, 12:56
Да, спасибо, к QLineEdit я достучался.
Но с выделением есть проблема:
Код
C++ (Qt)
QInputDialog * inputDialog = new QInputDialog();
inputDialog->setTextValue("");
 
QLineEdit * lineEdit = inputDialog->findChildren<QLineEdit *>()[0];
lineEdit->setText("hello world");
lineEdit->deselect();
lineEdit->setSelection( 0, 3 );
 
qDebug() << "selectedText=" << lineEdit->selectedText();
 
inputDialog->exec();

qDebug() выводит "hel", а вот в самом lineEdit остается выделеным весь текст.


Название: Re: Выделение текста в QInputDialog
Отправлено: BagmutA от Февраль 16, 2012, 13:01
Возможно это баг.
Вот у человека аналогичная проблема:
http://developer.qt.nokia.com/forums/viewthread/11829


Название: Re: Выделение текста в QInputDialog
Отправлено: magog от Февраль 16, 2012, 16:51
сделай свой инпут дайлог кастомный. Кода не особо больше получается


Название: Re: Выделение текста в QInputDialog
Отправлено: GreatSnake от Февраль 16, 2012, 17:00
сделай свой инпут дайлог кастомный. Кода не особо больше получается
проблема не в диалоге, а в QLineEdit.


Название: Re: Выделение текста в QInputDialog
Отправлено: magog от Февраль 17, 2012, 11:09
сделай свой инпут дайлог кастомный. Кода не особо больше получается
проблема не в диалоге, а в QLineEdit.

Тоесть это проблема не только в инпут диалого, а вообще везде?


Название: Re: Выделение текста в QInputDialog
Отправлено: Alex Custov от Февраль 17, 2012, 15:59
Дело в самом QInputDialog:

Код
C++ (Qt)
void QInputDialog::setVisible(bool visible)
{
   Q_D(const QInputDialog);
   if (visible) {
       d->ensureLayout();
       d->inputWidget->setFocus();
       if (d->inputWidget == d->lineEdit) {
           d->lineEdit->selectAll();
       } else if (d->inputWidget == d->intSpinBox) {
           d->intSpinBox->selectAll();
       } else if (d->inputWidget == d->doubleSpinBox) {
           d->doubleSpinBox->selectAll();
       }
   }
   QDialog::setVisible(visible);
}
 

 Наследуйся от него и переопредели setVisible(bool).


Название: Re: Выделение текста в QInputDialog
Отправлено: kambala от Февраль 17, 2012, 16:07
а нельзя переопределить showEvent()? или он вызывается перед setVisible(true)?


Название: Re: Выделение текста в QInputDialog
Отправлено: GreatSnake от Февраль 17, 2012, 16:12
а нельзя переопределить showEvent()? или он вызывается перед setVisible(true)?
showEvent() вызывается после QWidget::setVisible(true). А вот что переопределять разницы нет.