Как выровнять qcombobox
Перейти к содержимому

Как выровнять qcombobox

  • автор:

Некоторые неординарные фишки Qt

Важное замечание: первые три пункта обязательны для выравнивания в lineEdit, четвертый можно реализовывать независимо от них.

Дополнение: то же самое можно сделать используя QStyleSheets (Qt4)

2. Получение списка сетевых интерфейсов

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19
// 1: Все интерфейсы, которые есть в системе QListQNetworkInterface> list1 = QNetworkInterface::allInterfaces(); // 2: Все IP-адреса интерфейсов, которые есть в системе QListQHostAddress> list2 = QNetworkInterface::allAddresses(); // 3: Различные проверки // QNetworkInterface содержит некоторое количество флагов (см. help), // поэтому извлечение нужного - дело несколько запутанное for(int k = 0; k  list1.size(); k++) { QFlagsQNetworkInterface::InterfaceFlags> flag = list1[k].flags(); // проверка на loopback qDebug()    <"LoopBack"  <bool(flag & QNetworkInterface::IsLoopBack) // проверка включен ли интерфейс  <"On/Off"  <bool(flag & QNetworkInterface::IsUp); } // 4: Иногда, кстати, можно проверку осуществлять гораздо проще: // (используя только список QHostAddress и тот факт, что IPv6 содержит символ ":") for (int k = 0; k  list2.size(); k++) if (!list2[k].toString().contains(':')) qDebug()  [k];

3. Использование ActiveX для доступа к приложениям MS Office

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22
// 1: Во-первых, необходимо сделать запись в файле .pro CONFIG += qaxcontainer // 2: Во-вторых, недурственно было бы проверить установлен ли вообще MS Office QAxObject* obj = new QAxObject; if (!obj->setControl("Excel.Application")) qDebug()  "MS Excel was not found!"; delete obj; // 3: Собственно, подключение к MS Office (если, конечно, проверка пройдена) QAxObject* excel = new QAxObject("Excel.Application"); excel->setProperty("Visible", true); // false - если не хочешь наблюдать за процессом // 4: Добавить новую книгу (для Excel) // для Word это будет новый документ ("Documents") // для PowerPoint это будет новая презентация ("Presentations") excel->querySubObject("Workbooks")->dynamicCall("Add()"); // 5: Открыть существующую книгу (документ, презентацию) excel->querySubObject("Workbooks")->dynamicCall("Open(QVariant)", "D:/1.xlsx"); // 6: Сохранить не спрашивая (однако, если такое имя уже существует, вопрос все же задастся) excel->querySubObject("ActiveWorkbook")->dynamicCall("SaveAs(QVariant)", "D:/1.xlsx"); // 7: Закрыть excel->dynamicCall("Quit()"); // 8: ВАЖНО! все переменные, созданные через ". = new QAxObject. " необходимо удалять delete excel;

4. Запись в QSettings пользовательского типа данных (в справке вообще не сильно понятно что делать надо)

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29
// 1. Опишем сам тип struct SomeType { QString str; int num; }; // 2. Обязательно зарегистрировать, дабы использовать его в QVariant Q_DECLARE_METATYPE(SomeType) // 3. Внутри себя QVariant при сохранении/чтении использует QDataStream, // поэтому соответствующие операторы нужно перегрузить inline QDataStream& operator  (QDataStream& out, const SomeType& a) { out  a.str  a.num; return out; } inline QDataStream& operator >> (QDataStream& in, SomeType& a) { in >> a.str >> a.num; return in; } // 4. Перегруженные операторы необходимо зарегистрировать (они же для пользовательского типа) qRegisterMetaTypeStreamOperatorsSomeType>("SomeType"); // 5. Запись в QSettings SomeType t; t.str = "hello, my deer )"; t.num = 2016; QSettings sets("config.ini", QSettings::IniFormat); sets.setValue("someInfo", QVariant::fromValue(t)); // 6. Чтение из QSettings QSettings sets("config.ini", QSettings::IniFormat); QVariant v = sets.value("someInfo"); SomeType t = v.valueSomeType>();

QCombobox text aligment

Привет! Подскажите, как текст в QCombobox поставить по центру. В гугле основной вариант предлагают следующий: QComboBox comboBox; comboBox.setEditable(true); comboBox.lineEdit()->setReadOnly(true); comboBox.lineEdit()->setAlignment(Qt::AlignCenter); comboBox.addItem(«Nemesis»); comboBox.addItem(«Erebus»); comboBox.addItem(«Nix»); for (int i = 0 ; i < comboBox.count() ; ++i) < comboBox.setItemData(i, Qt::AlignCenter, Qt::TextAlignmentRole); но comboBox.lineEdit()->setReadOnly(true); и comboBox.lineEdit()->setAlignment(Qt::AlignCenter); не могут выполнится т.к. у lineEdit() таких методов нет. Подскажите, как быть? P.S Qt 5.6

