最近学习Qt略有心得,记之以备不虞。


我们常常有这种需求,就是需要给某个指定的QWidget对象添加图片背景。比方中国象棋,整个棋盘周边是状态区,而中间的棋盘可以是一个图片,所以如何给这个QWidget对象添加背景图片呢?

如下解决方法:
//demo.h #include class MainWindow : public QMainWindow { Q_OBJECT private:
QWidget* centerWidget; QWidget* image; QPixmap* chessboard; private: void
initLayout(QWidget* widget); public: MainWindow(QWidget *parent = 0);
~MainWindow(); private: void initUI(); }; #endif // MAINWINDOW_H//demo.cpp
MainWindow::MainWindow(QWidget *parent) : QMainWindow(parent) { this->initUI();
} MainWindow::~MainWindow() { } void MainWindow::initLayout(QWidget *widget) {
QVBoxLayout* vLayout = new QVBoxLayout; QHBoxLayout* hLayout = new QHBoxLayout;
QHBoxLayout* cLayout = new QHBoxLayout; this->image = new QWidget; QPalette
pal(this->image->palette()); pal.setColor(QPalette::Background, Qt::black);
this->image->setAutoFillBackground(true); pal.setBrush(QPalette::Window,
QBrush(this->chessboard->scaled( this->size(), Qt::IgnoreAspectRatio,
Qt::SmoothTransformation))); this->image->setPalette(pal);
hLayout->addWidget(this->initGame); hLayout->addWidget(this->level);
cLayout->addWidget(this->image); vLayout->addLayout(hLayout);
vLayout->addLayout(cLayout); widget->setLayout(vLayout); } void
MainWindow::initUI() { this->setCentralWidget(this->centerWidget);
this->initLayout(this->centerWidget); }
最主要的就是这几句:
QPalette pal(this->image->palette()); pal.setColor(QPalette::Background,
Qt::black); this->image->setAutoFillBackground(true);
pal.setBrush(QPalette::Window, QBrush(this->chessboard->scaled( this->size(),
Qt::IgnoreAspectRatio, Qt::SmoothTransformation)));
this->image->setPalette(pal);
用QPalette和QBrush工具来画这个背景。效果如下:



友情链接
KaDraw流程图
API参考文档
OK工具箱
云服务器优惠
阿里云优惠券
腾讯云优惠券
华为云优惠券
站点信息
问题反馈
邮箱:ixiaoyang8@qq.com
QQ群:637538335
关注微信