2016-04-21 5 views
1

私のプロジェクトでQPushButtonを作成しようとしていますが、テキストがカスタムボタンの画像またはアイコンの上に表示されます。アイコン上にテキストが表示された状態でQPushButtonを作成するにはどうすればよいですか?

imagePath = path; 
QPixmap pixmap(imagePath); 
QIcon ButtonIcon(pixmap); 
button->setIcon(ButtonIcon); 
button->setIconSize(pixmap.rect().size()); 
button->setGeometry(0,0,height,width); 
button->setStyleSheet(
    "background-color: gray;" 
    "border: 1px solid black;" 
    "border-radius: "+QString::number(radius)+"px;" 
    "color: lightGray; " 
    "font-size: 25px;" 
    ); 

私はここにsetTextを使用しようと、それはその右側の最初のアイコンとテキストを示しています 私は、以下の方法を試してみました。テキストをアイコンの上に表示します。それゆえ私は、ボタンの上に必要な画像が表示されていない、

imagePath = path; 
button->setGeometry(0,0,height,width); 
button->setStyleSheet("background-image: url(:/images/images/2adjacentTracksButton.png));" 
         "background-position: center center"); 

この1つは私のURLパスを受け付けていません。

はまた、私はオンラインで見つける以下の方法を試してみました。

どうすればこの問題を解決できますか?

+0

QSS式で '2adjacentTracksButton.png'の後ろに余分な ')'があります。 – hank

答えて

0

ボタンを操作するときは、QAbstractButtonを実装する独自のクラスを作成することができます。このような何か:.cpp

class MyButton : public QAbstractButton 
{ 
    Q_OBJECT 

public: 
    static MyButton* createButton(QIcon icon, QWidget *parent); 
    ~MyButton(); 

    void setText(QString); 
    void setIcon(eIcon); 
    void setOrientation(Qt::Orientation); 

protected : 
    MyButton(QWidget *parent); 

    // here, you can reimplement event like mousePressEvent or paintEvent 

private : 
    QBoxLayout* m_ButtonLayout; 
    QLabel*  m_IconLabel; 
    QIcon  m_Icon; 
    QLabel*  m_TextLabel; 
} 

MyButton* button = MyButton::createButton(myButtonIcon, this); 

それはちょうど基本的なものです:

MyButton::MyButton(QWidget *parent) 
    : QAbstractButton(parent) 
{  
    m_ButtonLayout = new QBoxLayout(QBoxLayout::LeftToRight, this); 
    m_ButtonLayout->setAlignment(Qt::AlignCenter); 
    m_ButtonLayout->setContentsMargins(0, 0, 0, 0); 
    m_ButtonLayout->setSpacing(1); 

    m_IconLabel = new QLabel(this); 
    m_IconLabel->setAlignment(Qt::AlignCenter); 
    m_ButtonLayout->addWidget(m_IconLabel); 

    m_TextLabel = new QLabel(this); 
    m_TextLabel->setAlignment(Qt::AlignCenter); 
    m_ButtonLayout->addWidget(m_TextLabel); 
    //m_TextLabel->hide(); 
} 

MyButton* MyButton::createButton(QIcon icon, QWidget *parent) 
{ 
    MyButton* pButton = new MyButton(parent); 
    pButton->setIcon(icon); 

    return pButton; 
} 

void MyButton::setText(QString text) 
{ 
    m_TextLabel->setVisible(!text.isEmpty()); 
    m_TextLabel->setText(text); 
    QAbstractButton::setText(text); 
} 

void MyButton::setIcon(QIcon icon) 
{ 
    m_Icon = icon; 
    m_IconLabel->setVisible(true); 
} 

void MyButton::setOrientation(Qt::Orientation orientation) 
{ 
    if (orientation == Qt::Horizontal) 
     m_ButtonLayout->setDirection(QBoxLayout::LeftToRight); 
    else 
     m_ButtonLayout->setDirection(QBoxLayout::TopToBottom); 
} 

そして今、あなたは、静的メソッドを呼び出すことによって、あなたのアイコンを使用してボタンを作成することができます私はあなたに与えてくれました、そして、私はそれがうまくいくかどうかはわかりません(これは以前私がやったことです)が、あなたはそれを撃つことができます。希望が助けてくれる!

関連する問題