Я создал две области прокрутки в Qt Designer. Каждый из них имеет размеры [(31,48) 1141 x 161] и [(31, 310) 1141 x 101] соответственно. Затем я создал две копии виджетов класса TimeDiagram и установил их размеры, которые больше размеров соответствующих областей прокрутки. И тогда я установил объекты в области. Вертикальные и горизонтальные полосы прокрутки включены.
Конструктор окна:
GraphicScaleDialog::GraphicScaleDialog(OutputData *outputData, QWidget *parent) :
QDialog(parent),
ui(new Ui::GraphicScaleDialog) {
ui->setupUi(this);
data = outputData;
commonSAGridSpacing = 120;
commonSAScale = 15;
resultsSAGridSpacing = 120;
resultsSAScale = 15;
ui->commonSAGridSpacing_line->setText(QString::number(commonSAGridSpacing));
ui->commonSAScale_line->setText(QString::number(commonSAScale));
ui->resultsSAGridSpacing_line->setText(QString::number(resultsSAGridSpacing));
ui->resultsSAScale_line->setText(QString::number(resultsSAScale));
commonArea = ui->commonScrollArea;
commonArea->setVerticalScrollBarPolicy(Qt::ScrollBarAsNeeded);
commonArea->setHorizontalScrollBarPolicy(Qt::ScrollBarAsNeeded);
resultsArea = ui->resultsScrollArea;
resultsArea->setVerticalScrollBarPolicy(Qt::ScrollBarAsNeeded);
resultsArea->setHorizontalScrollBarPolicy(Qt::ScrollBarAsNeeded);
commonDiagramWidget = new TimeDiagram(20, this);
commonDiagramWidget->setGeometry(31, 41, 2000, static_cast<int>(data->outputSettings.flowQuantity * commonDiagramWidget->rowHeight));
resultsDiagramWidget = new TimeDiagram(100, this);
resultsDiagramWidget->setGeometry(31, 114, 2000, 101);
commonArea->setWidget(commonDiagramWidget);
resultsArea->setWidget(resultsDiagramWidget);
commonArea->show();
resultsArea->show();
}
Проблема заключается в создании двух сеток с осью шкалы времени.
Это правильно, что мне нужно использовать QPainter для этой проблемы?
UPD:
Может быть проблема в методах TimeDiagram?
void TimeDiagram::paintEvent(QPaintEvent * /* event */) {
QPainter painter(this);
draw(&painter);
}
//--------------------------------------------------------------
void TimeDiagram::draw(QPainter *painter) {
painter->setRenderHint(QPainter ::NonCosmeticDefaultPen, true);
QPen* pen = new QPen();
pen->setWidth(1);
pen->setColor(Qt::black);
painter->setPen(*pen);
for (int i = static_cast<int>(rowHeight); i < this->height(); i += static_cast<int>(rowHeight))
//for (unsigned int counter = 0; counter < static_cast<GraphicScaleDialog *>(this->parent())->data->outputSettings.flowQuantity; counter++)
painter->drawLine(0, i, this->width(), i);
pen->setColor(Qt::lightGray);
painter->setPen(*pen);
for(int i = 0; i < this->width(); i += 30)
painter->drawLine(i, 0, i, this->height());
delete pen;
}