QTableView样式问题

img

img

QTableView选中的样式,有一个虚线框,有什么办法可以去掉这个虚线吗,可以通过样式表吗

所有内容均由人工智能模型输出,其内容的准确性和完整性无法保证,不代表我的态度或观点。

该回答引用ChatGPT-3.5,仅为您提供参考,不保证完全正确
可以通过样式表来去掉QTableView中选中项的虚线框。虚线框通常是由于焦点状态而显示的,所以你可以使用样式表来修改焦点样式以隐藏虚线。


以下是一个示例,演示如何使用样式表来隐藏QTableView中选中项的虚线框:

QTableView::item:focus {
    outline: none; /* 隐藏虚线框 */
}

你可以将这个样式表应用到你的QTableView对象上,方法如下:

QTableView *tableView = new QTableView;
tableView->setStyleSheet("QTableView::item:focus { outline: none; }");

这将移除QTableView中选中项的虚线框。如果你想要自定义选中项的背景颜色、文字颜色等,也可以在样式表中添加相应的属性来进行更多的样式定制。


该回答引用NewBing,仅为您提供参考,不保证完全正确
QTableView选中时的虚线框是表示焦点状态的,有几种方法可以去掉它:

  • 方法一:设置表格不获取焦点。代码如下:
table->setFocusPolicy(Qt::NoFocus);

这种方法简单粗暴,缺点就是这样设置后没法使用与focus状态相关的功能,如不能使用tab键切换选中的单元格。⁴

  • 方法二:使用样式表,设置outline为none,并且设置item的样式。代码如下:
QTableView {
    outline: none;
}

QTableView::item:selected {
    background: rgb(0, 0, 100); // 背景颜色
    color: white; // 字体颜色
}

这种方法很灵活,很适合自定义表格外观的情况。⁴

  • 方法三:使用代理。从QStyledItemDelegate派生一个类TableDelegate, 然后重写paint函数。代码如下:
class TableDelegate : public QStyledItemDelegate
{
public:
    void paint(QPainter* painter, const QStyleOptionViewItem& option, const QModelIndex& index) const override
    {
        QStyleOptionViewItem itemOption(option);
        if (itemOption.state & QStyle::State_HasFocus)
        {
            itemOption.state = itemOption.state ^ QStyle::State_HasFocus;
        }
        QStyledItemDelegate::paint(painter, itemOption, index);
    }
};

然后为表格设置代理,代码如下:

TableDelegate* delegate = new TableDelegate();
table->setItemDelegate(delegate);

这种方法更适合实现更高级的功能,如果只是单纯为了去除虚线框的话,这样操作就略显麻烦了。⁴


源: 与必应的对话, 2023/9/10
(1) 如何去除QTableWidget表格选中Item时的虚线框? - CSDN博客. https://blog.csdn.net/can3981132/article/details/115320235.
(2) QTableView的样式设置和常用函数 - YueLiGo - 博客园. https://www.cnblogs.com/wsw2022/p/17081136.html.
(3) Qt QTableView样式设置_qtableview设置样式_妙为的博客-CSDN博客. https://blog.csdn.net/aoxuestudy/article/details/114022268.
(4) QTableView设置样式表/选中行颜色, QTableView美化 - CSDN博客. https://blog.csdn.net/qq_53201472/article/details/129975014.
(5) 去掉QTableView、QTreeView内item被选中时的虚线框 - CSDN博客. https://blog.csdn.net/qq_39805297/article/details/88847725.
(6) QTableView Class | Qt Widgets 6.5.2. https://doc.qt.io/qt-6/qtableview.html.
(7) QTableView详细使用说明_qtabview_猿太极的博客-CSDN博客. https://blog.csdn.net/u010031316/article/details/116886567.


该回答引用文心一言,仅为您提供参考,不保证完全正确
对于去掉 QTableView 中选中的虚线框,可以使用样式表(StyleSheet)来实现。可以通过在 QTableView 上设置样式表来改变其选中状态的样式。


以下是一个示例代码,演示如何去掉 QTableView 中选中的虚线框:

#include <QApplication>
#include <QTableView>

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

    QTableView tableView;
    tableView.setModel(new QStandardItemModel); // 设置数据模型,这里使用了一个简单的标准模型

    // 设置样式表,去掉选中的虚线框
    tableView.setStyleSheet("QTableView::item:selected { border: none; }");

    tableView.show();

    return app.exec();
}

在上面的示例中,通过调用 setStyleSheet 方法,设置了 QTableView 的样式表。其中,QTableView::item:selected 表示选中状态的样式,border: none; 表示去掉边框。这样,当选中某一行或某一列时,虚线框就会被隐藏掉。


注意:样式表的语法和 CSS 类似,可以根据需要进行调整。如果需要更复杂的样式设置,可以参考 Qt 的文档中关于样式表的部分。


该回答引用讯飞星火,仅为您提供参考,不保证完全正确
您可以通过设置QTableView的样式表来取消选中时的虚线框。在样式表中,使用"selection-background-color"属性来设置选中时的背景颜色,使用"outline"属性来设置选中时的边框样式。将"outline"属性设置为"none"可以取消虚线框。以下是一个示例代码:

tableView.setStyleSheet("QTableView::item:selected { background-color: #0078d7; outline: none; }")

在上述代码中,将选中时的背景颜色设置为"#0078d7",将边框样式设置为"none",这样就可以取消虚线框了。

【以下回答由 GPT 生成】

可以通过样式表来去除QTableView选中样式中的虚线框。具体步骤如下:

  1. 在QTableView的样式表中设置选中状态的虚线框样式为none,即不显示虚线框。
  2. 使用setStyleSheet()方法将样式表应用到QTableView上。

以下是一个示例代码:

tableView.setStyleSheet("QTableView::item:selected { outline: none; }")

在上述代码中,"QTableView::item:selected"是指定了当单元格被选中时的样式,"outline: none;"表示隐藏虚线框。可以根据需要修改样式表中的其他属性,例如改变背景色、字体颜色等。

请注意,以上代码片段是使用Python编写的,如果您使用的是C++,请将代码相应地转换为C++语法。

如果您在使用上述方法时遇到问题,也可参考Qt官方文档寻找其他解决方法:



【相关推荐】



如果你已经解决了该问题, 非常希望你能够分享一下解决方案, 写成博客, 将相关链接放在评论区, 以帮助更多的人 ^-^