Отслеживать
задан 13 окт 2016 в 12:08
473 2 2 серебряных знака 15 15 бронзовых знаков

1 ответ 1

Сортировка: Сброс на вариант по умолчанию

Всё правильно предлагают, проблема скорее всего заключается в том, что вы забыли добавить #include .

Отслеживать
11.7k 9 9 золотых знаков 28 28 серебряных знаков 40 40 бронзовых знаков
ответ дан 13 окт 2016 в 12:21
Vladimir Pavluk Vladimir Pavluk
460 2 2 серебряных знака 6 6 бронзовых знаков
спасибо, помогло!
13 окт 2016 в 12:35

  • c++
  • qt
  • qtcreator
    Важное на Мете
Похожие

Подписаться на ленту

Лента вопроса

Для подписки на ленту скопируйте и вставьте эту ссылку в вашу программу для чтения RSS.

Дизайн сайта / логотип © 2023 Stack Exchange Inc; пользовательские материалы лицензированы в соответствии с CC BY-SA . rev 2023.10.27.43697

Нажимая «Принять все файлы cookie» вы соглашаетесь, что Stack Exchange может хранить файлы cookie на вашем устройстве и раскрывать информацию в соответствии с нашей Политикой в отношении файлов cookie.

Создание моделей данных для QComboBox

Всем привет! Хочу поделиться с вами двумя способами, как можно и нужно создавать модели данных для виджетов типа QComboBox в Qt. В конце статьи будет показано решение, для заполнения комбобокса из БД, одной строкой кода.

Способ №1. Полностью ручное создание модели

Все модели данных в Qt должны быть наследниками от QAbstractItemModel. Лично в моей практике комбобоксы всегда отображали перечисление из SQL базы данных. Это были пол, страна, национальность и некоторые другие списки, из которых пользователю нужно было выбрать один пункт. Поэтому, при создании модели, у меня всегда было две параллельных задачи:

  1. Как сформировать человекочитаемые названия пунктов пользователю?
  2. Как связать читаемые пункты с ключами, которые надо писать в БД?

Для реализации замысла. Первым делом надо посмотреть какие из методов QAbstractItemModel, вы обязаны определить у себя:

  • QModelIndex QAbstractItemModel::index(int row, int column, const QModelIndex & parent = QModelIndex()) const
  • QModelIndex QAbstractItemModel::parent(const QModelIndex & index) const
  • int QAbstractItemModel::columnCount(const QModelIndex & parent = QModelIndex()) const
  • int QAbstractItemModel::rowCount(const QModelIndex & parent = QModelIndex()) const
  • QVariant QAbstractItemModel::data(const QModelIndex & index, int role = Qt::DisplayRole) const

Таким образом, для комбобокса выбора национальности. Получается следующая реализация модели:

// nationalitymodel.h // #pragma once #include class NationalityModel : public QAbstractListModel < Q_OBJECT typedef QPairDataPair; QList < DataPair >m_content; public: explicit NationalityModel( QObject *parent = 0 ); virtual QVariant data( const QModelIndex & index, int role = Qt::DisplayRole ) const; virtual int rowCount( const QModelIndex & parent = QModelIndex() ) const; >; // nationalitymodel.cpp #include "nationalitymodel.h" NationalityModel::NationalityModel(QObject *parent) : QAbstractListModel(parent) < m_content QVariant NationalityModel::data( const QModelIndex &index, int role ) const < const DataPair& data = m_content.at( index.row() ); QVariant value; switch ( role ) < case Qt::DisplayRole: < value = data.first; >break; case Qt::UserRole: < value = data.second; >break; default: break; > return value; > int NationalityModel::rowCount(const QModelIndex &/*parent*/) const < return m_content.count(); >// addressbookmainwindow.cpp. В конструкторе формы, где будет использоваться модель ( AddressBookMainWindow::AddressBookMainWindow() ) ui->nationalityCombo->setModel( new NationalityModel( this ) ); 

Все значения пунктов комбобокса, просто записываються в QList< DataPair &gt m_content;. И потом выдаются при обращении комбобокса к функции NationalityModel::data(). Начинающим важно понимать. Не программист явно вызывает эту функцию в своём коде. А комбобокс обращается к данной функции когда ему надо! Ваша задача, что бы функция отдавала эти актуальные данные по запросу.

NationalityModel::data() вызывается с двумя параметрами. Как того требует простотип QAbstractItemModel::data():

  • const QModelIndex &index. Объект содержащий номер строки, колонки и ссылку на родительский QModelIndex. Т.е. QComboBox сообщает место(позицию) пункта, для которого запрашиваются данные. В нашем случае актуален только номер строки. Остальные параметры внутри &index только для совместимости с другими моделями, типа QTreeView и QTableView. Поэтому наша функция запрашивает пару, «читаемое» и «служебное» значения (DataPair) только для данной строки. Хранящиеся в списке возможных значений (m_content).
  • int role. В этом параметре QComboBox сообщает, какого рода данные нужны(какая роль). В нашем случае «читаемое» значение это Qt::DisplayRole, а «служебное» Qt::UserRole.

