Qt升级后,QPushButton有重复的文本

时间:2015-04-27 11:24:34

标签: android c++ qt text qpushbutton

我有一个使用Qt Creator用C ++编写的Android应用程序。

Qt版本升级后(从 4.8 5.4 )我发现了一个奇怪的行为:所有QPushButton都有重复的文本标签,一个位于正确位置,另一个位于正确位置转移了一点。 此行为可以在 Acer Iconia Tab A700 上观察到,但不能在其他设备(Samsung Galaxy Tab)上观察到。

illustration of the problem

我在QT Creator中创建了一个全新的QDialog菜单,仅使用图形编辑器,但它显示的内容相同。

其他人是否观察过同样的事情? 我在Qt中很新,并且不知道如何解决这个问题......

修改

以下是一些片段:

mydialog.ui

    <widget class="QPushButton" name="startButton">
     <property name="sizePolicy">
      <sizepolicy hsizetype="Minimum" vsizetype="Minimum">
       <horstretch>0</horstretch>
       <verstretch>0</verstretch>
      </sizepolicy>
     </property>
     <property name="text">
      <string>Start</string>
     </property>
     <property name="default">
      <bool>true</bool>
     </property>
    </widget>

ui_mydialog.h

public:
  QPushButton *startButton;
  QPushButton *stopButton;
...
void setupUi(QDialog *MyDialog)
{
    ... // some layout stuff here
    startButton = new QPushButton(MyDialog);
    startButton->setObjectName(QStringLiteral("startButton"));
    QSizePolicy sizePolicy(QSizePolicy::Minimum, QSizePolicy::Minimum);
    sizePolicy.setHorizontalStretch(0);
    sizePolicy.setVerticalStretch(0);
    sizePolicy.setHeightForWidth(startButton->sizePolicy().hasHeightForWidth());
    startButton->setSizePolicy(sizePolicy);
    startButton->setDefault(true);
... // later
QWidget::setTabOrder(startButton, stopButton);
}

void retranslateUi(QDialog *MyDialog)
{
    MyDialog->setWindowTitle(QApplication::translate("MyDialog", "Dialog", 0));
    startButton->setText(QApplication::translate("MyDialog", "Start", 0));
    stopButton->setText(QApplication::translate("MyDialog", "Stop", 0));
...
}

但是,我再次使用Qt Creator GUI创建对话框,所以我的猜测是这应该是一些配置错误。或者可能与retranslateUi()函数相关的东西?

这就是它在Qt Creator中的表现:

enter image description here

编辑#2

我挖出了一些指令,其中定义了按钮的具体风格。这是:

    foreach (QToolButton* bt, listOfToolButtons) {
      bt->setAttribute(Qt::WA_AcceptTouchEvents);
      bt->installEventFilter(scrollAreaForToolBar);
      bt->setIconSize(QSize(iconSize, iconSize));
      bt->setStyleSheet("QToolButton{ background-color: #051a49; border: none;}");
      scrollAreaContainer->layout()->addWidget(bt);
    }

2 个答案:

答案 0 :(得分:1)

我有同样的问题, 我通过设置样式表来解决它。 这似乎是边境问题, 解决问题的样式表是:

border-style: outset;
border-width: 2px;
border-radius: 4px;
border-color: black;
padding: 6px;

我尝试了不同的配置,但我无法理解哪个是解决问题的真正原因。

答案 1 :(得分:0)

我取得了一些进展!

我不得不重新创建整个小部件,这次我给了它更大的尺寸。 只需使用QtCreator,缩放小部件的主框架。现在,所有按钮标签都已正确显示。此外,ui元素的尺寸政策已更改为 Expanding

好的,我知道这只是一种治疗,而不是一种可以解释其原因的解决方案,但我现在对此结果感到满意。