有多种方法:
用图标的方式:
QTableWidgetItem *it = ui->tableWidget->item(row, col)if (it==0)
{
it=new QTableWidgetItem()
setItem(row, col, it)
}
it->setIcon(QIcon(pixMap))
用setCellWidget:
QLabel* label=new QLabellabel->setPixmap(pixMap)
ui->tableWidget->setCellWidget(row, col, label)
用代理:
class QPixmapItemDele : public QStyledItemDelegate{
public:
QPixmapItemDele(QObject* parent = 0) : QStyledItemDelegate(parent) {}
virtual void paint ( QPainter * painter, const QStyleOptionViewItem & option, const QModelIndex & index ) const
{
if (index.data(Qt::DisplayRole).canConvert<QPixmap>())
{
QPixmap pm = index.data(Qt::DisplayRole).value<QPixmap>()
painter->drawPixmap(0,0,pm)
}
else
{
QStyledItemDelegate::paint(painter, option, index)
}
}
}
......
ui->tableWidget->setItemDelegate(new QPixmapItemDele)
ui->tableWidget->item(row,col)->setData(Qt::DisplayRole, QVariant::fromValue<QPixmap>(pixMap))
自定义一个widget,重写paintEvent ( QPaintEvent * event ) 画你想画的图形,然后调用 QTabWidget::setCornerWidget+1
自己自定义一个widget作为QTabWidget的一个页面。
怎么自定义一个widget,要创建一个类吗,具体怎么 *** 作啊,谢谢!
自己定义一个类去继承QWidget,重写这个类的paintEvent
那怎么放到tabwidget里面呢,用insertTab(int index,QWidget *widget,const QString &)吗。那么这个函数中的QWidget *widget怎么定义。
这样的话,我把图都画在了自定义的类里面,那么我怎么调用这个类不停的画图呢。
你要在你调用的地方构造:
MyWidget widget = new MyWidget(this)
然后在通过insertTab去添加这个widget。
paintEvent事件是在MyWidget重写的,你只要在widget的区域就可以不停的画图了。
[解决办法]
Qt的绘图比较特别,也是类似MVC方式(MFC是直接绘图,也可类似MVC),数据和视图分开,paintEvent里只要写绘图代码。其它的地方处理数据,更新完了数据,直接update就会重绘。
我这有个简单的例子:http://download.csdn.net/detail/jdwx1/4108947,0分下载。
谢谢,这个应该是只能在切换到当前的tab时执行一次画图,那么我要是实时更新,不停的画图呢。
我按照你的写法修改了之后,运行没有错误,但是界面一直出不来。当我在构造函数里把ui->topologyTab->installEventFilter(this)注释掉了就好了。本文来自:读书人网(http://www.reader8.cn/)原文链接:
1、将Matplotlib的Figure对象转换为QWidget,可以使用FigureCanvasQTAgg类。这个类继承自PyQt5.QtWidgets.QWidget,并提供了显示Matplotlib图形的函数。2、创建一个QTabWidget对象,并为其添加需要显示的各个标签页。
3、在每个标签页中添加Step1中创建的FigureCanvasQTAgg对象。
4、确定好每个标签页的内容后,将QTabWidget对象添加到主窗口中。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)