За один вызов NationalityModel::data() возвращаются данные одной роли для одной, конкретной строки в списке.

Если обратится к enum ItemDataRole, где определены Qt::DisplayRole, Qt::UserRole. Станет понятно для чего ещё можно реализовать такую модель. Например, поменять шрифт некоторых пунктов (Qt::FontRole). Выровнять текст пункта меню, как то по особенному. Или задать текст всплывающей подсказки. Смотрите в упомянутый enum. Возможно вы найдёте там то что искали уже давно.

Исходный код примера

Возможно вам будет интересно изучить этот код в работе. Для этих целей был создана реализация небольшой адресной книги.

Как скачать код с github.com

  1. Скачайте проект «git clone https://github.com/stanislav888/AddressBook.git»
  2. Меняете текущий каталог «cd AddressBook»
  3. Инициализируйте подмодуль «git submodule init»
  4. Подгружаете код подмодуля в проект «git submodule update»
  5. Открываете и собираете проект
  6. Запускаете программу
  7. Если всё хорошо, появиться окно выбора\создания файла базы данных. Можете посмотреть что за программа. Для заполнения тестовыми данными есть кнопочка «Fill test data»

Способ №2. Быстрое создание модели из перечисления в SQL БД

Конечно же самый правильный способ организации перечислений. Это хранить их в базе, в виде отдельных таблиц. И подгружать в комбобоксы в конструкторах форм. И было бы идеально иметь какое-то универсальное решение. Вместо написания отдельных классов моделей, для каждого перечисления.

Для реализации нам потребуется QSqlQueryModel. Это похожая модель. Она тоже наследник QAbstractItemModel, но используется для отображения результатов SQL запроса QSqlQuery в таблице QTableView. В данном случае, наша задача приспособить данный класс. Что бы он давал данные так же как в первом примере.

Вы удивитесь, но код получился небольшим.

// addressdialog.h /// #pragma once #include class BaseComboModel : public QSqlQueryModel < Q_OBJECT QVariant dataFromParent(QModelIndex index, int column) const; public: explicit BaseComboModel( const QString &columns, const QString &queryTail, QObject *parent = 0 ); virtual QVariant data(const QModelIndex &item, int role = Qt::DisplayRole) const; virtual int rowCount(const QModelIndex &parent) const; >; // basecombomodel.cpp #include "basecombomodel.h" #include namespace < enum Columns // Depends with 'query.prepare( QString( "SELECT . ' < Id, Data, >; > BaseComboModel::BaseComboModel( const QString& visualColumn, const QString& queryTail, QObject *parent ) : QSqlQueryModel( parent ) < QSqlQuery query; query.prepare( QString( "SELECT %1.id, %2 FROM %3" ).arg( queryTail.split( ' ' ).first() ).arg( visualColumn ).arg( queryTail ) ); // I.e. query.prepare( "SELECT country.id, countryname || ' - ' || countrycode FROM country" ); query.exec(); QSqlQueryModel::setQuery( query ); >QVariant BaseComboModel::dataFromParent( QModelIndex index, int column ) const < return QSqlQueryModel::data( QSqlQueryModel::index( index.row() - 1 // "- 1" because make first row empty , column ) ); >int BaseComboModel::rowCount(const QModelIndex &parent) const < return QSqlQueryModel::rowCount( parent ) + 1; // Add info about first empty row >QVariant BaseComboModel::data(const QModelIndex & item, int role /* = Qt::DisplayRole */) const < QVariant result; if( item.row() == 0 ) // Make first row empty < switch( role ) < case Qt::UserRole: result = 0; break; case Qt::DisplayRole: result = "(please select)"; break; default: break; >> else < switch( role ) < case Qt::UserRole: result = dataFromParent( item, Id ); break; case Qt::DisplayRole: result = dataFromParent( item, Data ); break; default: break; >> return result; > // Использование модели в форме(addressdialog.ui) выглядит примерно так ui->countryCombo->setModel( new BaseComboModel( "countryname || ' - ' || countrycode", "country", this ) ); 

В данной реализации, всю работу делает QSqlQueryModel. Надо только немного переопределить логику QSqlQueryModel::data(). Для начала представьте, что в модель записывается SQL запрос «SELECT country.id, countryname || ‘ — ‘ || countrycode FROM country».

Конечно в коде проекта это немного более замысловато. Но если отладить там будет сформирована именно такая строка. Запрос выводит два столбца. Первичный ключ(«id»). И человекочитаемое значние, видимое на скриншоте. Поскольку все результаты SQL запроса оказываются в Qt::DisplayRole у QSqlQueryModel. То без изменения QSqlQueryModel, в качестве модели комбобокса, выдаст просто список «id». А человекочитаемое значение не будет видно. Т.к. комбобокс никак не использует второй столбец модели(запроса). Вы это увидите, если закомментируете объявление и реализацию BaseComboModel::data().

