Просмотр сообщений
				 | 
			 
			
				| 
					Страниц: [1] 2 3  ... 7 
				 | 
			 
		 
		
			
				
					
						
							| 
								1
							 | 
							
								 Qt / Вопросы новичков / Как хранить данные в модели??
							 | 
							
								: Мая 13, 2020,  14:42
							 | 
						 
						
							
								Добрый день! Есть модель в котором хранится данные на год, колонки это количесво дней в году а строки устанавливается пользователем. Представление должно показывать только выбранный пользователем месяц!  Храню данные в QHach <QModelIndex, QVAriant> но почему то данные сохраняются на один месяц     Как реализовать сохранение данных по индексу на год 365 дней а отображать по выбранному месяцу   class modelG : public QAbstractTableModel {     Q_OBJECT
  public:     modelG(int row, int coll, QObject* parent = nullptr);
 
      // QAbstractItemModel interface public:     int _rowCount = 0;     int _columnCount =0;     int rowCount(const QModelIndex &parent) const;     int columnCount(const QModelIndex &parent) const;     QVariant data(const QModelIndex &index, int role) const;     bool setData(const QModelIndex &index, const QVariant &value, int role);
 
      void showMonth(int month);
  private:     QDate _date;
  protected:     QHash<QModelIndex, QVariant> cellDate;
 
  signals:     void dataChanged(QModelIndex, QModelIndex);
      // QAbstractItemModel interface public:     Qt::ItemFlags flags(const QModelIndex &index) const;
  };
  //---------------------------------------------------------------------------------- class DegurnHaur : public modelG {     Q_OBJECT public:       DegurnHaur(QStringList nameDegurn,  QObject* parent = nullptr);
  public slots:       void setHoursDegurn(int idDegurn, QDate date, int haurs);       void newData(int degurn, int day, int data);
 
  private slots:       //void newData(int degurn, int day, int data);
        // QAbstractItemModel interface private:       QStringList NameList; public:       QVariant headerData(int section, Qt::Orientation orientation, int role) const; }; #include "modelg.h"
  #include <QBrush> #include <QColor> #include <QDebug>
 
  modelG::modelG(int row, int cols, QObject *parent)     : QAbstractTableModel (parent), _rowCount(row), _columnCount(cols) {     //NameList << "Абдулганиева С" << "Курбанова С" << "Титова А" << "Чуркина Е" << "Абдулганиева А"; }
  int modelG:: rowCount(const QModelIndex &) const {     return _rowCount; }
  int modelG::columnCount(const QModelIndex &) const {     return  _columnCount; }
  QVariant modelG::data(const QModelIndex &index, int role) const {     if(!index.isValid()){         return QVariant();     }     if(role == Qt::DisplayRole || role == Qt::EditRole){  //       qDebug() << _date.addDays(index.column()).dayOfYear();         if(index.column()<_date.daysInMonth())             return cellDate.value(index.sibling(index.row(), _date.addDays(index.column()).dayOfYear()), QVariant());     }     return QVariant();
  }
  bool modelG::setData(const QModelIndex &index, const QVariant &value, int role) {     if(!index.isValid()){         return false;     }     if(role == Qt::DisplayRole || role == Qt::EditRole){         cellDate.insert(index,value);         qDebug() << index.row();         qDebug() << index.column();
          emit dataChanged(index, index);     }     return false; }
 
  void modelG::showMonth(int month) {     beginResetModel();     _date = QDate::currentDate();     _date.setDate(_date.year(), month, 1);     _columnCount = _date.daysInMonth() + 3;     qDebug() << cellDate; //    for(int i=0; i<60; i++){ //       // int day =  _date.addDays(i).dayOfYear(); //        qDebug() << cellDate.value(index(0, i)) << i; //    }     endResetModel(); }
 
  Qt::ItemFlags modelG::flags(const QModelIndex &index) const {     if (!index.isValid())            return Qt::NoItemFlags;
         return Qt::ItemIsEnabled | Qt::ItemIsEditable | Qt::ItemIsSelectable; }
  //-------------------------------------------------------------------------------
  DegurnHaur::DegurnHaur(QStringList nameDegurn, QObject *parent)     : modelG(nameDegurn.size(), 0, parent) {     NameList = nameDegurn;     showMonth(1); }
  //----------------------замисываем данные по дату ------------------------- void DegurnHaur::setHoursDegurn(int idDegurn, QDate date, int haurs) {
      newData(idDegurn, date.dayOfYear(), haurs); }
 
  //-----------------запись в модель void DegurnHaur::newData(int degurn, int day, int data) {   //  qDebug() << day;     setData(index(degurn, day), data, Qt::EditRole); }
  //--------------колонки и строки QVariant DegurnHaur::headerData(int section, Qt::Orientation orientation, int role) const {     if(orientation == Qt::Horizontal){         switch (role) {         case Qt::DisplayRole:             if(section<(_columnCount-3)) return section+1;//NameList.at(section);             else if(section==_columnCount-3) return "Факт";             if(section==(_columnCount-2)) return "Норма";             if(section==(_columnCount-1)) return "Пререр";         break; case Qt::BackgroundRole:             if(section<(_columnCount-3)){ //                QDate _date_t = _date; //                _date_t.setDate(_date.year(), _date.month(), section+1); //                if(_date_t.dayOfWeek()==6 || _date_t.dayOfWeek()==7) return QBrush(QColor(255, 150, 150, 80));  // окрас выходных //                else return QBrush(QColor(200, 200, 200, 50));             }         }     }     if(orientation == Qt::Vertical){         switch (role) {         case Qt::DisplayRole:             return NameList.at(section);         }     }     return QVariant(); }
   
							 | 
						 
						
							| 
							 | 
						 
					 
				 | 
			 
		 
		
		
			
				
					
						
							| 
								3
							 | 
							
								 Qt / Вопросы новичков / Как разделить столбцы на под столбцы
							 | 
							
								: Мая 10, 2019,  19:44
							 | 
						 
						
							
								Отнаследовался от QAbstractTableModel и создал модель (отображение во вложении) , который отображает недельное расписание. Мне нужно разделить столбец на несколько под столбцов , как это сделать ?  #include "calendarmodel.h" #include <QLocale> #include <QBrush> #include <QDebug>
  CalendarModel::CalendarModel(QWidget *parent):QAbstractTableModel (parent) {     _inWorkTime.setHMS(8,0,0);     _outWorkTime.setHMS(19,0,0);     _date = QDate::currentDate();      _firstDate = _date;     setCalendarPage(_date.year(), _date.month());
  }
  void CalendarModel::setCalendarPage(int yoar, int mohth) {     beginResetModel();     _firstDate = _firstDate.addDays(-_firstDate.dayOfWeek()+1);     endResetModel(); }
  int CalendarModel::rowCount(const QModelIndex &parent) const {     return (_outWorkTime.hour()-_inWorkTime.hour())+2;
  }
  int CalendarModel::columnCount(const QModelIndex &parent) const {     return 7; }
  QVariant CalendarModel::data(const QModelIndex &index, int role) const {     if(!index.isValid())         return QVariant();     switch (role) {     case Qt::DisplayRole:
         // return headerData(index.row(),Qt::Horizontal, Qt::DisplayRole);     case Qt::BackgroundRole:         if(index.row()==0) return QBrush(QColor(220, 220, 220)); // цвет секции аудитории         if(index.column()==5 || index.column()==6)  return QBrush(QColor(255, 199, 199));          if(_date.toString("ddd.dd.MM") == headerData(index.column(),Qt::Horizontal, Qt::DisplayRole))              return QBrush(QColor(255, 244, 158));
      }     return QVariant(); }
  QVariant CalendarModel::headerData(int section, Qt::Orientation orientation, int role) const {     if(orientation == Qt::Horizontal){         switch (role) {         case Qt::DisplayRole:            return _firstDate.addDays(section).toString("ddd.dd.MM");
          case Qt::BackgroundRole:             if(section % 2 == 0){                 return QBrush(QColor(255, 241, 133));             }             else return QBrush(QColor(252, 227, 38));         }
      }     if(orientation == Qt::Vertical){         switch (role) {         case Qt::DisplayRole:             if(section==0)return "Ауд";             return QString::number((_inWorkTime.hour()-1)+section)+":00";         case Qt::BackgroundRole:             if(section==0) return QBrush(QColor(220, 220, 220)); // цвет секции аудитории
          }
      }     return QVariant(); }
  Или помогите партировать HierarchicalHeaderView ( https://store.kde.org/p/1132194/) для Qt5.7  
							 | 
						 
						
							| 
							 | 
						 
					 
				 | 
			 
		 
		
		
			
				
					
						
							| 
								5
							 | 
							
								 Qt / Вопросы новичков / Как получить ссылку на объект QToolButton 
							 | 
							
								: Апреля 06, 2019,  15:59
							 | 
						 
						
							
								Задача такая. Есть окно с кнопками QToolButton, вызываю контекстное меню, выбираю изменит название и редактирую название в qToolButton. Вопрос, как можно получить по координатам мыши ссылку на объект QToolButton? метод ui->centralWidget->childAt(Pos) выдает widget, а мне нужен метод QToolButton->setText(); void MainWindow::contextMenu(const QPoint & point) {     posWid = QCursor::pos();     //int side = qMin(width(), height());     qDebug() << this->pos();     qDebug() << ui->centralWidget->mapFromGlobal(posWid);     qDebug() << ui->kanal1->pos();
      QMenu *contextMenu = new QMenu(this);     contextMenu->addAction(tr("Изменить название"));     connect(contextMenu, SIGNAL(triggered(QAction*)), this, SLOT(renameChinal(QAction*)));     contextMenu->exec(QCursor::pos());     QWidget* bw = ui->centralWidget->childAt(ui->centralWidget->mapFromGlobal(posWid));    
  }  
							 | 
						 
						
							| 
							 | 
						 
					 
				 | 
			 
		 
		
		
			
				
					
						
							| 
								7
							 | 
							
								 Qt / Базы данных / QSqlTableModel и QtreeView древовидная структура отображения.
							 | 
							
								: Марта 09, 2019,  16:46
							 | 
						 
						
							
								Добрый день форумчане, задача построить древовидную структуру из СУБД вид: id  name  parent_id1   name1    0 2   name1.1 1   3   name2    0 4   name2.1 3 Нашел в интернете класс от наследованный от QAbstractProxyModel при запуске программы отображает только родителей то есть name1, name2.  Мучаюсь уже несколько дней, пожалуйста помогите. #ifndef MY_SQLTABLEMODEL_H #define MY_SQLTABLEMODEL_H #include <QObject> #include <QAbstractProxyModel> #include <QSqlQuery>
  class my_SqlTableModel : public QAbstractProxyModel { public:     my_SqlTableModel(QObject* parent);
 
      // QSqlTableModel interface
      void setTable(const QString &tableName);
      // QAbstractItemModel interface
      QModelIndex index(int row, int column, const QModelIndex &parent) const;     QModelIndex parent(const QModelIndex &child) const;     int rowCount(const QModelIndex &parent) const;     int columnCount(const QModelIndex &parent) const { return sourceModel()->columnCount(parent); }
 
      QVariant headerData(int section, Qt::Orientation orientation, int role) const { return sourceModel()->headerData(section,orientation,role); }     bool setHeaderData(int section, Qt::Orientation orientation, const QVariant &value, int role)  { return sourceModel()->setHeaderData(section,orientation,value,role); }
 
      QModelIndex mapToSource(const QModelIndex &proxyIndex) const;     QModelIndex mapFromSource(const QModelIndex &sourceIndex) const;
      bool hasChildren(const QModelIndex &parent) const;
  private:
      int getParentId(int childId) const;     QSqlQuery* getChildren(int parentId) const; };
  #endif // MY_SQLTABLEMODEL_H
  #include "my_sqltablemodel.h" #include <QDebug> my_SqlTableModel::my_SqlTableModel(QObject* parent):QAbstractProxyModel (parent) {
  }
  QModelIndex my_SqlTableModel::mapFromSource(const QModelIndex &sourceIndex) const {     if(!sourceIndex.isValid())         return QModelIndex();
      int id = (sourceIndex.column() == 0) ? sourceIndex.data().toInt() : sourceIndex.sibling(sourceIndex.row(),0).data().toInt();
      int row = -1;     QSqlQuery* q = getChildren(getParentId(id));     while(q->next()) {         row++;         if(q->value(0).toInt() == id)             break;     }     delete q;     return createIndex(row, sourceIndex.column(), id); }
  QModelIndex my_SqlTableModel::mapToSource(const QModelIndex &proxyIndex) const {     if(!proxyIndex.isValid())         return QModelIndex();
      int id = proxyIndex.internalId();
      QSqlQuery q;     q.exec("SELECT id FROM \"Аудитория\"");     int row = -1;     while(q.next()) {         row++;         //qDebug()<<q.value(0).toInt();         if(q.value(0).toInt() == id)             break;     }     return sourceModel()->index(row, proxyIndex.column()); }
  bool my_SqlTableModel::hasChildren(const QModelIndex &parent) const {
      QSqlQuery q;     q.prepare("SELECT COUNT(*) FROM \"Аудитория\" WHERE parent_id=?");     q.addBindValue(parent.internalId());     q.exec();     q.first();    // qDebug() << q.value(0).toInt();     return q.value(0).toInt() > 0; }
  QModelIndex my_SqlTableModel::parent(const QModelIndex &childIndex) const {
      int childId  = childIndex.internalId();     int parentId = getParentId(childId);
      qDebug() << childId;     //qDebug() << parentId;     if(parentId == 0)         return QModelIndex();
      int parentRow = -1;     QSqlQuery* q = getChildren(getParentId(parentId));     while(q->next()) {         parentRow++;         if(q->value(0).toInt() == parentId)             break;     }     delete q;     return createIndex(parentRow, childIndex.row(), parentId); }
  QModelIndex my_SqlTableModel::index(int row, int column, const QModelIndex &parent) const {
      if(row < 0 || column < 0)         return QModelIndex();
      QSqlQuery* q = getChildren(parent.internalId());     q->seek(row);     int id = q->value(0).toInt();     delete q;     return createIndex(row, column, id); }
  int my_SqlTableModel::rowCount(const QModelIndex &parent) const {
      QSqlQuery* q = getChildren(parent.internalId());
      //use last() and at() since SQLite does not support query size calls     q->last();     int size = q->at() + 1;     delete q;     return size; }
 
 
  int my_SqlTableModel::getParentId(int childId) const {     QSqlQuery q;     //qDebug()<<childId;     q.prepare("SELECT parent_id FROM \"Аудитория\" WHERE id=?");     q.addBindValue(childId);     q.exec();     q.first();     //qDebug() << q.value(0).toInt();     return q.value(0).toInt(); }
  QSqlQuery* my_SqlTableModel::getChildren(int parentId) const {     QSqlQuery* q = new QSqlQuery;     //qDebug() << parentId;     q->prepare("SELECT id FROM \"Аудитория\" WHERE parent_id=?");     q->addBindValue(parentId);     q->exec();     //qDebug() << q->value(0).toInt();     return q; }
   
							 | 
						 
						
							| 
							 | 
						 
					 
				 | 
			 
		 
		
		
			
				
					
						
							| 
								9
							 | 
							
								 Qt / Вопросы новичков / Модель-представление
							 | 
							
								: Марта 04, 2019,  17:04
							 | 
						 
						
							
								Не могу понять почему моя модель не отображается??? #include "mainwindow.h" #include "ui_mainwindow.h" #include <QStringListModel> MainWindow::MainWindow(QWidget *parent) :     QMainWindow(parent),     ui(new Ui::MainWindow) {     ui->setupUi(this);     QStringListModel model;     model.setStringList(QStringList() << "sdfgs" << "asdf");     ui->listView->setModel(&model);
  }
  MainWindow::~MainWindow() {     delete ui; }
  ListView пустой  
							 | 
						 
						
							| 
							 | 
						 
					 
				 | 
			 
		 
		
			
				
					
						
							| 
								10
							 | 
							
								 Qt / Вопросы новичков / Re: QPainter в QTextDocument
							 | 
							
								: Апреля 02, 2018,  08:54
							 | 
						 
						
							
								void Printer::slotPrint(QPrinter *printer) {     //     draw(printer);     //textDocument->print(printer); }
  void Printer::draw(QPaintDevice *ppd) {     int Wd, Ht ;
 
      Wd = m_pprinter->width() ;     Ht = m_pprinter->height() ;
      QPainter painter(ppd) ;
 
      barcode->makePattern(barcodeStr);
      qreal scale = painter.device()->logicalDpiX()/25.4;     barcode->draw(QRectF(360, Ht-70, 29.83 * scale, 8.74* scale), painter) ;        textDocument->drawContents(&painter);
      painter.end();
     } Как такое не смог видеть, ай ай ай!!! Здесь есть кто ни будь? Что-то форум пустует.  
							 | 
						 
						
							| 
							 | 
						 
					 
				 | 
			 
		 
		
			
				
					
						
							| 
								11
							 | 
							
								 Qt / Вопросы новичков / QPainter в QTextDocument
							 | 
							
								: Марта 30, 2018,  11:10
							 | 
						 
						
							
								Как сделать так, чтобы QPainter рисовал в QTextDocument при этом чтобы текст, который там был не удалился? Printer::Printer(QWidget *pwgt):QWidget(pwgt) {     m_pprinter = new QPrinter(QPrinter::HighResolution);
      textDocument = new QTextDocument;
 
      barcode = new EAN13(this);     barcodeStr = "4650000000" ; }
  Printer::~Printer() {     delete m_pprinter;
      delete textDocument; }
  void Printer::slotPrint(QString data) {     m_pprinter->setPrinterName("Xprinter XP-360B");     m_pprinter->setPageMargins(4,4,4,4, QPrinter::Millimeter);
      data.replace("12pt", "17pt");     textDocument->setHtml(data);     textDocument->setPageSize(m_pprinter->pageRect().size());
      QPrintPreviewDialog dialog(m_pprinter, this);     connect(&dialog, SIGNAL(paintRequested(QPrinter*)), SLOT(slotPrint(QPrinter*)));     dialog.exec();
  }
 
  void Printer::slotPrint(QPrinter *printer) {     //     draw(printer);     //textDocument->print(printer); }
  void Printer::draw(QPaintDevice *ppd) {     int Wd, Ht ;
 
      Wd = m_pprinter->width() ;     Ht = m_pprinter->height() ;
      QPainter painter(ppd) ;
 
      barcode->makePattern(barcodeStr);
      qreal scale = painter.device()->logicalDpiX()/25.4;     barcode->draw(QRectF(360, Ht-70, 29.83 * scale, 8.74* scale), painter) ;
      painter.end();
      textDocument->drawContents(&painter); }
 
 
   
							 | 
						 
						
							| 
							 | 
						 
					 
				 | 
			 
		 
		
			
				
					
						
							| 
								12
							 | 
							
								 Qt / Вопросы новичков / Re: Принтер штрих кодов
							 | 
							
								: Марта 28, 2018,  15:12
							 | 
						 
						
							
								Сам нашел  QTextDocument document; document.setHtml("<p>Lorem ipsum</p>"); document.setPageSize(printer.pageRect().size()); // <-- Here is key to the solution document.print(&printer);  
							 | 
						 
						
							| 
							 | 
						 
					 
				 | 
			 
		 
		
			
				
					
						
							| 
								13
							 | 
							
								 Qt / Вопросы новичков / Принтер штрих кодов
							 | 
							
								: Марта 28, 2018,  14:46
							 | 
						 
						
							
								Добрый день уважаемые форумчане. Купил в Китае принтер штрих кодов xprinter -360 мне нужно печатать простой текст. Для этого я текст записываю в QTextEdit->setHtm и вывожу на печать. Почему то слова раскидываются на несколько страниц, каждое слово на одну страницу. Такое ощущение как будто не выставлены границы страницы,хотя при печати QPrintPageDialog я ставил минимальные границы. Может как то нужно настраивать QTextEdlt   ??  
							 | 
						 
						
							| 
							 | 
						 
					 
				 | 
			 
		 
		
			
				
					
						
							| 
								14
							 | 
							
								 Qt / Вопросы новичков / Re: QSystemTrayIcon сворачивание окон
							 | 
							
								: Ноября 02, 2017,  13:08
							 | 
						 
						
							
								Разобрался сам MySystemTray::MySystemTray(QWidget* pwgt):QLabel("<H1>GLab</H1>",pwgt)      {      window= new MainWindow;      window->show(); }Не нужно указывать родителя. Теперь другой вопрос, нужно ли удалять экземпляр window при закрытии приложения qApp quit(). ? Или он автоматически удалится ?  
							 | 
						 
						
							| 
							 | 
						 
					 
				 | 
			 
		 
		
		
				 | 
			 
		  |