我有一个qt应用程序来设置QPushButton的图标。代码如下:
widget.h:
class Widget : public QWidget
{
Q_OBJECT
public:
explicit Widget(QWidget *parent = 0);
~Widget();
private:
Ui::Widget *ui;
};
widget.cpp:
Widget::Widget(QWidget *parent) :
QWidget(parent),
ui(new Ui::Widget)
{
ui->setupUi(this);
QImage img(":/sample");
QPixmap scaled = QPixmap::fromImage(img).scaled( QSize(ui->pushButton->size().width(),ui->pushButton->size().height()), Qt::KeepAspectRatioByExpanding );
QIcon icon(scaled);
ui->pushButton->setIconSize(QSize(ui->pushButton->size().width(),ui->pushButton->size().height()));
ui->pushButton->setIcon(icon);
}
我在ui文件上有按钮。但是图标没有完全覆盖在按钮上。我的按钮大小为(100,100)。我附上了结果截图:
答案 0 :(得分:0)
尝试传递Qt::IgnoreAspectRatio
作为scaled
的最后一个参数,并查看结果是否符合您的需求。如果它没有,也许图像应该是平方的(即相同的宽度和高度)。
答案 1 :(得分:0)
您的方法存在的问题是您要在构造函数本身中设置按钮的图标。由于您的代码取决于按钮的大小,因此这是一种不好的方法。原因是,在构造函数执行结束之前,大小是不固定的,因此最终会导致意外结果。解决方案是在主窗口的调整大小事件期间设置图标的大小,该方法甚至允许调整按钮的大小是否在运行时发生变化。
首先安装事件过滤器(在构造函数中复制此行)
this->installEventFilter(this);
现在重新实现一个名为eventFilter的功能
bool Widget::eventFilter(QObject *watched, QEvent *event)
{
Q_UNUSED(watched)
if(event->type() == QEvent::Resize){
SetIcon();
}
return false;
}
SetIcon()的定义如下
void Widget::SetIcon()
{
// Set the following variables according to your need
QString IconPath = /*Path_of_your_icon*/;
QPushButton *button = /*Your_Pushbutton*/;
int Margin = /*Margin*/;
button->setIcon(QIcon(QPixmap(IconPath)));
QSize size;
int width = button->height() - Margin ;
int height = button->width() - Margin ;
size.setHeight(height);
size.setWidth(width);
button->setIconSize(size);
}