Для того что бы увидеть список стран, как на скриншоте, BaseComboModel::data():

  • возвращает данные первого запрошенного столбца(«id») как Qt::UserRole первого столбца
  • возвращает данные второго столбца(«countryname || ‘ — ‘ || countrycode») как Qt::DisplayRole первого столбца
  • добавляет строку «(please select)» в самом начале. За счёт смещения номеров при запросе данных от QSqlQueryModel. Т.е. к результатам SQL запроса, модель сама добавляет ещё одну строку

Таким образом вы можете быстро и легко делать модели для QComboBox-а с помощью BaseComboModel. Например, у вас есть SQL таблица месяцев в году(«months»). Где два столбца, «id» и «monthname». Вам можно заполнить комбобокс выбора месяца следующим образом:

ui->monthsCombo->setModel( new BaseComboModel( «monthname», «months», this ) );
Получить значение «id» выбранного месяца ui->monthsCombo->itemData( ui->monthsCombo->currentIndex(), Qt::UserRole );. Получть значение видимое пользователю ui->monthsCombo->currentText();. Этот код гораздо компактнее всех остальных случаев. Большинство разработчиков в данной ситуации пишут, отдельно запрос к базе (QSqlQuery). А потом, в цикле, добавляют полученные записи в комбобокс, через QComboBox::addItem(). Это конечно рабочее, но не самое красивое решение.

Практика

Подозреваю, не все поняли как тут всё устроено и работает. Просто потому что для этого нужен очень специфический опыт реализации своих моделей. В этом случае, что бы ваше время на статью не пропало даром. Давайте просто попробуем использовать приведённый код на практике. Что бы потом, со временем понять его.

Два варианта как это сделать:

    Эксперименты на основе моего приложения — адресной книги, упомянутой выше. Заголовок и реализация BaseComboModel уже присутствуют в проекте. Примеры ниже, будут на её основе.

    const QString &columns. Формирование человекочитаемого названия пункта для пользователя. В примере выше «countryname || ‘ — ‘ || countrycode» применяется конкатенация двух столбцов через дефис. Оператор конкатенации «||» специфичный для SQLite. Можно указать несколько столбцов через запятую. Но показываться будет только первый.

Далее, надо добавить на форму QComboBox с которым вы будете экспериментировать. В моём случае это будет addressbookmainwindow.ui. Имя нового виджета ui->comboBox

Теперь будем заполнять этот комбобокс разными способами

ui->comboBox->setModel( new BaseComboModel( «countryname», «country», this ) );
«SELECT country.id, countryname FROM country».
Просто список стран
ui->comboBox->setModel( new BaseComboModel( «countryname», «country WHERE countrycode IN ( ‘US’, ‘RU’, ‘CN’ )», this ) );
«SELECT country.id, countryname FROM country WHERE countrycode IN ( „US“, „RU“, „CN“ )».
Некоторые страны выбранные по коду.
ui->comboBox->setModel( new BaseComboModel( «lastname», «persons», this ) );
«SELECT persons.id,, lastname FROM persons».
Список фамилий записанных в базе. Что бы они были, надо кликнуть кнопку «Fill test data»
ui->comboBox->setModel( new BaseComboModel( «lastname || ‘ — ‘ || email», «persons LEFT JOIN address AS a ON a.id = persons.addressid», this ) );
«SELECT persons.id, lastname || ‘ — ‘ || email FROM persons LEFT JOIN address AS a ON a.id = persons.addressid».
Список фамилий с email aдресами. Не забывайте что «||» оператор конкатенации строк только в SQLite. Для других баз понадобится переделать конкатенацию
ui->comboBox->setModel( new BaseComboModel( «lastname || ‘ — ‘ || countryname», «persons INNER JOIN address AS a ON a.id = persons.addressid INNER JOIN country AS c ON a.countryid = c.id», this ) );
«SELECT persons.id, lastname || ‘ — ‘ || countryname FROM persons INNER JOIN address AS a ON a.id = persons.addressid INNER JOIN country AS c ON a.countryid = c.id».
Список фамилий с соответствующими странами

Конечно, все эти фокусы с «JOIN» и «WHERE» выглядят интересно. Но в большинстве случаев не нужны. Поэтому и было решено использовать два параметра в конструкторе. Вместо того чтобы подавать туда SQL запрос целиком. Если вы храните все перечисления в одной таблице. И разделяете эти перечисления по какому-то дополнительному ключу. Лучше сделать третий параметр, со значением этого ключа. Вместо того чтобы использовать каждый раз «WHERE».

Повторюсь, как получить «id» выбранной записи
ui->comboBox->itemData( ui->comboBox->currentIndex(), Qt::UserRole );

Заключение

