3

現在、動的に作成された QPushButton に次のスタイルシート プロパティを使用しています

string mystyle =  "QPushButton { border: 1px solid #8f8f91;  border-radius: 1px; min-width: 90px; min-height: 18px;}"

QPushButton の横にもアイコンがあります - QPushbutton は QToolBar 内にあります

このスタイルは、アプリがコンピューターで実行されている場合は正常に機能しますが、ディスプレイが拡大されている別のシステムでアプリケーションを実行すると問題が発生します。(windows-7 では、これはコントロール パネルの表示に移動し、Larger-150% を選択することによって行われます)。拡大表示のあるシステムでアプリを実行すると、これが得られます。(その中のテキストは、"Hello MyBig World!!" であると想定されています) 感嘆符が欠落していることに注意してください。

ここに画像の説明を入力

この問題は、ボタンにアイコンがある場合にのみ発生すると思います。アイコンがなければ、QpushButton は正常に見えます。アイコン無しだとこんな感じ。テキストが完全に表示されていることに注意してください。

ここに画像の説明を入力

これが私の QPushButton の作成方法です

QPushButton *button_test = new QPushButton( "Hello MyBig World!!" ,this);
button_test->setStyleSheet(mystyle.c_str());
button_test->setIcon(QIcon(":/../SomeFile.png"));

これが発生する理由とこの問題を解決する方法についての提案 - ボタンの幅は私のコンピューターでは問題なく、すべてのテキストが感嘆符と共に表示されます。ただし、フォントが拡大されているコンピューターでは、すべてのテキストが表示されるわけではありません。そのコンピューターでテキスト全体を表示するには、スタイル シートのスタイルを変更して最小幅を増やす必要があります。常にスタイルを変更したくないので、この問題に対する適切で効率的な解決策を知りたいと思っていました。

アップデート

これは私が今使っているコードです

std::string pbstyles = "QPushButton { border: 1px solid #8f8f91;  border-radius: 1px;  font: 12px;"
                       "background-color: qlineargradient(x1: 0, y1: 0, x2: 0, y2: 1,stop: 0 #f6f7fa, stop: 1 #dadbde); "
                       "padding-right:50px;padding-left:50px;height:25px; }"
                       "QPushButton:pressed { background-color: qlineargradient(x1: 0, y1: 0, x2: 0, y2: 1,stop: 0 #dadbde, stop: 1 #f6f7fa); }"
                       "QPushButton:hover{background-color: qlineargradient(spread:pad, x1:0, y1:0.0568182, x2:1, y2:0.0454545, stop:0 rgba(85, 170, 255, 255), stop:1 rgba(255, 255, 255, 255));}";


std::string ArrowStyle = "QPushButton::menu-indicator {/*background-color: darkblue ;*/ subcontrol-origin: padding; margin-right: -60px}";
    pbstyles+=ArrowStyle;


QMenu *menu = new QMenu("This is a button",this);
QPushButton *button = new QPushButton( menu->title(),this);
button->setMenu(menu_contacts);
button->setStyleSheet(pbstyles.c_str());
button->setIcon(QIcon(":/someicon.ico"));
button->setIconSize(QSize(16, 16));
ui.toolBar->addWidget(button_contacts);

これが私が得たものです(テキストがまだ切り刻まれていることに注意してください:( !!!!)

ここに画像の説明を入力

4

1 に答える 1

1

私のテストでは、これはボタンのアイコンとテキストが拡大されているために発生していますが、ボタンは拡大されていません。この問題を解決するには、これを使用できます。

QString stylesheet = ...font: 12px;... //Or another size that you expect the button text must have.

と:

pushButton->setIconSize(QSize(16, 16)); //Or another size that you expect the button icon must have.

これらの設定により、ボタンのアイコンとテキストの両方が、拡大されたデスクトップと拡大されていないデスクトップで同じサイズになることが保証されます。

于 2014-01-06T10:15:57.487 に答える