मुझे एक दूसरे के समीप एक कस्टम 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
से प्राप्त करने से ड्राइंग समस्या ठीक हो जाती है ... मुझे बस अपनी आवश्यक कार्यक्षमता को फिर से कार्यान्वित करना पड़ा।
अद्यतन 2: क्यूटी पर ट्रॉल्स ने एक समाधान प्रदान किया (वर्कअराउंड?); मैंने अपना फिक्स नीचे दिए गए उत्तर के रूप में पोस्ट किया। मैं यह निर्धारित करने के लिए अपनी टीम में जा रहा हूं कि यह एक सुविधा या बग है या नहीं। यह स्पष्ट रूप से मैक पर अलग-अलग व्यवहार करता है।
मुझे कुछ भी नहीं दिख रहा है जो आपके पुशबटन के आकार को ठीक करता है। आप निर्दिष्ट करते हैं कि यह तय किया जाएगा और आकार संकेत, लेकिन वह वास्तविक आकार नहीं है। क्या आप इसे अपने असली कोड में करते हैं या नहीं? – Live
@Live: लेकिन क्या यह QHBoxLayout का बिंदु नहीं है? क्या यह प्रत्येक विजेट के लिए आदर्श आकार निर्धारित करने के लिए आकार संकेतों का उपयोग नहीं करना चाहिए? (उदाहरण के लिए, आकार संकेत और नीति अनुमति देने पर कुछ विस्तार/अनुबंध करने की अनुमति है।) –
@Live: मैंने सत्यापित किया है कि आकार ठीक हैं। यदि आप qDebug() << आकार() करते हैं, तो यह सही है। –