gpt4 book ai didi

c++ - QGridLayout addWidget(CustomWidget) 不工作

转载 作者:行者123 更新时间:2023-11-30 04:47:58 24 4
gpt4 key购买 nike

我在我的代码中使用了 QGridLayout,并且想将我的自定义小部件添加到 gridlayout,它无法与 addWidget(CustomWidget*) 一起使用。

这是在带有 Visual Studio 2013 和 Qt5.6.3 的 Windows10 上运行。

// *.h
class MainWindow : public QMainWindow {
Q_OBJECT
public:
MainWindow(QWidget *parent = Q_NULLPTR);
private:
Ui::MainWindow ui;
};

class CustomWidget : public QWidget {
Q_OBJECT
public:
CustomWidget(QWidget *parent = Q_NULLPTR) : QWidget(parent) {}
~CustomWidget() {}
};

// *.cpp
// when i use CustomWidget
MainWindow::MainWindow(QWidget *parent) : QMainWindow(parent) {
ui.setupUi(this);

QWidget *grid = new QWidget(this);
grid->setStyleSheet("background:pink;");
QGridLayout *layout = new QGridLayout(grid);
layout->setMargin(0);
layout->setSpacing(0);
grid->setLayout(layout);
grid->setGeometry(500, 150, 240, 180);

// following code is not working, when run this program,
// i can only see the 'grid' widget with pink background
CustomWidget *w = new CustomWidget(grid);
w->setStyleSheet("background:red;");
layout->addWidget(w, 0, 0);
}

// but if i use QWidget
MainWindow::MainWindow(QWidget *parent) : QMainWindow(parent) {
ui.setupUi(this);

QWidget *grid = new QWidget(this);
grid->setStyleSheet("background:pink;");
QGridLayout *layout = new QGridLayout(grid);
layout->setMargin(0);
layout->setSpacing(0);
grid->setLayout(layout);
grid->setGeometry(500, 150, 240, 180);

// following code is working, when run this program,
// i can see the 'w' widget with red background
QWidget *w = new QWidget(grid);
w->setStyleSheet("background:red;");
layout->addWidget(w, 0, 0);
}

最佳答案

正如 Qt 的样式表引用中所述,将 CSS 样式应用于从 QWidget 继承的自定义小部件需要以这种方式重新实现 paintEvent():

     void CustomWidget::paintEvent(QPaintEvent *)
{
QStyleOption opt;
opt.init(this);
QPainter p(this);
style()->drawPrimitive(QStyle::PE_Widget, &opt, &p, this);
}

尽管按照文档中的说法,如果不这样做,您的自定义小部件将仅支持背景、背景剪辑和背景来源属性,这可能是一个错误。

您可以在这里阅读:Qt Stylesheets reference在“可设置样式的小部件列表”部分 -> QWidget。

关于c++ - QGridLayout addWidget(CustomWidget) 不工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55999683/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com