Das 'Land'-QListwidget wird mit Ländernamenelementen gefüllt. Wenn der Benutzer dieses Element zieht und es in Großbuchstaben QListWidget ablegt, sollte mir der Name seines Kapitals angezeigt werden, dh der Elementtext sollte sich in Großbuchstaben QListWidget ändern.
Beispiel: Ein Element mit dem Namen "Russland" im Länderlisten-Widget sollte nach dem Ziehen und Ablegen in "Moskau" umbenannt werden.
Bisher habe ich diesen Code geschrieben, um Drag & Drop zu ermöglichen.
ui->country_listwidget->setDragEnabled(true);
ui->capital_listwidget->setAcceptDrops(true);
ist das in QT möglich?
Eine einfache Lösung besteht darin, zwei Rollen zu erstellen, in denen die einzelnen Informationen gespeichert sind, und dann einen Delegaten zu verwenden, um den Text je nach Ansicht anzuzeigen:
#include <QtWidgets>
enum CustomRoles {
CounrtyRole = Qt::UserRole,
CapitalRole
};
class DisplayDelegate: public QStyledItemDelegate{
public:
DisplayDelegate(int displayRole=Qt::DisplayRole, QObject *parent=nullptr)
:QStyledItemDelegate(parent), m_displayRole(displayRole){}
int getDisplayRole() const{
return m_displayRole;
}
void setDisplayRole(int value){
m_displayRole = value;
}
protected:
void initStyleOption(QStyleOptionViewItem *option, const QModelIndex &index) const{
QStyledItemDelegate::initStyleOption(option, index);
QVariant value = index.data(m_displayRole);
if (value.isValid() && !value.isNull()) {
option->features |= QStyleOptionViewItem::HasDisplay;
option->text = displayText(value, option->locale);
}
}
private:
int m_displayRole;
};
int main(int argc, char *argv[])
{
QApplication a(argc, argv);
QListWidget *country_lw = new QListWidget;
country_lw->setItemDelegate(new DisplayDelegate(CounrtyRole));
QListWidget *capital_lw = new QListWidget;
capital_lw->setItemDelegate(new DisplayDelegate(CapitalRole));
country_lw->setDragEnabled(true);
capital_lw->setAcceptDrops(true);
QListWidgetItem *item1 = new QListWidgetItem;
item1->setData(CounrtyRole, "Country1");
item1->setData(CapitalRole, "Capital1");
country_lw->addItem(item1);
QListWidgetItem *item2 = new QListWidgetItem;
item2->setData(CounrtyRole, "Country2");
item2->setData(CapitalRole, "Capital2");
country_lw->addItem(item2);
QListWidgetItem *item3 = new QListWidgetItem;
item3->setData(CounrtyRole, "Country3");
item3->setData(CapitalRole, "Capital3");
country_lw->addItem(item3);
QWidget w;
QHBoxLayout *lay = new QHBoxLayout(&w);
lay->addWidget(country_lw);
lay->addWidget(capital_lw);
w.show();
return a.exec();
}
Dieser Artikel stammt aus dem Internet. Bitte geben Sie beim Nachdruck die Quelle an.
Bei Verstößen wenden Sie sich bitte [email protected] Löschen.
Lass mich ein paar Worte sagen