我需要的地方彼此相邻定制QPushButton
子类的几个实例。出于某种原因,涂漆时按钮重叠。下面是一个简化的问题示例。QHBoxLayout为什么会导致窗口小部件重叠?
这里是(不正确)输出:
下面是代码:
#include <QtGui>
class MyButton : public QPushButton {
public:
explicit MyButton(Qt::GlobalColor color, QWidget *parent = NULL)
: QPushButton(parent), color_(color) {
setSizePolicy(QSizePolicy::Fixed, QSizePolicy::Fixed);
}
QSize sizeHint() const {
return QSize(50, 25);
}
protected:
void paintEvent(QPaintEvent *) {
QPainter painter(this);
painter.setOpacity(0.5);
painter.fillRect(0, 0, width(), height(), color_);
}
private:
Qt::GlobalColor color_;
};
int main(int argc, char **argv) {
QApplication app(argc, argv);
QWidget widget;
QHBoxLayout *layout = new QHBoxLayout;
layout->setSpacing(0);
MyButton *w1 = new MyButton(Qt::red);
MyButton *w2 = new MyButton(Qt::green);
MyButton *w3 = new MyButton(Qt::blue);
layout->addWidget(w1);
layout->addWidget(w2);
layout->addWidget(w3);
widget.setLayout(layout);
widget.show();
return app.exec();
}
是什么原因造成这一点,我该如何解决?顺便说一句,我试着用常规QWidget
子类(而不是QPushButton
子类)类似的东西,并没有什么问题。这是QPushButton
特有的东西。
更新:我真的现在这是一个错误的想法。我将它提交给了Qt Bug Tracker;我们会看到巨魔的想法。在任何情况下,从QAbstractButton
得出的修复了绘图问题......我只需重新实现我需要的一些功能。 Qt Trolls提供了一个解决方案(解决方法是什么?)。我在下面发布了他们的修复方案我将它留给他们的团队来确定这是一个功能还是错误。它显然只在Mac上表现不同。
我没有看到任何解决您的按钮的大小。您指定它将被固定并且尺寸提示,但不是他的实际尺寸。你是否在真实的代码中执行它? – Live 2010-10-20 15:26:57
@Live:但是这不是QHBoxLayout的重点吗?它不应该使用大小提示来确定每个小部件的理想大小吗? (例如,如果尺寸提示和政策允许,允许一些展开/合同)。 – 2010-10-20 15:44:19
@Live:我确认尺寸合适。如果你做了一个qDebug()<< size(),它是正确的。 – 2010-10-20 15:46:42