各位好, 自己写了个小的测试程序, 程序主要分两个类
一个主要是把所画的线条画在
QPixmap画布上,然后再画到QWidget类上
主要代码如下:
- Dialog::Dialog(QWidget *parent) :
- QDialog(parent),
- ui(new Ui::Dialog)
- {
- ui->setupUi(this);
- setMinimumSize(sizeHint());
- setAutoFillBackground (true);
- drawCanvas = new QPixmap();
- *drawCanvas = QPixmap::grabWidget(this);
- this->setBackgroundRole (QPalette::Base);
- this->setSizePolicy (QSizePolicy:: Ignored, QSizePolicy:: Ignored);
- }
- Dialog::~Dialog()
- {
- delete ui;
- if(drawCanvas != NULL)
- delete drawCanvas;
- }
- void Dialog::paintEvent (QPaintEvent *)
- {
- QPainter paint(this);
- QPainter painter(drawCanvas);
- QPen pen;
- pen.setWidth (5);
- pen.setColor (Qt::red);
- pen.setStyle (Qt::SolidLine);
- painter.setPen (pen);
- painter.drawLine (0, 200, 2000, 200);
- paint.drawPixmap(0, 0, *drawCanvas);
- }
另一个类把上一个类对象放到QScrollArea中, 代码如下:
- MainWindow::MainWindow(QWidget *parent) :
- QMainWindow(parent),
- ui(new Ui::MainWindow)
- {
- ui->setupUi(this);
- resize (800, 480);
- dlg = new Dialog;
- setAutoFillBackground (true);
- // imageLabel = new QLabel;
- // imageLabel->setBackgroundRole(QPalette::Base);
- // imageLabel->setSizePolicy(QSizePolicy::Ignored, QSizePolicy::Ignored);
- // imageLabel->setScaledContents(true);
- // imageLabel->setPixmap(*dlg->drawCanvas);
- scrollArea = new QScrollArea;
- scrollArea->viewport()->setBackgroundRole(QPalette::Dark);
- scrollArea->viewport()->setAutoFillBackground (true);
- scrollArea->setWidget(dlg);
- setCentralWidget(scrollArea);
- }
此代码基本上实现了我想要的功能, 但由于我所画的线条超出了第一个类中
dialog的宽度, 我想通过滚动条把超出的
部分也
显示出来, 但
没有实现。现在的现象是:假如我设定第一个类的宽度为800个象素, 我所画的线条画到2000个象素, 在scrollArea中也只显示到800个象素处所画的线条,800象素外的显示不出来, 还请高手指点, 谢了