Qt 图片按钮

清疚 2022-07-15 00:46 280阅读 0赞

1.给QPushButton添加背景图片;

2.QWidget窗口部件提升;

3.QSignalMapper使用;

4.简单样式表。

界面如下,随便找的一些图片素材,点击底部按钮显示和隐藏上面的六个图标面板。

SouthEast

1>六个图标的面板是一个单独的QWidget,代码如下:

[cpp] view plain copy

在CODE上查看代码片 派生到我的代码片

  1. #ifndef FORM_H
  2. #define FORM_H
  3. #include
  4. namespace Ui {
  5. class Form;
  6. }
  7. class QSignalMapper;
  8. class Form : public QWidget
  9. {
  10. Q_OBJECT
  11. public:
  12. explicit Form(QWidget *parent = 0);
  13. ~Form();
  14. signals:
  15. void sigButtonClick(QString);
  16. private slots:
  17. void onAllButton(QString objName);
  18. private:
  19. virtual**void* paintEvent(QPaintEvent \);
  20. private:
  21. Ui::Form *ui;
  22. QSignalMapper *mapper;
  23. };
  24. #endif // FORM_H

[cpp] view plain copy

在CODE上查看代码片 派生到我的代码片

  1. #include “form.h”
  2. #include “ui_form.h”
  3. #include
  4. Form::Form(QWidget *parent) :
  5. QWidget(parent),
  6. ui(new Ui::Form)
  7. {
  8. ui->setupUi(this);
  9. this->setAttribute(Qt::WA_TranslucentBackground);
  10. QPixmap image1(“:/skin/1.png”);
  11. QPixmap image2(“:/skin/2.png”);
  12. QPixmap image3(“:/skin/3.png”);
  13. QPixmap image4(“:/skin/4.png”);
  14. QPixmap image5(“:/skin/5.png”);
  15. QPixmap image6(“:/skin/6.png”);
  16. ui->pb1->setIcon(image1);
  17. ui->pb2->setIcon(image2);
  18. ui->pb3->setIcon(image3);
  19. ui->pb4->setIcon(image4);
  20. ui->pb5->setIcon(image5);
  21. ui->pb6->setIcon(image6);
  22. ui->pb1->setFixedSize(image1.size());
  23. ui->pb2->setFixedSize(image2.size());
  24. ui->pb3->setFixedSize(image3.size());
  25. ui->pb4->setFixedSize(image4.size());
  26. ui->pb5->setFixedSize(image5.size());
  27. ui->pb6->setFixedSize(image6.size());
  28. ui->pb1->setCursor(QCursor(Qt::PointingHandCursor));
  29. ui->pb2->setCursor(QCursor(Qt::PointingHandCursor));
  30. ui->pb3->setCursor(QCursor(Qt::PointingHandCursor));
  31. ui->pb4->setCursor(QCursor(Qt::PointingHandCursor));
  32. ui->pb5->setCursor(QCursor(Qt::PointingHandCursor));
  33. ui->pb6->setCursor(QCursor(Qt::PointingHandCursor));
  34. mapper = new QSignalMapper(this);
  35. connect(mapper, SIGNAL(mapped(QString)), this, SLOT(onAllButton(QString)));
  36. connect(ui->pb1, SIGNAL(clicked()), mapper, SLOT(map()));
  37. mapper->setMapping(ui->pb1, ui->pb1->objectName());
  38. connect(ui->pb2, SIGNAL(clicked()), mapper, SLOT(map()));
  39. mapper->setMapping(ui->pb2, ui->pb2->objectName());
  40. connect(ui->pb3, SIGNAL(clicked()), mapper, SLOT(map()));
  41. mapper->setMapping(ui->pb3, ui->pb3->objectName());
  42. connect(ui->pb4, SIGNAL(clicked()), mapper, SLOT(map()));
  43. mapper->setMapping(ui->pb4, ui->pb4->objectName());
  44. connect(ui->pb5, SIGNAL(clicked()), mapper, SLOT(map()));
  45. mapper->setMapping(ui->pb5, ui->pb5->objectName());
  46. connect(ui->pb6, SIGNAL(clicked()), mapper, SLOT(map()));
  47. mapper->setMapping(ui->pb6, ui->pb6->objectName());
  48. }
  49. Form::~Form()
  50. {
  51. delete ui;
  52. }
  53. void Form::paintEvent(QPaintEvent *)
  54. {
  55. QPainter p(this);
  56. QColor clr(97, 175, 175, 100);
  57. QBrush brush(clr);
  58. //p.drawPixmap(0, 0, QPixmap(“:/skin/login.png”));
  59. p.setRenderHint(QPainter::Antialiasing);
  60. p.setBrush(brush);
  61. p.setPen(clr);
  62. p.drawRoundedRect(rect(), 10, 10);
  63. }
  64. void Form::onAllButton(QString objName)
  65. {
  66. emit sigButtonClick(objName);
  67. }

Form的使用者只需要connect sigButtonClick信号就可以处理这六个按钮的点击事件
2>在QDialog上放置的是一个QWidget,在上面右键单击“提升为…”,然后填写Form类名,注意头文件也要对应起来,最后添加就可以了

[cpp] view plain copy

在CODE上查看代码片 派生到我的代码片

  1. #ifndef DIALOG_H
  2. #define DIALOG_H
  3. #include
  4. namespace Ui {
  5. class Dialog;
  6. }
  7. class Dialog : public QDialog
  8. {
  9. Q_OBJECT
  10. public:
  11. explicit Dialog(QWidget *parent = 0);
  12. ~Dialog();
  13. private slots:
  14. void on_pb_logo_clicked(bool checked);
  15. void onAllButton(QString objName);
  16. private:
  17. Ui::Dialog *ui;
  18. };
  19. #endif // DIALOG_H

[cpp] view plain copy

在CODE上查看代码片 派生到我的代码片

  1. #include “dialog.h”
  2. #include “ui_dialog.h”
  3. #include “form.h”
  4. #include
  5. Dialog::Dialog(QWidget *parent) :
  6. QDialog(parent),
  7. ui(new Ui::Dialog)
  8. {
  9. ui->setupUi(this);
  10. this->setStyleSheet(“background-color:rgb(64, 128, 128);”);
  11. ui->pb_logo->setStyleSheet(“background-color:transparent;background-image:url(:/skin/game_box.png)”);
  12. ui->widget->hide();
  13. connect(ui->widget, SIGNAL(sigButtonClick(QString)), this, SLOT(onAllButton(QString)));
  14. }
  15. Dialog::~Dialog()
  16. {
  17. delete ui;
  18. }
  19. void Dialog::on_pb_logo_clicked(bool checked)
  20. {
  21. if (checked) {
  22. ui->widget->setVisible(true);
  23. } else {
  24. ui->widget->setVisible(false);
  25. }
  26. }
  27. void Dialog::onAllButton(QString objName)
  28. {
  29. QMessageBox::information(this, tr(“show”), objName);
  30. }

工程地址:https://github.com/tujiaw/qtest3

网址:http://blog.csdn.net/tujiaw/article/details/33297159

发表评论

表情:
评论列表 (有 0 条评论,280人围观)

还没有评论,来说两句吧...

相关阅读

    相关 QT 如何实现不规则按钮

    以前总是时不时有人问我怎么实现不规则按钮,最近特地搜集了几篇关于QT实现不规则按钮的文章: [第一个范例][Link 1] [第二个范例][Link 2] [Link

    相关 Qt 图片按钮

    1.给QPushButton添加背景图片; 2.QWidget窗口部件提升; 3.QSignalMapper使用; 4.简单样式表。 界面如下,随便找的一些图片素材,点