Russian Qt Forum
Ноябрь 23, 2024, 08:47 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

Войти
 
  Начало Форум WIKI (Вики)FAQ Помощь Поиск Войти Регистрация  
  Просмотр сообщений
Страниц: [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);

2  Qt / Qt Quick / Re: Обрезка увеличивающегося круга. : Апрель 11, 2016, 13:34
Для Rectangle определи свойство
Код:
clip: true
3  Qt / Общие вопросы / Re: как реализовать (я новичек) : Апрель 02, 2013, 13:05
1. Можно ли в plaintextedit обратиться к i-ой строке, узнать количество строк?

Можно узнать количество блоков (абзацев) и обращаться к каждому из них, если получить document() от QPlainTextEdit. Пройдитесь по методам в справке.

Можно получить список строк:
QStringList list = plainTextEdit->toPlainText().split('\n', QString::SkipEmptyParts);
4  Qt / Установка, сборка, отладка, тестирование / Re: Virtual PC vs QT, под макинтош чере виртуал не запускаются программы : Январь 16, 2008, 17:50
Найди у себя в студии vcredist_x86.exe, и запусти на машине, где не работает программа.
5  Qt / Общие вопросы / Re: перевод из GMT в local QDateTime : Ноябрь 12, 2007, 15:33
QDateTime::toLocalTime() - оно?
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().
9  Qt / 2D и 3D графика / Re: Помогите разобраться с рисованием в Qt. : Октябрь 07, 2007, 12:50
Например:

Код:
QPixmap pixmap;
QPainter p(&pixmap);

p.drawRect(10,10, 100,100);

Т.к. QPixmap является QPaintDevice, то можно прямо на нем и рисовать с помощью QPainter
10  Qt / Базы данных / Re: QSqlRelationalTableModel->setData : Октябрь 04, 2007, 19:13
Код:
QModelIndex index = model->index(row, column);
model->setData(index, QVariant("Какое-нить значение"));
model->submit(); // По необходимости, зависит от editStrategy()

Если данная колонка column является relational (т.е. показывает данные из другой таблицы), то надо вместо значения ставить индекс значения из той самой "другой" таблицы.
11  Qt / Базы данных / Re: QSqlTableModel + QTableView выделение последней введенной записи : Сентябрь 21, 2007, 03:32
Попробуй это:
Цитировать
QVariant QSqlQuery::lastInsertId () const

Спасибо за наводку. По крайней мере, на SQLITE можно будет искать по этому id, вместо того, чтобы искать максимальное id.
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, т.е. надо применять мютексы для исключения одновременного изменения данных.
14  Qt / Общие вопросы / Проясните мысли о сигналах! : Август 12, 2005, 05:52
А если все же надо отправлять событие из другого потока (QThread), то смотреть в сторону QApplication::postEvent(...)
Страниц: [1]

Страница сгенерирована за 0.168 секунд. Запросов: 24.