Просмотр сообщений
				 | 
			 
			
				| 
					Страниц: [1] 2 
				 | 
			 
		 
		
			
				
					
						
							| 
								1
							 | 
							
								 Qt / Вопросы новичков / Компановка элементов
							 | 
							
								: Ноября 03, 2020,  12:53
							 | 
						 
						
							
								Здравствуйте всем! Необходимо сделать кнопку extended, скрывающую часть элементов. Переместил все, что хочу скрыть в widget и по нажатию кнопки скрываю ее. Но при этом окно остается того же размера. ui->extention->setVisible(false); this->resize(this->minimumWidth(), this->minimumHeight()); если вызвать еще раз, то окно приобретает минимальный размер. Подскажите, как добиться нужного результата?  
							 | 
						 
						
							| 
							 | 
						 
					 
				 | 
			 
		 
		
			
				
					
						
							| 
								2
							 | 
							
								 Qt / Вопросы новичков / Re: Проблема с nativeEvent
							 | 
							
								: Октября 14, 2020,  06:33
							 | 
						 
						
							
								Для таких же дебилов как и я: надо было подписаться на сообщения DEV_BROADCAST_DEVICEINTERFACE notificationFilter;
      memset(¬ificationFilter, 0, sizeof(DEV_BROADCAST_DEVICEINTERFACE));     notificationFilter.dbcc_size = sizeof(DEV_BROADCAST_DEVICEINTERFACE);     notificationFilter.dbcc_devicetype = DBT_DEVTYP_DEVICEINTERFACE;     notificationFilter.dbcc_classguid  = GUID_DEVINTERFACE_LIST[0];
      devNotify = RegisterDeviceNotification((HANDLE)this->winId(),                                            ¬ificationFilter,                                            DEVICE_NOTIFY_WINDOW_HANDLE); Так. Еще не все. Обнаружил, что при каждом новом появлении или исчезновении устройства сообщения с параметром DBT_DEVICEARRIVAL или DBT_DEVICEREMOVECOMPLETE приходят дважды.  
							 | 
						 
						
							| 
							 | 
						 
					 
				 | 
			 
		 
		
			
				
					
						
							| 
								3
							 | 
							
								 Qt / Вопросы новичков / Re: Проблема с nativeEvent
							 | 
							
								: Октября 14, 2020,  05:15
							 | 
						 
						
							
								QCoreApplication::installNativeEventFilter ?
  Не разобрался как его использовать.  Вобщем, такое ощущение что сообщения приходят только первому отрисованному окну.. В обоих случаях отлавливается сообщение WM_DEVICECHANGE Но в случае, когда есть форма авторизации на главное окно приходят только сообщения с параметром  DBT_DEVNODES_CHANGED Следующего сообщения с параметром DBT_DEVICEARRIVAL или DBT_DEVICEREMOVECOMPLETE уже не приходит.  
							 | 
						 
						
							| 
							 | 
						 
					 
				 | 
			 
		 
		
			
				
					
						
							| 
								4
							 | 
							
								 Qt / Вопросы новичков / Re: индексы в прокси модели
							 | 
							
								: Октября 06, 2020,  12:51
							 | 
						 
						
							
								Разве прокси модель это не делает сама?
  DataChanged будет вызваться при изменении прокси модели. Если меняется source модель, то у прокси не срабатывает DataChanged.  Поэтому подключаю.  
							 | 
						 
						
							| 
							 | 
						 
					 
				 | 
			 
		 
		
			
				
					
						
							| 
								5
							 | 
							
								 Qt / Вопросы новичков / индексы в прокси модели
							 | 
							
								: Октября 06, 2020,  05:03
							 | 
						 
						
							
								Здравствуйте Использую прокси модель, подключаю сигнал таким образом:     connect(sourceModel, SIGNAL(dataChanged(QModelIndex,QModelIndex)),               this, SIGNAL(dataChanged(QModelIndex,QModelIndex))); Можно ли указать конкретные индексы для обновления? Чтобы последний столбец в прокси модели не обновлялся?  
							 | 
						 
						
							| 
							 | 
						 
					 
				 | 
			 
		 
		
		
		
			
				
					
						
							| 
								8
							 | 
							
								 Qt / Вопросы новичков / Re: Обновление модели
							 | 
							
								: Сентября 04, 2020,  05:30
							 | 
						 
						
							
								Кстати, заметил еще одну вещь - если вызвать метод загрузки данных в конструкторе, то все работает. Если позже - нет. void MainWindow::updateTable() {     QList<QString> Measurment;     QList<QString> Unit;     QList<QString> Current;
      Measurment.append("X");     Unit.append("X");     Current.append(QString::number(X, 'f', 3));
      Measurment.append("Y");     Unit.append("Y");     Current.append(QString::number(Y, 'f', 3));
      Measurment.append("Z");     Unit.append("Z");     Current.append(QString::number(Z, 'f', 3));
      paramModel->populateData(Measurment, Unit, Current); } Пока так и оставил. НО это кажется не правильным решением. Где-то на форуме писали А, кажется понял. Если добавляем ряды после конструктора, надо обрамлять это дело beginInsertRows/endInsertRows. Там отстреляются нужные события.  
							 | 
						 
						
							| 
							 | 
						 
					 
				 | 
			 
		 
		
		
			
				
					
						
							| 
								10
							 | 
							
								 Qt / Вопросы новичков / Re: Обновление модели
							 | 
							
								: Сентября 04, 2020,  05:00
							 | 
						 
						
							
								Покажи больше кода, непонятно что и как ты делаешь. такое ощущение, что ты пытаешься дернуть сигнал модели снаружи, а тебе нужно эмитить сигнал из модели после изменения данных. В общем, давай код модели.
  #ifndef PARAMETERSMODEL_H #define PARAMETERSMODEL_H
  #include <QAbstractTableModel>
  class ParametersModel : public QAbstractTableModel {     Q_OBJECT
  public:
      explicit ParametersModel(QObject *parent = nullptr);
      void populateData(const QList<QString> &Measurment, const QList<QString> &Unit, const QList<QString> &Current);
      int rowCount(const QModelIndex &parent = QModelIndex()) const Q_DECL_OVERRIDE;     int columnCount(const QModelIndex &parent = QModelIndex()) const Q_DECL_OVERRIDE;
      QVariant data(const QModelIndex &index, int role = Qt::DisplayRole) const Q_DECL_OVERRIDE;     QVariant headerData(int section, Qt::Orientation orientation, int role = Qt::DisplayRole) const Q_DECL_OVERRIDE;
  private:     QList<QString> m_Measurment;     QList<QString> m_Unit;     QList<QString> m_Current; };
  #endif // PARAMETERSMODEL_H
  #include "parametersmodel.h"
  ParametersModel::ParametersModel(QObject *parent)     : QAbstractTableModel(parent)
  {     }
  void ParametersModel::populateData(const QList<QString> &Measurment, const QList<QString> &Unit, const QList<QString> &Current) {     m_Measurment.clear();     m_Measurment = Measurment;     m_Unit.clear();     m_Unit = Unit;     m_Current.clear();     m_Current = Current;     emit dataChanged(index(0, 0), index(rowCount(), columnCount()));     return; }
  int ParametersModel::rowCount(const QModelIndex &parent) const {     Q_UNUSED(parent);     return m_Measurment.length(); }
  int ParametersModel::columnCount(const QModelIndex &parent) const {     Q_UNUSED(parent);     return 3; }
  QVariant ParametersModel::data(const QModelIndex &index, int role) const {     if (!index.isValid() || role != Qt::DisplayRole) {         return QVariant();     }     if (index.column() == 0) {         return m_Measurment[index.row()];     } else if (index.column() == 1) {         return m_Unit[index.row()];     } else if (index.column() == 2) {         return m_Current[index.row()];     }     return QVariant(); }
  QVariant ParametersModel::headerData(int section, Qt::Orientation orientation, int role) const {     if (role == Qt::DisplayRole && orientation == Qt::Horizontal) {             if (section == 0) {                 return QString("Измерение");             } else if (section == 1) {                 return QString("ед. изм.");             } else if (section == 2) {                 return QString("Текущее значение");             }         }         return QVariant(); }
  при изменении данных вызываю  paramModel->populateData(Measurment, Unit, Current);  
							 | 
						 
						
							| 
							 | 
						 
					 
				 | 
			 
		 
		
			
				
					
						
							| 
								11
							 | 
							
								 Qt / Вопросы новичков / Обновление модели
							 | 
							
								: Сентября 03, 2020,  14:24
							 | 
						 
						
							| 
								 Здравствуйте.  Есть модель QAbstractTableModel почему-то  не обновляет модель при изменении данных. Если изменить размер родительского окна, то начинает обновлять Пробовал  Model->dataChanged(index(0, 0), index(1, 1)); QMainwindow::update() QMainwindow::repaint()
 
  
							 | 
						 
						
							| 
							 | 
						 
					 
				 | 
			 
		 
		
			
				
					
						
							| 
								12
							 | 
							
								 Qt / Вопросы новичков / QSlider
							 | 
							
								: Августа 31, 2020,  12:38
							 | 
						 
						
							| 
								 Здравствуйте! Задача:
  при перемещении слайдера показывать изменяемое значение. Запись в файл производить при окончании действия со слайдером (иначе запись в файл будет производиться постоянно при перемещении слайдера).
  Обрабатываю два сигнала: valueChanged для отображения изменяемого значения и sliderRelised для записи.
  Нужно обрабатывать запись при перемещении слайдера тиками (нажатиями мыши) значение меняется, но когда при этом производить запись?
  
							 | 
						 
						
							| 
							 | 
						 
					 
				 | 
			 
		 
		
			
				
					
						
							| 
								13
							 | 
							
								 Qt / Вопросы новичков / Проблема с nativeEvent
							 | 
							
								: Августа 21, 2020,  12:28
							 | 
						 
						
							
								Нашел метод определения VID PID вставляемого устройства. bool MainWindow::nativeEvent([[maybe_unused]] const QByteArray& eventType, void *message,                                                  [[maybe_unused]] long *result) {
 
      MSG *msg = static_cast< MSG * >(message);     int msgType = msg->message;     if (msgType == WM_DEVICECHANGE) {         if (msg->wParam == DBT_DEVICEARRIVAL || msg->wParam == DBT_DEVICEREMOVECOMPLETE) {             PDEV_BROADCAST_HDR lpdb = (PDEV_BROADCAST_HDR)msg->lParam;             PDEV_BROADCAST_DEVICEINTERFACE lpdbv = (PDEV_BROADCAST_DEVICEINTERFACE) lpdb;             if (lpdb->dbch_devicetype == DBT_DEVTYP_DEVICEINTERFACE) {                 QString path = QString::fromWCharArray(lpdbv->dbcc_name);                 qDebug()<<path;                 m_DevConnect->VID = "";                 m_DevConnect->PID = "";                 m_DevConnect->SN = "";                                 if (!path.isEmpty()) {                     if (path.contains("VID_", Qt::CaseInsensitive))                         m_DevConnect->VID = path.mid(path.indexOf("VID_")+4, 4);                     if (path.contains("PID_", Qt::CaseInsensitive))                         m_DevConnect->PID = path.mid(path.indexOf("PID_")+4, 4);                                         QRegExp rx("#\\w{8}#");                     if (path.contains(rx))                         m_DevConnect->SN = path.mid(rx.indexIn(path)+1, 8);                     m_isBoardConnected = path.contains(VID_CP2112, Qt::CaseInsensitive);                     m_isOPMConnected = path.contains(VID_OPM, Qt::CaseInsensitive);                 } else return false;
                  if (msg->wParam == DBT_DEVICEARRIVAL)                     emit SigUsbArrived(path);                 else                     emit SigUsbRemoved(path);                 return true;             }         }     }     return false; }
  Все прекрасно работает. Но если до вызова главного окна MainWindow было какое-то другое окно, метод перестает вызываться. Сейчас обхожусь таким способом:     w.show();     w.hide();     w.display();
    в   запускается другая форма. Как это побороть? может быть есть способ?  
							 | 
						 
						
							| 
							 | 
						 
					 
				 | 
			 
		 
		
			
				
					
						
							| 
								14
							 | 
							
								 Qt / Вопросы новичков / Re: Ошибка QSqlError "2026"
							 | 
							
								: Августа 21, 2020,  10:30
							 | 
						 
						
							| 
								 Разобрался. При дебаге запросы шли по протоколу TLSv1.1, а при релизе TLSv1.3. Протокол TLSv1.3 пришел на замену TLSv1.1 и вполне возможно не все компиляторы  успели обновиться. Поменял компилятор и все заработало. 
							 | 
						 
						
							| 
							 | 
						 
					 
				 | 
			 
		 
		
		
				 | 
			 
		  |