2017-04-01 4 views
0

私はアプリケーションにembedded resourceとして保存したplay buttonのpng形式の画像を持っています。Qt:クリックするとQIconが消えます。 QIcon ::モードが尊重されていません

<!DOCTYPE RCC><RCC version="1.0"> 
    <qresource prefix="icon"> 
    <file>play.png</file> 
    </qresource> 
</RCC> 

私は私が理解から、両方NormalActiveモード

QIcon play; 
play.addFile(":icon/play.png", QSize(), QIcon::Normal); 
play.addFile(":icon/play.png", QSize(), QIcon::Active); 

に設定された同じソース画像とQIconを作成し、これは(Normalモード)unclickedたときにアイコンを表示し、継続すべきです使用ピックスマップを表示します(Activeモード)

QIcon::Normalをクリックしたときにそうrはアイコンと対話していませんが、アイコンが表す機能は使用できます。

QIcon::Active:アイコンで表される機能が利用可能で、ユーザーがアイコン上でマウスを動かすなどの操作をしているときに、pixmapを表示します。

ただし、クリックすると消えます(代わりに空白のボックスが表示されます)。ここで

は、アイコンがここ

alt text

をunclickedアイコンが

をクリックです

alt text

最小限の作業例:私は複製最小限の例を作成しました

私が見る動作

#include <QApplication> 
#include <QMainWindow> 
#include <QMenuBar> 

void initIcons() 
{ 
    Q_INIT_RESOURCE(view); 
} 

int main(int argc, char** argv) 
{ 
    QApplication* app = new QApplication(argc, argv); 
    QMainWindow* window = new QMainWindow(); 

    QMenuBar* menu = new QMenuBar(); 
    window->setMenuBar(menu); 

    QIcon play; 
    play.addFile(":icon/play.png", QSize(), QIcon::Normal); 
    play.addFile(":icon/play.png", QSize(), QIcon::Active); 

    QAction* action = new QAction(play, "", nullptr); 
    menu->addAction(action); 

    window->show(); 
    return app->exec(); 
} 

アップデート:私もaddPixmap

QIcon play; 
play.addPixmap(QPixmap(":icon/play.png"), QIcon::Normal, QIcon::On); 
play.addPixmap(QPixmap(":icon/play.png"), QIcon::Normal, QIcon::Off); 
play.addPixmap(QPixmap(":icon/play.png"), QIcon::Selected, QIcon::On); 
play.addPixmap(QPixmap(":icon/play.png"), QIcon::Selected, QIcon::Off); 
play.addPixmap(QPixmap(":icon/play.png"), QIcon::Active, QIcon::On); 
play.addPixmap(QPixmap(":icon/play.png"), QIcon::Active, QIcon::Off); 
を試してみました

play.addFile(":icon/play.png", QSize(), QIcon::Normal, QIcon::On); 
play.addFile(":icon/play.png", QSize(), QIcon::Normal, QIcon::Off); 
play.addFile(":icon/play.png", QSize(), QIcon::Selected, QIcon::On); 
play.addFile(":icon/play.png", QSize(), QIcon::Selected, QIcon::Off); 
play.addFile(":icon/play.png", QSize(), QIcon::Active, QIcon::On); 
play.addFile(":icon/play.png", QSize(), QIcon::Active, QIcon::Off); 

私はまた、行動の変化なしでModeStateのすべての組み合わせを試してみました

これらのどれも、残念なことに動作を変更しません。

+0

私にとってはうまくいくので、それは奇妙です。アクティブモードでもpixmapを追加しようとしましたか? mode = Activeのvoid QIcon :: addFile(const QString&fileName、const QSize&size = QSize()、Mode mode = Normal、State state = Off)そうです:icon.addFile( ":/ play.png"、QSize()、QIcon :: Active); –

+0

@GabrieldeGrimouardがコメントしてくれてありがとう。私はあなたの提案を反映するために質問を更新しました。残念ながらまだこの成功はありません –

+0

1つのウィンドウと1つのボタンで別々のプロジェクトを作成する必要があるように見えるので、他の人が問題を再現できます。 – fghj

答えて

1

問題を、私はQMenuBarのスタイルで理解し、 私は、このような方法であなたの変形例:

#include <QApplication> 
#include <QMainWindow> 
#include <QMenuBar> 


int main(int argc, char** argv) 
{ 
    QApplication* app = new QApplication(argc, argv); 
    QMainWindow* window = new QMainWindow(); 

    QMenuBar* menu = new QMenuBar(); 
    menu->setStyleSheet(R"style(
QMenuBar { 
    background-color: transparent; 
} 
QMenuBar::item:selected { /* when selected using mouse or keyboard */ 
    background: #a8a8a8; 
} 

QMenuBar::item:pressed { 
    background: #888888; 
} 
)style"); 
    window->setMenuBar(menu); 

    QIcon play; 
    const char path_to_icon[] = "/home/evgeniy/Downloads/icon-play-128.png"; 
    play.addFile(path_to_icon, QSize(), QIcon::Normal); 
    play.addFile(path_to_icon, QSize(), QIcon::Active); 

    QAction* action = new QAction(play, "", nullptr); 
    menu->addAction(action); 

    window->show(); 
    return app->exec(); 
} 

と私ができるプレスした後、アイコンを参照してください。 私のデフォルトのスタイルはあなたのスタイルと異なり、 ですので、スタイルシートで色を変更する必要があるかもしれません。

+0

ありがとう! UbuntuのスタイルシートとデフォルトのUnityテーマに問題があるようです。実際、 'QMenuBar :: item:pressed'のためのスタイルシートを設定するだけで、私はそれを修正することができました。適用されるスタイルシートが何であるかを知ることができますか? –

0

多分あなたはスロットにアイコンを追加することができます

connect({your_action_name},&QAction::toggled,[=](){ 
your_action_name.setIcon("icon_path_file.ico"); 
}) 
+0

これは質問または回答です。これは適切な場所ではない質問の場合は、この場所は回答のみのため投稿を削除してください。 – eyllanesc

関連する問題