8

QTableWidget セルに QIcon を表示するさまざまな方法を試しましたが、なぜ機能しないのかわかりません。押すとテーブルに行を追加するボタンがあります。これがコードです...

void MainWindow::pressed()
{
    QTableWidgetItem *item = new QTableWidgetItem("Hello, world!");
    QTableWidgetItem *icon_item = new QTableWidgetItem;
    QIcon icon("/verified/path/to/icon.png");
    icon_item->setIcon(icon);

    int row = ui->tableFeed->rowCount();
    ui->tableFeed->insertRow(row);
    ui->tableFeed->setItem(row, 0, icon_item);
    ui->tableFeed->setItem(row, 1, item);
}

そして、それはうまくいきません。そのセルには何も表示されません。何か案は?

編集:私が設定したsetItem呼び出しはiconタイプミスでした。実際のコードでは、QTabeWidgetItem icon_item. 上記のコードで修正しました。

4

4 に答える 4

5

アイコンを a に設定してからQTableWidgetItem、アイコン自体ではなくアイコン項目をロードする必要があります。

QTableWidgetItem *item = new QTableWidgetItem("Hello, world!");
QTableWidgetItem *icon_item = new QTableWidgetItem;
QIcon icon("/verified/path/to/icon.png"); // It is better to load the icon from the
                                          // resource file and not from a path 
icon_item->setIcon(icon);

int row = ui->tableFeed->rowCount();
ui->tableFeed->insertRow(row);
ui->tableFeed->setItem(row, 0, icon_item);
ui->tableFeed->setItem(row, 1, item);

アイコンではなく文字列アイテムが表示される場合は、アイコン パスに問題があります。

于 2011-11-09T19:24:11.973 に答える
2

webclecticが指摘したように、おそらくアイテムをicon_item次のように設定する必要があります。

ui->tableFeed->setItem(row, 0, icon_item);

...実際にそのようにコンパイルされた場合は、使用可能なコンストラクターの1つを使用して暗黙のQTableWidgetItemを構築していると思います。

指定したpngからアイコンを作成できない場合はどうなるかわかりませんが、アイコンが実際に正しく読み込まれ、正しく表示できることを確認することもできます。たとえば、何がicon.isNull()返されますか?ラベルに入れるとどうなりますか?

もう1つのオプションは、ピックスマップからアイコンをロードして、実際に正しくロードされていることを確認できるようにすることです。

QPixmap p;
if (!p.load(yourFilename) || p.isNull()) { qDebug() << "Error!"; }
QIcon icon = QIcon(p);
// and if wanted: label->setPixmap(p)
于 2011-11-09T19:35:05.620 に答える
2

セルにアイコンを追加したい場合、通常はモデルで行います。

データメソッドでは、それらを装飾ロールの下に置くことができます。

else if( role == Qt::DecorationRole )
{
    switch( index.column() )
    {
        case MOVIE:
        {
            if( valueAt( index ).toString() == "Godfather" ) return QIcon( ":/16x16/godfather.png" );
        }
    }
}

お役に立てれば。

于 2011-11-09T19:23:21.323 に答える
2

これらを機能させるには、最初にプレフィックス アイコンを使用してリソースを作成する必要があります。

item = QtGui.QTableWidgetItem()
icon2 = QtGui.QIcon()
icon2.addPixmap(QtGui.QPixmap(_fromUtf8(":/icons/FSTable.png")), QtGui.QIcon.Normal, QtGui.QIcon.Off)
item.setIcon(icon2)

上記は PyQt コードであることをご容赦ください。addPixmap

于 2014-05-22T20:53:15.287 に答える