• 5517阅读
  • 5回复

在scrollArea中显示自己所画的图形 [复制链接]

上一主题 下一主题
离线lzpmail
 
只看楼主 倒序阅读 楼主  发表于: 2011-11-08
各位好, 自己写了个小的测试程序, 程序主要分两个类
一个主要是把所画的线条画在QPixmap画布上,然后再画到QWidget类上
主要代码如下:
  1. Dialog::Dialog(QWidget *parent) :
  2.     QDialog(parent),
  3.     ui(new Ui::Dialog)
  4. {
  5.     ui->setupUi(this);
  6.     setMinimumSize(sizeHint());
  7.     setAutoFillBackground (true);
  8.     drawCanvas = new QPixmap();
  9.     *drawCanvas = QPixmap::grabWidget(this);
  10.     this->setBackgroundRole (QPalette::Base);
  11.     this->setSizePolicy (QSizePolicy:: Ignored, QSizePolicy:: Ignored);
  12. }
  13. Dialog::~Dialog()
  14. {
  15.     delete ui;
  16.     if(drawCanvas != NULL)
  17.     delete drawCanvas;
  18. }
  19. void Dialog::paintEvent (QPaintEvent *)
  20. {
  21.     QPainter paint(this);
  22.     QPainter painter(drawCanvas);
  23.     QPen pen;
  24.     pen.setWidth (5);
  25.     pen.setColor (Qt::red);
  26.     pen.setStyle (Qt::SolidLine);
  27.     painter.setPen (pen);
  28.     painter.drawLine (0, 200, 2000, 200);
  29.     paint.drawPixmap(0, 0, *drawCanvas);
  30. }

另一个类把上一个类对象放到QScrollArea中, 代码如下:
  1. MainWindow::MainWindow(QWidget *parent) :
  2.     QMainWindow(parent),
  3.     ui(new Ui::MainWindow)
  4. {
  5.     ui->setupUi(this);
  6.     resize (800, 480);
  7.     dlg = new Dialog;
  8.     setAutoFillBackground (true);
  9. //    imageLabel = new QLabel;
  10. //    imageLabel->setBackgroundRole(QPalette::Base);
  11. //    imageLabel->setSizePolicy(QSizePolicy::Ignored, QSizePolicy::Ignored);
  12. //    imageLabel->setScaledContents(true);
  13. //    imageLabel->setPixmap(*dlg->drawCanvas);
  14.     scrollArea = new QScrollArea;
  15.     scrollArea->viewport()->setBackgroundRole(QPalette::Dark);
  16.     scrollArea->viewport()->setAutoFillBackground (true);
  17.     scrollArea->setWidget(dlg);
  18.     setCentralWidget(scrollArea);
  19. }
此代码基本上实现了我想要的功能, 但由于我所画的线条超出了第一个类中dialog的宽度, 我想通过滚动条把超出的部分显示出来, 但没有实现。现在的现象是:假如我设定第一个类的宽度为800个象素, 我所画的线条画到2000个象素, 在scrollArea中也只显示到800个象素处所画的线条,800象素外的显示不出来, 还请高手指点, 谢了


附件: graphicDrawTest.rar (508 K) 下载次数:9
离线lzpmail
只看该作者 1楼 发表于: 2011-11-10
怎么会没有回帖呢, 是不是都过光棍节去了
离线jdwx

只看该作者 2楼 发表于: 2011-11-10
回 1楼(lzpmail) 的帖子
最后一句800改为2000试试看。
不是都去过节了,哈哈!
发帖时要说明:操作系统、Qt版本、编译器,这样能更快的得到回复。
离线kimtaikee

只看该作者 3楼 发表于: 2011-11-10
scrollArea->setWidgetResizable(true);
widget->setFixedSize(FixedSize);
widget->setFixedWidth(FixedWidth);

离线lzpmail
只看该作者 4楼 发表于: 2011-11-13
把800改为2000是可以的, 但在画的之前不知会画多长, 所以不好设置, 如果真搞不定那只能设一个最大的值了
离线lzpmail
只看该作者 5楼 发表于: 2011-11-13
3楼的哥们的代码也是先要知道宽度
快速回复
限100 字节
 
上一个 下一个