【问题标题】:Setting style on combo box on activated signal causes issues在激活信号的组合框上设置样式会导致问题
【发布时间】:2019-04-25 14:26:07
【问题描述】:

目前我有一个 QComboBox,当用户进行选择时,我想更改它的颜色。为此,我在调用setStyleSheet的激活信号上调用了函数@

void comboBoxActivated(int i){
   myComboBox -> setStyleSheet("border-width:2px; border-style:solid; border-color:red;");
}

然而,这会导致组合框在我的屏幕上卡住打开,摆脱它的唯一方法是关闭应用程序。使用此功能更改样式是否有问题?作为参考,我正在运行 Ubuntu 和 QT 4.8

【问题讨论】:

  • 如果在其他功能中更改样式表是否有效?如果您根本不设置样式表,它不会卡在打开状态吗?可以发个截图吗?
  • @metal 出于安全原因我无法发布屏幕截图,在 not 在用户交互上运行的函数中设置样式,但从依赖于的函数更改样式用户输入信号没有。是的,不设置样式,盒子工作正常
  • 您能否在一个较小的应用程序中重现该问题,您可以为其发布代码和屏幕截图?
  • 尝试将"border-color:red;" 转换为"border: 2px solid red;"。我无法在 QT 4.8 中尝试它,但在 QT5 应用程序中更改它使其工作。
  • @apalomer 感谢您的回复,不幸的是它似乎无法解决问题

标签: c++ qt


【解决方案1】:

此代码在 windows 中完美运行:

#include "mainwindow.h"
#include "ui_mainwindow.h"

MainWindow::MainWindow(QWidget *parent) :
    QMainWindow(parent),
    ui(new Ui::MainWindow)
{
    ui->setupUi(this);
    ui->comboBox->addItem("item1");
    ui->comboBox->addItem("item2");
    ui->comboBox->addItem("itme3");

    connect(ui->comboBox, SIGNAL(activated(int)),
            this,         SLOT(comboBoxActivated(int)));
}

MainWindow::~MainWindow()
{
    delete ui;
}

void MainWindow::comboBoxActivated(int i){
    ui->comboBox -> setStyleSheet("border-width:2px; border-style:solid; border-color:red;");
}

【讨论】:

    【解决方案2】:

    由于某种原因,如果我强制打开和关闭框,更改将毫无问题地应用

    void comboBoxActivated(int i){
       myComboBox -> setStyleSheet("border-width:2px; border-style:solid; border-color:red;");
       myComboBox -> showPopup(); 
       myComboBox -> hidePopup(); 
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2018-05-15
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多