sqlite 如何在QTableView中隐藏密码?

tjvv9vkg  于 2022-11-15  发布在  SQLite
关注(0)|答案(1)|浏览(294)

我正在尝试在Qt中隐藏我的Qtableview中的密码。我试过:

QTableView view;
View.setItemDelegateForColumn(8,());

另请注意:

ui->tableView->setColumnhidden(8,true);

我知道这是不对的,这正是我试图隐藏/遮盖第8栏的内容。

tktrz96b

tktrz96b1#

您可以将密码存储在项目数据中。大概是这样的:

QString getPassword(QTableWidgetItem *itm)
{
    return itm->data(Qt::UserRole).toString();
}

void hidePassword(QTableWidgetItem *itm)
{
    QString password = getPassword(itm);
    password = password.fill('*', password.length());
    itm->setText(password);
    itm->setData(Qt::AccessibleTextRole, false);
}

void showPassword(QTableWidgetItem *itm)
{
    QString password = getPassword(itm);
    itm->setText(password);
    itm->setData(Qt::AccessibleTextRole, true);
}

void setPassword(QTableWidgetItem *itm, const QString &password)
{
    itm->setData(Qt::UserRole, password);
    if (itm->data(Qt::AccessibleTextRole) == true) {
        showPassword(itm);
    } else {
        hidePassword(itm);
    }
}

MainWindow::MainWindow(QWidget *parent)
    : QMainWindow(parent)
    , ui(new Ui::MainWindow)
{
    ui->setupUi(this);

    QTableWidgetItem *itm = new QTableWidgetItem();
    itm->setFlags(Qt::NoItemFlags);
    ui->tableWidget->setItem(0, 0, itm);

    setPassword(itm, "test");

    connect(ui->tableWidget, &QTableWidget::itemClicked, this, [itm](QTableWidgetItem *clickedItm){
        if (clickedItm == itm) {
            if (itm->data(Qt::AccessibleTextRole) == true) {
                hidePassword(itm);
            } else {
                showPassword(itm);
            }
        }
    });
}

我还使用了Qt::AccessibleTextRole来存储密码是否显示,它似乎是免费的

相关问题