Ich lerne Qt und ein kleines Beispiel wie folgt erstellen.verschiedene Elemente in einer Zelle QTableWidget
Ich habe einige vorgeschlagenen Fragen, die zu meinem Problem beziehen sich hier aber jetzt sind sie nicht leicht für mich zu verstehen.
Dies ist mein Code, über Funktion Kalender Interaktion ist, unten Funktion für Anzeige der Dokumente ist:
SmallExample::SmallExample(QWidget *parent)
: QWidget(parent)
{
.........
connect(ui.tableWidget, SIGNAL(itemDoubleClicked(QTableWidgetItem*)), this, SLOT(calendar_clicked(QTableWidgetItem*)));
}
void SmallExample::calendar_clicked(QTableWidgetItem* tableitem)
{
int column = tableitem->column();
SmallExample::row = tableitem->row();
if (column == 2) {
if (!calendar) {
calendar = new QCalendarWidget();
}
calendar->setWindowTitle("Calendar");
calendar->setWindowModality(Qt::WindowModal);
calendar->show();
connect(calendar, SIGNAL(activated(const QDate&)), this, SLOT(date_selected(const QDate&)));
}
}
void SmallExample::date_selected(const QDate&)
{
QTableWidgetItem *itemcalendar = new QTableWidgetItem;
QIcon icon(":/icon/calendar.jpg");
itemcalendar->setIcon(icon);
SmallExample::ui.tableWidget->setItem(SmallExample::row, 0, itemcalendar);
QString text= SmallExample::calendar->selectedDate().toString("dd.MM.yyyy");
QTableWidgetItem *datetext = new QTableWidgetItem;
datetext->setText(text);
SmallExample::ui.tableWidget->setItem(SmallExample::row, 0, datetext);
SmallExample::calendar->close();
}
Ich weiß, wann datetext
hinzugefügt wird, wird die itemcalendar
überschrieben werden, so dass es nicht mehr angezeigt wird. Ich möchte beides, aber ich weiß nicht, wie ich das lösen soll. Danke im Voraus!
Update-Code:
void SmallExample::date_selected(const QDate&)
{
QTableWidgetItem *itemcalendar = SmallExample::ui.tableWidget->item(SmallExample::row, 2);
QIcon icon(":/icon/calendar.jpg");
itemcalendar->setIcon(icon);
QString date = SmallExample::calendar->selectedDate().toString("dd.MM.yyyy")
itemcalendar->setText(date);
}
Sie Text und Symbol auf den gleichen QTableWidgetItem * gesetzt Versuchen? – Frodon
@Frodon: Ja, das ist, was ich tun möchte, wie in der Tabelle. Aber nach meinem Code ist das erste Symbol gesetzt, aber wenn Text gesetzt ist, überschreibt es das Symbol, so dass Icon nicht mehr da ist. Oder mit anderen Worten, mit meinem Code kann ich einmal nur eine Sache in die Zelle setzen. :( – amateur
In Ihrem Code überschreiben Sie das Element bei '(SmallExample :: row, 2)' durch eine neue 'QTableWidgetItem *' - Instanz. Sie sollten dieselbe Instanz wiederverwenden: 'itemcalendar-> setText (date);' – Frodon