2017-08-24 38 views
0

问题

我想创建一个按钮小部件,具有以下要素:是否可以从子类和父类中绘制QWidget?

  • 配置背景颜色
  • 按钮尺寸,透明图标
  • 可配置定位文本

因为我更喜欢QPushButton而不是QToolButton,所以我面临着已知的问题(请参阅herehere)图标/文本对齐。

所以我的做法是专门QPushButton类和覆盖paintEvent方法(请参阅下面的代码)。如果我只需手动绘制文本并将剩下的部分(图标和背景)留给父类,那就太好了。但是,现在似乎没有画出文字。

这是可能的,我的错误是在别的地方,还是我必须自己画?

代码

class MyPushButton : public QPushButton 
{ 
public: 
    MyPushButton() : QPushButton() {} 
    virtual ~MyPushButton() = default; 

protected: 
    virtual void paintEvent(QPaintEvent* e) override { 
     QPushButton::paintEvent(e); 
     QPainter p(this); 
     p.drawText(0,0, "label"); 
    } 
}; 

回答

1

Ofcourse,你可以这样做:

这里MyPushButton从QPushButton的。

void MyPushButton::paintEvent(QPaintEvent *e) 
{ 
    // This will draw everything on the push button with default palette. 
    QPushButton::paintEvent(e); 

    // Anything draw past this statement will be drawn over the real 
    // push button with all its properties intact, 
    // if you won't draw anything over, your pushbutton will look like QPushButton 
    // Now draw your custom content here: 
} 

编辑1: 尝试了这一点,使用矩形告诉在哪里画: 虽然我不知道为什么它不与点工作。

class MyPB : public QPushButton 
{ 
protected: 
    void paintEvent(QPaintEvent *e) override 
    { 
     // This will draw everything on the push button with default palette. 
     QPushButton::paintEvent(e); 
     p.drawText(QRect(0,0, 50, 50), "HelloWorld"); 

    } 
}; 

int main(int argc, char *argv[]) 
{ 
    QApplication a(argc, argv); 

    MyPB pb; 
    pb.show(); 

    return a.exec(); 
} 

编辑2: 它与点为好,它已经工作了按设计。 所以,它在0,0位置写的文字,并显示如下:

The button when text "HelloWorld" painted at 0,0 location

所以,如果你看到,绘制文本,但它是按钮的尺寸之外,因此可以没有看到它。

+0

我也这么认为,但没有成功。也许我在这里画了一些错误的东西: 'QPainter p(this);' 'p.drawText(0,0,“label”);' – bunto1

+1

编辑作品,是的,我会标记即被接受。为什么这个问题不起作用将是另一个问题。谢谢! – bunto1

+0

@ bunto1:的确,如果你想出来的话,请详细说明:) – PRIME

相关问题