Làm thế nào để đặt hình ảnh trên QPushButton?


81

Tôi muốn đặt một hình ảnh trên QPushButtonvà kích thước của QPushButtonphải phụ thuộc vào kích thước của hình ảnh. Tôi có thể làm điều này khi sử dụng QLabel, nhưng không thể với QPushButton.

Vì vậy, nếu ai có một giải pháp, xin vui lòng giúp đỡ tôi.


2
có hai cách sử dụng mà bạn có thể đặt hình ảnh trên một nút trong Qt, Cách đặt hình ảnh theo chương trình, qt-articles.blogspot.com/2010/06/… từ bảng định kiểu cách hình ảnh đang được đặt, qt-article. blogspot.com/2010/06/…
Naruto

thats tuyệt vời ... nó hoạt động fine..thanks rất nhiều ...
greshi Gupta

Rất hoan nghênh bạn :) nếu bạn cảm thấy câu trả lời là đúng, vui lòng đánh dấu nó là đúng để nó sẽ hữu ích cho những người gặp vấn đề tương tự.
Naruto

Câu trả lời:


69

Những gì bạn có thể làm là sử dụng bản đồ ảnh làm biểu tượng và sau đó đặt biểu tượng này vào nút.

Để đảm bảo kích thước của nút sẽ chính xác, bạn phải hiển thị lại biểu tượng theo kích thước pixmap.

Một cái gì đó như thế này sẽ hoạt động:

QPixmap pixmap("image_path");
QIcon ButtonIcon(pixmap);
button->setIcon(ButtonIcon);
button->setIconSize(pixmap.rect().size());

6
Tôi biết điều này đã cũ, nhưng tôi đã làm điều này và biểu tượng nút bấm vẫn là biểu tượng mặc định. Tôi không gặp lỗi và tất cả các tệp tài nguyên của tôi dường như đã được tải và đường dẫn của tôi tốt. Tại sao điều này không hiệu quả với tôi?
mrg95

46
QPushButton *button = new QPushButton;
button->setIcon(QIcon(":/icons/..."));
button->setIconSize(QSize(65, 65));

10

Bạn cũng có thể muốn đặt kích thước nút.

QPixmap pixmap("image_path");
QIcon ButtonIcon(pixmap);
button->setIcon(ButtonIcon);
button->setIconSize(pixmap.rect().size());
button->setFixedSize(pixmap.rect().size());

9

Bạn cũng có thể dùng:

button.setStyleSheet("qproperty-icon: url(:/path/to/images.png);");

Lưu ý : Đây là một chút hacky. Bạn chỉ nên sử dụng điều này như phương sách cuối cùng. Các biểu tượng phải được đặt từ C++mã hoặc Qt Designer.


4

Tôi không nghĩ rằng bạn có thể đặt hình ảnh có kích thước tùy ý trên bất kỳ lớp nút nào hiện có. Nếu bạn muốn một hình ảnh đơn giản hoạt động như một nút, bạn có thể viết QAbstractButton-lớp con của riêng mình, giống như:

class ImageButton : public QAbstractButton {
Q_OBJECT
public:
...
    void setPixmap( const QPixmap& pm ) { m_pixmap = pm; update(); }
    QSize sizeHint() const { return m_pixmap.size(); }
protected:
    void paintEvent( QPaintEvent* e ) {
        QPainter p( this );
        p.drawPixmap( 0, 0, m_pixmap );
    }
};

Cảm ơn bạn đã trả lời .. Bạn vui lòng giúp tôi bằng cách chỉ ra cách tôi có thể triển khai mã này bằng cách sử dụng QPushButton thay vì QAbstractButton. Vì yêu cầu của tôi là sử dụng QPushButton. vì vậy, làm ơn giúp tôi ra ngoài.
greshi Gupta

Như tôi đã nói, tôi không nghĩ rằng có một cách thích hợp. Nếu có, QStyle và bảng định kiểu có thể hữu ích. Hãy xem ở đó.
Frank Osterfeld

3

Điều này đã cũ nhưng nó vẫn còn hữu ích, Đã được thử nghiệm đầy đủ với QT5.3.

Hãy thận trọng, ví dụ liên quan đến đường dẫn nguồn:

Trong trường hợp của tôi, tôi đã tạo một thư mục ressources có tên "Ressources" trong dự án thư mục nguồn.

Thư mục "ressources" chứa hình ảnh và biểu tượng. Sau đó tôi thêm tiền tố "Hình ảnh" vào Qt Vì vậy, đường dẫn pixmap trở thành:

QPixmap pixmap (": / images / Ressources / icone_pdf.png");

JF


câu trả lời sẽ cung cấp thêm thông tin về cách sử dụng QPixmap với QPushButton
bunto 1

2

Bạn có thể làm điều này trong QtDesigner. Chỉ cần nhấp vào nút của bạn, sau đó đi đến thuộc tính biểu tượng và sau đó chọn tệp hình ảnh của bạn.


Làm điều này với cài đặt 'biểu tượng' cơ sở, ít nhất để thấy nó hoạt động với hình ảnh của bạn, trước khi cố gắng đặt biểu tượng theo trạng thái. Đặt kích thước của biểu tượng bằng kích thước của hình ảnh của bạn hoặc ít nhất là đủ lớn cho hình ảnh của bạn, nếu không nó sẽ không hiển thị.
ClearCrescendo

0

Chỉ cần sử dụng mã này

QPixmap pixmap("path_to_icon");
QIcon iconBack(pixmap);

Lưu ý rằng: "path_to_icon"là đường dẫn của biểu tượng hình ảnh trong tệp .qrcdự án của bạn. Bạn có thể tìm cách thêm .qrctệp tại đây

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.