Надеюсь, несмотря на сложность кода. Вы извлекли что то полезное для себя. Если хотите узнать больше о приложении «AddressBook» приведённом здесь ради примера. Смотрите статью «Автоматизация обмена данными Qt форм с SQL базой данных».

Описание Класса QLineEdit
[модуль QtGui]

Виджет QLineEdit представляет собой редактор однострочного текста.

Редактор строки позволяет пользователю вводить и редактировать одну строку простого текста с набором полезных функций редактирования, включая отмену, повтор, вырезание, вставку, а также перетаскивание с помощью механизма drag-and-drop.

Изменяя свойства echoMode() редактора, можно использовать его в качестве поля «только-для-записи» и для ввода паролей.

Длина текста может быть ограничена с помощью maxLength(). Для текста можно задать условия, используя validator() или inputMask(), либо оба их.

QTextEdit — это подобный класс, но он позволяет редактировать многострочный форматированный текст.

Вы можете изменять текст с помощью setText() или insert(). Текст может быть получен с помощью text(); отображаемый текст (может отличаться от содержащегося текста, см. EchoMode) может быть получен с помощью displayText(). Текст может быть выделен с помощью setSelection() или selectAll(), а выделенный текст может быть вырезан с помощью cut(), скопирован с помощью copy() и вставлен с помощью paste(). Текст может быть выровнен с помощью setAlignment().

При изменении текста испускается сигнал textChanged(); при изменении текста с помощью setText(), испускается сигнал textEdited(); при перемещении курсора испускается сигнал cursorPositionChanged(); а при нажатии клавиш Return или Enter испускается сигнал returnPressed().

При окончании редактирования (редактор теряет фокус или нажата клавиша Return/Enter) испускается сигнал editingFinished().

Обратите внимание на то, что если установлено условие для текста (validator()), то сигналы returnPressed()/editingFinished() испускаются только в случае, если условие для текста возвращает QValidator::Acceptable.

По умолчанию, QLineEdits имеет рамку, определенную Windows или или стилем Motif; это может быть изменено с помощью setFrame(false).

Ниже приведены ключевые клавиши и сочетания клавиш и действия, вызываемые ими, определенные по умолчанию. Также редактор строки предоставляет контекстное меню (обычно вызываемое по нажатии правой кнопки мыши), в котором представлены некоторые из этих действий.

Клавиши Действие
Стрелка Влево Перемещает курсор на один символ влево.
Shift+Стрелка Влево Перемещает курсор на один символ влево с выделением текста.
Стрелка Вправо Перемещает курсор на один символ вправо.
Shift+Стрелка Вправо Перемещает курсор на один символ вправо с выделением текста.
Home Перемещает курсор в начало строки.
End Перемещает курсор в конец строки.
Backspace Удаляет один символ, стоящий слева от курсора.
Ctrl+Backspace Удаляет одно слово, стоящее слева от курсора.
Delete Удаляет один символ, стоящий справа от курсора.
Ctrl+Delete Удаляет одно слово, стоящее справа от курсора.
Ctrl+A Перемещает курсор в начало строки.
Ctrl+B Перемещает курсор в конец строки.
Ctrl+C Копирует выделенный текст в буфер обмена.
Ctrl+Insert Копирует выделенный текст в буфер обмена.
Ctrl+D Удаляет один символ, стоящие справа от курсора.
Ctrl+E Перемещает курсор в конец строки.
Ctrl+F Перемещает курсор на один символ вправо.
Ctrl+H Удаляет один символ, стоящий слева от курсора.
Ctrl+K Удаляет все символы от курсора до конца строки.
Ctrl+V Вставляет текст в редактор из буфера обмена.
Shift+Insert Вставляет текст в редактор из буфера обмена.
Ctrl+X Удаляет выделенный текст и копирует его в буфер обмена.
Shift+Delete Удаляет выделенный текст и копирует его в буфер обмена.
Ctrl+Z Отменяет последнюю операцию.
Ctrl+Y Повторяет последнюю отмененную операцию.

Любые другие сочетания клавиш, имеющие символьное представление, приведут к вставке этого предаставления в строку.

Screenshot in Macintosh styleScreenshot in Windows style

Описание Типов Членов

enum QLineEdit::EchoMode

Данное перечисление описывает, как редактор строки отображает свое содержимое.

Константа Значение Описание
QLineEdit::Normal 0 Отображаются те-же самые символы, что и введены. Это режим по умолчанию.
QLineEdit::NoEcho 1 Не отображается вообще ничего. Этот режим может использоваться для ввода паролей там, где даже длинна пароля должна оставаться в секрете.
QLineEdit::Password 2 Вместо фактически введенных символов отображаются звездочки.

Описание Свойств

acceptableInput : const bool

Данное свойство сообщает, соответствует ли введенный текст маске ввода или условию, наложенному на текст.

alignment : Qt::Alignment

Данное свойство содержит выравнивание текста в редакторе.

