crossplatform.ru

Здравствуйте, гость ( Вход | Регистрация )

История благодарностей участнику silver47 ::: Спасибо сказали: 40 раз(а)
Дата поста: В теме: За сообщение: Спасибо сказали:
26.4.2011, 13:29 Что за ошибка?
В заголовочном файле:
QSqlTableModel *m_model;


В методе:
//////////////////////////////////////////////////////////////////////////
m_model = new QSqlTableModel();
m_model->setTable("addressbook");
m_model->select();
bool b2 = db.isOpen();
ui.tableView->setModel(m_model);


Точнее m_model = new QSqlTableModel(); в конструкторе класса, а остальное в любом другом месте.
mezmay,
26.4.2011, 10:47 Как очистить базу данных?
достаточно model->select();

С оперативкой еще проще, mainDB.close(); mainDB.open();
RazrFalcon,
26.4.2011, 7:53 Вопросы с лицензией ruzik,
26.4.2011, 6:42 Как очистить базу данных?
Если таблиц мало (да даже если и много) то лучше их вычистить:
QSqlQuery query(cacheDB);
query.exec("DELETE FROM [tablename1]");
...
query.exec("DELETE FROM [tablenamen]");


Можно удалить файл, но тогда структуру БД придется пересоздать заново:
cacheDB.close();
QFile dbFile(cacheDB.databaseName());
if(dbFile.remove()) qDebug() << "База данных была!!!";

// теперь заново открываем БД, это приведет к созданию пустой БД, таблицы придется создавать заново
if(!cacheDB.open()) {
    qDebug() << "Ошибка при открытии базы данных: " << cacheDB.lastError().text();
    return;
}

query.exec("CREATE TEBLE [tablename1] (.....)");
RazrFalcon,
23.4.2011, 18:46 Как добавлять в базу текст со спецсимволами?
Думал что нужно в Qt заэкранировать. Сейчас только что проверил на своей SQLite никаких проблем не имею с добавлением строки вида Something'Something

Добавляю через запрос вида
query.prepare("INSERT INTO [sometable] (NAME) VALUES (:name)");
query.bindValue(":name", "Something'Something");
RazrFalcon,
21.4.2011, 11:14 Две строки одной ширины breeve,
21.4.2011, 5:06 Маркер в таблице...
Цитата(fortero @ 20.4.2011, 23:14) *
А ещё вопрос, а если мне надо по клавише Enter вызывать сигнал, как это организовать с клавишами я пока не работал ещё??? То есть мне нужно когда я стою на нужной строке и жму клавишу Enetr происходило действие...


1. Изменения которые необходимо внести в заголовочный файл того виджета, на котором таблица расположена:
protected:
    virtual void keyPressEvent(QKeyEvent *pe);


2. Теперь создадим описанный нами метод:
void Widget::keyPressEvent(QKeyEvent *pe){    
    if ((pe->key() == 16777220) | (pe->key() == 16777221)) this->someSlot(); // Enter
}


16777220 и 16777221 - это коды двух клавиш Enter. Чтобы узнать какой код у кнопки, поставьте вывод qDebug() << pe; в самом начале метода. Для того, чтобы знать нажаты ли кнопки-модификаторы (Alt; Ctrl; Shift), нужно проверить вот такое вот условие:

if (pe->modifiers() & Qt::ShiftModifier) // зажат шифт
if (pe->modifiers() & Qt::AltModifier) // зажат альт
if (pe->modifiers() & Qt::CtrlModifier) // зажат Ctrl


Опять же, все тот же, Макс Шлее страница 259
fortero,
20.4.2011, 5:14 Connect
Цитата(ruzik @ 19.4.2011, 19:24) *
2) или как поставит каретку в конец QPlainTextEdit


plainTextEdit->moveCursor(QTextCursor::Start);
- перемещает курсор в начало документа.

можно искать в одном направлении, и, если поиск неудачен - искать в другом.
if(!plainTextEdit->find(ui->lineEdit->text())) plainTextEdit->find(ui->lineEdit->text(), QTextDocument::FindBackward);

Но тут выделение при поиске не работает корректно. Думаю что первый вариант более предпочтителен, все равно позиция курсора будет меняться при первом же найденном вхождении.
ruzik,
18.4.2011, 18:30 Маркер в таблице...
Цитата(fortero @ 18.4.2011, 20:29) *
А чем плох мой способ передачи???


