Просмотр сообщений
|
Страниц: [1]
|
1
|
Qt / Общие вопросы / Re: QListWidgetItem утекает память
|
: Октябрь 17, 2017, 22:01
|
Надо обратить внимание на следующий момент: QListWidgetItem *lstItem = new QListWidgetItem(iType[i]==1?QIcon(":/images/warning.png"):QIcon(), strErr[i], ui->lstReport); ui->lstReport->addItem(lstItem);
получается, что во время создания lstItem он уже вставляется в ui->lstReport, а затем еще раз вставляется с помощью команды addItem(lstItem). как сказано в доке, повторное добавление уже существующего QListWidgetItem приводит к неопределенному поведению: Warning: A QListWidgetItem can only be added to a QListWidget once. Adding the same QListWidgetItem multiple times to a QListWidget will result in undefined behavior.
Поэтому лучше создавать с родителем по умолчанию: QListWidgetItem *lstItem = new QListWidgetItem(iType[i]==1?QIcon(":/images/warning.png"):QIcon(), strErr[i]); ui->lstReport->addItem(lstItem);
|
|
|
3
|
Qt / Общие вопросы / Re: как реализовать (я новичек)
|
: Апрель 02, 2013, 13:05
|
1. Можно ли в plaintextedit обратиться к i-ой строке, узнать количество строк?
Можно узнать количество блоков (абзацев) и обращаться к каждому из них, если получить document() от QPlainTextEdit. Пройдитесь по методам в справке. Можно получить список строк: QStringList list = plainTextEdit->toPlainText().split('\n', QString::SkipEmptyParts);
|
|
|
6
|
Qt / Базы данных / Re: Помощь по model\view
|
: Октябрь 11, 2007, 18:44
|
Честно говоря не понял о каких оповещениях идет речь. Если о lastInsertId, то надо проверить QSqlDriver::hasFeature(QSqlDriver::LastInsertId) на птице. Насчет поиска. Сам не пробовал, но думаю следующее должно сработать int row = model->match(model->index(0, idColumn), Qt::DisplayRole, id).at(0).row();
Затем номер этой строки можно указывать в selectRow()
|
|
|
7
|
Qt / Базы данных / Re: QSqlRelationalTableModel->setData
|
: Октябрь 11, 2007, 18:29
|
Я правильно понимаю - нужно ставить id значения из другой таблицы? Именно. Если я делаю так: Код:
model->setData(index, 1);
то получаю просто "1", а не нужное мне значение! Я только что проверил на стандартном примере: 4.3.2\examples\sql\relationaltablemodel\relationaltablemodel.cpp там по умолчанию в первой строке выводит: ... Sam ... USA вставил такой код (+): QTableView *view = createView(QObject::tr("Relational Table Model"), &model); view->show(); + model.setData(model.index(0, 3), 47); + model.submitAll(); return app.exec();
выводит ... Sam ... Norway т.е. при установке 47 выводится Norway. Кстати, не забудь про submitAll(), иначе действительно будет выводить 47.
|
|
|
8
|
Qt / Базы данных / Re: Помощь по model\view
|
: Октябрь 11, 2007, 17:50
|
Теперь трудности: 1. Как установить курсор на последнюю запись? 2. Как установить курсор на нужную запись (при редактировании)? 3. Нужно ли каждый раз после изменений обновлять всю модель? 4. Как вообще правильно работать с model\view??? Буду рад любой помощи.
1. Чтобы найти последнюю введенную запись я применял след. метод (конечно через ж.., но другого метода не нашел): после (SELECT) или submitAll() делаю QSqlQuery q = model->query(); int id = q.lastInsertId().toInt();
А дальше этот id ищу в таблице (id - это ключ) и нужную строку выделяю через view->selectRow(...) Вообще QSqlQueryModel скорее предназначена для чтения (показа) результатов, а для редактирования удобнее будет работать с QSqlTableModel. Там можно задавать кешировать или нет результаты. А сохранять через model->submitAll(). После submitAll() происходит сброс текущего курсора, поэтому приходится отыскивать id как я указывал выше и делать selectRow().
|
|
|
10
|
Qt / Базы данных / Re: QSqlRelationalTableModel->setData
|
: Октябрь 04, 2007, 19:13
|
QModelIndex index = model->index(row, column); model->setData(index, QVariant("Какое-нить значение")); model->submit(); // По необходимости, зависит от editStrategy()
Если данная колонка column является relational (т.е. показывает данные из другой таблицы), то надо вместо значения ставить индекс значения из той самой "другой" таблицы.
|
|
|
12
|
Qt / Базы данных / QSqlTableModel + QTableView выделение последней введенной записи
|
: Сентябрь 18, 2007, 20:51
|
Здравствуйте,
Есть форма, где отображена таблица QTableView *table, показывающая данные с QSqlTableModel *model. На этой форме есть кнопка "Add", которая вызывает диалог, где пользователь вводит данные для новой записи. При закрытии диалога, введенные данные записываются в БД через model->insertRecord(-1, record). Чтобы изменения отобразились в таблице, делаю model->select().
Задача: надо установить курсор в таблице на свежевведенную строку. Как лучше это сделать?
Причем, таблица может быть отсортирована по разным полям, и введенная строка скорее всего окажется не нулевой и не последней строкой таблицы.
Пока приходится перебирать все записи на предмет поиска наибольшего id (id последней записи является наибольшей).
|
|
|
13
|
Qt / Общие вопросы / Re: Помощь по нитям
|
: Сентябрь 06, 2007, 15:08
|
Это я понял. Есть у меня главный класс, в нем функция, которая обращается к другим функциям, данным ЭТОГО класса. Как мне закинуть ее в Run? Надо просто вызвать необходимую public функцию из метода run() Только она (функция и, соотвественно, класс, ее содержащий) должна быть thread-safe, т.е. надо применять мютексы для исключения одновременного изменения данных.
|
|
|
|
|