Допускается только выравнивание по горизонтали, Qt::AlignJustify считается Qt::AlignLeft.

cursorPosition : int

Данное свойство содержит текущее положение курсора в редакторе.

Установка положения курсора приводит к перерисовке виджета, если необходимо.

displayText : const QString

Данное свойство содержит отображаемый текст.

Если echoMode равно Normal, то возвращается тоже самое, что возвращается text(); если EchoMode равно Password, то возвращается строка, содержащаю звездочки, с длиной text().length() символов, например, «******»; если EchoMode равно NoEcho, то возвращается пустая строка, «».

dragEnabled : bool

Данное свойство указывает, начинает ли редактор процесс перетаскивания, если пользователь начинает перемещать мышь с нажатой кнопкой над выделенным текстом.

По умолчанию перетаскивание запрещено.

echoMode : EchoMode

Данное свойство содержит режим отображения содержимого редактора.

Изначальное значение — это Normal, но QLineEdit также поддерживает режимы NoEcho и Password.

Это свойство влияет на отображение содержимого текста, возможность копирования и перетаскивания текста.

frame : bool

Данное свойство указывает, отображается ли рамка редактора.

Если рамка доступна (по умолчанию), то редактор рисуется внутри рамки, в противном случае редактор отображается без рамки.

hasSelectedText : const bool

Данное свойство сообщает, выделен ли какой либо текст в редакторе.

hasSelectedText() возвращает true, если пользователем выделена часть текста или весь текст; в противном случае возвращает false.

inputMask : QString

Данное свойство содержит маску ввода.

Если маска не установлена, то inputMask() возвращает пустую строку.

Устанавливает маску ввода QLineEdit. Условие для текста может использоваться вместо маски или вместе с ней; см. setValidator().

Сброс маски в возвращение обычной работы QLineEdit производится с помощью передачи пустой строки («») или с помощью вызова setInputMask() без аргументов.

Формат маски предусматривает следующие символы:

Символ Значение
A Требуется алфавитный символ ASCII. A-Z, a-z.
a Разрешен, но не обязателен алфавитный симовл ASCII.
N Требуется алфавитный символ или цифра ASCII. A-Z, a-z, 0-9.
n Разрешен, но не обязателен алфавитный символ или цифра ASCII.
X Требуется любой символ.
x Разрешен, но не обязателен любой символ.
9 Требуется цифра ASCII. 0-9.
0 Разрешена, но не обязательна цифра ASCII.
D Требуется цифра ASCII не равная нулю. 1-9.
d Разрешена, но не обязательна цифра ASCII не равная нулю (1-9).
# Разрешена, но не обязательна цифра или знак плюс/минус ASCII.
H Требуется шестнадцатиричный символ. A-F, a-f, 0-9.
h Разрешен, но не обязателен шестнадцатиричный символ.
B Требуется двоичный символ. 0-1.
b Разрешен, но не обязателен двоичный символ.
> Все следующие алфавитный символы переводятся в верхний регистр.
Все следующие алфавитный символы переводятся в нижний регистр.
! Изменение регистра отключается.
\ Используйте \ для того, чтобы отменить действие вышеприведенных знаков, как специальных символов, и использовать их в качестве разделителей.

Маска состоит из строки символов маски и разделителей, иногда сопровождается точкой с запятой и символом, используемым для обозначения пробелов: символы пробелов всегда удаляются из строки после окончания редактирования. По умолчанию, символы пробела, соответствуют обычному пробелу.

Маска Описание
000.000.000.000;_ IP-адрес; пробелы обозначаются символом _.
HH:HH:HH:HH:HH:HH;_ MAC-адрес
0000-00-00 Дата ISO; пробелы обозначаются символом пробел
>AAAAA-AAAAA-AAAAA-AAAAA-AAAAA;# Лицензионный номер; пробелы обозначаются символом - и все (алфавитные) символы приводятся к верхнему регистру.

Для контроля диапазона символов (например, при вводе IP-адреса) используйте маску с условием для текста.

maxLength : int

Данное свойство содержит максимальную разрешенную длину текста.

Если текст очень длинный, то он обрезается по установленному пределу.

Если происходит обрезание текста, то текст становится не выделенным (если раньше что либо было выделено), курсор помещается в позицию 0 и отображается первая часть текста.

Если для редактора установлена маска ввода, то эта маска определяет максимальную длину текста.

modified : bool

Данное свойство указывает, было ли изменено содержимое редактора пользователем.

QLineEdit никогда не читает флаг изменения; по умолчанию флаг имеет значение false и изменяется на true всякий раз, когда пользователь изменяет содержимое редактора.

Это удобно в случаях, когда приложение предоставляет значение по умолчанию, но не знает, что такое значение есть (возможно, значение по умолчанию зависит от других полей формы). Сначала редактор не отображает значение по умолчанию, но при значет о нем, и только если modified() возвращает false (пользователь не ввел текст), вставляет значение по умолчанию.