Ничем. Нормальный способ :) Только, как мне кажется, он будет работать только с QTableWidget. У QTableView передать ячейку не удастся.
fortero,
18.4.2011, 17:57 Connect
Цитата(ruzik @ 18.4.2011, 17:41) *
Ну и если позволите последний вопрос :D
Как изменить цвет найденного цвета в поиске, а то у меня по-умолчанию светло-серый оказался, который на белом фоне не особо хорошо виден


Элементарно! Но для этого придется менять палитру. Это делается таким образом:
// копируем существующую палистру, чтобы ее изменить
QPalette newPal(plainTextEdit->palette());

// устанавливаем цвет бэкграунда
newPal.setColor(QPalette::Highlight, Qt::black);

// устанавливаем цвет текста
newPal.setColor(QPalette::HighlightText, Qt::green);

// устанавливаем измененную палитру для нашего эдита
plainTextEdit->setPalette(newPal);
// Вуаля


теперь прикрутите рюшечки для вашего приложения: заставьте изменять цвет выделения на подобный только при поиске (ну что-то типа если строка поиска не свободна, то применить новую палитру, если свободна то стандартную).
ruzik,
14.4.2011, 5:28 Connect
Цитата(ruzik @ 13.4.2011, 23:27) *
Скажите пожалуйста что я сделал не так с connectoм, вроде все правильно, но не работает
connect(searchLineEdit, SIGNAL(textChanged(const QString & text)), this, SLOT(findInTheText(const QString & text)));
//searchLineEdit - объект типа QLineEdit
//----------
protected slots:
void findInTheText(const QString & text);
//----------
void RizekQssEditor::findInTheText(const QString & text)
{
QVariant a = plainTextEdit->find(text);
searchLabel->setText(a.toString()); //это просто проверка(слот не срабатывает)
}


гм. А разве в методе коннект необходимо указывать имена переменных? Нужно так:
QObject::connect(lineEdit, SIGNAL(textChanged(QString)), this, SLOT(someSlot(QString)));
Следует не путать textChanged и textEdited, первый вызывается при всяком изменении текста, другой - только тогда, когда редактирование завершено (Нажат Enter или перешли на другой виджет)
ruzik,
12.4.2011, 6:53 Подсветка синтаксиса в QPLainTextEdit
Цитата(ruzik @ 11.4.2011, 22:44) *
Не подскажите как можно по-простому организовать подсветку синтаксиса в QPlainTextEdit, видел где-то в учебника пример, но сейчас не могу найти, а использовать класс
QSyntaxHighlighter слишком геморойно


Других вариантов не знаю. Макс Шлее страница 190.

P.S. А что мешает воспользоваться примером syntaxhighlighter из комплекта Qt?
ruzik,
7.4.2011, 8:45 Координаты мыши
Цитата(epishev @ 7.4.2011, 10:35) *
Всем привет, подскажите как получить координаты мыши,
относительно виджита, например QGraphicsView,

ну или на QGraphicsScene.

заранее спасибо!


Цитирую Макса Шлее: "Если же нужно получать события перемещения указателя мыши, то тогда нужно воспользоваться методом setMouseTracking() класса QWidget, передав ему в параметре значение true." "Для определения местоположения указателя мыши в момент возникновения СОбыТИЯ МОЖНО ВОСПОЛЬЗОВаТЬСЯ Методами globalX(), globalY(), х() И у (), которые возвращают целые значения. Также можно воспользоваться
методами pos о или giobaiPos о. Метод pos о класса QMouseEvent возвращает позицию указателя мыши в момент наступления события (позиция
относительно левого верхнего угла виджета). Если нужна абсолютная позиция (относительно левого верхнего угла экрана), то ее получают с помощью метода giobaiPos (). "

ну и пример из той же книги, setMouseTracking(true) не установлено, поэтому координаты отслеживаются лишь при нажатой кнопе. В фале main.cpp сразу же после создания виджета укажите
wgt.setMouseTracking(true);
и будет щасте.
epishev,
6.4.2011, 6:28 Clear button и QLineEdit
Свои пять копеек вставлю:
В архиве класс LineEdit и картинка кнопки. Класс подключить к проекту, картинку лучше через ресурс добавить. В самом проекте вместо QLineEdit использовать LineEdit. итого минимум переделок и все работает.)
RazrFalcon,

2 страниц V  < 1 2
RSS Текстовая версия Сейчас: 13.5.2024, 13:36