找回密码
 立即注册
收起左侧

QT新手,怎么重载label的paintEvent事件?

4
回复
8602
查看
[复制链接]
累计签到:4 天
连续签到:1 天
来源: 2015-3-22 20:12:36 显示全部楼层 |阅读模式
1Qter豆
本帖最后由 iamzxming 于 2015-3-22 20:18 编辑

我用qt creator在主界面上放置了一个label,怎么重载paintEvent事件,直接void label::paintEvent()?
还有,用界面设计器添加的资源,在源文件里无法识别(比如我写void label::paintEvent()? 它会提示我label has not been declared)?
然后ui->label 这种用法算什么?
最后问下,qt里面的“提升为”是干吗的?(说详细些)
希望各位前辈耐心解答下,十分感谢!

最佳答案

查看完整内容

1、paintEvent()这个好像是在程序启动的时候就自动调用的,在其它地方不好手动调用。你要刷新界面的话用 update() 函数。 2、没怎么看懂问题,但是有一点:paintEvent()不能手动调用,所以会提示label has not been declared,但是可以自己重定义部件的这个函数,要修改界面,就把要修改的部分定义成相应的类型放到paintEvent()函数里,在其它函数里修改这个类型的值并加一句 update() 就好了。 例如:在paintEvent()中定义一个背 ...
回复

使用道具 举报

累计签到:230 天
连续签到:1 天
2015-3-22 20:12:37 显示全部楼层
1、paintEvent()这个好像是在程序启动的时候就自动调用的,在其它地方不好手动调用。你要刷新界面的话用 update() 函数。
2、没怎么看懂问题,但是有一点:paintEvent()不能手动调用,所以会提示label has not been declared,但是可以自己重定义部件的这个函数,要修改界面,就把要修改的部分定义成相应的类型放到paintEvent()函数里,在其它函数里修改这个类型的值并加一句 update() 就好了。
例如:在paintEvent()中定义一个背景图片image并加载到界面中,
         然后在槽on_update_clicked()里面修改图片内容image.load(":/background/back.png");
         接着在槽里面加上一句update();
         程序在掉用这个槽的时候就会刷新界面的背景图片了。
3、ui->label这就是指针指向界面上label这个对象,
     要调用这个对象的函数就可以这样ui->label->setText("...");
4、“提升为”这个我用过,但是出现了一些意想不到的错误,为了不误导别人我就不解释了。。。
回复

使用道具 举报

累计签到:4 天
连续签到:1 天
2015-3-22 21:52:08 显示全部楼层
本帖最后由 iamzxming 于 2015-3-22 21:54 编辑
木村拓哉 发表于 2015-3-22 21:38
1、paintEvent()这个好像是在程序启动的时候就自动调用的,在其它地方不好手动调用。你要刷新界面的话用 up ...

谢谢前辈,其实我就是想用QPainter在label上绘图,但是不知道怎么弄,看了网上一些帖子,都说可以重载控件的paintEvent()函数来实现。然后就想问怎么重载?
比如我想在 MainWindow上画一条线,
我可以在.h文件里加一个
protected:
void paintEvent(QPaintEvent *);
.cpp文件里加一个
void MainWindow::paintEvent(QPaintEvent *)
{
    QPainter painter(this);
    painter.drawLine(QPointF(100, 100), QPointF(100, 200));
}


.h文件
class MainWindow : public QMainWindow
{
    Q_OBJECT

public:
    explicit MainWindow(QWidget *parent = 0);
    ~MainWindow();
private:
    Ui::MainWindow *ui;
protected:
    void paintEvent(QPaintEvent *);
};
.cpp
void MainWindow::paintEvent(QPaintEvent *)
{
    QPainter painter(this);
    painter.drawLine(QPointF(100, 100), QPointF(100, 200));
}(省略部分代码)
然后就可以在主界面上画条线

点评

上面代码就这样写就可以了,我之前不是说paintEvent()函数会在运行的时候自动调用嘛,所以只要定义了这个函数就行了。  详情 回复 发表于 2015-3-23 13:00
回复

使用道具 举报

累计签到:230 天
连续签到:1 天
2015-3-23 13:00:57 显示全部楼层
iamzxming 发表于 2015-3-22 21:52
谢谢前辈,其实我就是想用QPainter在label上绘图,但是不知道怎么弄,看了网上一些帖子,都说可以重载控件 ...

上面代码就这样写就可以了,我之前不是说paintEvent()函数会在运行的时候自动调用嘛,所以只要定义了这个函数就行了。
回复

使用道具 举报

累计签到:595 天
连续签到:1 天
2015-3-31 08:44:53 显示全部楼层
回答得很详细,顶一个。
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

公告
可以关注我们的微信公众号yafeilinux_friends获取最新动态,或者加入QQ会员群进行交流:190741849、186601429(已满) 我知道了