02 自定义按钮类和窗口嵌套

1.实现自定义的按钮类:
QPushButton可以设置图标:
void setIcon(const QIcon & icon)

如按钮btn对象:

    btn.setIcon(QIcon("/icons/a.png"));   // 匿名对象
    btn.setGeometry(0, 0, 200, 200);
    btn.setIconSize(btn.size());

自定义一个按钮类, 创建对象可以指定图标文件.

#include <QApplication>
#include <QWidget>
#include <QPushButton>
#include <QIcon>
class MyBtn : public QPushButton {
public:
    MyBtn(QString file="", QWidget *parent = NULL);
    ~MyBtn();
};
MyBtn::MyBtn(QString file, QWidget *parent) : QPushButton(parent)
{
    if (!file.isEmpty())
        this->setIcon(QIcon(file));
    //构造函数的调用过程: MyBtn(...) --> QpushButton(...) --> QabstractButton(...) --> QWidget(parent)
}
MyBtn::~MyBtn()
{
}
int main(int argc, char *argv[])
{
    QApplication a(argc, argv);
    QWidget wid;
    MyBtn btn("/icons/a.png", &wid);
    btn.setGeometry(10, 10, 100, 80);
    wid.setGeometry(10, 10, 640, 480);
    wid.show();
    return a.exec();
}

自定义的按钮类写好后, 完全可以像QPushButton 一样的用法.
class MyWid : public QWidget {
private:
MyBtn *btn;
public:
MyWid();
~MyWid();
};
MyWid::MyWid() {
btn = new MyBtn(“/icons/b.png”, this);
btn->setGeometry(10, 10, 240, 160);
}
MyWid::~MyWid() {
delete btn;
}
int main(int argc, char *argv[])
{
QApplication a(argc, argv);
MyWid wid;
wid.show();
return a.exec();
}
2. 实现自定义的窗口类.
Qlabel 是标签, 可以显示文本, 也可以显示图像
void setPixmap(const QPixmap &);
void setScaledContents(bool);
设置 是否打开图像缩放的功能.

自定义一个窗口类,每个窗口对象都有一幅图像,图像文件在创建对象时指定

#include <QApplication>
#include <QWidget>
#include <QLabel>
class MyWid : public QWidget {
private:
    QLabel *label;
public:
    MyWid(QString file);
    ~MyWid();
};
MyWid::MyWid(QString file)
{
    label = new QLabel(this);
    label->setPixmap(QPixmap(file));
    label->setScaledContents(true);
    label->resize(this->size());
}
MyWid::~MyWid()
{
    delete label;
}
int main(int argc, char *argv[])
{
    QApplication a(argc, argv);
    MyWid wid("/icons/5.jpg"), wid2("/icons/d.png");
    wid.show();
    wid2.show();
    return a.exec();
}

这样封装出来的窗口对象无法再做别的窗口对象的子窗口.
创建出来的窗口对象作别的窗口对象的子窗口:

#include <QApplication>
#include <QWidget>
#include <QLabel>
class MyWid : public QWidget {
private:
    QLabel *label;
public:
    MyWid(QString file, QWidget *parent = NULL);
    ~MyWid();
};
MyWid::MyWid(QString file, QWidget *parent) : QWidget(parent)
{
    resize(320, 240);
    label = new QLabel(this);
    label->setPixmap(QPixmap(file));
    label->setScaledContents(true);
    label->resize(this->size());
}
MyWid::~MyWid()
{
    delete label;
}
int main(int argc, char *argv[])
{
    QApplication a(argc, argv);
    QWidget wid;
    wid.setGeometry(0, 0, 800, 600);
    MyWid   wid2("/icons/5.jpg", &wid);
    MyWid   wid3("/icons/d.png", &wid);
    wid3.setGeometry(320, 0, 320, 240);
    wid.show();
    return a.exec();
}
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值