Вызов setText() устанавливает флаг модификации в false.

readOnly : bool

Данное свойство указывает, позволяет ли редактор вводить текст или только читать.

В режиме только-для-чтения пользователь все еще может копировать в буфер обмена и перетаскивать текст (если echoMode() равно Normal), но не может редактировать его.

В режиме только-для-чтения, QLineEdit не отображает курсор.

redoAvailable : const bool

Данное свойство сообщает, доступен ли повтор последнего отмененного действия.

selectedText : const QString

Данное свойство содержит выделенный текст.

Если ни какой текст не выделен, то значением свойства является пустая строка.

text : QString

Данное свойство содержит редактируемый текст.

Установка данного свойства отменяет выделение текста, очищает историю отмены/повтора, устанавливает курсор в конец строки и устанавливает свойство modified в false. При вставке текста с помощью setText() не проверяется соответствие устанавливаемого текста заданному условию не текст.

Текст обрезается в соответствии с maxLength().

undoAvailable : const bool

Данное свойство сообщает, доступна ли отмена последнего действия.

Описание Функций-Членов

QLineEdit::QLineEdit ( QWidget * parent = 0 )

Создает не заполненный текстом редактор.

Максимальная длина текста установлена равной 32767 символам.

Аргумент parent передается в конструктор QWidget.

QLineEdit::QLineEdit ( const QString & contents, QWidget * parent = 0 )

Создает редактор, содержащий текст contents.

Курсор устанавливается в конец строки, а максимальная длина текста устанавливается равной 32767 символам.

Аргумент parent передается в конструктор QWidget.

QLineEdit::~QLineEdit ()

void QLineEdit::backspace ()

Если никакой текст не выделен, но символ, стоящий слева от курсора, удаляется, а курсор перемещается на одну позицию левее. Если есть выделенный текст, то курсор перемещается в начало выделенного текста, а выделенный текст удаляется.

void QLineEdit::clear () [slot]

Удаляет текст, содрежащийся в редакторе.

void QLineEdit::contextMenuEvent ( QContextMenuEvent * event ) [virtual protected]

Отображает стандартное контекстное меню, созданное с помощью createStandardContextMenu().

Если Вы не хотите, чтобы редактор имел контекстное меню, то можете установить contextMenuPolicy в Qt::NoContextMenu. Если Вы хотите настроить контекстное меню, то должны заново реализовать данную функцию. Если Вы хотите расширить стандартное контекстное меню заново реализовав данную функцию, то вызовите createStandardContextMenu() и дополните возвращенное меню.

void LineEdit::contextMenuEvent(QContextMenuEvent *event) < QMenu *menu = createStandardContextMenu(); menu->addAction(tr("My Menu Item")); //. menu->exec(event->globalPos()); delete menu; >

Параметр event используется для определения позиции, в которой находится указатель мыши во время создания сообщения контестного меню.

Заново реализовано по отношению к QWidget.

void QLineEdit::copy () const [slot]

Копирует выделенный текст, если таковой есть и если echoMode() равно Normal, в буфер обмена.

QMenu * QLineEdit::createStandardContextMenu ()

Данная функция создает стандартное контекстное меню отображаемое при щелчке на редакторе правой кнопкой мыши. По умолчанию вызывается обработчиком сообщений contextMenuEvent(). Всплывающее меню передается вызывающему по значению.

void QLineEdit::cursorBackward ( bool mark, int steps = 1 )

Перемещает курсор назад на steps символов. Если mark равно true, то каждый символ, через который перемещается курсор, выделяется; если mark равно false то выделение с текста снимается.

void QLineEdit::cursorForward ( bool mark, int steps = 1 )

Перемещает курсор вперед на steps символов. Если mark равно true, то каждый символ, через который перемещается курсор, выделяется; если mark равно false то выделение с текста снимается.

int QLineEdit::cursorPositionAt ( const QPoint & pos )

Возвращает позицию, которую мог бы занимать курсор, находясь в точке pos.

void QLineEdit::cursorPositionChanged ( int old, int new ) [signal]

Данный сигнал испускается всякий раз при перемещении курсора. Предыдущая позиция курсора помещается в old, а новая позиция - в new.

void QLineEdit::cursorWordBackward ( bool mark )

Перемещает курсор на одно слово назад. Если mark равно true, то слово выделяется.

void QLineEdit::cursorWordForward ( bool mark )

Перемещает курсор на одно слово вперед. Если mark равно true, то слово выделяется.

void QLineEdit::cut () [slot]

Копирует выделенный текст, если таковой имеется и если echoMode() равно Normal, в буфер обмена и удаляет его.

Если текущее условие на текст отвергает удаление выделенного текста, то cut() будет скопирован, но не удален.

void QLineEdit::del ()

Если нет выделенного текста, то удаляется символ, стоящий справа от курсора. Если есть выделенный текст, то курсор перемещается в начало выделенного текста, а выделенный текст удаляется.

