Size: a a a

2020 March 20

M

Mr.Mait in Qt
Виктор Яковлев
QSet <QFileInfo> set1;
        QDirIterator itr(dir,QDirIterator::Subdirectories);
           while(itr.hasNext()){
                set1<<itr.fileInfo();
                                }  Ругается... не может вызвать qHash( const QFileInfo&)
inline uint qHash(const QFileInfo &tag)
{
   return qHash(tag.fileName());
}
источник

M

Mr.Mait in Qt
Виктор Яковлев
QSet <QFileInfo> set1;
        QDirIterator itr(dir,QDirIterator::Subdirectories);
           while(itr.hasNext()){
                set1<<itr.fileInfo();
                                }  Ругается... не может вызвать qHash( const QFileInfo&)
Можно так
QFileInfoList list = dir.entryInfoList(QDir::Files | QDir::Hidden);
QSet<QFileInfo> set = QSet<QFileInfo>::fromList(list);
источник

ВЯ

Виктор Яковлев in Qt
C:\Qt\5.12.2\mingw73_32\include\QtCore\qhashfunctions.h:117: ошибка: no matching function for call to 'qHash(const QFileInfo&)'
    Q_DECL_NOEXCEPT_EXPR(noexcept(qHash(t)))
                                  ~~~~~^~~
источник

ВЯ

Виктор Яковлев in Qt
Mr.Mait
inline uint qHash(const QFileInfo &tag)
{
   return qHash(tag.fileName());
}
сейчас попробую
источник

M

Mr.Mait in Qt
Виктор Яковлев
сейчас попробую
Это пример. Тут условие отличия будет как раз только имя файла. Дальше сам дорабатывай
источник

ВЯ

Виктор Яковлев in Qt
не работает
источник

ВЯ

Виктор Яковлев in Qt
return qHash ( tag.fileName(),seed^0xa03f );
источник

ВЯ

Виктор Яковлев in Qt
так тоже
источник

E雨

Elnee 雨 in Qt
Suigintou45 E13
Бд в одном потоке, а запрос из другого?
Да, видимо из-за этого? Оно отрабатывает нормально, но если запрос есть ещё один то крашится
источник

AS

Anatoly Shirokov in Qt
Elnee 雨
Да, видимо из-за этого? Оно отрабатывает нормально, но если запрос есть ещё один то крашится
QSqlDatabase должен быть один на поток
источник

AS

Anatoly Shirokov in Qt
сколько потоков, столько и соединений к БД, столько и  QSqlDatabase
источник

AS

Anatoly Shirokov in Qt
Anatoly Shirokov
в своих проектах эту работу выполняет вспомогательный класс DataSource:
namespace {
QString threadAwareConnectionName(QString connectionNamePrefix)
{
   auto data = QThread::currentThreadId();
   return QString("%1.%2")
       .arg(connectionNamePrefix)
       .arg(QLatin1String(
           QByteArray(reinterpret_cast<char *>(&data), sizeof(data)).toHex().data()));
}

} // namespace

QSqlDatabase DataSource::connection()
{
   QString connectionName = threadAwareConnectionName(m_connectionName);
   QSqlDatabase connection = QSqlDatabase::database(connectionName);
   if (!connection.isValid()) {
       qCDebug(dataSource()) << "Initializing connection" << connectionName;
       connection = QSqlDatabase::addDatabase(m_driver, connectionName);
       if (!m_databaseName.isEmpty())
           connection.setDatabaseName(m_databaseName);
       if (!m_hostName.isEmpty())
           connection.setHostName(m_hostName);
       if (!m_port)
           connection.setPort(m_port);
       if (!m_userName.isEmpty())
           connection.setUserName(m_userName);
       if (!m_password.isEmpty())
           connection.setPassword(m_password);
       if (!m_connectionOptions.isEmpty())
           connection.setConnectOptions(m_connectionOptions);
       if (!connection.open()) {
           qCWarning(dataSource) << "Cannot open connection: " << connection.lastError();
           return connection;
       }
       prepare(connection);
   }
   return connection;
}
@Elnee  я приводит пример создания таких соединений
источник

AS

Anatoly Shirokov in Qt
Anatoly Shirokov
@Elnee  я приводит пример создания таких соединений
то есть, идея такая: хотите что-то выполнить в потоке, создайте соединение в этом потоке, если оно еще не создано и выполните запрос в контексте этого соединения
источник

AS

Anatoly Shirokov in Qt
все QSqlQuery имеют перегруженный конструктор принимающий QSqlDatabase
источник

D

Dmitry in Qt
Ребят, тут могут помочь по qml, или есть какой-то другой чат чисто по qml?)
источник

E雨

Elnee 雨 in Qt
Anatoly Shirokov
то есть, идея такая: хотите что-то выполнить в потоке, создайте соединение в этом потоке, если оно еще не создано и выполните запрос в контексте этого соединения
Спасибо большое за ответ и пример!
источник

AS

Anatoly Shirokov in Qt
Dmitry
Ребят, тут могут помочь по qml, или есть какой-то другой чат чисто по qml?)
да, во всяком случае, попробуют
источник

D

Dmitry in Qt
Помогите, пожалуйста, по qml)
Прикладываю проект. Пытаюсь сделать загрузочный экран. Вроде все работает, но в консоль сыпятся сообщения типа "QML ToolBar: Binding loop detected for property "implicitHeight"" . Если из main2.qml убрать FileDialog то сообщения не выходят, но в чем именно проблема?
источник

D

Dmitry in Qt
источник

AS

Anatoly Shirokov in Qt
а почему не сразу main2 стартовать?
источник