1

QToolButtonがQToolBarに追加されたときの動作と、QFrame/QWidget のレイアウトに追加されたときの動作が異なることに気付きました。

QToolButtonに設定する必要があるスタイルオプションは何ですか? QFrame内で (視覚的に) QToolBar内で動作するのとまったく同じように動作しますか?

私の現在のプラットフォームは OS X です。この動作の違いは Qt 4.8 と 5.1 の両方で同じです (私のテストによると)。

ありがとうございました

例:

QToolButton の動作の違い

以下のシナリオの作成に使用されるコード:

int main(int argc, char **argv)
{
  QApplication app(argc,argv);

  QMainWindow* window    = new QMainWindow();
  QWidget* centralWidget = new QWidget();
  QVBoxLayout* layout    = new QVBoxLayout();

  centralWidget->setLayout(layout);
  window->setCentralWidget(centralWidget);
  window->setWindowTitle("QToolButton inside QToolBar vs QFrame/QWidget");

  layout->setContentsMargins(0, 0, 0, 0);
  layout->setSpacing(30);

  QToolBar* toolBar = new QToolBar();
  toolBar->setOrientation(Qt::Horizontal);
  layout->addWidget(toolBar);

  QToolButton* button_1 = new QToolButton();
  button_1->setToolButtonStyle(Qt::ToolButtonTextUnderIcon);
  button_1->setIcon(QPixmap(":/icons/icons/1.png"));
  button_1->setIconSize(QSize(32, 32));
  button_1->setText("Button 1");
  toolBar->addWidget(button_1);

  QToolButton* button_2 = new QToolButton();
  button_2->setToolButtonStyle(Qt::ToolButtonTextUnderIcon);
  button_2->setIcon(QPixmap(":/icons/icons/2.png"));
  button_2->setIconSize(QSize(32, 32));
  button_2->setText("Button 2");
  toolBar->addWidget(button_2);

  QToolButton* button_3 = new QToolButton();
  button_3->setToolButtonStyle(Qt::ToolButtonTextUnderIcon);
  button_3->setIcon(QPixmap(":/icons/icons/3.png"));
  button_3->setIconSize(QSize(32, 32));
  button_3->setText("Button 3");
  // toolBar->addWidget(button_3);

  QToolButton* button_4 = new QToolButton();
  button_4->setToolButtonStyle(Qt::ToolButtonTextUnderIcon);
  button_4->setIcon(QPixmap(":/icons/icons/4.png"));
  button_4->setIconSize(QSize(32, 32));
  button_4->setText("Button 4");
  // toolBar->addWidget(button_4);

  QFrame* frame     = new QFrame();
  frame->setStyleSheet("QFrame { background: #ff0; }");
  layout->addWidget(frame);

  QHBoxLayout* frame_layout = new QHBoxLayout();
  frame_layout->setContentsMargins(0, 0, 0, 0);
  frame_layout->setSpacing(0);
  frame->setLayout(frame_layout);

  frame_layout->addWidget(button_4);
  frame_layout->addWidget(button_3);
  // button_4->animateClick(10000);
  frame_layout->addStretch();

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

1 に答える 1

0

あなたが見ているのは望ましい動作であり、私が知る限り、他の OS X アプリケーションの視覚的な動作と一貫しています。あなたが求めているものが賢明かどうかを再考したいかもしれません。正当な理由があれば、さらに詳しく調べます。

于 2013-09-02T15:38:11.190 に答える