プロが教えるわが家の防犯対策術!

下記のコードでdefine(Bの場合)を使用したものは旨く働きません。

下記のAの設定では、バックグランドカラーは緑になり、OKです。

しかし、Bの設定では、バックグランドカラーは黒色系統になり、NGです。
Q1)『#define BKG_color #00cc00』を使用して、バックグランドカラ(緑)
の設定は可能ですか?
注)#の処理に問題がありますか?

#define BKG_color #00cc00
//setStyleSheet("QWidget{background:#00cc00;}"); <ーーA
setStyleSheet("QWidget{background:BKG_color;}"); <−−B

defineの使用方法をお教えください。

お手数ですが、宜しくお願いします。

A 回答 (3件)

C++の基本をきっちり学んでから次のステップへ進むことをお勧めします。


あるいは、質問する前に、C++の参考書、解説サイト等を確認することをお勧めします。

例えば
http://ylb.jp/2006b/proc/cpp/
には
> 文字列定数(文字列リテラル)の中では展開は起きない。
などと、マクロが展開される条件が解説されています。
    • good
    • 4
この回答へのお礼

価値の無い回答は、ご遠慮ください、
時間の無駄です。

お礼日時:2017/06/25 12:02

コンパイル通ってますか??


#00cc00 はコンパイルエラーになりませんか??
    • good
    • 0

#defineはトークンを置き換えます。


setStyleSheet("QWidget{background:BKG_color;}");
に出てくるBKG_colorは文字列の一部でありトークンになっていないので#defineによる置き換えの対象外です。
文字列を分解してBKG_colorを文字列の外に出してプリプロセッサからトークンとして認識できるようにし、あとで文字列を結合するのが妥当かと。

#define BKG_color "#00cc00"
setStyleSheet("QWidget{background:" BKG_color ";}");

でどうかな。
    • good
    • 0
この回答へのお礼

毎度、お世話になります。
本を読め、勉強しろとか無意味な回答が多い中で
価値有る回答有難う御座いました。
これらの回答をする人は、説明表現力が不足しているかも
知れませんね?

お礼日時:2017/06/25 12:00

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!