• 12392阅读
  • 11回复

怎样在tabwidget上绘图【已解决】 [复制链接]

上一主题 下一主题
离线lishiyong110
 
只看楼主 倒序阅读 楼主  发表于: 2010-03-15
— 本帖被 XChinux 执行加亮操作(2010-10-20) —
我现在想在tabwidget的页上绘图,使用QImage,但实际操作中发现tabwidget上不能使用QImage绘图,大家知不知道有什么好的方法在tabwidget的某个页上绘图呢?
[ 此帖被lishiyong110在2010-03-20 20:01重新编辑 ]
静下心来学习
离线yangfanxing
只看该作者 1楼 发表于: 2010-03-15
是不是应该
QTabWidget::widget ( int index )
指定某一页,然后再在这个返回的Widget上绘图呢?
PHPWind好恶心。。。不想看这种界面。。。
离线lishiyong110
只看该作者 2楼 发表于: 2010-03-16
好像还是不行,如下    

    QWidget *firstWidget = ui->tabWidget->widget(0);
    QPainter paint(firstWidget);
    paint.drawImage(10, 70, image);
    paint.end();

这样运行时出现如下信息:

Starting D:\Qt\workspace\tabwidget\debug\tabwidget.exe...
QPainter::begin: Paint device returned engine == 0, type: 1
QPainter::end: Painter not active, aborted
静下心来学习
离线yangfanxing
只看该作者 3楼 发表于: 2010-03-16
引用第2楼lishiyong110于2010-03-16 13:47发表的  :
好像还是不行,如下    
    QWidget *firstWidget = ui->tabWidget->widget(0);
    QPainter paint(firstWidget);
    paint.drawImage(10, 70, image);
.......


QPainter得放在paintEvent()里边实现吧~~~
PHPWind好恶心。。。不想看这种界面。。。
离线lishiyong110
只看该作者 4楼 发表于: 2010-03-16
引用第3楼yangfanxing于2010-03-16 14:58发表的  :
QPainter得放在paintEvent()里边实现吧~~~

上面这段代码就是paintEvent的实现 如果给paint指定参数是this,倒是可以在widget中不是tabwidget的部分显示,好像表明在tabwidget的页中不能绘图,不知道是不是这回事?
静下心来学习
离线yangfanxing
只看该作者 5楼 发表于: 2010-03-16
引用第4楼lishiyong110于2010-03-16 16:02发表的  :
上面这段代码就是paintEvent的实现 如果给paint指定参数是this,倒是可以在widget中不是tabwidget的部分显示,好像表明在tabwidget的页中不能绘图,不知道是不是这回事?


这个说法没有理由的吧。。。
不知道你的widget和tabwidget是怎么个结构,呵呵。。。
PHPWind好恶心。。。不想看这种界面。。。
离线benbenmajia

只看该作者 6楼 发表于: 2010-03-17
你现在tablewidget中画图看看出现在什么地方
安然.....
离线lishiyong110
只看该作者 7楼 发表于: 2010-03-17
引用第6楼benbenmajia于2010-03-17 10:23发表的  :
你现在tablewidget中画图看看出现在什么地方


怎么画呢?

代码如下:
#include "widget.h"
#include "ui_widget.h"

Widget::Widget(QWidget *parent)
    : QWidget(parent), ui(new Ui::Widget)
{
    ui->setupUi(this);

    image = QImage(320, 240, QImage::Format_RGB32);

    connect(ui->pushButton, SIGNAL(clicked()), this, SLOT(update()));
}

Widget::~Widget()
{
    delete ui;
}

void Widget::paintEvent(QPaintEvent *event)
{
    QWidget *firstWidget = ui->tabWidget->widget(0);
    QPainter paint(this);
    paint.drawImage(10, 70, image);
    paint.end();
}

运行时出现如下信息:
Starting D:\Qt\workspace\tabwidget\debug\tabwidget.exe...
QPainter::begin: Paint device returned engine == 0, type: 1
QPainter::end: Painter not active, aborted
静下心来学习
离线lishiyong110
只看该作者 8楼 发表于: 2010-03-20
在amwzl的帮助下,终于解决了这个问题。
要在tabwidget的页中画图,应该先自己定义一个widget并且重新实现其paintevent事件,然后在tabwidget中使用addtab添加即可。
问题解决了 感谢ls的诸位
静下心来学习
离线ty3219
只看该作者 9楼 发表于: 2010-09-24
回 8楼(lishiyong110) 的帖子
我最近也遇到楼主这样的问题,请问楼主是怎样解决的?能讲得详细点吗?
是在Widget这个类里再定义一个QWidget类型的变量吗?
离线luorixiehui
只看该作者 10楼 发表于: 2013-05-21
引用第8楼lishiyong110于2010-03-20 20:06发表的  :
在amwzl的帮助下,终于解决了这个问题。
要在tabwidget的页中画图,应该先自己定义一个widget并且重新实现其paintevent事件,然后在tabwidget中使用addtab添加即可。
问题解决了 感谢ls的诸位

有知道这个具体是怎么解决吗,不是很懂。。
离线luorixiehui
只看该作者 11楼 发表于: 2013-05-24
已经搞懂了,新建widget类,在其中完成绘图,最后将widget添加到tab页中,调整tab中widget的大小以能够显示。
快速回复
限100 字节
 
上一个 下一个