qt - 复选框的组合框?

标签 qt qt4

我正在尝试制作 ComboBox 中的项目可检查的。我试过这个:

http://programmingexamples.net/wiki/Qt/ModelView/ComboBoxOfCheckBoxes

我在哪里子类 QStandardItemModel并重新实现了flags()使项目可检查的功能。然后我将此模型添加到 ComboBox .不幸的是,项目没有出现复选框。谁能看到我哪里出错了?

最佳答案

您是否设置了检查状态并使其可检查?

在下面的示例中,这一行至关重要:

item->setData(Qt::Unchecked, Qt::CheckStateRole);

如果省略,则不会呈现复选框,因为没有要呈现的有效检查状态。

该示例显示了组合框、列表和表格中的复选框,因为我一开始也无法使用它,所以我尝试了不同的 View 。

测试.cpp
#include <QtGui>

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

    QStandardItemModel model(3, 1); // 3 rows, 1 col
    for (int r = 0; r < 3; ++r)
    {
        QStandardItem* item = new QStandardItem(QString("Item %0").arg(r));

        item->setFlags(Qt::ItemIsUserCheckable | Qt::ItemIsEnabled);
        item->setData(Qt::Unchecked, Qt::CheckStateRole);

        model.setItem(r, 0, item);
    }

    QComboBox* combo = new QComboBox();
    combo->setModel(&model);

    QListView* list = new QListView();
    list->setModel(&model);

    QTableView* table = new QTableView();
    table->setModel(&model);

    QWidget container;
    QVBoxLayout* containerLayout = new QVBoxLayout();
    container.setLayout(containerLayout);
    containerLayout->addWidget(combo);
    containerLayout->addWidget(list);
    containerLayout->addWidget(table);

    container.show();

    return app.exec();
}

test.pro
QT=core gui
SOURCES=test.cpp

关于qt - 复选框的组合框?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8422760/

相关文章:

c++ - 在 C++ 中比较两个不同的值

c++ - glFinish() 期间的 CPU 使用率

c++ - 每当 WebKit 尝试加载 HTML 时,Qt 应用程序就会崩溃

qt - 如何加快QTableWidget的速度

c++ - Qt Widget - 如何只捕获几个键盘键

c++ - 从 QDataStream 轻松读出到 QStringList

c++ - 表单上的按钮样式

c++ - 使用指向 QObject 的原始指针作为信号参数是否安全?

c++ - QAbstractItemModel + ModelTest::rowsInserted ASSERTion问题

c++ - QTableView 输出另存为 .csv 或 .txt