void QLineEdit::deselect ()

Снимает выделение с выделенным текстом.

void QLineEdit::editingFinished () [signal]

Данный сигнал испускается при нажатии клавиши Return или Enter или когда редактор теряет фокус. Обратите внимание, что если для редактора установлены validator() или inputMask() и нажата клавиша enter/return, то сигнал editingFinished() будет испущен только в том случае, если inputMask() и validator() для введенног текста возвратят QValidator::Acceptable.

void QLineEdit::end ( bool mark )

Перемещает курсор в конец редактируемой строки (если он уже не там). Если mark равно true, то текст от текущего положения до конца строки добавляется к выделенному; в противном случае, выделение с выделенного текста снимается (если курсор перемещается).

void QLineEdit::home ( bool mark )

Перемещает курсор в начало редактируемой строки (если он уже не там). Если mark равно true, то текст от начала строки до текущего положения добавляется к выделенному; в противном случае, выделение с выделенного текста снимается (если курсор перемещается).

void QLineEdit::insert ( const QString & newText )

Удаляет выделенный текст, вставляет новый текст newText и проверяет соответствие результата на соответствие установленному условию. Если новый текст соответствует условию, то он становится новым содержимым редактора.

void QLineEdit::keyPressEvent ( QKeyEvent * event ) [virtual protected]

Преобразует полученное сообщение клавиатуры event в действие редактора.

Если нажата клавиша Return или Enter и текущий текст соответствует установленному условию (или может быть сделан соответствующим объектом условия), то испускается сигнал returnPressed().

Список ействий клавиш, заданные по умолчанию, приведен в подробном описании класса.

Повторно реализовано по отношению к QWidget.

QSize QLineEdit::minimumSizeHint () const [virtual]

Возвращает минимальный размер редактора.

Ширина в возвращаемом значении достаточна для размещения по крайней мере одного символа.

Повторно реализовано по отношению к QWidget.

void QLineEdit::paste () [slot]

Вставляет текст из буфера обмена в позицию курсора, удаляет выделенный текст. Поддреживается редактором, если он находится не в режиме только-для-чтения.

Если полученный результат не соответствует установленному условию (validator), ничего не происходит.

void QLineEdit::redo () [slot]

Повторяет последнюю отмененную операцию если это возможно (свойство redoАvailable).

void QLineEdit::returnPressed () [signal]

Данный сигнал испускается при нажатии клавиши Return или Enter. Обратите внимание, что если для редактора установлены validator() или inputMask(), то сигнал returnPressed() испускается только в том случае, если inputMask() и validator() для введенного текста возвращают QValidator::Acceptable.

void QLineEdit::selectAll () [slot]

Выделяет весь текст (т.е. подсвечивает его) и перемещает курсор в конец строки. Это полезно при вставке значения по умолчанию, так как, если пользователь станет вводить текст в виджет, выделенный текст будет удален.

void QLineEdit::selectionChanged () [signal]

Данный сигнал испускается всякий раз, когда изменяется выделение текста в редакторе.

int QLineEdit::selectionStart () const

selectionStart() возвращает индекс первого выделенного символа или, если никакой текст не выделен, -1.

void QLineEdit::setSelection ( int start, int length )

Выделяет фрагмент текста начинающийся в позиции start и имеющий длину length символов. Допускается отрицательное значение длины.

void QLineEdit::setValidator ( const QValidator * v )

Устанавливает для редактора условие на вводимый текст v. Это позволяет устанавливать любые ограничения на вводимый текст.

Если v == 0, то setValidator() удаляет установленное условие на текст. Изначально для редактора не установлено никакое условие на текст (т.е. позволяется вводить любой текст длиной не более maxLength() символов).

QSize QLineEdit::sizeHint () const [virtual]

Возвращает рекомендуемый виджету размер.

Ширина, возвращаемая в пикселях, обычно достаточна для размещения 15-20 символам.

Повторно реализовано по отношению к QWidget.

void QLineEdit::textChanged ( const QString & text ) [signal]

Данный сигнал испускается всякий раз при изменении текста. Аргумент text содержит новый текст.

В отличие от textEdited(), данный сигнал испускается даже тогда, когда текст в редакторе устанавливается программно, с помощью setText().

void QLineEdit::textEdited ( const QString & text ) [signal]

Данный сигнал испускается всякий раз при редактировании текста. Аргумент text содрежит новый текст.

В отличие от textChanged(), данный сигнал не испускается при программной установке текста с помощью setText().

void QLineEdit::undo () [slot]

Отменяет последнюю операцию, если отмена возможна (свойство undoAvailable. Снимает выделение текста и переносит начало выделения текста к текущему положению курсора.

const QValidator * QLineEdit::validator () const

Возвращает указатель на текущее условие на вводимый текст или, если таковое условие на установлено, 0.

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *