Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/css/33.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Qt QComboBox下拉列表-设置所选项目样式_Qt_Qcombobox - Fatal编程技术网

Qt QComboBox下拉列表-设置所选项目样式

Qt QComboBox下拉列表-设置所选项目样式,qt,qcombobox,Qt,Qcombobox,是否可以设置QComboBox下拉列表中的所选项目样式(Qt样式表)?如果您的意思是希望所选项目在组合框显示其元素时显示不同(即处于“下拉”状态),则可以更改调色板中高亮显示和高亮显示文本的颜色,或设置内部qabstractemview #include <QtGui> int main(int argc, char **argv) { QApplication app(argc, argv); QComboBox cb; cb.addItem("Item 1");

是否可以设置QComboBox下拉列表中的所选项目样式(Qt样式表)?

如果您的意思是希望所选项目在组合框显示其元素时显示不同(即处于“下拉”状态),则可以更改调色板中高亮显示和高亮显示文本的颜色,或设置内部
qabstractemview

#include <QtGui>

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

  QComboBox cb;
  cb.addItem("Item 1");
  cb.addItem("Item 2");
  cb.addItem("Item 3");
  cb.show();

  QPalette p = cb.palette();
  p.setColor(QPalette::HighlightedText, QColor(Qt::red));
  p.setColor(QPalette::Highlight, QColor(Qt::green));
  cb.setPalette(p);

  // OR ...
  // cb.setStyleSheet("QComboBox QAbstractItemView { "
  //                  "selection-background-color: green; "
  //                  "selection-color: red; }");

  return app.exec();
}
#包括
int main(int argc,字符**argv){
QApplication应用程序(argc、argv);
QCOMBOX cb;
cb.补充条款(“第1项”);
cb.补充条款(“第2项”);
cb.补充条款(“第3项”);
cb.show();
QPalette p=cb.palete();
p、 setColor(qpalete::HighlightedText,QColor(Qt::red));
p、 setColor(qpalete::Highlight,QColor(Qt::green));
cb.setpalete(p);
//或者。。。
//cb.setStyleSheet(“QComboBox QAbstractItemView{”
//“选择背景色:绿色;”
//“选择颜色:红色;}”);
返回app.exec();
}
如果您只是指处于“折叠”状态的元素的样式,那么我将查看Qt样式表参考中的“”部分,以获取有关您尝试执行的操作的示例。

解决方案是

  • 创建ListView对象
  • 设置它的样式表
  • 将其用作组合框的视图
以下是如何:

    int main(int argc, char *argv[])
    {
    QApplication app(argc, argv);
    QMainWindow * mainWindow = new QMainWindow();
    QComboBox * combo = new QComboBox(mainWindow);
    QListView * listView = new QListView(combo);
    combo->addItem("foo");
    combo->addItem("bar");
    combo->addItem("foobar");
    combo->addItem("fooooo");

    listView->setStyleSheet("QListView::item {                              \
                             border-bottom: 5px solid white; margin:3px; }  \
                             QListView::item:selected {                     \
                             border-bottom: 5px solid black; margin:3px;    \
                             color: black;                                  \
                            }                                               \
                            ");
    combo->setView(listView);


    mainWindow->show();
    app.exec();

    return 0;
    }
备注: 我认为,应用这种风格也应该有效……但事实并非如此

QComboBox QAbstractItemView::item {
    border-bottom: 5px solid white; margin:3px;
}
QComboBox QAbstractItemView::item:selected {
    border-bottom: 5px solid black; margin:3px;
}

@谢尔盖·弗拉索夫:我不知道是否有更好的办法来解决你的问题,但是,我通过以下方法解决了这个问题:

class MyDelegate : public QStyledItemDelegate
{
protected:
    void paint(QPainter *painter, const QStyleOptionViewItem &option, const QModelIndex &index) const override
    {
        if (option.state & QStyle::State_HasFocus){
            QStyleOptionViewItem my_option = option;
            my_option.state = my_option.state ^ QStyle::State_HasFocus;
            QStyledItemDelegate::paint(painter, my_option, index);
            return;
        }
        QStyledItemDelegate::paint(painter, option, index);
    }
};
然后在组合框中使用您的委托:

QStyledItemDelegate* itemDelegate = new MyDelegate();
    combobox->setItemDelegate(itemDelegate);

这消除了所选项目周围令人讨厌的框架

谢谢您的回答!我只是想更改组合框下拉列表中的项目选择。我不想使用背景色进行选择。我想使用底部边框。我用QMenu:QMenu::item{border-bottom:5px纯白;margin:3px;}QMenu::item::selected{border-bottom:5px纯黑;margin:3px;}实现了这一点,我想用combobox下拉列表项实现它……谢谢!但还有一个问题。。。如何摆脱薄型选择框?参见示例:此处显示了一个事件更好的解决方案